AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bug in printers.pas beim Umstellen des Druckers
Thema durchsuchen
Ansicht
Themen-Optionen

Bug in printers.pas beim Umstellen des Druckers

Ein Thema von DelphiBandit · begonnen am 9. Dez 2009 · letzter Beitrag vom 1. Dez 2014
Antwort Antwort
Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: In der Lüneburger Heide
165 Beiträge
 
Delphi 10.4 Sydney
 
#1

Bug in printers.pas beim Umstellen des Druckers

  Alt 9. Dez 2009, 08:36
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:
http://qc.embarcadero.com/wc/qcmain.aspx?d=6725

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);
Carsten
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#2

AW: Bug in printers.pas beim Umstellen des Druckers

  Alt 1. Dez 2014, 11:25
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#3

AW: Bug in printers.pas beim Umstellen des Druckers

  Alt 1. Dez 2014, 11:34
Hab diese Versionen aktuell nicht installiert und kann nicht nachsehn.

aber leider finde ich im Netz keinen Quellcode der Datei.
Diese Dateien sollte es eigentlich dort auch nicht geben, da man sie ausschließlich beim Kauf eines Delphi (ab Prof) erhält.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: Bug in printers.pas beim Umstellen des Druckers

  Alt 1. Dez 2014, 11:36
Aber der Lazarus-Code ist AFAIK einsehbar, vielleicht besteht das Problem dort nicht?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Bug in printers.pas beim Umstellen des Druckers

  Alt 1. Dez 2014, 12:03
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;
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#6

AW: Bug in printers.pas beim Umstellen des Druckers

  Alt 1. Dez 2014, 13:34
Hallo zusammen,

Mal Printer.Refresh versucht?
Bringt auch keine Änderung.


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.

Geändert von BadenPower ( 1. Dez 2014 um 13:48 Uhr) Grund: Neue Erkenntnis
  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 02:26 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