![]() |
Delphi 2009 und Druckerschächte
Hallo ich bin neu in diesem Forum.
Ich verwende seit einigen Monaten Delphi2009prof. Ich stelle daher meine alten Programme Delphi 2005 auf die neue Version um. Als Reportgenerator verwende ich Quickreport prof. 5.4. Meine bisherige Druckerschachtsteuerung funktiontiert plötzlich nicht mehr. Ich erhalte beim auslesen der Outbin codes bei jedem Druckerschacht die gleichen Angaben. Auch bei Aufruf von printerdialog wird der eingestellte Schacht ignoriert. Nach einem Versuch in Rave Report das gleiche Phänomen. Egal wie ich die Schächte angebe es wird immer über den Standartschacht gedruckt. Dies macht mich langsam verrückt. Hat jemand eine gute Idee. |
AW: Delphi 2009 und Druckerschächte
Und ein Testausdruck über den Druckertreiber funktioniert korrekt?
|
AW: Delphi 2009 und Druckerschächte
Rück doch mal den Code raus...
|
AW: Delphi 2009 und Druckerschächte
Textseite ist ok. Meine Programme die mit delph5 erzeugt wurden können sauber auf die Schächte zugreifen.
Sobald die selben Programme jedoch mit delphi 2009 erzeugt werden nur standartschacht möglich. Also bisher habe ich bei jedem neuen Drucker mit unterem Programm die Schächte ausgelesen. Bsp. HP 2055 Schacht 3 kann mit CustomBinCode:=260 angesteuert werden. Code: procedure TForm1.Button2Click(Sender: TObject); var hDevMode: THandle; Device,Driver,Port: array [0..1024] of Char; bin: integer; DevMode : PDevMode; UserCollateCode: integer; result:integer; begin Printer.GetPrinter(Device,Driver,Port,hDevMode); bin := -1; if hDevMode <> 0 then begin DevMode := GlobalLock (hDevMode); //members von DevMode bin := DevMode^.DMDEFAULTSOURCE; UserCollateCode := DevMode^.dmCollate; GlobalUnlock (hDevMode); end; result := bin; showmessage(inttostr(result)); end; procedure GetPaperBins(sl: TStrings); type TBinName = array [0..23] of Char; TBinNameArray = array [1..High(Integer) div SizeOf(TBinName)] of TBinName; PBinnameArray = ^TBinNameArray; TBinArray = array [1..High(Integer) div SizeOf(Word)] of Word; PBinArray = ^TBinArray; var Device, Driver, Port: array [0..255] of Char; hDevMode: THandle; i, numBinNames, numBins, temp: Integer; pBinNames: PBinnameArray; pBins: PBinArray; begin Printer.PrinterIndex := -1; Printer.GetPrinter(Device, Driver, Port, hDevmode); numBinNames := WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, nil, nil); numBins := WinSpool.DeviceCapabilities(Device, Port, DC_BINS, nil, nil); if numBins <> numBinNames then begin raise Exception.Create('DeviceCapabilities reports different number of bins and bin names!'); end; if numBinNames > 0 then begin pBins := nil; GetMem(pBinNames, numBinNames * SizeOf(TBinname)); GetMem(pBins, numBins * SizeOf(Word)); try WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(pBinNames), nil); WinSpool.DeviceCapabilities(Device, Port, DC_BINS, PChar(pBins), nil); sl.Clear; for i := 1 to numBinNames do begin temp := pBins^[i]; sl.addObject(pBinNames^[i], TObject(temp)); end; finally FreeMem(pBinNames); if pBins <> nil then FreeMem(pBins); end; end; Danach habe ich die Schächte in einer Datenbank hinterlegt und bei den einzelnen Programmen aufgerufen: rechnung.rechnung.PrinterSettings.PrintMetaFile := True; rechnung.rechnung.PrinterSettings.UseCustomBinCode := True; rechnung.rechnung.PrinterSettings.CustomBinCode:=2 60; Hat bisher immer sauber funktioniert bei HP, Koycera,Cannon. Habe die selben Ergebnisse bei Rave, Fastreport und Quickreport. Es muß ein Delphi2009 Problem sein. Sobald die Schächte eingestellt sind (auch über printersetup) überschreibt delphi die Eingaben und geht auf Standartdrucker und Standartschacht. Hoffe auf Eure Hilfe. Jürgen |
AW: Delphi 2009 und Druckerschächte
Von Delphi 2005 zu 2009 haben sich durch die Unicode-Unterstützung einige der Standarddatentypen geändert. Vor allem Char ist jetzt standardmäßig ein Widechar, ersetze probehalber zuerst einmal alle Vorkommen von "Char" durch "AnsiChar" und probiers nochmal.
|
AW: Delphi 2009 und Druckerschächte
Bei Änderung auf AnsiChar erhalte ich eine Fehlermeldung "Array und AnsiChar nicht kompatibel".
Besteht eigentlich die Möglichkeit das Delphi bei 2 Entwicklungsumgebungen (5 und 2009) beim Linken eventuell überfordert ist. Und falsche Paramenter lädt. Jürgen |
AW: Delphi 2009 und Druckerschächte
Ich tüftel ja wirklich gerne, aber würde es Dir evtl. etwas ausmachen, neben dem reinen Fehlermeldungstext vielleicht auch noch die Stelle mit anzugeben? In der Regel reicht dort nämlich simples draufgucken schon aus um den Fehler selber zu sehen und womöglich auch zu beheben. Überforderung tritt übrigens meist nicht im Linker sondern erst auf OSI Layer 8 auf ;)
|
AW: Delphi 2009 und Druckerschächte
Bis auf das andere Befüllen der Stringlist
Delphi-Quellcode:
bekomme ich mit deinem Code unter D2010 folgende Liste für meinen HP Drucker:
sl.Add(IntToStr(temp) + ':' + pBinNames^[i]);
15: Automatisch auswählen |
AW: Delphi 2009 und Druckerschächte
Super es klappt.
Durch die Änderung findet er plötzlich die Schächte wieder. Verstehe zwar nicht wieso aber hauptsache es klappt. Hatte im weiteren Programm noch einen kleinen Bug. Denn sobald er die Schächte nicht sauber finden konnte sollte er lt. Programm auf den Standartdrucker mit Standartschacht zurückgreifen. Habe dies jetzt geändert das er hier eine Fehlermeldung anzeigt. Jetzt kann er die Schächte exakt auslesen. Vielen Dank !!!!!!!!!! Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 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