Aktuell in XE, weiß nicht, ob es auch in XE 10.2 noch so ist, drum frag ich mal, ob jemand das kennt.
Also, wenn in Windows 7+ eine Anwendung kurz hängt, dann ersetzt Windows ja das Fenster.
Dabei landet das aktive ChildWindow aber hinter dem Hauptfenster, obwohl es eigentlich wegen PopupParent=MainForm und pmExplicit immer davor sein sollte.
Self.BringToFront, SetForegroundWindow und Dergleichen ... nichts hilft, um es anschließend wieder vor zu holen.
Hat noch wer derartige Proleme mit MultiForm-Anwendungen?
(bei uns sind
MDI und mehrere freifliegende Einzelforms gemischt, welche aber eigentlich immer vor der MainForm liegen sollten)
Jetzt ist mir aber aufgefallen, dass ein erneutes setzen des PopupParent das Problem löst.
Das war der letzte Versuch, der endlich funktionierte
Delphi-Quellcode:
if Self.FormStyle <> fsMDIForm then begin
SetForegroundWindow(Self.Handle);
Self.PopupParent := nil;
Self.PopupParent := Application.MainForm;
end else
SetForegroundWindow(Application.MainFormHandle);
Application.BringToFront;
Self.BringToFront;
und reduziert auf nur noch diese eine Zeile
Self.PopupParent := Application.MainForm;
ging es immernoch.
Da aber
Delphi-Quellcode:
procedure TCustomForm.set_PopupParent(Value: TCustomForm);
begin
if (Value <> FPopupParent) and ... then
würde es ja bedeuten, das irgendwo PopupParent/FPopupParent in der
VCL richtig gelöscht würde
und nicht nur das Windows-Control (HWND) den Zustand vergisst, denn sonst würde ja eine erneute Zuweisung "garnichts" machen.