![]() |
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 :-) |
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?
|
AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
Huhu. Nur eigene Forms.
LG |
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.
|
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; |
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: ![]() |
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... |
AW: Hintergrundform abdunkeln, wenn andere Form Modal geöffnet wird?
Zitat:
|
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 :-) |
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"): ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 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