AGB  ·  Datenschutz  ·  Impressum  







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

Botschaft an Frame senden

Ein Thema von taaktaak · begonnen am 6. Jan 2009 · letzter Beitrag vom 6. Jan 2009
Antwort Antwort
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#1

Botschaft an Frame senden

  Alt 6. Jan 2009, 16:32
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:
for i:=0 to Screen.FormCount-1 do // inform ALL application forms
  PostMessage(Screen.Forms[i].Handle,WM_AFTER_CFGSAVED,0,0);
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.

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?
Ralph
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Botschaft an Frame senden

  Alt 6. Jan 2009, 16:39
Zitat von taaktaak:
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 zu können. Das funktioniert auch wie gewünscht.
Alternativ könnte man auch das Beobachter (Observer) Entwurfsmuster verwenden. Jedes Frame oder Form registriert sich dabei in einer zentralen Liste, die dann von der Config-Unit benutzt wird, um nach einer Änderung eine Nachricht an alle zu senden.

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.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#3

Re: Botschaft an Frame senden

  Alt 6. Jan 2009, 17:22
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:
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;
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.
Ralph
  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 06:43 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