Benutzer-Werkzeuge

Webseiten-Werkzeuge


delphi:system.messaging
no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.


Vorherige Überarbeitung
delphi:system.messaging [2015/03/14 22:41] (aktuell) mavarik
Zeile 1: Zeile 1:
 +====== System.Messaging{.pas} ======
 +
 +Wie versende ich Programmintern Nachrichten?
 +
 +Erst mal eine private Nachricht registrieren:
 +
 +<code>
 +type
 +  TDisableAllMessage     = Class(System.Messaging.TMessage<Boolean>);
 +</code>
 +
 +Zum Beispiel im Create der Form:
 +
 +<code>
 +DisableMSGID := FMXMessage.SubscribeToMessage(TDisableAllMessage,
 +                     Procedure(Const Sender:TObject;Const M:TFMXMessage)
 +                     begin
 +                       Foo.Enabled    := not(TDisableAllMessage(M).Value);
 +                       Baa.Visible    := not(TDisableAllMessage(M).Value);
 +                     end);  
 +</code>
 +
 +Im Destroy des Forms
 +
 +<code>
 +  FMXMessage.Unsubscribe(TDisableAllMessage,DisableMSGID,true);
 +</code>
 +
 +So können sind alle Forms registrieren..
 +
 +Benutzt wird es dann so...
 +
 +<code>
 +begin
 +  FMXMessage.SendMessage(sender,TDisableAllMessage.Create(true)); // Alle Controls werden Visible/Enable := false;
 +  // Mach was tolles
 +  FMXMessage.SendMessage(sender,TDisableAllMessage.Create(false)); // Alle Controls werden Visible/Enable := true;  
 +end;
 +</code>
 +
 +oder auch gerne mal im Thread?
 +
 +<code>
 +begin
 +  TTask.Run(Procedure  
 +              begin
 +                // bla blub machwas...              
 +
 +                TThread.Synchronize(nil,// VCL bzw. FMX immer mit!
 +                   Procedure ()
 +                     begin
 +                       FMXMessage.SendMessage(sender,TDisableAllMessage.Create(true)); // Alle Controls werden Visible/Enable := false;
 +                     end);  
 +                     
 +                // Mach noch was im Hintergrund     
 +                
 +                Thread.Queue(nil,// aktivieren wenn der Systemkern dafür Zeit hat... 
 +                   Procedure ()
 +                     begin
 +                       FMXMessage.SendMessage(sender,TDisableAllMessage.Create(false)); // Alle Controls werden Visible/Enable := true;  
 +                     end);  
 +              end);          
 +end;
 +</code>
 +
 +
  
delphi/system.messaging.txt · Zuletzt geändert: 2015/03/14 22:41 von mavarik

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki