Einzelnen Beitrag anzeigen

bjma

Registriert seit: 24. Sep 2005
Ort: Balingen
49 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi 2009 und Druckerschächte

  Alt 24. Jul 2010, 18:20
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
Jürgen Maute
  Mit Zitat antworten Zitat