Hallo Christopher,
Zitat von
Relicted:
Huhu!
Also du brauchst die WNDProc nicht überschreiben. eine definition einer funktion reicht da vollkommen aus:
Delphi-Quellcode:
uses
Windows;
const
UM_MEINENACHRICHT = WM_USER + 1337;
procedure UMMEINENACHRICHT(var Message: TMessage); message UM_MEINENACHRICHT;
Wenn ich diese Prozedur in meinem Formular einbinde, dann reagiert sie leider nicht auf PostMessage(HWND_BROADCAST,...) - sprich, die WM_USER-Nachricht kommt dort gar nicht an.
Zitat von
Relicted:
damit hast du dann die message ohne das überschreiben in deinen formularen.
dort kannst du dann mit
Delphi-Quellcode:
for i:= 0 to ComponentCount - 1 do
begin
if Components[i] is TMeinStaticText then
begin
(Components[i] as TMeinStaticText).MachWas();
end;
end;
an die Statics weitergeben.
So ähnlich habe ich das in meiner bisherigen Lösung mit der überschriebenen WndProc-Prozedur und der Application.OnMessage auch gemacht - allerdings ist Deine Version viel eleganter ... ;-)
Zitat von
Relicted:
Um den Broadcast zu umgehen könntest du auch beim erzeugen des formulars dich in eine globale programmliste eintragen und sagen "hier sind meine static's bitte sag denen bescheid wenn du irgendwas tun magst".
diese lösung wäre dann geeignet wenn du keine nachrichten hin und her blasen magst.
Öhm, wie meinst Du das mit der
globalen Programmliste? Das habe ich nicht kapiert...
Danke & Grüße,
Lagopus.
Nachtrag:
Das Problem liegt definitiv daran, daß PostMessage(HWND_BROADCAST,...) nicht bei den Formularen ankommt. Sende ich explizit via PostMessage(FormX.Handle,...), dann klappt's.