想根据图片大小,决定横向还是纵向打印,现在的代码如下:
if Width<Height then //纵向打印
begin
printer.GetPrinter(a,b,c,bb);
ee:=GlobalLock(bb);
ee^.dmOrientation:=DMORIENT_PORTRAIT;
ee^.dmDefaultSource:=DMBIN_MANUAL;
ee^.dmFields:=ee^.dmFields or DM_ORIENTATION or DM_PAPERWIDTH or DM_PAPERLENGTH;
ee^.dmFields:=ee^.dmFields or DMBIN_MANUAL;
GlobalUnLock(bb);
Printer.BeginDoc;
打印
Printer.EndDoc;
end
else
begin //横向打印
printer.GetPrinter(a,b,c,bb);
ee:=GlobalLock(bb);
ee^.dmOrientation:=DMORIENT_LANDSCAPE;
ee^.dmDefaultSource:=DMBIN_MANUAL;
ee^.dmFields:=ee^.dmFields or DM_ORIENTATION or DM_PAPERWIDTH or DM_PAPERLENGTH;
ee^.dmFields:=ee^.dmFields or DMBIN_MANUAL;
GlobalUnLock(bb);
printer.PrinterIndex:=printer.PrinterIndex;
Printer.BeginDoc;
打印
Printer.EndDoc;
end现在的效果是程序第一次打印是什么方向,后面的打印全是这个方向。但是根据图片的宽和高进入这个if分支正确。
大家帮帮忙,怎样解决?
if Width<Height then //纵向打印
begin
printer.GetPrinter(a,b,c,bb);
ee:=GlobalLock(bb);
ee^.dmOrientation:=DMORIENT_PORTRAIT;
ee^.dmDefaultSource:=DMBIN_MANUAL;
ee^.dmFields:=ee^.dmFields or DM_ORIENTATION or DM_PAPERWIDTH or DM_PAPERLENGTH;
ee^.dmFields:=ee^.dmFields or DMBIN_MANUAL;
GlobalUnLock(bb);
Printer.BeginDoc;
打印
Printer.EndDoc;
end
else
begin //横向打印
printer.GetPrinter(a,b,c,bb);
ee:=GlobalLock(bb);
ee^.dmOrientation:=DMORIENT_LANDSCAPE;
ee^.dmDefaultSource:=DMBIN_MANUAL;
ee^.dmFields:=ee^.dmFields or DM_ORIENTATION or DM_PAPERWIDTH or DM_PAPERLENGTH;
ee^.dmFields:=ee^.dmFields or DMBIN_MANUAL;
GlobalUnLock(bb);
printer.PrinterIndex:=printer.PrinterIndex;
Printer.BeginDoc;
打印
Printer.EndDoc;
end现在的效果是程序第一次打印是什么方向,后面的打印全是这个方向。但是根据图片的宽和高进入这个if分支正确。
大家帮帮忙,怎样解决?
.........
procedure TForm1.Button1Click(Sender: TObject);
var
ADevice, ADriver, APort: array[0..255] of Char;
DeviceHandle: THandle;
DevMode: PDeviceMode;
begin
//初始化印表機
Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
if DeviceHandle = 0 then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
end;
if DeviceHandle = 0 then
Raise Exception.Create('不能初始化印表機!')
else
DevMode := GlobalLock(DeviceHandle);
if DeviceHandle <> 0 then
begin
with DevMode^ do
begin
dmFields := dmFields or DM_ORIENTATION;
//在下面這裡設置列印方向
dmOrientation := DMORIENT_LANDSCAPE; //DMORIENT_PORTRAIT
dmPaperSize := DMPAPER_A3;
Printer.SetPrinter(ADevice, ADriver, APort, DeviceHandle);
GlobalUnLock(DeviceHandle);
end;
end;
PrinterSetupDialog1.Execute; //驗證一下設置是否成功了
end;
.............打印紙張大小:procedure SetPaperSize(X, Y: Integer);
// 單位是0.1mm
// A4時 Printer.Pagewidth:=1440; A5時 Printer.Pagewidth:=1049;
// B5時 Printer.Pagewidth:=1290; 16K時 Printer.Pagewidth:=1035;
// lq1600寬行印表機這個值寬度最大為42cm左右, 長度大約2m。
//改變devicemode結構
var
Device: array[0..255] of char;
Driver: array[0..255] of char;
Port: array[0..255] of char;
hDMode: THandle;
PDMode: PDEVMODE;
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
if (x = 0) or (y = 0) then
begin
{Set to legal}
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
{pDMode^.dmPaperSize := DMPAPER_LEGAL; changed by wulianmin}
pDMode^.dmPaperSize := DMPAPER_FANFOLD_US;
end
else
begin
{Set to custom size}
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := x {SomeValueInTenthsOfAMillimeter};
pDMode^.dmPaperLength := y {SomeValueInTenthsOfAMillimeter};
end;
{設定紙張來源}
pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
pDMode^.dmDefaultSource := DMBIN_MANUAL;
GlobalUnlock(hDMode);
end;
end;
Printer.PrinterIndex := Printer.PrinterIndex;
//以下開始列印
Printer.BeginDoc;
Printer.Canvas.TextOut(100,100, 'Test 1');
Printer.EndDoc;
end;