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 14. Mai 2024
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von NoGAD
NoGAD

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

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

  Alt 30. Apr 2024, 17:28
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
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 30. Apr 2024, 17:37
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?
Michael Gasser

Geändert von Michael II (30. Apr 2024 um 17:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

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

  Alt 30. Apr 2024, 17:43
Huhu. Nur eigene Forms.

LG
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 30. Apr 2024, 17:49
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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

  Alt 30. Apr 2024, 23:31
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 1. Mai 2024, 02:02
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
Michael Gasser

Geändert von Michael II ( 1. Mai 2024 um 09:52 Uhr)
  Mit Zitat antworten Zitat
DaCoda

Registriert seit: 21. Jul 2006
Ort: Hamburg
143 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 2. Mai 2024, 20:29
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...
Debuggers don’t remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 2. Mai 2024, 20:37
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 .
Michael Gasser

Geändert von Michael II ( 2. Mai 2024 um 20:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

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

  Alt 11. Mai 2024, 12:19
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
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 11. Mai 2024, 22:13
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/
Grüße
TurboMagic
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 22:30 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