Delphi-PRAXiS
Seite 1 von 3  1 23      

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/)
-   -   Delphi Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird? (https://www.delphipraxis.net/215064-hintergrundform-abdunkeln-wenn-andere-form-modal-geoeffnet-wird.html)

NoGAD 30. Apr 2024 16:28

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

in den aktuellen Delphiversionen gibt es Alphablend, um eine Form und die Komponenten durchsichtig zu machen.


Ich suche eine Möglichkeit, um den Hintergrund abzudunkeln, wenn eine andere Form Modal geöffnet wird. Kann mir bitte jemand einen Tipp geben?

LG Mathias :-)

Michael II 30. Apr 2024 16:37

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
 
Den ganzen Dekstop (maximiertes randloses Form mit Alphablend irgendwas anzeigen, z Order direkt hinter deinem modalen Fenster) - und wenn jemand dort klickt, Klick weitergeben und Verdunkelung aufheben (?)) abdunkeln oder nur deine anderen Appformulare?

NoGAD 30. Apr 2024 16:43

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
 
Huhu. Nur eigene Forms.

LG

jaenicke 30. Apr 2024 16:49

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
 
Ich habe dafür ein halbtransparentes Fenster verwendet, das ein ShowModal mit zwei Formularen als Parameter hat. Das erste wird zur Positionierung verwendet, das zweite zeigt es dann nach der Anzeige ebenfalls mit ShowModal an.

Uwe Raabe 30. Apr 2024 22:31

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
 
Ich hatte das mal auf diese Weise implementiert:
Delphi-Quellcode:
function ShowModalDimmed(Form: TForm; ParentForm: TForm = nil; Centered: Boolean = true; SpaceBelow: Integer = 0):
    TModalResult;
var
  Back: TForm;
  below: Integer;
  P: TPoint;
begin
  Back := TForm.Create(nil);
  try
    Back.Position := poDesigned;
    Back.BorderStyle := bsNone;
    Back.AlphaBlend := true;
    Back.AlphaBlendValue := 192;
    Back.Color := clBlack;
    if ParentForm <> nil then
      Back.SetBounds(ParentForm.Left, ParentForm.Top, ParentForm.Width, ParentForm.Height)
    else
      Back.SetBounds(0, 0, Screen.Width, Screen.Height);
    Back.Show;
    if Centered then begin
      P := TPoint.Create((Back.ClientWidth - Form.Width) div 2, (Back.ClientHeight - Form.Height) div 2);
      below := Back.ClientHeight - (P.Y + Form.Height);
      if below < SpaceBelow then begin
        P.Y := P.Y - (SpaceBelow - below);
        if P.Y < 0 then
          P.Y := 0;
      end;
      P := Back.ClientToScreen(P);
      Form.Position := poDesigned;
      Form.Left := P.X;
      Form.Top := P.Y;
    end;
    result := Form.ShowModal;
    Back.Hide;
  finally
    Back.Free;
  end;
end;

Michael II 1. Mai 2024 01:02

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
 
Das Dimmen mittels einer deckungsgleichen, leeren Form (wie von @jaenicke vorgeschlagen) sieht etwas ansprechender aus.

Falls die App gelegentlich mehrere Fenster anzeigt, wäre es wahrscheinlich am besten, eine TFormMitDim von TForm abzuleiten. Wenn dann ein Fenster modal angezeigt werden soll, werden alle zu dimmenden Fenster informiert.

Ich habe noch eine Frage: Die Form, die dimmt, kann auch farbig sein, aber die Titelleiste der Form wird (Methode deckungsgleiche Form) nicht eingefärbt.

Man kann eine Windows-Region (HRGN) definieren, die genau die Abmessungen der zu dimmenden Form hat, und dann einem ‘Panelwindow’ oder Ähnlichem (einer Delphi-Form mit BorderStyle=bsNone) diese Region zuordnen. (Zum Beispiel Uwes Dimmform.) Ich habe mit GetWindowRgn die Region des zu dimmenden Fensters ausgelesen und mit SetWindowRgn dem ‘Dimmfenster’ zugeordnet. Es wäre ein Zweizeiler, aber es will nicht funktionieren: Das Fenster wird mit nicht abgerundeten Ecken gezeichnet.

Man könnte über den Umweg ‘Screenshot(s) des Fensters’ eine HRGN ‘berechnen’ und dem Dimmfenster diese Region zuordnen. Gibt es einen besseren Weg?
Evt. könnte dies helfen: https://learn.microsoft.com/en-us/wi...ounded-corners

DaCoda 2. Mai 2024 19:29

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
 
Die Function von Uwe Raabe finde ich gar nicht so schlecht, aber müsste (zumindest bei Windows 11) etwas angepasst werden, weil
der abgedunkelte Bereich größer ist wie das eigentliche Form (wegen dem Schatten und so, der zur Fenstergröße hinzu kommt)

Aber grundsätzlich sehr nützliche Sache, vielen Dank Uwe...

Michael II 2. Mai 2024 19:37

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

Zitat von DaCoda (Beitrag 1536317)
Die Function von Uwe Raabe finde ich gar nicht so schlecht, aber müsste (zumindest bei Windows 11) etwas angepasst werden, weil
der abgedunkelte Bereich größer ist wie das eigentliche Form (wegen dem Schatten und so, der zur Fenstergröße hinzu kommt)

Aber grundsätzlich sehr nützliche Sache, vielen Dank Uwe...

Für Windows 11 legst du einfach wie j vorschlägt eine typgleiche Form (ohne Titel, ohne "Inhalt") darüber mit Alphablend=true und AlphablendValue nicht 255, damit's durchscheint. Und der Form kannst du bei Bedarf auch noch eine Farbe spendieren. Dann sieht's in Windows 11 nicht so aus, als hätte jemand Akten geschwärzt ;-).

NoGAD 11. Mai 2024 11:19

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
 
Hallo an euch alle.

Vielen Dank für die Ideen, ich war verhindert und konnte die Antworten erst jetzt abrufen.

Die Idee von Sebastian gefällt mir, auch wenn es den Anschein von "Frickelei" hat ;-)

Die Umsetzung von Uwe ist, wenn ich es richtig gelesen habe, eine ähnliche Variante - jedoch variabel gestaltet.

LG und ein schönes Wochenende :-)

TurboMagic 11. Mai 2024 21:13

AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
 
Hier ist auch noch eine Idee (geht in ähnliche Richtungen wie beschrieben,
nur evtl. mit anderer "Aktivierung"):

http://zarko-gajic.iz.hr/dim-out-the...-is-displayed/


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 Uhr.
Seite 1 von 3  1 23      

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