![]() |
Bereits geöffnetes Fenster nach showmodal wieder aktivieren
Moin,
ich weiß nicht wie ich es genau in den Betreff erklären kann, daher hier die genau Beschreibung. Hauptform öffnet Form A mit .show. Danach wird Form B in der Hauptform mit .showmodal geöffnet. Somit ist Form A nicht mehr benutzbar. Soweit auch gewollt. Nun würde ich gern das Form A aber wieder benutzbar wird nachdem Form B geöffnet ist. Gibt es dafür etwas? Ich habe probiert dann in formactivate oder formshow von der Form B die Form A zu schließen und erneut zu öffnen, aber sogar dann ist die Form nicht benutzbar. |
AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren
Hmm, wiedersprichst Du Dir da nicht selbst?
Code:
stellt die Form ja exclusiv in den Vordergrund und zieht alle Eingaben auf sich.
ShowModal
Wenn Du mehrere Formen gleichzeitig bedienbar haben möchtest, darfst Du diese nur mit
Code:
aufrufen.
Show
|
AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren
Das Programm hat mehr Formen.
Ich habe es nur simplifiziert mit 2 Formen und der Mainform. |
AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren
Das ist aber völlig unerheblich. ShowModal öffnet das Fenster ja modal, so dass kein anderes derselben Applikation bedienbar ist, bis es geschlossen wird.
|
AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren
ShowModal disabled alle aktuell sichtbaren/enableten Fenster (nicht in der VCL, sondern daran vorbei direkt im Windows, damit das VCL-Property unverändert bleibt), bevor es das eigene Fenster anzeigt.
ShowModal -> DisableTaskWindows+DoDisableWindow und EnableTaskWindows (Vcl.Forms)
Delphi-Quellcode:
Natürlich sollte man mit sowas aufpassen, damit man nichts durcheinander bringt.
//Form1.Enabled := False; // ja, erst False, weil das Property ist "eigentlich" True und das nachfolgende True würde dann nichts tun, weil "unverändert"
//Form1.Enabled := True; EnableWindow(Form1.Handle, True); Ich nutze sowas, um z.B. ein eventuell vorher bereits existierendes Log-Fenster weiterhin benutzbar zu lassen. |
AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren
So dürfte eigentlich nichts dagegen sprechen:
Delphi-Quellcode:
function ShowModalForm(AClass: TFormClass): Integer;
begin var lForm := TFormClass.Create(nil); try Result := lForm.ShowModal; finally lForm.Free; end; end; procedure ShowForm(AClass: TFormClass); begin {Formular bereits erzeugt und sichtbar ?} for var n := 0 to Application.ComponentCount - 1 do begin if Application.Components[n].ClassType = AClass then begin var lForm := Application.Components[n] as TFormClass; if not lForm.Visible then lForm.Show; lForm.BringToFront; Exit; end; end; {erzeugen und anzeigen} TFormClass.Create(Application).Show; end; |
AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren
Die Schleife über Application.Components bringt nur die Forms, die Application als Owner haben. Ich würde das stabilere Screen.Forms empfehlen, da jedes Form sich dort im InitializeNewForm anmeldet.
|
AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren
Zitat:
hat auch funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz