取父窗体名称和句柄:procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to Application.ComponentCount - 1 do begin if not (Application.Components[i] is TForm) then Continue; if TForm(Application.Components[i]).FormStyle = fsMDIForm then begin ShowMessage(Application.Components[i].Name); // 父窗口名称 ShowMessage(IntToStr(TForm(Application.Components[i]).Handle)); // 父窗口句柄 Exit; end; end; end;
试试 if midForm.HasParent then begin fHwnd := GetWindowLong(midForm.Handle,GWL_HWNDPARENT); //API //fHwnd := midForm.Parent.Handle; //fHwnd := mdiForm.ParentWindow; end;通过Caption可以用API函数 fHwnd := FindWindow('TForm', your form's caption); //fHwnd := FindWindow(nil, your form's caption);
然后在子窗体的事件中就直接可以访问mainform.handle,也可以用api,findwindow
其实好像MDI父窗体和子窗体的关系与普通窗体和普通窗体的关系一样(猜测)
mdiForm.ParentWindow会总是nil的
var
i: Integer;
begin
for i := 0 to Application.ComponentCount - 1 do
begin
if not (Application.Components[i] is TForm) then Continue;
if TForm(Application.Components[i]).FormStyle = fsMDIForm then
begin
ShowMessage(Application.Components[i].Name); // 父窗口名称
ShowMessage(IntToStr(TForm(Application.Components[i]).Handle));
// 父窗口句柄
Exit;
end;
end;
end;
if midForm.HasParent then
begin
fHwnd := GetWindowLong(midForm.Handle,GWL_HWNDPARENT); //API
//fHwnd := midForm.Parent.Handle;
//fHwnd := mdiForm.ParentWindow;
end;通过Caption可以用API函数
fHwnd := FindWindow('TForm', your form's caption);
//fHwnd := FindWindow(nil, your form's caption);