Announcement

Collapse
No announcement yet.

Problem mit verschiedenen Druckern. ?!?!?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit verschiedenen Druckern. ?!?!?

    Ich habe eine art mini Druckprogramm mit dem man z.B vorgedruckte Schilder mit den eigegebenen Daten bedrucken kann. Nun hab ich das an nem neuen DinA3 Laserdrucker (Querformat) ausprobiert und die Koordinaten dementsprechend eingegeben das alles am richtigen Platz ist.
    Soweit lief alles ziemlich gut.
    Nur als ich es auf einem älteren Nadeldrucker testete (Hochformat) war die größe der einzelnen Einträge total verfälscht, die Position war anders usw.

    Muss ich jetzt für jeden drucker ein neues Programm schreiben in dem andere Größen und Koordinaten angegeben sind ??? oder gibts da ne andere Lösung damit das Endergebnis immer gleich rauskommt - ob auf Nadel oder Laserdrucker!??

    Hier der Quellcode für den Druck:

    procedure Teingabeform.druckenBitBtnClick(Sender: TObject);
    var
    aDevice : array[0..255] of char;
    aDriver : array[0..255] of char;
    aPort : array[0..255] of char;
    hDMode : THandle;
    PDMode : PDEVMODE;
    IniFile: TIniFile;

    begin
    Printer.PrinterIndex := -1;
    Printer.GetPrinter(aDevice, aDriver, aPort, hDMode);
    if hDMode <> 0 then begin
    pDMode := GlobalLock(hDMode);
    if pDMode <> nil then begin
    pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
    pDMode^.dmPaperSize := DMPAPER_A3;
    pDMode^.dmFields := pDMode^.dmFields or DM_DEFAULTSOURCE;
    pDMode^.dmDefaultSource := DMBIN_MANUAL;
    pDMode^.dmOrientation := DMORIENT_PORTRAIT;
    // pDMode^.dmOrientation := DMORIENT_Landscape; // bei Querformat
    GlobalUnlock(hDMode);
    end;
    end;

    Printer.BeginDoc;
    Printer.Canvas.TextOut (0, 0, ' ');
    SetMapMode (Printer.Canvas.Handle, MM_LOMETRIC);

    with Printer.Canvas do
    begin

    Font.Name := 'Arial Black';
    SetTextAlign (Handle, TA_LEFT + TA_TOP);

    Font.Height := 390;
    TextOut (1400, -150, textedit1.text);

    Font.Height := 150;
    TextOut (1300, -495, textedit2.text);

    end;

    Printer.EndDoc;

    end;

  • #2
    Hallo Mathias,
    du kannst zwar einen Font in den DruckerDC einsetzen, aber ob das dann auch passiert ist ne ganz andere Geschichte. Windows entscheidet nämlich selbst, welcher Font im entsprechenden DC genutzt werden kann. Hier in diesem Forum war schon mal ein ähnliches Problem unter dem Stichwort Stufenlose Skalierung diskutiert. Rene hat da ein paar Tips dazu. Letztendlich mußt du überprüfen, was Windows nun eigentlich für Fonts in den DC eingesetzt hat (GetTextMetrics und konsorten) und ob das mit dem, was du wolltest wenigstens einigermaßen korrespondiert

    Comment

    Working...
    X