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