AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
Thema durchsuchen
Ansicht
Themen-Optionen

Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

Ein Thema von NoGAD · begonnen am 30. Apr 2024 · letzter Beitrag vom 27. Mai 2025
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

  Alt 13. Mai 2024, 15:42
Danke. Das ist auch eine sehr schöne Variante.
Sehr gerne!
Leider verstehe ich nicht, warum die Fensterfarbe immer in einem Grauton erscheint, selbst wenn ich ... clBlack
Weil clBlack keine SystemFarbe ist.
Du kannst von 0 bis 30 oder verfolge wo COLOR_WINDOW definiert ist um vielleicht noch andere Möglichkeiten zu finden. Im jetzigen zustand muss es eine Systemfarbe sein.
Zum "abdunkeln" wird sicherlich eine passen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

  Alt 14. Mai 2024, 06:30
Danke für die Erklärung.

LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
77 Beiträge
 
#23

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

  Alt 26. Mai 2025, 10:24
Auch wenn der Thread schon etwas älter ist...
...ich hänge mich mal an

Die Lösungen hier im Thread gehen immer davon aus, dass man das abdunkelnde Fenster selber erzeugt und zerstört, weil eine andere Form von der eigenen aus ShowModal angezeigt wird.

Ich möchte die Logik gerne umdrehen - d.h. ich möchte in meiner Form darauf reagieren, wenn irgendein anderer Dialog in meiner Applikation von irgendwoher ShowModal gesetzt wird.
Wenn das erkannt wird, soll die eigene Form abgedunkelt werden (d.h. das abdunkelnde Zusatz-Fenster erzeugt / angezeigt werden).

Aber wie erkenne ich das am Besten (ohne total kompliziert zu werden)?
Über Application.OnModalBegin?
Ist dort sicher, dass der Sender das Fenster ist, das modal geschaltet wird/wurde?
Und wie leite ich das dann an alle meine sichtbaren Forms weiter (sind alle von einer Basisklasse abgeleitet, d.h. prinzipiell machbar)?
Sollte auch funktionieren, wenn ein Standard-Dialog (z.B. MessageBox) modal aufgeschaltet wurde...

EDIT: inzwischen habe ich herausgefunden, dass die Verwendung des TMessageManager gut geeignet wäre - aber ich bin noch bei Delphi7 und da gibt's dennoch nicht - und auch keine 3rdParty Implementierung eines EventBus o.ä. , oder?

Geändert von Bodenseematze (26. Mai 2025 um 11:11 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
721 Beiträge
 
Delphi 12 Athens
 
#24

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

  Alt 26. Mai 2025, 12:49
Try a handler for the Screen.OnActiveFormchange event, that may work for your purpose.
Peter Below
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
77 Beiträge
 
#25

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

  Alt 26. Mai 2025, 15:15
Try a handler for the Screen.OnActiveFormchange event, that may work for your purpose.
I tried this - but it has two problems...
Code:
procedure  TMyForm.ScreenActiveFormChange(
                                    sender_              : TObject );
var
   frmActive        : TCustomForm;
   bIsModal         : Boolean;
   ctrlForeground   : TWinControl;
begin
   ctrlForeground         := FindControl(
                                    Windows.GetForegroundWindow() );

   frmActive              := nil;
   bIsModal               := false;
   if ( Assigned(ctrlForeground) and
        (ctrlForeground is TCustomForm) ) then begin
      frmActive           := TCustomForm( ctrlForeground );
      bIsModal            := ( fsModal in frmActive.FormState );
   end;
...
1.) how do I get if the foreground window is modal?
I find the correct foreground Form in the above code snippet but the FormState never contains fsModal - only fsVisible...
2.) the procedure will not be called if a dialog pops up (e.g. a TPrinterSetupDialog)

EDIT: I even tried to use Screen.OnActiveControlChange - with same result (will also not be called if the modal foreground dialog e.g. is a TPrinterSetupDialog).

Geändert von Bodenseematze (26. Mai 2025 um 15:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

  Alt 26. Mai 2025, 16:05
BTW, warum plötzlich in Englisch?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
77 Beiträge
 
#27

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

  Alt 27. Mai 2025, 06:59
BTW, warum plötzlich in Englisch?
Weil peterbelow auf Englisch geantwortet hatte und ich wollte, dass er meine Rückfragen versteht...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

  Alt 27. Mai 2025, 08:34
Die Frage ging auch eigentlich an Peter, der hier ja schon so einige Posts in Deutsch abgesetzt hat.

Ich muss allerdings zugeben, dass mir das auch gelegentlich passiert. Man verliert manchmal den Kontext, wenn man in beiden Foren gleichzeitig unterwegs ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
721 Beiträge
 
Delphi 12 Athens
 
#29

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?

  Alt 27. Mai 2025, 09:49
Die Frage ging auch eigentlich an Peter, der hier ja schon so einige Posts in Deutsch abgesetzt hat.

Ich muss allerdings zugeben, dass mir das auch gelegentlich passiert. Man verliert manchmal den Kontext, wenn man in beiden Foren gleichzeitig unterwegs ist.
Genau das ist mir passiert, war vorher gerade im englischen Forum unterwegs. Man wird halt nicht jünger...
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 08:18 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