AGB  ·  Datenschutz  ·  Impressum  







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

Multi event handles

Ein Thema von EricMeyer · begonnen am 4. Sep 2019 · letzter Beitrag vom 5. Sep 2019
Antwort Antwort
EricMeyer

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

Multi event handles

  Alt 4. Sep 2019, 18: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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Multi event handles

  Alt 4. Sep 2019, 18:39
Welche Delphi-Version?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
EricMeyer

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

AW: Multi event handles

  Alt 4. Sep 2019, 18:43
Aktuelle, die Community Version
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Multi event handles

  Alt 4. Sep 2019, 19:01
Löse dein Problem mit dem System.Messaging.TMessageManager.
http://docwiki.embarcadero.com/Libra...MessageManager

Siehe auch Links am Ende der Seite.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: Multi event handles

  Alt 5. Sep 2019, 07:41
Und/oder mit Stefans Spring4D, das hat schon Multi-Events implementiert.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Multi event handles

  Alt 5. Sep 2019, 09:53
Ich denke TiGü hat die schon die richtige Antwort gegeben.

Du könntest aber auch eine
TList<TProc> oder TList<TArgProc> verwenden.

TArgProc = reference to Procedure (Const Args : TArray<TValue>); Den Callback von jeder Form speichern. Fertig. (fast)

Vergiss es, nimm lieber den System.Messages Ansatz...
Die paar Taktzyklen..
  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 03:34 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