![]() |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Zitat:
ABER: wie sage ich es dem Drucker, welchen der Schächte er benutzen soll? TIA Hanns |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Das musste ich auch erst recherchieren.
![]() [edit] Vielleicht geht es ![]() |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Zitat:
hier das Feedback :mrgreen: ![]() procedure GetPaperBins(sl: TStrings); TSrings. Da die procedure ChangePrinterBin(ToBin: Integer); //from : ![]() einen IntegerWert zum Setzen des Schachtes benötigt, und ich andererseits nicht den Schacht des Standarddruckers haben wollte, habe ich die Schweizer Variante geändert:
Delphi-Quellcode:
Mit allen anderen Lösungsvorschlägen hatte ich unter Delphi5 / XP Probleme{ Übergabe des gewünschten Druckernamens als zweiten parameter; PrnterName: String} procedure GetPaperBins(sl: TStrings; PrinterName: String); 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 { den gewünschten Drucker setzen ==============================} for numBins := 0 to Printer.Printers.Count -1 do begin if Printer.Printers [numBins] = PrinterName then Printer.PrinterIndex := numBins ; end; { weiter mit orig Code} 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]; { Schachtname und Schachtnummer( als String) mit '=' verknüpft zurückgeben, dazu den orig. Code auskommentieren.... =======================================} // sl.addObject(pBinNames^[i], TObject(temp)); { .... und neue Rückgabe basteln ===============================} sl.AddObject(pBinNames^[i] [i]+'='+ IntToStr( pBins^[i])[/i], TObject(temp)); end; {weiter mit orig Code ohne weitere Änderungen} finally FreeMem(pBinNames); if pBins <> nil then FreeMem(pBins); end; end; end; :cheers: Hanns ( eigentlich müsste hier jetzt ein "aufDieSchulterKlopfen" - Smiley stehen. :mrgreen: ) p.s. Was bei beiden Routinen passiert werde ich hiffentlich auch noch rausfinden |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 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