AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Verfügbare Druckerschächte eines Druckers anzeigen

Verfügbare Druckerschächte eines Druckers anzeigen

Ein Thema von jaevencooler · begonnen am 4. Jan 2006 · letzter Beitrag vom 26. Jan 2010
Antwort Antwort
Seite 2 von 2     12
HannsW

Registriert seit: 6. Jan 2010
26 Beiträge
 
#11

Re: Verfügbare Druckerschächte eines Druckers anzeigen

  Alt 25. Jan 2010, 13:43
Zitat von DeddyH:
Dann versuch es mal bei den Schweizern.
Danke, Detlef, das hat erstmal geholfen!
ABER: wie sage ich es dem Drucker, welchen der Schächte er benutzen soll?

TIA Hanns
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.367 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Verfügbare Druckerschächte eines Druckers anzeigen

  Alt 25. Jan 2010, 13:59
Das musste ich auch erst recherchieren. Dieser Thread scheint da recht hilfreich zu sein. Falls ja, kannst Du ja ein kurzes Feedback geben (falls nein, wirst Du das ja vermutlich sowieso ).

[edit] Vielleicht geht es hiermit noch einfacher. Zumindest liest sich die Liste der Features nicht schlecht. [/edit]
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
HannsW

Registriert seit: 6. Jan 2010
26 Beiträge
 
#13

Re: Verfügbare Druckerschächte eines Druckers anzeigen

  Alt 26. Jan 2010, 04:02
Zitat von DeddyH:
Falls ja, kannst Du ja ein kurzes Feedback geben (falls nein, wirst Du das ja vermutlich sowieso ).

[edit] Vielleicht geht es hiermit noch einfacher. Zumindest liest sich die Liste der Features nicht schlecht. [/edit]
Case False Ja:
hier das Feedback

Die Schweitzer liefern mit ihrer
procedure GetPaperBins(sl: TStrings); TSrings.

Da die procedure ChangePrinterBin(ToBin: Integer);
//from : http://www.efg2.com/Lab/Library/UseNet/1999/1102.txt

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:

{ Ü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;
Mit allen anderen Lösungsvorschlägen hatte ich unter Delphi5 / XP Probleme

Hanns
( eigentlich müsste hier jetzt ein "aufDieSchulterKlopfen" - Smiley stehen. )

p.s.

Was bei beiden Routinen passiert werde ich hiffentlich auch noch rausfinden
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf