Wurde im Parent einer eigenen Kompo geklickt?
-
Original erstellt von WebFritzi:
**
Hier verstehe ich nicht, was du meinst. Wo soll das andere Panel liegen? Ebenfalls im Parent-Panel? Dann wird bei deiner Lösung aber auch nichts ausgelöst:
[quote]
if(Msg.hwnd==Parent->Handle)
{
// mach was
}
**[/QUOTE]
richtig. Hab ich hier nicht implementiert. Irgendwas muss er ja auch noch selbst machen.
Er will ein PopUpMenü basteln. Ein PopUpMenu verschwindet, wenn man irgendow ausserhalb des Menues klickt. Zumindest normalerweise. Um nun zu testen, ob ausserhalb eines Steuerelementes geklickt wurde reicht das Überschreiben der WindowProc des Parent nicht aus. Stell dir vor er legt das PopUpMenü auf ein Panel. Diese macht er genauso groß wie das Menü selbst. Ist natürlich Kecks, aber ja möglich. Der Anwender würde dann ja niemals auf den Parent klicken können. Auf andere etweilige Panels im Formular reagiert das Steuerelement nun aber nicht, weshalb das Steuerelement nicht ausgeblendet wird. Man kann natürlich die WindowProc des Forulars (ParentForm) überschreiben. Das hilft aber auch nur, wenn keine Panels oder andere Steuerelemente auf dem Formular liegen usw...
Deshalb is OnAppMessage hier gut geeignet, da das Reaktionsvermögen nicht auf ein Fensterhandle beschränkt ist.
Man kann auch mit Component[i] des ParentForm die platziereten Komponenten durchgehen, deren Handle mit den Msg.Handle vergleichen und so feststellen, worauf nun geklickt wurde. In der Regel braucht man das aber nicht.
Was sinnvoll wäre ist das Ausschließen eigener Subkomponenten aus diesen Routinen. Wenn im Steuerelement z.B. Ein Edit- Feld ist, ist es ja nicht unbedingt sinnvoll die Komponente bei Klick auf das Edit- Feld inm Menü zu schliessen. Da könnte man unterbinden, indem man generell die Handles der Subkomponenten ausschleisst.Original erstellt von WebFritzi:
**
Die Frage ist auch, ob Aoenke das überhaupt will. Möchte er, dass die Message immer behandelt wird, wenn nur auf ein Fenster geklickt wird, das ein Child vom Parent-Panel ist? Oder möchte er nur auf Klicks direkt im Parent-Panel reagieren? Ich denke, hier ist eher die zweite Version üblich.**insofern denke ich, dass dieses genau das ist was er möchte...
[ Dieser Beitrag wurde am 09.03.2003 um 22:39 Uhr von AndreasW editiert. ]
-
Aha, Du hast schon weiter gedacht als ich.
Ich habe noch garnicht an das Verschwinden des PopupMenus gedacht - nur an das Erscheinen. OK, dann ist deine Version eine Möglichkeit. Aber für das Verschwinden kann man auch die Maus capturen. Hier ist es Aoenkes Entscheidung, was er machen will.
@Aoenke: Wenn ich dich richtig verstadnen habe, willst du ein PopupMenu simulieren. Ich gehe davon aus, dass du deine Komponente von irgendeiner Klasse ableitest, die ein Nachfahre von TControl ist. Hier bekommst du dann aber ein Problem. Ein PopupMenu hat eigentlich kein Parent. Deshalb wird es auch über allem, was auf dem Bildschirm ist, angezeigt. Eine Komponente, wie du sie machen willst, würde ein PArent haben. Das heißt: Stelle dir einmal vor, es wird rechtsgeklickt so ziemlich am rechten Rand des Parents (beispielsweise der Form). Dann wird deine Komponente nicht ganz angezeigt, denn der rechte Teil verschwindet, und die Form bekommt ScrollBars. Hast du schonmal dieses Problem bedacht?
-
hm,
stimmt. Und was ist, wenn das Menü größer ist als das Formular ?
Sogesehen würde ich dann vielleicht doch auf TForm zurückgreifen anstatt von TCustomControl abzuleiten.
-
Original erstellt von AndreasW:
Sogesehen würde ich dann vielleicht doch auf TForm zurückgreifen anstatt von TCustomControl abzuleiten.Das hatte ich mir auch schon gedacht. Aber das kann man dann nichtmehr als Komponente in sein Programm einbinden. Da muss man wohl mit einer "normalen" Klasse vorlieb nehmen.
-
machs doch über WM_KILLFOCUS. auf diese nachricht kannst du das popup-menü wieder verschwinden lassen.
-
Hi ihrs...
Original erstellt von WebFritzi:
Das heißt: Stelle dir einmal vor, es wird rechtsgeklickt so ziemlich am rechten Rand des Parents (beispielsweise der Form). Dann wird deine Komponente nicht ganz angezeigt, denn der rechte Teil verschwindet, und die Form bekommt ScrollBars. Hast du schonmal dieses Problem bedacht?Nein das hatte ich dummerweise nicht bedacht...
Na dann werde ich es mal als Klasse versuchen.MFG Aoeke
P.S. Danke für eure vielen Beiträge. Tolles Forum...
-
Original erstellt von <Peter>:
machs doch über WM_KILLFOCUS. auf diese nachricht kannst du das popup-menü wieder verschwinden lassen.Hi Peter. WM_KILLFOCUS wird nicht ausgelöst, wenn der User auf ein Label, Speedbutton usw. klickt, da diese den Focus nicht kriegen. Bedeutet, dass das Menü nicht immer verschwindet. Ist also eine schlechtere Wahl.
-
aber die normalen Menüs können das doch auch ohne sich irgendwo in das Parent einzuhacken *g*
-
Vielleicht auch mit WM_ACTIVATE und dann bei WA_INACTIVE
-
hm,
käme auf ein Versuch an. Hab aber leider keine Zeit dass zu testen. Wärst du so freundlich...