AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey und OnModalBegin/OnModalEnd

Ein Thema von sintronic86 · begonnen am 4. Mai 2017 · letzter Beitrag vom 6. Mai 2017
Antwort Antwort
sintronic86

Registriert seit: 7. Dez 2009
Ort: Barsinghausen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Firemonkey und OnModalBegin/OnModalEnd

  Alt 4. Mai 2017, 09:03
Hallo Community,

wieder einmal habe ich eine Frage zum Thema Firemonkey.

Ich nutze schon seit langem die TApplicationEvents in der VCL. Dort benutzer ich immer die Events OnModalBegin und OnModalEnd um das Fenster, welches ein anderes aufruft, abzudunkeln. Ich finde diesen Effekt echt super.

Nun habe ich ein Firemonkey-Projekt und möchte dort den selben Effekt erziehlen.

Leider gibt es dort (scheinbar) weder TApplicationEvents noch eine andere Möglichkeit auf die oben beschriebenen Events zu zugreifen.

Hat einer von euch eine Idee, wie man das trotzdem bewerkstelligen kann?


Vielen Dank und beste Grüße
Björn
Björn
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.112 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Firemonkey und OnModalBegin/OnModalEnd

  Alt 4. Mai 2017, 12:00
Ich habe für genau den gleichen Effekt immer das ShowModal() meiner Formular-Basisklasse überschrieben, die Events habe ich nie gebraucht.

Edit: Oh, FMX.Forms.TCommonCustomForm.ShowModal() ist leider überhaupt nicht virtuell. Also auch keine Option.

PS: Auf FMX wäre vielleicht der TFrameStand eine Option. Damit hätte man zwar kein zweites Fenster, aber könnte "neuen Content" mit Ablendeffekt vor das Hauptformular legen.

Geändert von Der schöne Günther ( 4. Mai 2017 um 12:06 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.932 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firemonkey und OnModalBegin/OnModalEnd

  Alt 4. Mai 2017, 12:29
Bei Fmx gibts kein Modal, dann schmeisst dich das Phone wieder raus.

Deshalb sollte man das über die Varianten mit anonymous Proc abwickeln.

Rollo
  Mit Zitat antworten Zitat
sintronic86

Registriert seit: 7. Dez 2009
Ort: Barsinghausen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Firemonkey und OnModalBegin/OnModalEnd

  Alt 4. Mai 2017, 15:56
@Rollo62:
Da es sich bei meinem Projekt um eine reine Windows-Anwendung handelt, sollte das prinzipiell kein Problem sein!
Kannst du deine Links etwas näher erläutern? Mir ist gerade nicht ganz bewusst, wie Dialogs.MessageDialog mit dem Abdunkel-Effekt bei einem ShowModal -Aufruf einer Form zu tun hat!
Björn
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.112 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Firemonkey und OnModalBegin/OnModalEnd

  Alt 4. Mai 2017, 16:21
Eine Notlösung wäre ein TRectangle mit Align = Client und Opacity = 0,75 aufs Formular zu legen. Und ganz in den Hintergrund zu schicken.

Abblenden ginge dann ungefähr so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   Rectangle1.BringToFront();
   Rectangle1.Fill.Kind := TBrushKind.Solid;
   Rectangle1.Fill.Color := TAlphaColors.Black;
   try
      anderesFormular.ShowModal();
   finally
      Rectangle1.Fill.Kind := TBrushKind.None;
      Rectangle1.SendToBack();
   end;
end;
Eigentlich wären die FMX-Effekte dafür super gedacht, aber die funktionieren anscheinend nicht wenn man sie direkt auf ein Formular setzt.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Firemonkey und OnModalBegin/OnModalEnd

  Alt 4. Mai 2017, 18:00
Ich glaube dem Thread-Ersteller geht es weniger um die Frage, wie man das Formular abblendet, sondern, wie man an die Information gelangt, wann ein eigenes modales Formular angezeigt wird.

Es gibt zwar in der Tat kein OnModalBegin/OnModalEnd unter FiremMonkey, aber FMX arbeitet auch selber mit dem TMessageManager, um im System bestimmte Botschaften zu senden und darauf reagieren zu können.

Da kannst Du Dich einfach einklinken, im Oncreate-Event der Mainform nimmst Du auf:

Delphi-Quellcode:
 TMessageManager.DefaultManager.SubscribeToMessage (TFormBeforeShownMessage,
   procedure (const sender: TObject; const M: TMessage)
   begin
     // Diese Prozedur wird nun immer aufgerufen, wenn eine Form im Programm Modal angezeigt wird
     FadeTransitionEffect1.Enabled :=True; // z.B. ein TLayout als Parent in der Mainform, dass diesen Effekt hat
   end);
Die Unit System.Messaging wird benötigt.

Den Effekt kannt Du dann im Activate-Event der Mainform wieder ausschalten (oder Du schreibst Dich zusätzlich mit dem Message-Manager in die Activate-Botschaft ein).

Hinweis 1: Habe hier den DefaultMessage-Manager verwendet, bei Bedarf kann man einem eigenen erstellen ([Eigenwerbung an: ]falls Dir das Thema MessageManager nichts sagt, findest Du bei Bedarf in meinem neuesten FMX-Buch Informationen dazu in einen eigenen Kapitel zum TMessageManager (Kapitel 9)[/Eigenwerbung aus]).

Hinweis 2: Beim Aufruf von "ShowMessage" funktioniert das nicht, da das intern anders gehandelt wird, da musst Du selber eine ShowMessage-Funktion erstellen, die zuvor den Effekt macht und danach ihn wieder aufhebt.

Siehe auch anliegenden Screenshot.
Angehängte Grafiken
Dateityp: jpg Modal.jpg (30,3 KB, 25x aufgerufen)

Geändert von Harry Stahl ( 5. Mai 2017 um 06:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:32 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