2017年9月7日 星期四

QuickReport "Cannot assign a tfont to a tfont" 的錯誤狀況排除

方法一:修正QRPrntr.pas

procedure TQRPrinter.PreviewModal;
begin
  if assigned(FOnPreviewEvent) then
  begin
    try
      FOnPreviewEvent(Self)  //使用QRPreview可以正常操作, 不會出現cannot assign a tfont to a tfont
    finally
    end;
  end
  else
  begin
    with GlobalPreviewInterface.Create(nil) do
    try
      ShowModal(Self) //使用預設的Preview, 會出現 cannot assign a tfont to a tfont
    finally
      Free;
    end;
  end;
end;


QuickRep1.ShowProgress := False;  //QRPrntr.pas 會呼叫 TQRProgressForm, 一樣會出現 cannot assign a tfont to a tfont


QRRunDXE2.dpk 重新編譯, 將產出的bpl dcp檔, 複製到dpk的連結目錄
c:\windows\system32
C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\lib\win32


方法二:
主要是由于在创建Dll的Form时,将外部调用程序的Application、Screen和MainForm都传给了Dll并且将Dll中的这几个对 象都替换掉了的缘故,解决的办法是只需将外部调用程序的Application.Handle及MainForm传给Dll并替换掉Dll中的这两项值就 可以了,我已测试通过,可以试一试。如:
var
p: PLongInt;

{DllApp: TApplication Dll中的Application
 OutApp: TApplication 外部调用程序的Application
}
p:=@(DllApp.MainForm);
DllApp.Handle := OutApp.Handle;
p^:=LongInt(OutApp.MainForm);



轉貼至 http://bbs.csdn.net/topics/50408729

沒有留言:

張貼留言