Einzelnen Beitrag anzeigen

EricMeyer

Registriert seit: 31. Mai 2012
Ort: Berlin
23 Beiträge
 
#1

Multi event handles

  Alt 4. Sep 2019, 17:13
Hi, ich versuche mich gerade darin Multi event handles zu verstehen, wie man Sie benutzt und ob ich Sie richtig benutzte. Was ich habe ist eine Liste von Personen Vorname Nachname, die ich in einem Stringgrid in einer From anzeige. Man kann neue Person hinzufügen und bei jeder Änderung speichert er dieses direkt in ein Textfile. Man kann dieses Form mehrfach öffnen. Jetzt möchte ich, dass wenn ich in einer Form etwas ändere, alle anderen auch aktualisiert werden. Deshalb wollte ich das die Form eine Art Listener hat, was in Delphi durch multi event handles gelöst wird. Meine Idee, die Form sendet an sein persönlichen Kontroller den Befehl speichern und der Kontroller sendet an alle Formen aktualisieren.
Ich kann aber leider kein einziges verständliches Beispiel in die Richtung finden.
Aktuell habe ich:
http://docwiki.embarcadero.com/RADSt...Events_(Delphi)
Das ist aber {$APPTYPE CONSOLE} und somit kann ich es nicht eins zu eins benutzen. Ich habe versucht es umzukonstruieren, bleibe aber an folgender Stelle hängen:
Delphi-Quellcode:
 
 procedure TObservedObject.TriggerEvent;
 begin
   { Call the registerd event only if there is a listener }
   if Assigned(FPing) then
     FPing();
 end;
Ich habe noch andere Beispiele gefunden aber hier wird zum Beispiel mit assembler gearbeitet. Ich kann mir nicht vorstellen, dass so eine einfache Aufgabe so viel Aufwand benötigt.
https://www.delphipraxis.net/191050-...ent-liste.html
https://community.idera.com/develope...using-generics


Die einzige Quelle, von der ich denke, Sie könnte etwas bringen ist https://www.delphigeist.com/2012/03/...-and-more.html
Allerdings kann man sie nicht runterladen und es fehlen somit die dfm und ich finde es sehr schwer das richtig zu verstehen.

Ich komme also nicht richtig weiter. Bin ich mit meinem Ansatz auf dem Holzweg oder habt ihr ein besseres Beispiel oder Ideen, wie ich vorankomme:

Meine Implementierung aktuell ist:

Delphi-Quellcode:

unit UMultiHandle;

interface
 type



   { Define a procedural type }
   TPingEvent = procedure of object;
      { The observed object }
   TObservedObject = class
   private
     FPing: TPingEvent;

   public
     property OnPing: TPingEvent read FPing write FPing;

      class procedure TriggerEvent();
   end;
     { Triggers the event if anything is registered }


      { The listener }
   TListener = class
     procedure Ping;
   end;

   { The listener sub-class }
   TListenerSubclass = class(TListener)
     procedure Ping2;
   end;

implementation

 class procedure TObservedObject.TriggerEvent;
 begin
   { Call the registerd event only if there is a listener }
   if Assigned(FPing) then
     FPing();
 end;
  procedure TListener.Ping;
 begin
   Writeln('TListener has been pinged.');
 end;

 procedure TListenerSubclass.Ping2;
 begin
   { Call the base class ping }
   Self.Ping();
   Writeln('TListenerSubclass has been pinged.');
 end;


end.

"[dcc32 Error] UMultiHandle.pas(38): E2124 Instance member 'FPing' inaccessible here"
  Mit Zitat antworten Zitat