如何在主窗口创建后,利用菜单项点击方式显示已设置好的子窗口界面.(100分)

  • 主题发起人 主题发起人 zhongjuan
  • 开始时间 开始时间
Z

zhongjuan

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TcClientFrm.actRunParamExecute(Sender: TObject);
begin
if not Assigned(RunParamFrm) then
begin
RunParamFrm:=TRunParamFrm.Create(Self);
RunParamFrm.Parent :=cClientFrm;
RunParamFrm.Show;
end;
end;

为什么不会显示我的子窗口呢?当改成一般的窗口时,是会显示的呀.为什么子窗口不行?
 
procedure TcClientFrm.actRunParamExecute(Sender: TObject);
begin
if not Assigned(RunParamFrm) then
begin
RunParamFrm:=TRunParamFrm.Create(Self);
RunParamFrm.Parent :=cClientFrm;
RunParamFrm.Show;
end
else
begin
RunParamFrm.show;
end;
end;
 
没有用的....是不是一定要用DLL调用子窗口呀???真郁闷哦,帮忙!!!

我的子窗口是已定好的界面,是不是子窗口要自动生成呀???我先是让他不是自动的.是不是还要什么设置其他属性???
 
DLL中子窗体的ONCLOSE事件中写上:
Action := CaFree;
Form1 := Nil;
 
我的子窗口关闭时有ONCLOSE和ONDESTROY两个事件,而且我在DLL子窗口ONDESTROY时已经用了Form1 := Nil;难道一定要放在ONCLOSE中?
 
我用dll封装过窗体 也做过一些用到这些技术的项目
感觉问题不在
Action := CaFree;
Form1 := Nil;
应该是在 调用那一层的一个API函数上 FreeLibrary上 因为你的窗体
不是模态的 所以FreeLibrary不能直接跟在后面 楼主要么把这句话去掉(当然这样不好)
或者想办法通知主窗体 该子窗体已经关闭 然后再调用FreeLibrary方法
不知道说的是不是楼主要的内容
 
Action := CaFree;
Form1 := Nil;
 
问题: 那位大哥做过dll中的子窗体的 ( 积分: 200 )
分类: 控件 - 开发

来自: KervenLee, 时间: 2003-05-29 11:26:00, ID: 1905481
子form上的菜单与主form上的菜单融合后,菜单事件执行后,关掉主form出错啊
各位是如何解决的!

来自: KervenLee, 时间: 2003-05-29 11:26:00, ID: 1905485
最好给个例子
kevinhlj@msn.com

来自: 风雨燕归来, 时间: 2003-05-29 11:39:00, ID: 1905537
兄弟我也不是到处蹭饭吃的
只不过是正巧俺也有这个问题
烦有的兄弟给我也发一份
fengxiaobao@163.com

来自: liuri, 时间: 2003-05-29 11:40:00, ID: 1905539
没做过,进来听教

来自: thx1180, 时间: 2003-06-02 16:29:00, ID: 1917765
一个简单的dll窗体:
library Dllform;

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }

uses
SysUtils,
Classes,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

exports
TestDll;

begin
end.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
procedure FormDblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

procedure TestDll(nHwnd: THandle); stdcall;

implementation

{$R *.DFM}

procedure TestDll(nHwnd: THandle);
begin
Application.Handle := nHwnd;
with TForm1.Create(Application) do
try
ShowModal;
finally
Free;
end;
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
Close;
end;

end.

调用单元:
unit Unit_test;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

procedure TestDll(nHwnd: THandle); stdcall; external 'Dllform.dll';

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
TestDll(Application.Handle);
end;

end.


来自: KervenLee, 时间: 2003-06-04 7:59:00, ID: 1922702
我要带有菜单的,
你们试试?怎么解决啊?

来自: 魔鬼大师, 时间: 2003-06-21 23:03:00, ID: 1971427
子form没free

来自: jianl, 时间: 2003-07-03 20:25:00, ID: 2001078
又是一个退出报错的吗?99%是这个问题
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1772610

来自: wr960204, 时间: 2003-07-04 12:39:00, ID: 2002662
是李文凯吗?

来自: KervenLee, 时间: 2003-07-07 11:32:00, ID: 2008158
王锐,是我阿

来自: KervenLee, 时间: 2003-08-22 12:58:00, ID: 2127002
多人接受答案了。

问题讨论没有结束 ...
 
我写过的释放:
Action:=cafree;
Form1 := Nil;
动作里面的释放:
self.close;
(如果你写成Form1.close;异常就有问题了)
 
我觉得Avalon说的很对,你的窗体不是模态,FreeLibrary不能直接跟在后面
应该dll窗体关闭时想主窗体发送一个自定义消息,通知主窗体已经关闭可以调用FreeLibrary
 
好久没来了,谢谢大家的支持呀,特别是Avalon,你说的好像正是我写的程序那样子,那我试试看你的说法.
那通知主窗口用什么呢?MESSAGE?还是自己写一个???其实我在主窗口关闭时判断了是不是存在子窗口,如果还在我才关闭子窗口的,没想到会报错,我试试你的方法.

不知能否给个简单的例子.Avalon
 
我的邮箱 zhongjuan07@163.com
 
不要在DLL子窗体内释放窗体,发送信息的方式给调用主程序,用主程序释放窗体,然后再释放DLL
 
你是说主窗体里写他的FREE程序吗?
和调用DLL程序一样写在主程序那边吗?
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部