AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Alle Instanzen einer Klasse benachrichtigen
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Instanzen einer Klasse benachrichtigen

Ein Thema von freak4fun · begonnen am 18. Nov 2005 · letzter Beitrag vom 18. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 14:01
Hallo ,
ich habe eine Klasse TMensch mit den Methoden Sagen und Hören. Ich habe mehrere Instanzen der Klasse. Wenn nun eine ein Mensch etwas sagt möchte ich den gesagten Text an alle anderen Menschen senden. Diese sollen dann darauf reagieren, oder es zumindest hören(in der Hören Methode). Ich möchte nicht jeden Mensch das gesagte einzeln zusenden, sondern an alle, da die sich ja nicht kennen und es auch nicht feststeht, wie viele Menschen da sind.
Ich hab nach Nachrichten und Events gesucht, aber nichts gefunden, das mir weiterhilft.
Ich hoffe ihr versteht was ich meine und könnt mir helfen. Sehr lieb wäre ein Beispiel.

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 14:12
Hallo freak4fun,
google mal nach Observer Pattern.
Deine Instanzen der Klasse TMensch müssen sich bei einem Observer anmelden und auch an ihn die Nachricht schicken. Der Observer schickt sie an alle weiter, die sich bei ihm angemeldet haben.
Beim Zerstören einer Instanz muss sich wieder abgemeldet werden.
Wenn du nicht klarkommst, kann ich ein Beispiel posten.
Gruß, Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 15:19
Hallo Frank,
danke für die schnelle Antwort. Das Prinzip trifft mein Problem zu 100%. Ich schaue mir das gerade an. Mit den Interface ist auch eine schöne Sache, da muss man sich nicht mehr um das Freigeben kümmern. Allerdings glaube ich du solltest dein Beispiel schon mal vorbereiten, weil so ganz steig ich da nicht durch. Ich werde mal posten, was ich hinbekommen hab, dann werden wir weiter sehen.

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 16:27
du könntest auch einfach im Create von TMensch die Instanz (Self) in eine Liste hängen (die Liste könnte man ja beim Create als Parameter übergeben). Und wenn du dann alle Instanzen in einer Liste hast ist es ein leichtes diese zu benachrichtigen. (im Destroy natürlich wieder aus der Liste austragen)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 16:41
@SirT: Ich hab ein dynamisches Array of TMensch erstellt, geht so eine Liste auch einfacher?

@spider: Ich bleib weiterhin auch an deine Idee dran.

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 17:41
1.) ein Liste der Klasse TObjectList ist besser, weil Items hinzugefügt und entfernt werden können,
ohne dass wie im Array Verschiebereien stattfinden.
2.) Die Liste darf es nur einmal geben, da sie zur Klasse TMensch gehört.
3.) Die Liste wird also als globale Variable im Abschnitt implementation geführt
4.) TMensch.Create trägt sich selbst in die Liste ein und TMensch.Destroy trägt sich selbst aus der Liste aus.
5.) TMensch.Create prüft, ob es die Liste schon gibt, falls nicht, wird sie erzeugt
6.) TMensch.Destroy prüft, ob es das letzte Objekt in der Liste war. Falls ja: FreeAndNil(liste)
Andreas
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#7

Re: Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 18:24
Zitat von shmia:
1.) ein Liste der Klasse TObjectList ist besser, weil Items hinzugefügt und entfernt werden können,
ohne dass wie im Array Verschiebereien stattfinden.
TObjectList ist doch auch nur ein TList, was auch nur ein Array mit Zugriffsfunktionen ist. Man muss sich halt nur nicht mehr selber um das Verschieben kümmern, weil jemand anderes den Code schon geschrieben hat, den man selbst schreiben würde.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 18:28
Zitat von tommie-lie:
Zitat von shmia:
1.) ein Liste der Klasse TObjectList ist besser, weil Items hinzugefügt und entfernt werden können,
ohne dass wie im Array Verschiebereien stattfinden.
TObjectList ist doch auch nur ein TList, was auch nur ein Array mit Zugriffsfunktionen ist. Man muss sich halt nur nicht mehr selber um das Verschieben kümmern, weil jemand anderes den Code schon geschrieben hat, den man selbst schreiben würde.
Ja, aber ein Array ist auch nur ein Speicherbereich, stehen auch nur Bytes drin, auf die zugegriffen wird. Man muss sich beim Array nur nicht mehr um den Assembler dahinter kümmern
Natürlich hat tommie-lie recht, aber ist das nicht der Sinn von Klassen? Abstrahieren und Arbeit abnehmen?
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#9

Re: Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 19:00
Zitat von Der_Unwissende:
aber ist das nicht der Sinn von Klassen? Abstrahieren und Arbeit abnehmen?
Schon, aber man hört immer wieder, daß TList ach so toll und ach so gut gegenüber einem Array sei, weil Arrays ja generell alle doof sind, weil man da ständig rumkopiert. Bei einer TList wird genauso rumkopiert, nur muss man sich den Code nicht selber schreiben. Die Aussage von shmia bis zum ersten Komma unterstütze ich ja auch, TList ist besser, aus den von dir genannten Gründen, nämlich weil der code schon da ist, warum sollte man ihn selber schreiben? Daß aber im Gegensatz zum Array keine Verschiebereien stattfinden, ist nicht nur nicht richtig, sondern auch noch falsch, deswegen mein Einwand.


Edit: Es wird spät, ich fange an die Kommas an die falschen Stellen zu setzen...
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: Alle Instanzen einer Klasse benachrichtigen

  Alt 18. Nov 2005, 19:08
Ich bin dabei von dynamischen Array auf TList umzustellen.

[edit] In der Liste sind ja nur Pointer, da bekomm ich meine TMeschObjekte gar nicht wieder. [/edit]

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:28 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