![]() |
Verfügbare Druckerschächte eines Druckers anzeigen
Moin, Moin,
folgendes Problem: Ich möchte eine Liste aller verfügbaren Schächte eine installierten Druckers finden, und anzeigen, sowie den Bincode herausfinden. Hat jemand eine Idee :drunken: Beste Grüße Michael |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Hi,
da jeder Druckerhersteller andere codes verwendet nutze mal ein Testprogramm. ![]() Dies ist die Seite von Quickreport. Deine Version D5 Ent sollte zudem über die source-codes , insbesondere qrprinter.pas verfügen. Du kannst dann das Druckerarray anpassen. Weiters auf der QR-Hilfeseite. Gruß Werner |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Hallo,
erstmal willkommen in der DP :hi: Das könnte auch Dir helfen: Delphi-Forum: ![]() |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Hallo,
die Klasse TJclPrintSet der JCL des ![]() |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
ja, aber leider GPL.
|
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
im Attachment ein Programm, das unter anderem genau das macht, Ausgabe u.a.: Text Caps : Supports character output precision. Supports 90-degree character rotation. Supports character rotation at any degree. Supports underlining. Supports strikeouts. Paper Bins : Automatischer Einzug = 7 Mehrzweckfach (MZ) = 1 Kassette = 2 Manuelle Papierzufuhr = 4 Untere Kassette = 11 Umschlag-Zuführung = 5 Paper Sizes : Letter (8 ½ x 11 Zoll) = 1 (215.9x279.4) Legal (8 ½ x 14 Zoll) = 5 (215.9x355.6) Executive (7 ¼ x 10 ½ Zoll) = 7 (184.1x266.7) A4 (210 x 297 mm) = 9 (209.9x296.9) Com-10 Umsch (4 1/8 x 9½ Zoll) = 20 (104.7x241.3) DL Umschlag (110 x 220 mm) = 27 (109.9x219.9) C5 Umschlag (162 x 229 mm) = 28 (161.9x228.9) B5 Umschlag (176 x 250 mm) = 34 (175.9x249.9) Monarch Umsch (3 7/8 x 7½ Zoll) = 37 (98.3x190.5) gibt auch alles andere aus, was man über den Drucker wissen sollte, und beruht auf Windows API. Ist allerdings ein uraltes TPW (Turbo Pascal für Windows) Programm, das ich seither nicht mehr gebraucht habe und deshalb nicht auf Delphi portiert. Es läuft jedoch nach wie vor, auch unter XP, und du müsstest alles Nötige finden, um das Windows API entsprechend zu benutzen. Gruss Reinhard |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Probier mal das
Delphi-Quellcode:
Uwe
function GetPaperTrays: TStrings;
var pDevMode : PDeviceMode; bin : array[0..255,0..23] of char; i : DWORD; Res : DWORD; begin if (FPaperTrays = nil) then begin try FPaperTrays := TStringList.Create; except FPaperTrays.Free; FPaperTrays := nil; raise; end; end; FPaperTrays.Clear; GetPrinter(ADevice,ADriver,APort,hDMode); pDevMode := nil; Res := DeviceCapabilities(ADevice,APort,DC_BINNAMES,PCHAR(@(bin[0][0])),pDevMode); for i := 0 to Res-1 do begin FPaperTrays.Add(bin[i]); end; Result := FPaperTrays; end; |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Würde mich schon interessieren ob es funktioniert oder nicht :?
Uwe |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Zitat:
liegt ja nun schonein wenig zurück, aber: es klappt nicht! FPapertrays: TStringList; in die VAR einzufügen habe ich geschafft, aber
Delphi-Quellcode:
ergibt unter D5 diese Meldungen
GetPrinter(ADevice,ADriver,APort,hDMode);
pDevMode := nil; Res := DeviceCapabilities(ADevice,APort,DC_BINNAMES,PCHAR(@(bin[0][0])),pDevMode); Zitat:
und es übersteigt meine Fähigkeiten, dies Fehler zu lösen Hanns |
Re: Verfügbare Druckerschächte eines Druckers anzeigen
Dann versuch es mal bei den
![]() |
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 13:00 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