Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Anwendungsweite User-Message senden (https://www.delphipraxis.net/92717-anwendungsweite-user-message-senden.html)

Meta777 24. Mai 2007 22:32


Anwendungsweite User-Message senden
 
hallööööööchen DPlers,.-

ich raff grad nicht wie ich eine WM_USER-Message von einer Compo der ganzen Anwendung senden kann - quasi nen Broadcast aber eben nur in der eigenen App. :wall:
Ich habs mit PostMessage(Application.Handle) versucht was die Nachricht aber nur für Application.OnMessage bereitstellt und nicht an die untergeordneten Formulare die ich erreichen will...
PostThreadMessage() führt zum gleichen Ergebniss...
Und ne Windowsbotschaft registrieren um sie für Broadcast nutzen zu können will ich auch nicht - ist ja nicht sinn und zweck des Broadcast()....


Vielen Dank für alle Hinweise

Gottes Segen

Meta777 25. Mai 2007 13:01

Re: Anwendungsweite User-Message senden
 
Nachtrag: Ich habs nun mit SendMessage(Application.Components[].Handle,,) versucht. Allerdings beinhaltet Components[] nur die Forms die Application als Owner haben - was eher selten der Fall ist...

Wenn jmd. also noch ne Idee hat bitte posten :stupid:

shmia 25. Mai 2007 13:43

Re: Anwendungsweite User-Message senden
 
Delphi-Quellcode:
var
  I: Integer;
begin
  for I := 0 to Screen.CustomFormCount - 1 do
    with Screen.CustomForms[I] do
      if HandleAllocated { and IsWindowVisible(Handle) and
        IsWindowEnabled(Handle) } then
        PostMessage(Handle, WM_MY_USER, 0, 0);
end;
Ich habe IsWindowVisible und IsWindowEnabled mal auskommentiert; kommt nur auf deine Situation an, ob das benötigt wird oder nicht.

Meta777 25. Mai 2007 14:57

Re: Anwendungsweite User-Message senden
 
vielen dank... :thumb:

SirThornberry 25. Mai 2007 15:25

Re: Anwendungsweite User-Message senden
 
so geht die Message aber auch nur an alle Forms. Die gleiche Message an alle Fenster einer Anwendung zu schicken erscheint mir jedoch auch nicht sehr sinnvoll bei einer userdefined-message da nicht alle Fenster diese Message unterstüzen bzw. ich nicht glaube das du alle verwendeten Fensterklassen nachgerüstet hast damit diese die Message bearbeiten.
Und wenn nur an alle eigenen Formulare die Message geschickt werden soll wäre es doch sinnvoller die eigenen Formulare von einer eigenen Formularkalsse abzuleiten (anstelle von TForm) und diese eigene Fensterbasisklasse mit einer entsprechenden Methode zu versehen.

Neutral General 25. Mai 2007 16:35

Re: Anwendungsweite User-Message senden
 
Hi,

Wie wärs mit einer verschachtelten for-Schleife?
Man kann davon ausgehen das alle "components" der application Formulare sind..normalerweise jedenfalls...

=>

Delphi-Quellcode:
for i:= 0 to Applications.Component.Count-1 do
 for j:= 0 to TForm(Apllication.Components[i]).Components.Count-1 do // kann sein das es auch Controls.Count heißt
   SendMessage((TForm(Apllication.Components[i]).Components[j] as TWincontrol).Handle,...,...);
Jedenfalls so ungefähr...

Gruß
Neutral General

Meta777 28. Mai 2007 11:21

Re: Anwendungsweite User-Message senden
 
@SirThornberry:
Die Formulare haben alle eine Komponente die die WindowProc subclassed. Deswegen haut das auch super hin.

@Neutral General:
Das hatte ich auch schon versucht siehe obrigen post. Das problem ist nur das in Application.Components nur die Formulare vorhanden sind die Application als Owner dem Constructor übergeben haben...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 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