怎样动态创建一个窗体?

flyby 2000-08-21 02:28:00
我要做一个通讯的程序(类似于ICQ),每次点击一个好友,要动态生成一个聊天窗体。
我用一个数组:
myform:array[0..100]of Tformchat;
然后在点击事件中加入:
myform[i]:=TFormchat.creatnew(nil);
这样的话,创建的窗体不包括它的控件,只是一个空白窗体。应如何修改nil使创建时加入他的控件?
而且,这些生成的窗体如何使对话双方建立关系,窗体关闭时激发哪个事件?
望各位多多指教!!!
...全文
151 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyby 2000-08-21
  • 打赏
  • 举报
回复
谢谢alin,还有seul.
你们都是高手,很希望和你们成为朋友。
很希望在以后的学习中获得你们的帮助。
与我联系:Email:fanhuayi@263.net OICQ:7760126
jumphigh 2000-08-21
  • 打赏
  • 举报
回复
关注
Seoul 2000-08-21
  • 打赏
  • 举报
回复
alin 好快,
它有TLIST在处理窗体列表时是十分合适的,建立采纳.
Seoul 2000-08-21
  • 打赏
  • 举报
回复
1,不要用CreateNew,应是:
myform[i]:=TFormchat.create(nil);
2.你可在TFORMCHAT中设置一些参数和方法
在myform[i]:=TFormchat.create(nil);
:
MYFORM[i].SHOW;
之间进行调用来实现双方对话建立.
窗体关闭会激发OnClose事件.

alin 2000-08-21
  • 打赏
  • 举报
回复
何必用数组呢,用TLIST不好吗?
点击事件生成新窗口:

Var
WinList:TList;

procedure TMainForm.FormCreate(Sender :TObject);
Begin
WInList :=TList.Create;
end;


procedure TMainForm.Destry(Sender:TObject);
Var
Count:Integer;
Begin
for Count :=0 to WinList.Count -1 do
TFrmChat(WinList.Items[Count]).Close; //关闭所有创建窗口
WinList.Free;//释放List
end;

//新建
procedure NewICQWindow(Const ICQNumber:String);
Var
NewWindow:TfrmChat;
begin
NewWindow :=TfrmChat.Create(Application);
NewWindow.Caption :=ICQNumber; //ICQNumber应为唯一值
WinList.Add(NewWinow);
NewWindow.Show;
end;


procedure DeleteWindow(Const ICQNumber:String);
Var
Count:Integer;
Begin
for Count :=0 to WinList.Count -1 do
Begin
if TFrmChat(WinList.Items[Count]).Caption =ICQNumber then
Begin
TFrmChat(WinList.Items[Count]).Free;//释放指定窗口
WinList.Delete(Count);//删除列表中的值
end;
end;
end;

每个frmChat窗口最好有独立的ClientSocket,独立建 立 通信
frmChatClose事件发生时加入

DeleteWindow(Caption);//当前窗口ICQNumber号码

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧