还是DLL问题,现在动态连接库存中使用标准TMianMenu控件,遇到莫名的问题,不知那位遇到过。(200分)

  • 主题发起人 主题发起人 mxchao
  • 开始时间 开始时间
M

mxchao

Unregistered / Unconfirmed
GUEST, unregistred user!
动态连接库中创建MDI窗体,在MDIChild窗体中没有使用TMainMenu控件,使用了其他控件<br>MDIChild可以正常工作,但在MDIchild窗体中创建其他Normal窗体,在Normal窗体中使用<br>TMainMenu控件则在一定条件下出错!<br>&nbsp;出错条件:<br>&nbsp; 1.Normal窗体中使用TmainMenu控件,并使用了TimageList,指定Menu使用图标。如果不<br>使用TimageList指定图标不会出错。<br>&nbsp; 2.动态连接库入口函数中指定Screen属性,代码如下:<br>&nbsp; <br>procedure ShowMdiForm(MDIForm: String; MainApplication:TApplication;ScreenHandle: TScreen); Export;<br>begin<br>&nbsp; //功能模块窗体<br>&nbsp; if UpperCase(MDIForm) = UpperCase('dlg_HourRatCostDetail') then if (not Assigned(dlg_HourRatCostDetail)) then<br>&nbsp; begin<br>&nbsp; &nbsp; Application :=MainApplication;<br>&nbsp; &nbsp; Screen := ScreenHandle[red];//这儿[/red]<br>&nbsp; &nbsp; dlg_HourRatCostDetail := Tdlg_HourRatCostDetail.Create(Application);<br>&nbsp; end<br>end;<br>&nbsp; 如果删掉Screen := ScreenHandle,则问题不会出现。<br>&nbsp; <br>&nbsp; 这两个条件要同时满足将出现问题,在创建Normal 窗体时出错,提示为:<br>&nbsp; cannot assign a TFont to a TFont<br>&nbsp; 这个提示信息前一个阶段曾经碰到过,是TStatusBar控件,如果在Dll子窗体中使用了<br>这个控件 ,并指定了Screen,将出现这个错误,之后将这个控件进行了一下修改,问题<br>解决。<br>&nbsp; 但对于TMainMenu控件,跟踪之后发现错误是在执行ApI函数时出错,没法子了!<br>&nbsp; 不知那位碰到过,或者在DLL使用了Menu + ImageList 以及TStatusbar。
 
在TFont类中,Assign函数的第一句<br>if Source is TFont then<br>判断永远为false,将不会被执行赋值,导致后边错误。<br><br>出问题时的条件是使用<br>Font := Screen.HintFont; 或者类似的Screen的Font属性。<br>可以在Dll任意一个窗体中测试,将会出现相同问题。<br>但在Dll窗体代码中执行<br>if Screen.HintFont is TFont then 则为True,有些郁闷!<br>没想明白为什么!<br>是不是线程问题!<br>
 
后退
顶部