![]() |
Re: LogFile global ansprechbar machen
:wiejetzt:
Was ist das Problem, wenn du einfach Form1.ListBox1.Items.Add('test') machst, dass dürfte doch ohne Probleme gehen und was ist daran so schlimm, wenn du die Hauptunit ansprichts? |
Re: LogFile global ansprechbar machen
1. Sollte man nicht direkt aus einer Unit auf Komponenten einer anderen zugreifen
2. Sollte es Tabu sein, dass eine Unit die selbe Unit einbidet, von der sie eingebunden wurde. (Dann könnte man gleich eine draus machen) |
Re: LogFile global ansprechbar machen
Du kannst ja in der zweiten, nicht in der MainForm, eine globale Variable machen, einen String, von dem du dann mit MainForm den String aus der eingeunden Unit ausließt.
Einen besseren Weg kenn ich nicht. Oder natürlich du speicherts alles zwischen durch in eine Datei ab und ließt dann mit der MainForm aus, doch das ist sinnlos, dann kann man es gleich per String machen. |
Re: LogFile global ansprechbar machen
Hallo,
Wenn du am form1 das form2 in einer Procedure aufrufst, dann used der Compiler das form2 automatisch. Er fragt dich dann ob er Form2 usen soll. mfg Bundy |
Re: LogFile global ansprechbar machen
Wie wär's mit sowas?
Delphi-Quellcode:
Ist so ziemlich sauber implementiert. Wie gesagt, ohne Unit-Einbinden geht's nicht, weil du sonst nur auf Methoden von TWinControl zugreifen könntest, was nicht reichen sollte.
type
TMainForm = class(TImage) public procedure AddLogFileEntry(msg: String); { ... } end; procedure TMainForm.AddLogFileEntry(msg: String); begin MyListBox.Items.Add(DateTimeToString(Now) + ' --- ' + msg); end; // Das hier in der Projektdatei (*.dpr): f1 := TFirstChildForm.Create(MainForm); f1.Parent := MainForm; f2 := TSecondChildForm.Create(MainForm); f2.Parent := MainForm; // usw. // Deine Kindformulate können die Logfileentries dann so machen: uses MainForm; // MUSS sein; anders kann man gar nicht auf's Hauptformlar zugreifen procedure TFirstChildForm.AnyMethodYouCouldThinkOf(); begin (Parent as TMainForm).AddLogFileEntry; end; Du kannst das Einbinden natürlich auch umgehen, indem du den Umweg über Windows machst und Messages versendest. Das ist aber kein so besonders sauberes OOP, weil du keine Typensicherheit hast und außerdem nicht besonders performant, weil du die Message-Queue von Windows zusätzlich beanspruchen musst (oder besser gesagt: öfter beanspruchen musst; du merkst nur nicht, dass du es ständig tust und jetzt müsstest du sogar explizit). Außerdem verlörest du die Plattformunabhängigkeit. Alles andere (was ich mir vostellen kann) wäre nur ekelig und unpraktisch, weil von Echtzeit überhaupt nicht mehr die Rede sein kann (z.B. beim regelmäßigen Pollen einer Property der Kindformulare). |
Re: LogFile global ansprechbar machen
Uncle Cracker hat bereits
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz