OnMouseVerlässtDasBild
-
Ich möchte abfangen, wenn der Benutzer das Bild mit der Maus verlässt. Geht das überhaupt? Wenn ja, wie?
-
Hallo
welches Control meist du genau mit "das Bild"? Ansonsten gibt es noch die Windows-Message MouseLeave, nach der du suchen kannst.
bis bald
akari
-
TPaintBox meine ich...
-
Hallo
dann mußt du dir dein OnMouseLeave selber erstellen.
Schau mal hier :
http://www.c-plusplus.net/forum/viewtopic.php?t=61190bis bald
akari
-
Interessant! Ich werde mal die Situation checken und bei Problemen wieder hier posten. Wusste garnicht, dass das möglich ist.
-
Hallo
diese Window-Messages sind eine Grundlage der WinAPI. Die Borland-VCL baut darüber seine eigenen Klassen, die das ganze sinnvoll kapseln (wrappen). Deshalb kannst du eigentlich alles, was nicht in der VCL direkt integriert ist, noch über die WinAPI machen.
bis bald
akari
-
Mh... wo muss ich die Änderungen vornehmen?
(Die PaintBox wird zur Laufzeit erstellt. Hoffe das spielt keine Rolle.)
-
Hallo
hm, das Beispiel es Links ist für TForms. Du willst es für ein Control im Form, also mußt du das Control selber modifizieren. Dazu leitest du eine eigene Klasse von TPaintBox ab. Da du das Control erst zur Laufzeit benötigst, erleichtert es erstmal.
1. Erstelle eine neue Unit, die du PaintBoxEx nennst.
Datei PaintBoxEx.h ://--------------------------------------------------------------------------- #ifndef PaintBoxExH #define PaintBoxExH //--------------------------------------------------------------------------- // Erweiterung von TPaintBox um MouseLeave und MouseEnter class TPaintBoxEx : public TPaintBox { protected: // Interne Funktion, die von den Messages aufgerufen werden void __fastcall CMMouseEnter(TMessage *Message); void __fastcall CMMouseLeave(TMessage *Message); // interne Speicher für eventuell vorhandene Events, die bei einer MouseX-Message aufgerufen werden sollen TNotifyEvent iOnMouseEnter; TNotifyEvent iOnMouseLeave; public: // Einbinden der MouseX-Messages BEGIN_MESSAGE_MAP MESSAGE_HANDLER(CM_MOUSEENTER, TMessage *, CMMouseEnter); MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage *, CMMouseLeave); END_MESSAGE_MAP(TPaintBox); // Erweiterter Konstruktor __fastcall virtual TPaintBoxEx(Classes::TComponent* AOwner); __published: // Zusätzliche Eigenschaften, um die Events zu setzen __property TNotifyEvent OnMouseEnter = {read = iOnMouseEnter, write = iOnMouseEnter}; __property TNotifyEvent OnMouseLeave = {read = iOnMouseLeave, write = iOnMouseLeave}; }; #endif
Datei PaintBoxEx.cpp :
#include <vcl.h> #pragma hdrstop #include "PaintBoxEx.h" #pragma package(smart_init) // Funktion bei einer MouseEnter-Message void __fastcall TPaintBoxEx::CMMouseEnter(TMessage *Message) { if (iOnMouseEnter != NULL) iOnMouseEnter(this); // Wenn Enter-Event vorhanden, diesen ausführen } // Funktion bei einer MouseLeave-Message void __fastcall TPaintBoxEx::CMMouseLeave(TMessage *Message) { if (iOnMouseLeave != NULL) iOnMouseLeave(this); // Wenn Leave-Event vorhanden, diesen ausführen } // Erweiterter Konstruktor __fastcall TPaintBoxEx::TPaintBoxEx(Classes::TComponent* AOwner) : TPaintBox(AOwner) { // Event-Speicher zurücksetzen iOnMouseEnter = NULL; iOnMouseLeave = NULL; }
2. Diese Unit includest du nun in dem Form, das eine TPaintBoxEx erstellen soll
Datei TForm1.h :#include "PaintBoxEx.h" ... class TForm1 { ... __protected // zusätzliche Eventfunktion für PaintBoxEx->OnMouseX void __fastcall OnPaintBoxExMouseEnter(TObject *Sender); void __fastcall OnPaintBoxExMouseLeave(TObject *Sender); ... };
Datei TForm1.cpp :
... // Konstruktor des Forms __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { // PaintBoxEx erschaffen und konfigurieren TPaintBoxEx *PaintBoxEx = new TPaintBoxEx(this); PaintBoxEx->Parent = this; // passende Koordinaten und Namen für PaintBoxEx setzen PaintBoxEx->OnMouseEnter = OnPaintBoxExMouseEnter; PaintBoxEx->OnMouseLeave = OnPaintBoxExMouseLeave; } void __fastcall TForm1::OnPaintBoxExMouseEnter(TObject *Sender) { // etwas zun, wenn Mouse in PaintBoxEx } void __fastcall TForm1::OnPaintBoxExMouseLeave(TObject *Sender) { // etwas zun, wenn Mouse aus PaintBoxEx }
Dies ist ein Minimal-Beispiel, um dir zu zeigen, wo du anfangen kannst.
Wenn du es richtig machen willst, kannst du noch eine registriete Komponente draus machen, die du zur Entwurfszeit anlegen und mit dem OI bearbeiten kannst.
Dazu findest du ein Beispiel in der BCB-Hilfe.bis bald
akari
-
Boahh, super! Werde ich mir morgen früh gleich vor Augen führen! :p
akari for moderation!