Passing custom data
If you just need to signal that something happened, TQTXEvent is sufficient. If you need to pass custom data with your event, you should use TQTXCustomEvent. TQTXCustomEvent has a Detail: variant property. This allows you to package any data (a string, an integer, or even a JObject) with your event.
// Firing the event with data
var
MyData: variant;
MyEvent: TQTXCustomEvent;
begin
MyData := TVariant.CreateObject();
MyData['UserName'] := 'Nadia';
MyData['Score'] := 1500;
// Create the event, passing MyData to the 'Detail' parameter
MyEvent := TQTXCustomEvent.Create('OnMyDataUpdate', [eoBubbles], MyData);
MyEvent.Dispatch(Self.EventTarget);
MyEvent.Free;
end;
// Listening for the event
MyWidget.AddDelegate('OnMyDataUpdate',
procedure(Sender: TQTXDelegate; Event: JEvent)
var
EventData: variant;
begin
// Cast to JCustomEvent to access the 'detail' property
EventData := JCustomEvent(Event).detail;
WriteLn('User: ' + EventData['UserName']); // User: Nadia
end
);