Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fächerauswahl beim Drucker (https://www.delphipraxis.net/1501-faecherauswahl-beim-drucker.html)

Peeters 3. Dez 2002 20:53


Fächerauswahl beim Drucker
 
wie kann ich die Fächer eines Druckers ermitteln. Leider ist bei TPrinter nichts zu finden. Mir hat einer mal diesen Code geschickt nur hier funktioniert winspool nicht jeden falls bei mir nicht "unbekannt". Bei DeviceCapabilities(Device, Port, DC_BINNAMES, Nil, Nil); sagt er auch inkompatible Integer und PChar.

Delphi-Quellcode:

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;

procedure GetPrnBinNames(BinList: TStrings; WithNrInText: boolean);
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.PrinterIndex := Printer.PrinterIndex; // added
  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: unterschiedliche Anzahl und
Namen!');
    end; // if

  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);
      BinList.Clear();
      for i:= 1 to numBinNames do begin
        temp := pBins^[i];
       if (WithNrInText)
        then BinList.AddObject( pBinNames^[i]+' '+IntToStr(temp), TObject(temp))
         else BinList.AddObject( pBinNames^[i], TObject(temp));

      end;
    finally
      FreeMem(pBinNames);
      if (pBins <> nil)
       then FreeMem(pBins);
    end;
  end; // if
end;
Ich hoffe, dass mir einer helfen kann.

Besten Dank im voraus

---
Florian Peeters

Daniel B 3. Dez 2002 21:04

Hallo Peeters und willkommen,

warum WinSpool nicht bekannt ist, bzw. die jeweiligen Funktionen ist, das Du die Unit "WinSpool" noch nicht eingebunden hast. Wenn ich das bei mir mache, dann sind alle Fehler weg, bis aus zwei kleinigkeiten die Du selbst wegbekommst.

Grüsse, Daniel :hi:

Peeters 3. Dez 2002 21:13

Jo, habe es gerade selber festgestellt. Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 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