Windows打印机的自定义纸张如何由程序实现? 使用GetSelectedPrinter返回默认的打印机的名字,然后设置pDMode结构 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 panda_w(好想睡啊!):我想设置了DEVMODE结构,怎样更新才能使得QuickReport认为有呢呢?要知道这种方法只能使Printer识别! 用Printer对象打印图像如何设置图像的位置和DPI? procedure TMainForm.PrintSetupDj(VWidth:integer; Vheight:integer);var VwidthHigh,VwidthLow:integer; {纸张宽度的高/低位} VHeightHigh,VHeightLow:integer; {纸张高度的高/低位} Reg: TRegistry; VPrintName:string; VDefault_DevMode:array of byte; VDefault_DevModeInt:integer; VSize:integer;begin {数据存放低位在前,高位在后} VwidthLow:=byte(Vwidth); VwidthHigh:=byte(Vwidth Shr 8);{右移8位,再取低位} VHeightLow:=byte(Vheight); VHeightHigh:=byte(Vheight Shr 8);{右移8位,再取低位} Reg := TRegistry.Create; try begin Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey('\Config\0001\System\CurrentControlSet\Control\Print\Printers',true); {OpenKey:在指定的主键名不存在时,是否允许创建该主键,True表示允许。 } VPrintName:=Reg.ReadString('Default'); Reg.OpenKey('\System\CurrentControlSet\Control\Print\Printers\'+VPrintName,True); VSize:=Reg.GetDataSize('Default DevMode'); setlength(VDefault_DevMode,VSize); //设置动态数组的长度 {读取二进制值,Name为二进制值名称,Buffer为接收缓冲区,BufSize为缓冲区大小,返回为实际读取的字节数。} reg.ReadBinaryData('Default DevMode',VDefault_DevMode[0],VSize); {设置当前纸张为自定义纸张:代码256} VDefault_DevMode[40]:=byte(26127); VDefault_DevMode[41]:=byte(26127 Shr 8); VDefault_DevMode[46]:=byte(256); VDefault_DevMode[47]:=byte(256 Shr 8); VDefault_DevMode[277]:=byte(11008); VDefault_DevMode[278]:=byte(11008 Shr 8); {设定纸长} VDefault_DevMode[48]:=VHeightLow; VDefault_DevMode[49]:=VHeightHigh; {设定纸长} VDefault_DevMode[50]:=VwidthLow; VDefault_DevMode[51]:=VwidthHigh; try reg.WriteBinaryData('Default DevMode',VDefault_DevMode[0],VSize); finally// freemem(buffer); end; end finally Reg.CloseKey; Reg.Free; inherited; end;end; Repaint是什么意思 如何跟其它计算机建立连接呢? 在打印时只出现一条记录,为什么?(在线等) 高分请教-----做一个视频聊天的程序都要用到什么技术? 关于数据库中互斥操作的问题,各位高手指点一下!!(内详细) 有趣的编程逻辑题,讨论者有高分,up者也有分+1,,呵呵,讨论,讨论 是delphi 的功能限制还是bug? 给mudeen(笑哥哥)的 delphi怎么样.删除当前目录下的所有文件 Delphi文件读取:如何读取指定的几行? activeform资源释放 vc的CDwordArray,在delphi怎么实现?
我想设置了DEVMODE结构,怎样更新才能使得QuickReport认为有呢呢?要知道这种方法只能使Printer识别!
var
VwidthHigh,VwidthLow:integer; {纸张宽度的高/低位}
VHeightHigh,VHeightLow:integer; {纸张高度的高/低位}
Reg: TRegistry;
VPrintName:string;
VDefault_DevMode:array of byte;
VDefault_DevModeInt:integer;
VSize:integer;
begin
{数据存放低位在前,高位在后}
VwidthLow:=byte(Vwidth);
VwidthHigh:=byte(Vwidth Shr 8);{右移8位,再取低位}
VHeightLow:=byte(Vheight);
VHeightHigh:=byte(Vheight Shr 8);{右移8位,再取低位} Reg := TRegistry.Create;
try
begin
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('\Config\0001\System\CurrentControlSet\Control\Print\Printers',true);
{OpenKey:在指定的主键名不存在时,是否允许创建该主键,True表示允许。 }
VPrintName:=Reg.ReadString('Default');
Reg.OpenKey('\System\CurrentControlSet\Control\Print\Printers\'+VPrintName,True);
VSize:=Reg.GetDataSize('Default DevMode');
setlength(VDefault_DevMode,VSize); //设置动态数组的长度 {读取二进制值,Name为二进制值名称,Buffer为接收缓冲区,BufSize为缓冲区大小,返回为实际读取的字节数。}
reg.ReadBinaryData('Default DevMode',VDefault_DevMode[0],VSize); {设置当前纸张为自定义纸张:代码256}
VDefault_DevMode[40]:=byte(26127);
VDefault_DevMode[41]:=byte(26127 Shr 8); VDefault_DevMode[46]:=byte(256);
VDefault_DevMode[47]:=byte(256 Shr 8); VDefault_DevMode[277]:=byte(11008);
VDefault_DevMode[278]:=byte(11008 Shr 8); {设定纸长}
VDefault_DevMode[48]:=VHeightLow;
VDefault_DevMode[49]:=VHeightHigh;
{设定纸长}
VDefault_DevMode[50]:=VwidthLow;
VDefault_DevMode[51]:=VwidthHigh;
try
reg.WriteBinaryData('Default DevMode',VDefault_DevMode[0],VSize);
finally
// freemem(buffer);
end;
end
finally
Reg.CloseKey;
Reg.Free;
inherited;
end;
end;