![]() |
Botschaft an Frame senden
Moin, Moin.
Um zirkuläre Unit-Referenzen zu vermeiden, sendet meine Config-Unit nach Veränderung von Einstellungen mittels PostMessage() eine Botschaft an alle Fenster, damit diese darauf reagieren und ggf. Veränderungen sofort optisch darstellen können. Das funktioniert auch wie gewünscht.
Delphi-Quellcode:
Mein Hauptform enthält jedoch mehrere Frames. Diese empfangen die Botschaft natürlich nicht. Nun kann ich ja aus dem Hauptform die Einstellungen in den Frames ändern - aber noch besser wäre es m.E. dies auch in den einzelnen Frames zu tun.
for i:=0 to Screen.FormCount-1 do // inform ALL application forms
PostMessage(Screen.Forms[i].Handle,WM_AFTER_CFGSAVED,0,0); Langer Rede, kurzer Sinn: Wie kann ich eine Botschaft an die Frames senden? Da TFrame ein Nachkomme von TWinControl ist, müsste ein Frame doch eigentlich ein Handle haben (denk ich mir mal so) - aber wie ermittle ich das Handle? |
Re: Botschaft an Frame senden
Zitat:
Die Liste könnte (nur so als Beispiel) eine IInterfaceList sein. Jedes Frame oder Form implementiert dann z.B. ein IConfigAware Interface mit einer Methode OnConfigChanged. Der Rest ist dann einfach, und kann beliebig um weitere Klassen (auch nichtvisuelle) erweitert werden, die ja normalerweise kein Windowshandle haben. |
Re: Botschaft an Frame senden
Tja, hört sich gut an.
Habe jetzt mal ein wenig gelesen, und -offen gesagt- eigentlich so gut wie nichts verstanden. Das Grundprinzip ist zwar deutlich geworden, allerdings kann ich trotz Durchsicht der Hilfe leider keine praktischen Umsetzungsschritte daraus ableiten. Ich wäre dankbar, wenn sich ein Helfer finden würde, der das Aufgezeigte etwas konkreter darstellen könnte. // edit: Die ursprüngliche Frage habe ich jetzt selbst beantworten können; folgender Code sendet die Botschaft an alle Forms und alle Frames der Anwendung
Delphi-Quellcode:
Die "IInterfaceList" ist eine sehr interessante Anregung - vielen Dank an Michael für den Hinweis! Damit werde ich mich mal in Ruhe beschäftigen und ggf. einen neuen Thread aufmachen, wenn meine Verständnislosigkeit weiter anhält.
with Application do
for i:=0 to ComponentCount-1 do if Components[i] is TForm then begin PostMessage(TForm(Components[i]).Handle,WM_AFTER_CFGSAVED,0,0); for j:=0 to Components[i].ComponentCount-1 do if Components[i].Components[j] is TFrame then PostMessage(TFrame(Components[i].Components[j]).Handle,WM_AFTER_CFGSAVED,0,0); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 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