我用PRINTER打印
开发环境是DELPHI4+XP+网络打印机代码入下procedure TForm1.Button1Click(Sender: TObject);
var
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
i:integer;
begin
i:=0;
i:=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);{页左边距X} i:=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);{页上边距y} i:=GetDeviceCaps(Printer.Handle, PHYSICALWIDTH); {物理页宽度} i:=GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT); {物理页高度}Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then begin{Set to legal}
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
pDMode^.dmPaperSize := DMPAPER_LEGAL;{Set to custom size}
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := 1000 {SomeValueInTenthsOfAMillimeter};
pDMode^.dmPaperLength := 1000 {SomeValueInTenthsOfAMillimeter};{Set the bin to use}
pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
pDMode^.dmDefaultSource := DMBIN_MANUAL;GlobalUnlock(hDMode);
end;
end;
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.BeginDoc;
Printer.Canvas.TextOut(800,800, 'Test 8000');
Printer.Canvas.TextOut(1500,2500, 'Test 2500');
Printer.EndDoc;
end;照理说应该一个字打的出来一个字打不出来,不过2个字都打的出来,不清楚是为什么。
顺便问一句,如果我要自定义页边距,那又该怎么办呢,谢谢了
开发环境是DELPHI4+XP+网络打印机代码入下procedure TForm1.Button1Click(Sender: TObject);
var
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
i:integer;
begin
i:=0;
i:=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);{页左边距X} i:=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);{页上边距y} i:=GetDeviceCaps(Printer.Handle, PHYSICALWIDTH); {物理页宽度} i:=GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT); {物理页高度}Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then begin{Set to legal}
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
pDMode^.dmPaperSize := DMPAPER_LEGAL;{Set to custom size}
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := 1000 {SomeValueInTenthsOfAMillimeter};
pDMode^.dmPaperLength := 1000 {SomeValueInTenthsOfAMillimeter};{Set the bin to use}
pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
pDMode^.dmDefaultSource := DMBIN_MANUAL;GlobalUnlock(hDMode);
end;
end;
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.BeginDoc;
Printer.Canvas.TextOut(800,800, 'Test 8000');
Printer.Canvas.TextOut(1500,2500, 'Test 2500');
Printer.EndDoc;
end;照理说应该一个字打的出来一个字打不出来,不过2个字都打的出来,不清楚是为什么。
顺便问一句,如果我要自定义页边距,那又该怎么办呢,谢谢了
解决方案 »
- 在delphi7.0中如何将数据导入到excel中?
- 在delphi中怎样通过程序控制连接设备的自动开关机
- 用Delphi怎样获取Excel文件里的某个工作簿中指定列的标题————Excel中工作区上面第一行(既:A、B、C、D、……IU、IV))???
- 请教Delphi中指针的问题, p.a和p^.a有什么区别吗?
- 如何在delphi中调用outlook
- 菜鸟WebBroker问题,敬请赐教!
- 非高手勿进!此问题在大富翁中无人回答(在线等待)
- 大三搞Delphi的请进来谈谈
- 关于CGI论坛的问题
- 请教高手,我这个插入数据库的语句怎么结果不对?到底错在哪里?
- 请问如何获取网络流量值?
- -----重金悬赏!:看看这个报表怎么实现(用delphi的 QReport 或Rave)
ZeroMemory(&pd, sizeof(PRINTDLG));
AfxGetApp()->GetPrinterDeviceDefaults(&pd);DEVMODE* pDevMode = (LPDEVMODE) ::GlobalLock(pd.hDevMode);
// HDEVMODE实际上就是指向DEVMODE结构的一个指针。pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pDevMode->dmPaperSize = 0;
// 有许多定定好的纸型:
// DMPAPER_LETTER Letter, 8 1/2- by 11-inches
// DMPAPER_LEGAL Legal, 8 1/2- by 14-inches
// DMPAPER_A4 A4 Sheet, 210- by 297-millimeters
// 等等等等pDevMode->dmPaperLength = xxxx (in millimeters);
pDevMode->dmPaperWidth = xxxx (in millimeters);GlobalUnlock(pd.hDevMode);当然,DEVMODE里还有好多可以设定的成员,取得了pDevMode,想改什么就改什么吧。typedef struct _devicemode { // dvmd
BCHAR dmDeviceName[CCHDEVICENAME];
WORD dmSpecVersion;
WORD dmDriverVersion;
WORD dmSize;
WORD dmDriverExtra;
DWORD dmFields;
short dmOrientation;
short dmPaperSize;
short dmPaperLength;
short dmPaperWidth;
short dmScale;
short dmCopies;
short dmDefaultSource;
short dmPrintQuality;
short dmColor;
short dmDuplex;
short dmYResolution; short dmTTOption;
short dmCollate;
BCHAR dmFormName[CCHFORMNAME];
WORD dmLogPixels;
DWORD dmBitsPerPel;
DWORD dmPelsWidth;
DWORD dmPelsHeight;
DWORD dmDisplayFlags;
DWORD dmDisplayFrequency;
#if(WINVER >= 0x0400)
DWORD dmICMMethod; // Windows 95 only
DWORD dmICMIntent; // Windows 95 only
DWORD dmMediaType; // Windows 95 only
DWORD dmDitherType; // Windows 95 only DWORD dmReserved1; // Windows 95 only
DWORD dmReserved2; // Windows 95 only
#endif /* WINVER >= 0x0400 */
} DEVMODE;