现在是用MDI来做窗口管理,效果见下图:我用的办法如下:
设定如下:
form1的formstyle设为:fsmdiform
form2的formstyle设为:fsmdichild下面是关键代码:
procedure TForm1.form21Click(Sender: TObject);
var
newform:Tform2;
i,flag:integer;
begin
flag:=0;
for i:=0 to form1.MDIChildCount do
begin
// 通过对窗体的标题判断窗体是否存在
if form1.MDIChildren[i].Caption='form2' then
begin
//如果窗体存在则恢复
SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
mdichildren[i].Show;
mdichildren[i].Enabled:=true;
//标识窗体已存在
flag:=1;
//退出循环
break;
end;
end;
//若窗体不存在,则创建
if flag=0 then
begin
newform:=Tform2.Create(application);
newform.Caption:='form2';
//把form2的caption加到combobox1的text中
combobox1.Items.Add('form2');
end;
end;//点击combobox1选择后,如果存在窗口和combobox1的文本相同,就恢复窗口
procedure TForm1.ComboBox1Change(Sender: TObject);
var
newform:Tform2;
i,flag:integer;
begin
flag:=0;
for i:=0 to form1.MDIChildCount do
begin
// 通过对combobox1.text判断窗体是否存在
if combobox1.Text='form2' then
begin
//如果窗体存在则恢复
SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
mdichildren[i].Show;
mdichildren[i].Enabled:=true;
//标识窗体已存在
flag:=1;
//Í退出循环
break;
end;
end;
end;现在的问题是,当form2.close时,combobox1.Items.Delete(integer)是一个整数:
如:combobox1.Items.Delete(2)删除的就是combobx.text下拉选择的第二行的文本。
只能通过取得combobox1.Itemsr的第二列的整数来删除,怎样取得像form3的integer我就不知道怎么做了。
希望大家帮我做个例子,谢谢!procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
form2:=nil;
combobox1.Items.Delete(?????);
end;
怎样确定form3的?????是第几个?
设定如下:
form1的formstyle设为:fsmdiform
form2的formstyle设为:fsmdichild下面是关键代码:
procedure TForm1.form21Click(Sender: TObject);
var
newform:Tform2;
i,flag:integer;
begin
flag:=0;
for i:=0 to form1.MDIChildCount do
begin
// 通过对窗体的标题判断窗体是否存在
if form1.MDIChildren[i].Caption='form2' then
begin
//如果窗体存在则恢复
SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
mdichildren[i].Show;
mdichildren[i].Enabled:=true;
//标识窗体已存在
flag:=1;
//退出循环
break;
end;
end;
//若窗体不存在,则创建
if flag=0 then
begin
newform:=Tform2.Create(application);
newform.Caption:='form2';
//把form2的caption加到combobox1的text中
combobox1.Items.Add('form2');
end;
end;//点击combobox1选择后,如果存在窗口和combobox1的文本相同,就恢复窗口
procedure TForm1.ComboBox1Change(Sender: TObject);
var
newform:Tform2;
i,flag:integer;
begin
flag:=0;
for i:=0 to form1.MDIChildCount do
begin
// 通过对combobox1.text判断窗体是否存在
if combobox1.Text='form2' then
begin
//如果窗体存在则恢复
SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
mdichildren[i].Show;
mdichildren[i].Enabled:=true;
//标识窗体已存在
flag:=1;
//Í退出循环
break;
end;
end;
end;现在的问题是,当form2.close时,combobox1.Items.Delete(integer)是一个整数:
如:combobox1.Items.Delete(2)删除的就是combobx.text下拉选择的第二行的文本。
只能通过取得combobox1.Itemsr的第二列的整数来删除,怎样取得像form3的integer我就不知道怎么做了。
希望大家帮我做个例子,谢谢!procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
form2:=nil;
combobox1.Items.Delete(?????);
end;
怎样确定form3的?????是第几个?
ComboBox1.Items.Delete(ComboBox1.ItemIndex);
//combobox1.Items.Add('form2'); 修改一下
Combobox1.Items.AddObject('form2', NewForm);
end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: Integer;
AEvent: TNotifyEvent;
begin
i := combobox1.items.IndexOfObject(Self);
if i > -1 then
begin
AEvent:=combobox1.OnChange;
combobox1.onChange := nil;
combobox1.items.Delete(i);
combobox1.onChange := AEvent;
end;
action:=cafree;
form2:=nil;
end;