Delphi Gebruikersgroep

 

Home    Up

Aansturen printerbakken

Ik heb een printroutine geschreven die een brief en de bijbehorende bijlage uitprint. Deze brief en bijlage worden honderden keren uitgeprint, waarbij de gegevens afhankelijk zijn van de geadresseerde. Nu wil men het liefst de bijlage op ander papiersoort printen dan de hoofdbrief. Het gemakkelijkst is dit te doen door het papier voor de bijlage(n) uit een andere printerbak te halen dan het papier op voor brief. Maar hoe kan ik mbv Delphi printerbakken aansturen?????? 

Mvg 

Corne

--

Corne, 

daarvoor moet je eens kijken bij de 'DeviceCapabilities function' in de windows API help, of even zoeken bij bijv 'Delphi3000' 

Hans

--

Corne, 

De Borland FAQ1455D behandelt dit, maar om een mij onduidelijke reden lukt het me niet die bij borland te openen. Wellicht heb jij meer geluk......... 

Wel een stukje code bij delphi32.com : 

uses 
WinSpool; 
const 
PName = 'DELPHI III'; 
PPort = '\\CONAN\DELPHI_III'; 
procedure TForm .Button Click(Sender: TObject); 
var 
i : Integer; 
p : PChar; 
begin 
GetMem(p,24*DeviceCapabilities(PName,PPort,DC_BINNAMES,nil,nil)); 
with Memo , Lines do begin 
Clear; 
for i:= to DeviceCapabilities(PName,PPort,DC_BINNAMES,p,nil) do 
Add(p+24*(i- )); 
end; 
FreeMem(p); 
end; 


Of anders deze van Delphi Assist: 

procedure TForm1.GetBinnames( 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 } 

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; 
End;

--

Hans, bedankt voor je reakties. 

Ik ben er uit. En inderdaad via de DeviceCapabilties. 

mvg 

Corne