Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Bereits geöffnetes Fenster nach showmodal wieder aktivieren (https://www.delphipraxis.net/213030-bereits-geoeffnetes-fenster-nach-showmodal-wieder-aktivieren.html)

stalkingwolf 11. Mai 2023 12:55

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.

TBx 11. Mai 2023 13:23

AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren
 
Hmm, wiedersprichst Du Dir da nicht selbst?
Code:
ShowModal
stellt die Form ja exclusiv in den Vordergrund und zieht alle Eingaben auf sich.
Wenn Du mehrere Formen gleichzeitig bedienbar haben möchtest, darfst Du diese nur mit
Code:
Show
aufrufen.

stalkingwolf 11. Mai 2023 13:31

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.

DeddyH 11. Mai 2023 13:41

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.

himitsu 11. Mai 2023 13:57

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:
  //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);
Natürlich sollte man mit sowas aufpassen, damit man nichts durcheinander bringt.

Ich nutze sowas, um z.B. ein eventuell vorher bereits existierendes Log-Fenster weiterhin benutzbar zu lassen.

Blup 12. Mai 2023 07:28

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;

Uwe Raabe 12. Mai 2023 08:40

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.

stalkingwolf 12. Mai 2023 08:54

AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren
 
Zitat:

Zitat von himitsu (Beitrag 1522304)
Ich nutze sowas, um z.B. ein eventuell vorher bereits existierendes Log-Fenster weiterhin benutzbar zu lassen.

Danke. Jemand der es verstanden hat.

hat auch funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz