畅享博客 > 安仕达信息化分享 > DELPHI经验技巧 > XLSReadWriteII2 控件不稳定的原因
2008-7-22 22:35:05

XLSReadWriteII2 控件不稳定的原因

发现这个控件 对打印机的设置很敏感 在我这个机器上 该控件表现的非常不稳定 经常打不开项目 或者连累DELPHI崩溃。

后来跟踪代码 发现了真正原因 我的机器上定义了一个不存在的网络打印机 所以导致这样 我安装了一个本地的1600K 驱动以后 就一切正常了。

具体的原因 在在控件初始化的时候 调了下面这段代码

function TXLSReadWriteII2.GetDEVMODE: PDeviceModeW;
var
 
hDevMode,FPrinterHandle: THandle;
 
P: PDeviceModeW;
 
ADevice: PWideChar;
 
StubDevMode: TDeviceModeW;
 
sPrinter: string;
begin
 
if Printer.PrinterIndex < 0 then
   
FDevMode := Nil
 
else if FDevMode = Nil then begin
   
sPrinter := Printer.Printers[Printer.PrinterIndex];
   
if OpenPrinter(PChar(sPrinter),FPrinterHandle, nil) then begin
     
GetMem(ADevice,64);
     
StringToWideChar(sPrinter,ADevice,64);
     
hDevMode := GlobalAlloc(GHND,DocumentPropertiesW(0, FPrinterHandle, ADevice, StubDevMode, StubDevMode, 0));
     
if hDevMode <> 0 then begin
       
P := GlobalLock(hDevMode);
       
if DocumentPropertiesW(0, FPrinterHandle, ADevice, P^, P^, DM_OUT_BUFFER) < 0 then
         
FDevMode := Nil
       
else begin
         
GetMem(FDevMode,P.dmSize + P.dmDriverExtra);
         
Move(P^,FDevMode^,P.dmSize + P.dmDriverExtra);
       
end;
       
GlobalUnlock(hDevMode);
       
GlobalFree(hDevMode);
     
end;
   
end;
 
end;
 
Result := FDevMode;
end;


推荐到鲜果:

评论

您正在以 匿名用户 的身份发表评论  快速登录
(不得超过 50 个汉字)
       看不清,换一个
提示消息
(输入完内容可以直接按Ctrl+Enter提交)