如何用程序指定Formula One的当前打印机(200分)

  • 主题发起人 主题发起人 larryuan
  • 开始时间 开始时间
L

larryuan

Unregistered / Unconfirmed
GUEST, unregistred user!
F1Book是静态创建在窗体上的,他所记录的默认打印机是我机器上的当前打印机,
但是到客户的机器上,就会找不到这个打印机了,会提示错误。
我希望在程序启动的时候,动态的把F1Book的当前打印机指定为运行机器上的默认打印机
请问我该如何指定呢?试了试PrintDevMode好像不太管用
 
怎么没有人回答呀?
我现在试了两种方法都不行:
方法1:
Printer.GetPrinter(ADevice, ADriver, APort, h);
if h = 0 then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(ADevice, ADriver, APort, h);
end;

hDM := F1Book.PrintDevMode;
pDM := PDEVMODE(GlobalLock(hDM));
StrCopy(pDM.dmDeviceName, ADevice);
这样设置完没有对F1Book起作用
方法2:
Printer.GetPrinter(ADevice, ADriver, APort, h);
if h = 0 then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(ADevice, ADriver, APort, h);
end;

F1Book.SetDevNames(ADriver, ADevice, APort);
当执行到最后这一句时,报系统错误,“TTF16.OCX地址访问错误”
所以这两种方法都不行,还请高人指点!
 
对F1book6.0
用FilePrintSetupDlg方法设定打印机
用FilePrint方法打印
 
把方法2改为:
var
pDevice : pChar;
pDriver : pChar;
pPort : pChar;
hDMode : THandle;
begin
GetMem(pDevice, cchDeviceName);
GetMem(pDriver, MAX_PATH);
GetMem(pPort, MAX_PATH);
Printer.GetPrinter(pDevice, pDriver, pPort, hDMode);
if lStrLen(pDriver) = 0 then
begin
GetProfileString('Devices', pDevice, '', pDriver, MAX_PATH);
pDriver[pos(',', pDriver) - 1] := #0;
end;
if lStrLen(pPort) = 0 then
begin
GetProfileString('Devices', pDevice, '', pPort, MAX_PATH);
lStrCpy(pPort, @pPort[lStrLen(pPort)+2]);
end;
F1Book1.SetDevNames(StrPas(pDevice),StrPas(pDevice),StrPas(pPort));
FreeMem(pDevice, cchDeviceName);
FreeMem(pDriver, MAX_PATH);
FreeMem(pPort, MAX_PATH);
end;
 
to ifiles:
不行啊,执行到F1Book1.SetDevNames时,
还是报系统错误,“TTF16.OCX地址访问错误”
 
to larryuan:
我试过D5下可以的,D6,D7没试过,我用的是F1Book6.0,你用的是哪个版本.
 
不可能啊!
我在F1下做,他都可以检测到局狱网上的打印机
 
后退
顶部