AGB  ·  Datenschutz  ·  Impressum  







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

Frame aus einer Unit ansprechen

Ein Thema von HPB · begonnen am 7. Aug 2012 · letzter Beitrag vom 8. Aug 2012
Antwort Antwort
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

Frame aus einer Unit ansprechen

  Alt 7. Aug 2012, 20:15
Delphi-Version: XE2
Guten Tag Delphianer,
ich möchte eine Memo-Komponente aus einer Unit aus ansprechen.
Den Beitrag "Zugriff auf Frame-Objekte" kenne ich, bringt aber keine Lösung.
Folgendendes:
In einer Unit z. B. Update3000 tue ich irgendetwas, das Ergebnis (Erfolg, nicht Erfolgt) soll eine Zeile
Memo.Add.Lines(erfolg/ nicht efolgt) erzeugen.
In der Unit Update3000, habe ich das Frame mit z.B. HauptFrame := TMainFrame.Create, eingebunden und erzeugt.
Wie kann ich nun das Memofeld "MemoAnzeige", das auf dem HauptFrame liegt, ansprechen.
Wie z. B. HauptFrame.MemoAnzeige.Add.Lines('text');

Bisher ist es mir nicht gelungen!!
Weiß irgendeiner was ich falsch mache, falsch verstanden habe??
Vielen Dank für die Hilfe.
HPB
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#2

AW: Frame aus einer Unit ansprechen

  Alt 7. Aug 2012, 20:18
Hast du Lines und Add vertauscht? Sollte es nicht heissen:

HauptFrame.MemoAnzeige.Lines.Add('text');
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#3

AW: Frame aus einer Unit ansprechen

  Alt 7. Aug 2012, 20:21
Hast du Lines und Add vertauscht? Sollte es nicht heissen:

HauptFrame.MemoAnzeige.Lines.Add('text');
In der Tat.
Aber dies löst nicht das ursprüngliche Problem.
Mit Gruß
HPB

Geändert von HPB ( 7. Aug 2012 um 20:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

AW: Frame aus einer Unit ansprechen

  Alt 7. Aug 2012, 21:19
Bisher ist es mir nicht gelungen!!
Weiß irgendeiner was ich falsch mache, falsch verstanden habe??
Bezüglich der Überschrift hast du vermutlich garnichts falsch gemacht.
Und schön, wenn Fehlermeldungen unterschlagen werden, bzw. wenn niemand verrät, wie diese lauten.

Zitat:
HauptFrame.MemoAnzeige.Add.Lines('text');
Denn der Compiler meckert erst beim Add ("Add" ist nicht deklariert oder so), was also bedeutet, daß HauptFrame und MemoAnzeige erfolgreich angesprochen werden konnten.

Oder lautet die Fehlermeldung etwa anders?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Frame aus einer Unit ansprechen

  Alt 8. Aug 2012, 05:25
Du könntest ein Event verwenden.
Das gleiche Prinzip, dass die VCL so vielseitig einsetzbar macht, ist auch innerhalb deiner Anwendung geeignet die verschiedenen Units, Klassen und Komponenten zu entkoppeln.
  Mit Zitat antworten Zitat
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
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 07:01 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