Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Bitte Druck-Routine testen (https://www.delphipraxis.net/3422-bitte-druck-routine-testen.html)

Luckie 12. Mär 2003 04:12


Bitte Druck-Routine testen
 
Hallo,
könntet ihr mir mal einen Gefallen tun und mal diese Druck-Routine testen? Mein Drucker spinnt irgendwie. Das Dokument kommt beim Druck-Manager an, aber als Status wird immer "in Warteschleife - wird gedruckt" angezeigt und es geht nicht weiter. Die Messagebox "fertig!" wird auch nicht angezeigt. Und wenn ich über Notepad drucke steht in der Status-Spalte gar nichts und es wird nichts gedruckt.

Hier der Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  di  : DOCINFO;
  pd  : TPrintDlg;
  iTotalLines, yChar, iCharsPerLine, iLinesPerPage, iTotalPages, iPage, iLine, iLineNum, iColCopy : Integer;
  tm  : TTEXTMETRIC;
begin
  ZeroMemory(@pd, sizeof(TPrintDlg));
  pd.lStructSize := sizeof(TPrintDlg);
  pd.hWndOwner  := Handle;
  pd.Flags      := PD_ALLPAGES or PD_COLLATE or PD_RETURNDC or PD_NOSELECTION;
  pd.nCopies    := 1;
  if PrintDlg(pd) = TRUE then
  begin
    iTotalLines := Memo1.Lines.Count;
    GetTextMetrics(pd.hDC, tm);
    yChar := tm.tmHeight + tm.tmExternalLeading;
    iCharsPerLine := GetDeviceCaps(pd.hDC, HORZRES) div tm.tmAveCharWidth;
    iLinesPerPage := GetDeviceCaps(pd.hDC, VERTRES) div yChar;
    iTotalPages  := (iTotalLines + iLinesPerPage - 1) div iLinesPerPage;
    StaticText1.Caption := 'Zeichen pro Zeile: '+IntToStr(iCharsPerLine)+' | Zeilen pro Seite: '+IntToStr(iLinesperpage)+
      ' | Seiten: '+IntToStr(iTotalPages);
    ZeroMemory(@di, sizeof(DOCINFO));
    di.cbSize := sizeof(DOCINFO);
    di.lpszDocName := 'Test';
    if StartDoc(pd.hDC, di) > 0 then
    begin
      for iColCopy := 0 to pd.nCopies do
      begin
        for iPage := 0 to iTotalPages-1 do
        begin
          for iLine := 0 to iLinesPerpage-1 do
          begin
            iLineNum := iLinesPerpage*iPage+iLine;
            if iLineNum > iTotalLines then exit;
            TextOut(pd.hDC, 0, yChar*iLine, pointer(Memo1.Lines.Strings[iLine]),
              length(Memo1.Lines.Strings[iLine]));
            Caption := 'Zeilennummer: '+IntToStr(iLine+1)+' - '+'Seite: '+IntToStr(iPage+1);
            Application.ProcessMessages;
          end;
          if EndPage(pd.hDC) < 0 then exit;
        end;
      end;
    end;
    ShowMessage('Fertig!');
    EndDoc(pd.hDC);
  end;
end;
Nachtrag: Das mit Notepad hat sich erledigt. Irgendwas hat den Status des Druckers auf "Angehalten" gesetzt, jetzt geht es wieder.

Nachtrag 2: Ich werde irre, wenn ich die Anwendung schließe, legt der Drucker los. :shock:

Luckie 12. Mär 2003 06:18

OK, hat sich alles erledigt. Es lag wohl am Drucker.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz