Einzelnen Beitrag anzeigen

Patito

Registriert seit: 8. Sep 2006
108 Beiträge
 
#3

AW: Fenster ungefragt immer vor Hauptfenster - warum?

  Alt 19. Jul 2012, 09:31
Alles (alle VCL-Forms) ist "standardmäßig" immer vor der Hauptform ... ist schon seit einer Weile so, also mindestens seit D2009. (in D7 war's noch nicht)
Stellt sich die Frage was "der Hauptform" ist. Ich habe hier eine Anwendung, die beim Start 4 (gleichberechtigte) Fenster anzeigt...

Die Historie von dem Problem war glaube ich folgende:
1) Alle Delphi-Formulare hatten früher als zOrder-Parent das Application.Handle.
2) Windows hat mit mit einem XP-Servicepack das zOrder-Verhalten geändert
Bei zwei Fenstern mit gleichem zOrder-Parent kann sich die Reihenfolge auf dem Bildschirm ändern.
(Ein modaler Dialog kann also auch mal hinter einem anderes Formular wandern)...

-> die VCL, insbesondere Dialogs.pas hat also nicht mehr recht funktioniert.
Seither muss man die Handles der Parent-Formulare selber verwalten.

In D7 verwende ich als Fix für die z-Order Probleme oft folgendes:
Delphi-Quellcode:
procedure TMyForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  if (Parent <> nil) or (ParentWindow <> 0) then
    Exit; // must not mess with wndparent if form is embedded

  if Assigned(Owner) and (Owner is TWinControl) then
    Params.WndParent := TWinControl(Owner).Handle
  else if Assigned(Screen.ActiveForm) then
    Params.WndParent := Screen.ActiveForm.Handle;
end;
Der Code sagt dem Formular, dass es sich über den Owner hängen soll, und wenn kein Owner da ist hängt es sich über das gerade aktive Formular (falls eins da ist)).
  Mit Zitat antworten Zitat