报错信息:
 Cannot assign a TFont to a TFont
......如何解决?

解决方案 »

  1.   

    不能赋值给TFONT类。没遇到过这样的问题,在程序里是否对TFONT操作?怎么写的?
      

  2.   

    代码帖出来看一下,直接赋值也不是不可以,例如:
      Memo1.Font := FontDialog1.Font;
      

  3.   

    你是要COPY TFONT的类型,
    Memo1.Font := FontDialog1.Font;
    是把引用(REFRENCE)位置改变了而已,
    不能达到,复制的效果.
    他的错是说.
    你不能有这么做.
    TFont1.Assign(TFont2);
    这句不通过,
    大概就是这个意思.
      

  4.   

    我在BCB中见过这个问题当时解决的办法是依次赋值比如:Font.Name := ...
         Font.Size := ...
      

  5.   

    代码?
    没代码!
    就是做个DLL调用的MDIChild窗体,在这个窗体里随便找个showhint设为true,写点hint
    run一下,现象就知道了!
      

  6.   


    function FontToOleFont(Font: TFont): Variant;
    var
      Temp: IFontDisp;
    begin
      GetOleFont(Font, Temp);
      Result := Temp;
    end;
    procedure OleFontToFont(const OleFont: Variant; Font: TFont);
    begin
      SetOleFont(Font, IUnknown(OleFont) as IFontDisp);
    end;function TOleControl.GetTFontProp(Index: Integer): TFont;
    var
      I: Integer;
    begin
      Result := nil;
      for I := 0 to FFonts.Count-1 do
        if FControlData^.FontIDs^[I] = Index then
        begin
          Result := TFont(FFonts[I]);
          if Result.FontAdapter = nil then
            SetOleFont(Result, GetIDispatchProp(Index) as IFontDisp);
        end;
    end;procedure TOleControl._SetTFontProp(Index: Integer; Value: TFont);
    begin
      SetTFontProp(Index, Value);
    end;你看去,这是源码,也就是DLL做为一个通用性的模块,所以不能只是按照Delphi中的给值或Assign,你要通过接口调用实行转化才可以实现。例子很多,可以参考Delphi 的 Demo,建议,在做这之前,先看一看TLB单元源码。
      

  7.   

    我没想着要给Font赋值之类的事儿!
    就是想showhint!!!!!!!!!
      

  8.   

    ihihonline(小小->沉沦中..........) :
    按照你的说法,那我在Delphi做的主程序调用delphi做的Dll应该是没问题才对!?
      

  9.   

    从前人的经验来看~
    这个问题是这样子出现的:传递了TScreen!
    但是我想要用到MDICount之类的属性又必须传递TScreen!
    怎么办?方案一:不传递TScreen找出一个可以“安全”替代的方法
    方案二:继续寻找方法解决......:(
      

  10.   

    第一个问题我遇到过,解决起来比较麻烦,我用的是自己写Assign过程来实现,用Delphi自己的不行!
      

  11.   

    再看前人经验:
    传递了TScreen又想ShowHint之类的操作
    就得主程序和Dll在Build前都要在Option中的Packages中勾选Runtime Packages这样就可以回避问题!为什么呢?!
      

  12.   

    在Project Options中将Packages下的Runtime Packages选中即可。
      

  13.   

    Memo1.Font := FontDialog1.Font;这是不行的你可以用FONTNAME
      

  14.   

    如果应用程序只向DLL发送TApplication而不发送TScreen对象就不会出现这样的问题。