Benutzer-Werkzeuge

Webseiten-Werkzeuge


delphi:system.messaging

System.Messaging{.pas}

Wie versende ich Programmintern Nachrichten?

Erst mal eine private Nachricht registrieren:

type
  TDisableAllMessage     = Class(System.Messaging.TMessage<Boolean>);

Zum Beispiel im Create der Form:

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);  

Im Destroy des Forms

  FMXMessage.Unsubscribe(TDisableAllMessage,DisableMSGID,true);

So können sind alle Forms registrieren..

Benutzt wird es dann so…

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;

oder auch gerne mal im Thread?

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;
delphi/system.messaging.txt · Zuletzt geändert: 2015/03/14 22:41 von mavarik