Autor Beitrag
Borlander77
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 27.06.02 08:32 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ausblenden volle Höhe 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), NILNIL);
  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 user profile iconTino: Code- durch Delphi-Tags ersetzt.