Entwickler-Ecke
Multimedia / Grafik - Pixel und co
Borlander77 - Do 27.06.02 08:32
Titel: Pixel und co
Hallo :D
:!:
Ich habe ein formular auf dem verschiedene Editfenster dynamisch erzeugt werden,die koordinaten(pixelwerte) der edit's werden aus einer textdatei geladen.
Die Editfenster werden so erstellt das sie an einem drucker mit 180x180 dpi genau so ausgedruckt werden wie sie auf dem formular angezeigt werden.
:?:
Nun mein problem:
Ich möchte nun einen Drucker mit 240x140dpi ansteuern.
wenn ich einen ausdruck mache stimmt er nicht überein.
Um einen gleichen ausdruck auf beiden druckern zu bekommen muss ich doch bestimmt den dpi unterschied der drucker errechnen und die edit's neu positionieren.
:idea: gibt es eine möglichkeit oder kann mir jemand helfen? :idea:
vielen dank für eure hilfe :lol:
Matthias - Do 27.06.02 12:44
Hallo,
also das mit dem Drucken ist so eine Sache, weil wie Du ja schon richtig
bemerkt hast, die Größe des Ausdrucks von der Auflösung abhängig ist.
(Der Drucker arbeitet wie der Bildschirm in Pixeln). Also hilft es nur
die Ausgabe entsprechend zu skalieren.
Wenn Du jetzt den Befehl TForm.Print verwendest hast Du ein Problem,
da hier eine Änderung der Auflösung nicht mehr möglich ist.
Ansonsten kannst Du den Drucker erstmal mit Hilfe von GetDeviceCaps
fragen, was Du so alles wissen möchtest.
z.B. GetDeviceCaps(Printer.Handle, logpixelsx); // DPI Horizontal
GetDeviceCaps(Printer.Handle, logpixelsy); // DPI Vertikal
Übrigens kannst Du diese Fragen auch dem Bildschirm stellen.
Mit SetMapMode, SetWindowExtEx u.s.w kannst Du die Ausgabe dann
umskalieren.
Hier hilft die Hilfe weiter. Übrigens verwende ich meistens den Modus
MM_ANISOTROPHIC, da hier alle Einstellungen frei sind.
Die Ausgabe auf den Drucker muss hier allerdings zu Fuss erfolgen.
Matthias
Borlander77 - Do 27.06.02 13:16
Hallo und danke für deine antwort
das mit getdevicecaps benutze ich schon um die druckerdaten zu ermitteln.
probier mal deinen vorschlag aus
Borlander77 - Do 27.06.02 13:27
Hallo Nochmal
es tut mir leid aber das mit der ausgabe skalieren verstehe ich nicht so ganz,
vielleicht kannst du mir weiterhelfen
hier meine druckprocedure
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| procedure TFTEST.BitBtn10Click(Sender: TObject); var y, x,j : integer; pstr : string; ptr : Pointer; hdcDrucker : HDC; df : TDOCINFO; begin FensterErfassen; df.cbSize := sizeof(TDOCINFO); df.lpszDocName := 'Testdruck'; df.lpszOutput := ''; df.lpszDatatype := ''; df.fwType := 0; x:= 0; y:= 0; hdcDrucker := CreateDC(NIL,PChar(Combobox4.Text), NIL, NIL); SelectObject(hdcDrucker,CreateFontIndirect(lf)); StartDoc(hdcDrucker,df); StartPage(hdcDrucker);
for j := 0 to EditAnzahl -1 do begin
pstr := Daten[j].Text; ptr := @pstr[1]; x := Daten[j].XPos; y := Daten[j].Ypos; x := x* Zoom; y := y* Zoom; lf.lfHeight := -Daten[j].SG; lf.lfItalic := 0; lf.lfUnderline := 0; lf.lfWeight := FW_NORMAL; if Daten[j].FSX = '1' then lf.lfItalic := 1 else if Daten[j].FSX = '2' then lf.lfWeight := FW_BOLD else
if Daten[j].FSX = '3' then begin lf.lfWeight := FW_BOLD; lf.lfItalic := 1; end; if Daten[j].FSX = '4' then lf.lfUnderline := 1;
SelectObject(hdcDrucker,CreateFontIndirect(lf)); TextOut(hdcDrucker,x,y,ptr,length(pstr)); end; EndPage(hdcDrucker); EndDoc(hdcDrucker); DeleteDC(hdcDrucker); end; |
danke
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!