AGB  ·  Datenschutz  ·  Impressum  







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

Fensternachrichten Unterscheidung

Ein Thema von Tyrael Y. · begonnen am 8. Jul 2005 · letzter Beitrag vom 8. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#1

Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 10:56
Moin zusammen,

wenn ihr eine neue Komponente entwickelt und diese Komponente soll auf Fensternachrichten reagieren, geht man so vor das man WM_USER als Grundlage nimmt und einen entsprechenden Wert für die neue selbst definierte Nachricht zu WM_USER addiert.

Code:
const WM_SelfDefined = WM_USER + 10;

Wenn man jetzt viele verschiedene Komponenten benutzt, kann es ja durchaus passieren, daß in einer anderen fremden Komponente die selbe Nachricht definiert worden ist.

Soweit ich weiss gibt es ja keinen Referenzzähler der mir die letzte definierte Fensternachricht wiedergibt, so daß ich neue Fensternachrichten höher als diese definieren könnte.

Im Moment kann es aber dazu kommen, daß Komponenten zu falschen Zeiten reagieren, da sie eine Nachricht erhalten haben, diese aber nicht wirklich für sie bestimmt war.

Wie geht ihr vor? Gibt es da Möglichkeiten aus diesem Dilemma rauszukommen?


Lieben Gruß

Tyrael
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 12:18
Hallo Tyrael,

nur private message codes - solche die deine Anwendung nicht verlassen - definierst du dir anwendungsbezogen über WM_USER. Besteht die Gefahr der Mehrfachverwendung des message codes, dann schau dir mal Windows.RegisterWindowMessage() an. Damit kannst du dir systemweite message codes besorgen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 12:49
Das die Nachrichten nur innerhalb meiner Applikation gültig sidn ist mir klar.

Mir geht es darum, daß ich z.B. mehrere Komponenten innerhalb meiner Applikation haben könnte, die alle sehr viel mit Fensternachrichten arbeiten.

Wenn jetzt z.B. 2 mal die Nachricht WM_USER +1 in verschiedenen Komponenten definiert ist, könnte eine Komponente zu einem ungünstigen Zeitpunkt auf die nicht für ihn bestimmte Nachricht reagieren...dies könnte zu Seiteneffekten führen, die dann wiederum schwer nachzuvollziehen sind, bis man halt erkennt, daß eine andere Komponente dieselbe Nachricht feuert.

Ich hoffe meine Bedenken sind jetzt bissel klarer geworden.



Lieben Gruß

Tyrael
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#4

Re: Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 13:00
die komponenten die nachrichten erhalten haben ja in der Regel unterschiedliche "Adressen" (Handles) also brauchst dir da kein kopp zu machen
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#5

Re: Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 13:13
Zitat von barf00s:
die komponenten die nachrichten erhalten haben ja in der Regel unterschiedliche "Adressen" (Handles) also brauchst dir da kein kopp zu machen
Das Problem ist wohl eher, dass sich die Komponenten die Nachrichten gegenseitig 'klauen'.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 13:17
Wirklich nicht?

Und was ist wenn da folgendes steht ?

Code:
Sendmessage(0, WM_USER +1, nil, nil);
..und es zwei Komponenten gibt die auf WM_USER + 1 reagieren?


Edit: ..von mir aus auch

Code:
Sendmessage(HandleZumHauptfenster, WM_USER + 1, nil, nil);
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 13:22
Zitat von NicoDE:
Das Problem ist wohl eher, dass sich die Komponenten die Nachrichten gegenseitig 'klauen'.
Das sollte eigentlich nicht passieren, wenn das message handling konsistent implementiert wurde. Die Komponente von Tyrael kann broadcast messages für sich reklamieren oder auch nicht - wie jede andere VCL Komponente auch. Sie kann dispatched messages bearbeiten oder es lassen. Wenn sie eine message irrtümlich behandelt, dann liegt ein Design-Fehler vor - eher in der Komponente von Tyrael als in der VCL nehme ich an.

marabu
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 13:30
Es geht jetzt gar nicht um eine Komponente die ich grad entwickle, sondern eher darum, was ist wenn ich zwei oder mehr Fremdkomponenten habe, die auf die selbe Nachricht reagieren.

Ich bin grad nämlich am Debuggen und habe die starke Vermutung zwei Komponenten reagieren auf die selbe Nachricht, was einen Fehler erklären würde.

..und habe mich grad in dem Zusammenhang gefragt, wie ich solche Fehler bei zukünftig selbst entwickelten Komponenten von vornherein verhindern könnte...irgendwie fehlt mir eine Referenz zu einer Variablen, die die höchste definierte Fensternachricht innerhalb meiner Applikation zurückgibt.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 13:35
Für deine eigenen custom messages kannst du dir ja den gleichen Mechanismus entwickeln, der auch von Windows verwendet wird. Bei Fremdkomponenten mit Quelltext bist du auch fein raus. Zwei Fremdkomponenten, die sich die messages stehlen - da hätte ich gerne mein Geld zurück...

marabu
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#10

Re: Fensternachrichten Unterscheidung

  Alt 8. Jul 2005, 13:37
Kleiner Tip: Du wirst ja eine Vorstellung haben, wieviele Nachrichten du pro Kompo brauchst. Unterteile dir einfach deinen Bereich danach.

Beispiel:
Delphi-Quellcode:
const
  KOMPO1_BASE = 100;
  KOMPO2_BASE = 200;
  KOMPO3_BASE = 300;

  WM_KOMPO1_BLA1 = WM_USER + KOMPO1_BASE + 1;
  WM_KOMPO1_BLA2 = WM_USER + KOMPO1_BASE + 2;
  WM_KOMPO2_BLA1 = WM_USER + KOMPO2_BASE + 1;
  WM_KOMPO3_BLA1 = WM_USER + KOMPO3_BASE + 1;
  WM_KOMPO3_BLA2 = WM_USER + KOMPO3_BASE + 2;
MS macht's ähnlich.

Übrigens gehört das Thema eher unter Win32 als unter Sonstiges.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:28 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