我用printer打印到A4纸,在(8,2)厘米处输出字符 国国国国国国
但是实际打出来后,用尺子量 x,y座标并不是8和2,我用
x :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
y :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
减去这个x,y偏移也不对,也不等于8和2,请高手帮忙,如何使
Printer.Canvas.TextOut(Round(800*dpipx/254),Round(200*dpipx/254),'国国国国国国');
打印后,量的尺寸正好是(8,2)厘米呢代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
dpipx,dpipy:integer;
begin
SetPaperSize_A4;
Printer.Orientation := poLandscape; //poPortrait纵向 poLandscape;横向
Printer.BeginDoc;
dpipx := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX);
dpipy := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY);
Printer.Canvas.Font.Charset := GB2312_CHARSET;
Printer.Canvas.Font.Name := '宋体';
Printer.Canvas.Font.Height := Round(50 * dpipy/254);
Printer.Canvas.Font.Style := [];
Printer.Canvas.Pen.Width := 1;
Printer.Canvas.TextOut(Round(800*dpipx/254),Round(200*dpipx/254),'国国国国国国');
Printer.EndDoc;end;procedure TForm1.SetPaperSize_A4;
var
aDevice: array[0..CCHDEVICENAME-1] of char;
aDriver: array[0..MAX_PATH-1] of char;
aPort: array[0..31] of char;
hDevMode: THandle;
pDevMode: PDeviceMode;
begin
Printer.GetPrinter(aDevice, aDriver, aPort, hDevMode);
if hDevMode <> 0 then
begin
pDevMode := GlobalLock(hDevMode);
if pDevMode <> nil then
begin
pDevMode^.dmPaperSize := DMPAPER_A4;
pDevMode^.dmOrientation:=DMORIENT_PORTRAIT;
pDevMode^.dmFields:=pDevMode^.dmFields or DM_PAPERSIZE;
GlobalUnlock(hDevMode);
end;
end;
end;
但是实际打出来后,用尺子量 x,y座标并不是8和2,我用
x :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
y :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
减去这个x,y偏移也不对,也不等于8和2,请高手帮忙,如何使
Printer.Canvas.TextOut(Round(800*dpipx/254),Round(200*dpipx/254),'国国国国国国');
打印后,量的尺寸正好是(8,2)厘米呢代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
dpipx,dpipy:integer;
begin
SetPaperSize_A4;
Printer.Orientation := poLandscape; //poPortrait纵向 poLandscape;横向
Printer.BeginDoc;
dpipx := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX);
dpipy := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY);
Printer.Canvas.Font.Charset := GB2312_CHARSET;
Printer.Canvas.Font.Name := '宋体';
Printer.Canvas.Font.Height := Round(50 * dpipy/254);
Printer.Canvas.Font.Style := [];
Printer.Canvas.Pen.Width := 1;
Printer.Canvas.TextOut(Round(800*dpipx/254),Round(200*dpipx/254),'国国国国国国');
Printer.EndDoc;end;procedure TForm1.SetPaperSize_A4;
var
aDevice: array[0..CCHDEVICENAME-1] of char;
aDriver: array[0..MAX_PATH-1] of char;
aPort: array[0..31] of char;
hDevMode: THandle;
pDevMode: PDeviceMode;
begin
Printer.GetPrinter(aDevice, aDriver, aPort, hDevMode);
if hDevMode <> 0 then
begin
pDevMode := GlobalLock(hDevMode);
if pDevMode <> nil then
begin
pDevMode^.dmPaperSize := DMPAPER_A4;
pDevMode^.dmOrientation:=DMORIENT_PORTRAIT;
pDevMode^.dmFields:=pDevMode^.dmFields or DM_PAPERSIZE;
GlobalUnlock(hDevMode);
end;
end;
end;
解决方案 »
- 自定义组件开发,保存属性问题。
- 如何修改收藏夹
- delphi获取打印任务----在线等,请大家帮帮
- 怎样判断字符串中有汉字?
- 珍藏——身份证号认证算法。(根据国家GB 11643-1999标准。up 有分)
- 在TQuery+TDataSource+TDBGrid中,我用表的一字段fkfs,值'01','02','03'
- 很简单的数组求救
- 关于TClientDataSet控件的applyUpdate更新后刷新的问题
- 在delphi中,当输入完对象名后的"."要过好久才出现提示,有没有办法象VB那样,立刻就出现提示。还有就是无方法,实现象VB那样自动变换大
- <<<<<150求skinengine最新版。
- 有没有flash图标控件,delphi中可以调用的?请大虾帮忙,谢谢!
- 急。。。文件打开问题
To lovelymelon:像素和CM的转换,是不是和打印机的分辨率也有关系?
期待解决中