Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Frame aus einer Unit ansprechen

  Alt 8. Aug 2012, 08:14
Dein Frame ist mitteilsam. Gut so.
Stell Dir vor, nicht nur dieses Frame wäre mitteilsam, sondern viele andere auch. Vielleicht ist eine unsichtbare Klasse auch mitteilsam und möchte Nachrichten loswerden.

Du kannst Dir eine Klasse bauen, die alle Mitteilungen entgegennimmt und irgendwo anzeigt oder speichert. Diese Klasse wäre auch z.B. in der Lage, das Memo im Hauptformular zu befüllen. Diese Klasse nennen wir einfach mal TMessageCollector.

Davon benötigen wir jetzt eine Instanz.

Dein Frame ruft also MessageCollector.AddMessage('Ich bin ein Frame und hatte Erfolg') auf. Für das Frame ist die Sache damit erledigt.

Der MessageCollector kann diesen Text z.B. mit Zeitstempel in einer Datei ablegen. So hättest Du eine Art Logging. Oder er schickt die Nachricht an das Hauptformular. Das ist aber vielleicht keine sooo gute Idee, denn dann müsste der MessageCollector ja von dem Hauptformular wissen und du könntest diese an sich sehr praktische Klasse später nicht noch einmal verwenden.

Also könnte man das so lösen, das der Collector z.B. eine Property "LogStrings" vom Typ TStrings definiert. Das Hauptformular setzt nun diese Property auf Memo.Lines und fertig ist die Kiste.

Dann muss man nur noch darauf achten, das der MessageCollector die LogStrings nicht in einem Thread befüllt.

Eine andere Möglichkeit wäre, das der Messagecollector die anzuzeigenden Strings per SendMessage an ein Handle schickt. Das Hauptformular implementiert einen Messagehandler und teilt dem Messagecollector noch sein Handle mit.

Man könnte auch bemängeln, das das Frame und alle Klassen zu starr mit dem Messagecollector verbunden sind, aber das muss man abwägen. In vielen Projekten habe ich so einen Collector, weil ich unbedingt Logausgaben/Dateien benötige, um Troubleshooting zu betreiben.

Viele Wege führen nach Rom.

Geändert von Furtbichler ( 8. Aug 2012 um 08:16 Uhr)
  Mit Zitat antworten Zitat