Einzelnen Beitrag anzeigen

Lagopus

Registriert seit: 28. Jan 2008
5 Beiträge
 
#7

Lösung:

  Alt 24. Nov 2008, 16:23
Hallo zusammen,
hallo Christopher,

nachdem ich ziemlich oft beim Durchsuchen des WWW und des Forums gelesen habe, daß ein Broadcast via PostMessage(HWND_BROADCAST,...) nicht ganz ungefährlich ist, da so JEDE auf dem System laufende Applikation diese Meldung erhält, habe ich mein Problem entsprechend anders gelöst, dank der Mithilfe von Christopher:

Ich suche mir einfach alle Formulare meiner Applikation zusammen und schicke dann expliziert an ihre Handles meine Nachricht, das sieht dann so aus:

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender:TObject);

var
  i : integer;

begin
  For i := 0 to Application.ComponentCount-1 do begin
    if Application.Components[i] is TForm then begin
      PostMessage((Application.Components[i] as TForm).Handle,WM_MEINENACHRICHT,Integer(self),0);
    end;
  end;
end;
In den jeweiligen Formularen binde ich eine eigene Prozedur ein, die die Nachricht WM_MEINENACHRICHT empfängt und auf die gewünschten Komponenten verteilt:

Delphi-Quellcode:
type

  TForm1 = class(TForm)
    .
    .
    procedure WMMEINENACHRICHT(var Msg : TMessage);message WM_MEINENACHRICHT;
    .
    .
  end;

implementation

procedure TForm1.WMMEINENACHRICHT(var Msg:Tmessage);
var
  i : integer;
begin
  for i:= 0 to ComponentCount - 1 do begin
    if Components[i] is TMeinStaticText then
    begin
      (Components[i] as TMeinStaticText).MachWas();
    end;
  end;
end;
So funktioniert's und die böse Broadcast-Methode ist vermieden.

Vielen Dank an Christopher für die Hilfe!

Grüße,

Lagopus.
  Mit Zitat antworten Zitat