2009-06-03 19 views

Antwort

0

Mehrere Fenster können nicht gleichzeitig den Fokus haben. Ich nehme an, Sie wollten sagen, dass Sie wollen, dass Ihre nicht-modale Kindform oben ist, wenn nur die MainForm den Fokus hat. Haben Sie versucht, die FormStyle-Eigenschaft des untergeordneten Formulars auf "fsStayOnTop" zu setzen?

+0

Will er nicht das genaue Gegenteil? Das Hauptformular sollte in der Lage sein, über andere Fenster zu wechseln, was Delphi 2007 und 2009 geändert hat. –

7

Mit Delphi 2007/2009 hat die VCL ihr Verhalten bezüglich des Elternteils eines Formulars geändert. In Delphi 1-2006 war das übergeordnete Anwendungsfenster (Application.Handle) das übergeordnete Element eines Formulars. In Delphi 2007/2009 ist das übergeordnete Element eines Formulars das Hauptformular und das übergeordnete Element des Hauptformulars ist der Desktop.

Wenn Sie dies ändern möchten, können Sie entweder die * .dpr Linie ändern Application.MainFormOnTaskbar-False was Sie zurück das alte Verhalten gibt, sondern auch macht Ihre Anwendung seltsam aussehen in Vista und Windows 7. Sie können auch die virtuellen CreateParams außer Kraft setzen Methode in all Ihren nicht-modalen untergeordneten Formularen und setzen Sie das Feld Params.WndParent auf den Desktop (HWND_DESKTOP) oder das noch vorhandene Application.Handle.

type 
    TMyChildForm = class(TForm) 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    end; 

procedure TForm1.CreateParams(var Params: TCreateParams); 
begin 
    inherited CreateParams(Params); 
    Params.WndParent := Application.Handle; 
end;