单元名
uses printers;
1、获取控制面板中的打印机列表
Printer.Printers ;// 返回值类型 TStrings
2、设置打印机的打印属性 打印方向 自定义纸张大小
//参数:lpname 表示指定打印机名字 ''表示非默认打印机
procedure setPrinterInfo(lpname string) ;
var
ADevice, ADriver, APort: PChar;
ADeviceMode: THandle ;
PDMode: PDEVMODE;
Anew :boolean ;
begin
GetMem(ADevice,cchDeviceName);
GetMem(ADriver,MAX_PATH);
GetMem(APort,MAX_PATH);
try
try
with printer do
begin
////判定打印机是否切换
if (lpname <>'') then
begin
Anew := false;
if printerindex <> printer.printers.indexof(lpname ) then
Anew := true ;
printerindex := printer.printers.indexof(lpname ) ;
end;
GetPrinter(ADevice, ADriver, APort,ADeviceMode);
/**B 针对打印机切换时使用******************************/
//例如将默认打印机切换到非默认打印机
//GetNew_DeviceMode 自定义函数,位置UnitPrinterZDY单元中。
if Anew then
begin
ADeviceMode := GetNew_DeviceMode(ADevice) ;
end;
/**E**********************************************/
if ADeviceMode <> 0 then
begin
pDMode := GlobalLock(ADeviceMode);
if pDMode <> nil then
begin
pDMode^.dmFields:=pDMode^.dmFields or DM_ORIENTATION;
//设定打印方向横向打印
pDMode^.DMORIENTATION:= DMORIENT_LANDSCAPE ;
end;
SetPrinter(ADevice,ADriver,APort, ADeviceMode);
GlobalUnlock(ADeviceMode);
end;
/**开始打印*******/
BeginDoc ;
//此处打印内容
EndDoc ;
/**结束打印*******/
end;
except
Application.MessageBox('设置失败','提示',MB_OK);
end;
finally
FreeMem(ADevice,cchDeviceName);
FreeMem(ADriver,MAX_PATH);
FreeMem(APort,MAX_PATH);
end;
end ;
unit UnitPrinterZDY;
interface
uses Windows,winspool ;
function GetNew_DeviceMode(ADevice : PChar ) : THandle;
implementation
function GetNew_DeviceMode(ADevice : PChar ) : THandle;
var
StubDevMode: TDeviceMode;
FPrinterHandle: THandle;
DeviceMode: THandle;
DevMode: PDeviceMode;
begin
DeviceMode := 0 ;
if OpenPrinter(ADevice, FPrinterHandle, nil) then
begin
DeviceMode := GlobalAlloc(GHND,
DocumentProperties(0, FPrinterHandle, ADevice, StubDevMode,
StubDevMode, 0));
if DeviceMode <> 0 then
begin
DevMode := GlobalLock(DeviceMode);
if DocumentProperties(0, FPrinterHandle, ADevice, DevMode^,
DevMode^, DM_OUT_BUFFER) < 0 then
begin
GlobalUnlock(DeviceMode);
GlobalFree(DeviceMode);
DeviceMode := 0;
DevMode := nil;
end
end;
end;
result := DeviceMode ;
end ;
end.