AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Drucken auf feste Drucker: Wie würdet ihr das lösen?
Thema durchsuchen
Ansicht
Themen-Optionen

Drucken auf feste Drucker: Wie würdet ihr das lösen?

Ein Thema von PASST · begonnen am 15. Sep 2005 · letzter Beitrag vom 15. Sep 2005
Antwort Antwort
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

Drucken auf feste Drucker: Wie würdet ihr das lösen?

  Alt 15. Sep 2005, 10:02
Hi allerseits,

ich bin derzeit am Verzweifeln, da ich mit dem Drucken unter Windows massive Probleme habe.

Ich möchte passend zu Lieferscheine je Position Etiketten drucken. Zuerst werden die Lieferscheine per FreeReport erzeugt und gedruckt. Anschließend werden die Etiketten (ohne Reportgenerator) in einem Druckstring aufbereitet, der je Etikett und direkt an den entsprechenden Windows-Drucker gesendet wird. Ich verwende dazu den Treiber 'Generic / Text only', da so der komplette Druckstring (mehr oder weniger) ohne Änderung an den Drucker weitergegeben wird und der Windows-Druckmanager sich um Pufferüberläufe oder andere Probleme kümmern kann.
Damit das ganze mit möglichst wenig Eingriffe des Users stattfinden kann, habe ich die Druckernamen in eine ini-Datei geschrieben und setze vor dem Lieferschein- bzw. Etikettendruck entsprechend den Standarddrucker und anschließend den vorher einstellten Standarddrucker wieder zurück.
Delphi-Quellcode:
SetDefaultPrinter(Lieferscheindrucker);
Drucke_FreeReport;
SetDefaultPrinter(EtikettenDrucker);
while not lieferschein.positionen eof do
begin
Drucke_RohString(Etikett);
next;
end;
SetDefaultPrinter(OriginalDrucker);

//Setzen des StandardDruckers
procedure TFMain.SetDefaultPrinter(PrinterName: String);
var
   i: Integer;
   Device, Driver, Port : PChar;
   HdeviceMode: Thandle;
   aPrinter : TPrinter;
begin
  Printer.PrinterIndex := -1;
  OriginalDrucker := Printer.Printers[Printer.PrinterIndex];
  getmem(Device, 255);
  getmem(Driver, 255);
  getmem(Port, 255);
  aPrinter := TPrinter.create;
  for i := 0 to Printer.printers.Count-1 do
  begin
    if (uppercase(Printer.printers[i]) = uppercase(PrinterName)) then
    begin
      aprinter.printerindex := i;
      aPrinter.getprinter(device, driver, port, HdeviceMode);
      StrCat(Device, ',');
      StrCat(Device, Driver );
      StrCat(Device, Port );
      WriteProfileString('windows', 'device', Device);
      StrCopy( Device, 'windows' );
      SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@Device));
   end;
  end;
  Freemem(Device, 255);
  Freemem(Driver, 255);
  Freemem(Port, 255);
  aPrinter.Free;
end;

//Der Etikettendruck
procedure TFMain.DruckeRoh_String(DiesenText:string);
var MyPrinter : array [0..255] of char;
    p : Integer;
begin
  // Wie kann ich hier statt PChar(Eti...) den Namen des aktuell gesetzten StdDruckers wählen?
  StrLCopy(MyPrinter, PChar(Etikettendrucker), SizeOf(MyPrinter) - 1);
  GetProfileString ('windows',
                    'device',
                    ',,,',
                    MyPrinter,
                    sizeof(MyPrinter));
  p := Pos (',', MyPrinter);
  if p > 0 then
    MyPrinter[p - 1] := #0;
  // hiermit wird der String auf den Drucker ausgegeben
  RawDataToPrinter(MyPrinter, DiesenText, length(DiesenText));
end;
Ist irgendwas hier im Code nicht richtig?

Das Programm soll auf den Windows-Versionen NT4, 2000 und XP funktionieren. Mein Problem ist, dass ab und an nichts am Etikettendrucker ankommt. Bei mir am Delphi-Rechner funktioniert alles, so dass ich per schrittweiser Auswertung des Codes nichts nachvollziehen kann.

Wie würdet ihr das ganze machen?

Gruß,
Peter
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Drucken auf feste Drucker: Wie würdet ihr das lösen?

  Alt 15. Sep 2005, 10:13
Schmeiss deine Funktion DruckeRoh_String in die Tonne und verwende:
http://www.delphipraxis.net/internal...ct.php?t=26846
Du siehst, dass du der Procedure RAWPrint den Druckernamen als Parameter mitgeben kannst.
Also lass die Finger weg vom Verändern des Standarddruckers und alles wird gut.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz