Dll中创建的子窗口Hint失效的问题 ( 积分: 100 )

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

METALLEE

Unregistered / Unconfirmed
GUEST, unregistred user!
在Dll中创建子窗口后我发现用ShowModal显示的窗体Hint可以正常出现,用Show方式显示的窗体Hint失效 如何处理?
 
在Dll中创建子窗口后我发现用ShowModal显示的窗体Hint可以正常出现,用Show方式显示的窗体Hint失效 如何处理?
 
听说,仅仅是听说
要把EXE中的screen对象传到DLL中,并赋值给DLL中的screen对象
 
已经传过了,application也传过去了,没用[:(]
 
窗体类型 为 bsDialog试试
 
试了 没用[:(][:(][:(]
 
不单单这样,DOCKING也不行,先听听!
 
唉 查了一天 没头绪。有过插件开发经验的高手们,指条道
 
你查查TWinHint所在的单元是不是有全局变量,如果有的话就要注意了,很多时候就是这些全局变量作怪的,因为在dll中有一份,可能主程序中也有一份。而dll中大部分是为空的,最好把应用程序中的相应值传过来,或者深度复制过来,就像一般delphi中dll要传递Application和Screen对象一样,这样才可能在EXE和DLL中统一使用同一个对象。
注:dll中Application和Screen对象初始化是为空的!!
 
to 晶晶
一看你就知道你做过这方面的开发,你说的问题我也发现了,dll启动后Application是空的。你关于hint的建议我一会看看,不过希望不大,我觉得问题还是出现在application上面。
我发现如果不覆盖Dll application的话Show出来的form hint显示完好,但是程序结束会出错。把application覆盖了程序不会出错,但是show 的form hint 失效``````
 
Project->Option->packages选中build with runtime package,
底线选中vcl包就可以,如果装了其他控件也需要加入。
 
问题解决了,告诉大家,如果实在没有解决,我帮助你.ok.
 
还没解决呢 要是解决了我肯定要揭帖的,楼上的兄弟有办法吗?
 
这是VCL设计上的问题,带BPL可以简单解决,按glbboy的去干活!否则放弃VCL,自己
用API创建界面,像C那样,不过很惨,其它传来传去的方法就怕挂一漏万。
 
build with runtime package的方法我已经试过了,在dll里面非ShowModal界面仍旧无法相应OnMouseEnter和OnMouseLeave事件,哎.到底有没有办法呢?[:(][:(]
 
还要传HintWindowClass: THintWindowClass,不然使用Hint会出错
我的一段代码如下:

var
FrmAlarmLog: TFrmAlarmLog;

{ 2005-11-07 17:32 by muhx}
procedure ShowAlarmLog(AApplication: TApplication
AScreen: TScreen
AHintWindowClass:
THintWindowClass)
stdcall;
var
tmpLongInt: PLongint;
begin
Application := AApplication;
Screen := AScreen;
HintWindowClass := AHintWindowClass;
tmpLongInt := @(Application.MainForm);
tmpLongInt^ := Longint(AApplication.MainForm);
FrmAlarmLog := TFrmAlarmLog.Create(Application.MainForm);
try
FrmAlarmLog.Show;
except
FrmAlarmLog.Free;
end;
end;

{ 2005-11-07 17:32 by muhx }
procedure CloseAlarmLog;
begin
if FrmAlarmLog <> nil then
FreeAndNil(FrmAlarmLog);
end;
 
算了,估计这个问题在这里是解决不了了,我再想想别的办法 揭帖,谢谢大家
 
多人接受答案了。
 
后退
顶部