AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Bereits geöffnetes Fenster nach showmodal wieder aktivieren

Bereits geöffnetes Fenster nach showmodal wieder aktivieren

Ein Thema von stalkingwolf · begonnen am 11. Mai 2023 · letzter Beitrag vom 12. Mai 2023
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
516 Beiträge
 
#1

Bereits geöffnetes Fenster nach showmodal wieder aktivieren

  Alt 11. Mai 2023, 13:55
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.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.873 Beiträge
 
Delphi 12 Athens
 
#2

AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren

  Alt 11. Mai 2023, 14:23
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.
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP

Geändert von TBx (11. Mai 2023 um 14:42 Uhr)
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
516 Beiträge
 
#3

AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren

  Alt 11. Mai 2023, 14:31
Das Programm hat mehr Formen.
Ich habe es nur simplifiziert mit 2 Formen und der Mainform.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.532 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren

  Alt 11. Mai 2023, 14:41
Das ist aber völlig unerheblich. ShowModal öffnet das Fenster ja modal, so dass kein anderes derselben Applikation bedienbar ist, bis es geschlossen wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
42.982 Beiträge
 
Delphi 12 Athens
 
#5

AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren

  Alt 11. Mai 2023, 14:57
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Mai 2023 um 15:18 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren

  Alt 12. Mai 2023, 08:28
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;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.927 Beiträge
 
Delphi 12 Athens
 
#7

AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren

  Alt 12. Mai 2023, 09:40
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
516 Beiträge
 
#8

AW: Bereits geöffnetes Fenster nach showmodal wieder aktivieren

  Alt 12. Mai 2023, 09:54
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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