線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:885
推到 Plurk!
推到 Facebook!

关于FORM和DLL的疑难问题

尚未結案
shenhj
一般會員


發表:5
回覆:2
積分:1
註冊:2002-11-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-28 08:39:41 IP:61.175.xxx.xxx 未訂閱
一主叫程序里有一个PANEL,调用DLL里面的FORM后,要求被调用的FORM在主叫程序的PANEL里,不能用MDIFORM和CHILDFORM -----DLL程序---- ..... function OpenForm(H:THandle):Tform;stdcall; begin result:=nil; application.Handle:=H; dllform_Form:=Tdllform_Form.Create(application); dllform_Form.Show; result:=dllform_form; end; exports OpenForm; ..... -----主叫程序----- ..... procedure TForm1.BitBtn1Click(Sender: TObject); var aform:tform; begin aform:=openform(application.Handle); aform.Parent:=panel1; aform.Top:=0; aform.Left:=0; aform.Show; showmessage(aform.Name); end; ..... 但是不能显示被调用FORM,且关闭主叫程序时显示错误信息.如果去掉aform.Parent:=panel1;则在主叫程序窗口外能够显示被调用FORM. 试了几天时间不能解决,请求高手帮助
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-28 15:56:53 IP:218.163.xxx.xxx 未訂閱
引言: 一主叫程序里有一个PANEL,调用DLL里面的FORM后,要求被调用的FORM在主叫程序的PANEL里,不能用MDIFORM和CHILDFORM -----DLL程序---- ..... function OpenForm(H:THandle):Tform;stdcall; begin result:=nil; application.Handle:=H; dllform_Form:=Tdllform_Form.Create(application); dllform_Form.Show; result:=dllform_form; end; exports OpenForm; ..... -----主叫程序----- ..... procedure TForm1.BitBtn1Click(Sender: TObject); var aform:tform; begin aform:=openform(application.Handle); aform.Parent:=panel1; aform.Top:=0; aform.Left:=0; aform.Show; showmessage(aform.Name); end; ..... 但是不能显示被调用FORM,且关闭主叫程序时显示错误信息.如果去掉aform.Parent:=panel1;则在主叫程序窗口外能够显示被调用FORM. 试了几天时间不能解决,请求高手帮助
我試的結果也是不行....就算你在 > 奇怪的是如果不用
------
星期一,二...無窮迴圈@@
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-28 16:47:01 IP:218.16.xxx.xxx 未訂閱
有沒試過 SetParent(aForm.Handle,Panel1.Handle);
shenhj
一般會員


發表:5
回覆:2
積分:1
註冊:2002-11-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-30 08:22:45 IP:61.175.xxx.xxx 未訂閱
你好,楼上的: 谢谢指点,但你的语句有错,我改用aform.setparent(panel1)语句仍然有错误,请教是否还有其它的办法,关键是如pgdennis所言,aform只是一闪,但在PANEL里显示不出来
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-30 08:52:51 IP:218.16.xxx.xxx 未訂閱
我說的是 Windows API 的 SetParent, 語法沒錯但由於 VCL TCustomForm 有同名的函數所以被 TCustomForm.SetParent 搶先了 在前面加 Unit Name 便可用但我不知在你的情況是否可行,但借得一試。 windows.SetParent(aForm.Handle,Panel1.Handle);
shenhj
一般會員


發表:5
回覆:2
積分:1
註冊:2002-11-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-31 09:08:39 IP:61.175.xxx.xxx 未訂閱
谢谢楼上的,我已自行解决,为什么在PANEL里不显示出来,只要加上 PANEL.UPDATECONTROLSTATE即可显示,但另有一个问题,如果被调用的 窗口内包含DBGRID,则DBGRID不能获得焦点,不能修改删除或调整COLUMN宽度, 调试时出现错误信息为DBGRID NO PARENT WINDOW,请教如何解决
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-06 08:53:25 IP:218.80.xxx.xxx 未訂閱
引言: 谢谢楼上的,我已自行解决,为什么在PANEL里不显示出来,只要加上 PANEL.UPDATECONTROLSTATE即可显示,但另有一个问题,如果被调用的 窗口内包含DBGRID,则DBGRID不能获得焦点,不能修改删除或调整COLUMN宽度, 调试时出现错误信息为DBGRID NO PARENT WINDOW,请教如何解决
焦点可以用windows.SetParent(aForm.Handle,Panel1.Handle); 取代Parent:=...解决 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
系統時間:2024-07-02 4:02:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!