![]() |
Bug in printers.pas beim Umstellen des Druckers
Hallo zusammen,
wir haben unsere Anwendung gerade auf RadStudio 2007 umgestellt. Umso überraschter waren wir gestern, als uns das Feedback erreichte, dass die Druckerschachtwahl beim Mehrfachdruckern nicht richtig funktioniert. Auch das Ansteuern mit der unter Windows eingestellten Druckqualität funktioniert nur manchmal. Dunkel erinnerte ich mich, dass wir seinerzeit in D5 über einen Bug in der printers.pas gestolpert waren und diese gepatched dem Druckprogramm hinzugefügt haben. Also erneut auf die Suche gemacht und hier gefunden: ![]() Dieser ist als Fixed in D6 gekennzeichnet. Nun schaue ich mir die Quelltexte der printers.pas in D2007 an und stelle fest, dass genau diese entscheidenden Stellen eben nicht gefixt sind. Ist jemand von Euch schon über den gleichen Fehler gestolpert und hat ihn so lösen können? Des weiteren bleibt für mich die Frage offen, warum Fehler, die seit ~2000 bekannt sind nicht konsequent gefixt werden. Andere Änderungen, wie z.B. das Rücksetzen von Objektzeigern auf Nil wurden übernommen!? Gruss Carsten
Delphi-Quellcode:
procedure TPrinter.SetToDefaultPrinter;
var I: Integer; ByteCnt, StructCnt: DWORD; DefaultPrinter: array[0..1023] of Char; Cur, Device: PChar; PrinterInfo: PPrinterInfo5; begin ByteCnt := 0; <...> with Printers do for I := 0 to Count-1 do begin if AnsiSameText(TPrinterDevice(Objects[I]).Device, Device) then begin with TPrinterDevice(Objects[I]) do SetPrinter(PChar(Device), PChar(Driver), PChar(Port), 0); // --------------------------------------- [ FPrinterIndex := I; // VERY IMPORTANT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! <- DIESE HIER // --------------------------------------- Exit;
Delphi-Quellcode:
procedure TPrinter.SetPrinterIndex(Value: Integer); begin CheckPrinting(False); if (Value = -1) or (PrinterIndex = -1) then SetToDefaultPrinter else begin if (Value < 0) or (Value >= Printers.Count) then RaiseError(SPrinterIndexError); FPrinterIndex := Value; SetPrinter(PChar(TPrinterDevice(Printers.Objects[FPrinterIndex]).Device), <- DIESE HIER PChar(TPrinterDevice(Printers.Objects[FPrinterIndex]).Driver), PChar(TPrinterDevice(Printers.Objects[FPrinterIndex]).Port), 0); |
AW: Bug in printers.pas beim Umstellen des Druckers
Hallo zusammen,
ich hänge mich einmal an diesen Post, das Problem mit den Druckereinstellungen bei mir immer noch ist. Delphi2007 Ich habe die printer.pas bereits angepasst. Die Auswahl des Druckers und die Papiergröße geht über TPrinterSetupDialog. Wenn ich nun die PrinterSetupDialog.Execute ausführe und die Papiergöße ändere, dann wird die in der devMode-Struktur, welche ich über Printer.GetPrintewr erhalte der Wert von pDevmode^.dmPaperLength nicht geändert. Rufe ich den SetupDialog nochmals auf und beende ihn, ohne etwas zu ändern, dann sind die Werte plötzlich richtig. Hat jemand noch eine Idee, was in der printer.pas geändert werden muss, oder liegt das Problem hier irgendwo anderst. Ein Vergleich einer 2009 oder 2010 printer.pas wäre perfekt, aber leider finde ich im Netz keinen Quellcode der Datei. viele Grüße BadenPower |
AW: Bug in printers.pas beim Umstellen des Druckers
Hab diese Versionen aktuell nicht installiert und kann nicht nachsehn.
Zitat:
|
AW: Bug in printers.pas beim Umstellen des Druckers
Aber der Lazarus-Code ist AFAIK einsehbar, vielleicht besteht das Problem dort nicht?
|
AW: Bug in printers.pas beim Umstellen des Druckers
Mal Printer.Refresh versucht?
Delphi-Quellcode:
var
Device, Driver, Port: array [0..200] of char; DeviceMode: Cardinal; begin Printer.GetPrinter(Device, Driver, Port, DeviceMode); if DeviceMode <> 0 then begin Result := Device; Printer.Refresh; // *** end else Result := 'Druckstatus'; end; |
AW: Bug in printers.pas beim Umstellen des Druckers
Hallo zusammen,
Zitat:
So, habe nun noch ein bischen herumgepielt. Wenn ich nur die Papiergröße im Dialog umstelle, dann ist die PaperLength-Angabe immer die, welche 1 zuvor ausgewählt wird. Wenn ich also den Dialog beim 2. mal beende habe ich die Einstellung vom 1. mal. Rufe ich es ein drittes mal auf, dann habe ich die Einstllung vom 2.mal. Wenn ich aber auch gleichzeitig die Druckqualität ändere, dann stimmt auch die Papierlänge. Muss mir mal die printers.pas nochmals genauer vormehmen. . EDIT: So habe noch eine neue Erkenntnis erlangt. Rufe ich im TPrinterSetupDialog "Einstellungen" für den Drucker auf und ändere dort die Papiergröße, dann wird es auch sofort automatisch richtig übernommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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