mdi

mdi子窗口如何获得父窗口句柄

解决方案 »

  1.   

    直接use mainform
    然后在子窗体的事件中就直接可以访问mainform.handle,也可以用api,findwindow
    其实好像MDI父窗体和子窗体的关系与普通窗体和普通窗体的关系一样(猜测)
      

  2.   

    有没有不use别的unit或通过找caption的变通的方法?
    mdiForm.ParentWindow会总是nil的
      

  3.   

    取父窗体名称和句柄: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;
      

  4.   

    试试
    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);