Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Change Printer settings

149 views
Skip to first unread message
Message has been deleted

zeina

unread,
Sep 18, 2007, 8:14:08 PM9/18/07
to
I have the adobe printer installed into my system, in the Adobe
Acrobat profitional 8 the printer has a settings such as (view pdf
result, pdf output folder) I need to change them from my program, I
did some research over the net and I found this code, when I try it I
had an error (Abstract Error) so what I'm missing?? And is there
another way to achieve my goal??

thanks


code :

procedure TForm1.LoadPrinterInfo(APrinterName: PChar; ASourceStream:
TStream);
var
HPrinter : THandle;
InfoSize,
BytesNeeded: Cardinal;
PI2: PPrinterInfo2;
PrinterDefaults: TPrinterDefaults;
begin
with PrinterDefaults do
begin
DesiredAccess := PRINTER_ACCESS_USE;
pDatatype := nil;
pDevMode := nil;
end;
if OpenPrinter(APrinterName, HPrinter, @PrinterDefaults) then
try
SetLastError(0);
//Determine the number of bytes to allocate for the PRINTER_INFO_2
construct...
if not GetPrinter(HPrinter, 2, nil, 0, @BytesNeeded) then
begin
//Allocate memory space for the PRINTER_INFO_2 pointer
(PrinterInfo2)...
PI2 := AllocMem(BytesNeeded);
try
InfoSize := SizeOf(TPrinterInfo2);
if GetPrinter(HPrinter, 2, PI2, BytesNeeded, @BytesNeeded)
then
begin
PI2.pSecurityDescriptor := nil;
ASourceStream.ReadBuffer(PChar(PI2)[InfoSize], BytesNeeded -
InfoSize); // the error line
// Apply settings to the printer
if DocumentProperties(0, hPrinter, APrinterName,
PI2.pDevMode^,
PI2.pDevMode^, DM_IN_BUFFER or
DM_OUT_BUFFER) = IDOK then
begin
SetPrinter(HPrinter, 2, PI2, 0); // Ignore the result of
this call...
end;
end;
finally
FreeMem(PI2, BytesNeeded);
end;
end;
procedure TForm1.SetPrinterSettings(FPrinter: TPrinter);
var
FDevice: PChar;
FDriver: PChar;
FPort: PChar;
DeviceMode: THandle;
DevMode: PDeviceMode;
begin
{to get a current printer settings}
FPrinter.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
{lock a printer device}
DevMode := GlobalLock(DeviceMode);

{set a paper size as A4-Transverse}
if ((DevMode^.dmFields and DM_PAPERSIZE) = DM_PAPERSIZE) then
begin
DevMode^.dmFields := DevMode^.dmFields or DM_PAPERSIZE;
DevMode^.dmPaperSize := DMPAPER_A4_TRANSVERSE;
end;

{set a paper source as Tractor bin}
if ((DevMode^.dmFields and DM_DEFAULTSOURCE) = DM_DEFAULTSOURCE)
then
begin
DevMode^.dmFields := DevMode^.dmFields or DM_DEFAULTSOURCE;
DevMode^.dmDefaultSource := DMBIN_TRACTOR;
end;

{set a Landscape orientation}
if ((DevMode^.dmFields and DM_ORIENTATION) = DM_ORIENTATION) then
begin
DevMode^.dmFields := DevMode^.dmFields or DM_ORIENTATION;
DevMode^.dmOrientation := DMORIENT_LANDSCAPE;
end;

{set a printer settings}
FPrinter.SetPrinter(FDevice, FDriver, FPort, DeviceMode);

{unlock a device}
GlobalUnlock(DeviceMode);
end;
finally
ClosePrinter(HPrinter);
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
s:Tstream;
begin
s:= Tstream.Create;
LoadPrinterInfo(pchar('Adobe PDF'),s);
end ;

0 new messages