Vcl.Controls.TControl.OnMouseActivate

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

property OnMouseActivate: TMouseActivateEvent read FOnMouseActivate write FOnMouseActivate;

C++

__property TMouseActivateEvent OnMouseActivate = {read=FOnMouseActivate, write=FOnMouseActivate};

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
event protected
Vcl.Controls.pas
Vcl.Controls.hpp
Vcl.Controls TControl

Beschreibung

Wird ausgelöst, wenn der Benutzer über einem Steuerelement eine Maustaste drückt und das übergeordnete Formular nicht aktiv ist.

Mit der Ereignisbehandlungsroutine OnMouseActivate können Sie spezielle Verarbeitungen implementieren, die als Ergebnis des Drückens einer Maustaste über einem Steuerelement ausgelöst werden sollen, wenn das übergeordnete Formular der obersten Ebene nicht aktiv ist.

Der Ereignistyp ist:

TMouseActivateEvent = procedure (Sender: TObject; Button: TMouseButton; ShiftState: TShiftState;
X, Y: Integer; HitTest: Integer; var MouseActivate: TMouseActivate) of object;

Wenn Sie auf ein Steuerelement klicken und das übergeordnete Formular der obersten Ebene nicht aktiv ist, wird dieses Ereignis für das Steuerelement ausgelöst, auf dem sich der Mauscursor befindet. MouseActivate ist eine als protected deklarierte virtuelle Funktion in TControl. MouseActivate kann in benutzerdefinierten Steuerelementnachfahren überschrieben werden, um integrierte Verarbeitungen des Ereignisses OnMouseActivate bereitzustellen. Wenn Sie den Standardwert von OnMouseActivate auf maDefault belassen, löst das übergeordnete Steuerelement das Ereignis OnMouseActivate aus und wiederholt den Prozess bis zum Formular der obersten Ebene. Wenn kein Steuerelement in der Kette den Wert von MouseActivate setzt, wird dasselbe Verhalten ausgelöst, als ob ein Steuerelement TMouseActivate auf maActivate gesetzt hätte. Ein Steuerelement kann jederzeit den Wert von TMouseActivate setzen und damit die übergeordnete Verarbeitung stoppen.

Da einige Steuerelemente den Fokus auf sich selbst setzen, wenn Sie eine "Maustaste-Gedrückt"-Botschaft erhalten, kann in manchen Fällen das Setzen von maNoActivate als wirkungslos erscheinen. Beispielsweise setzt ein TButton-Steuerelement den Fokus in einer WM_LBUTTONDOWN-Botschaft auf sich selbst, unabhängig davon, ob TMouseActivate auf maNoActivate gesetzt ist oder nicht. In diesem Fall ist das Setzen von maNoActivateAndEat erfolgreich, weil das Formular der obersten Ebene nicht aktiviert ist und die WM_LBUTTONDOWN-Botschaft unterdrückt wird.

Der Parameter HitTest ist der "Gedrückt"-Testwert, der aus der WM_NCHITTEST-Botschaft ermittelt wird.. Die gültigen Werte und deren Bedeutung finden Sie in der Datei Windows.pas. In den meisten Fällen ist dieser Wert HTCLIENT, der bedeutet, dass der Benutzer in den Client-Bereich eines Steuerelements geklickt hat. Bei einem Formular der obersten Ebene können jedoch auch andere Werte, wie z.B. HTCAPTION oder HTBOTTOM, vorkommen, die auf dem HitTest-Code basieren. Zum Beispiel verlangt der folgende Code in der Ereignisbehandlungsroutine OnMouseActivate eines TForm-Objektes von dem Benutzer in einen Nicht-Client-Bereich zu klicken, um das Formular zu aktivieren.

if HitTest = HTCLIENT then
MouseActivate := maNoActivateAndEat;

Obwohl dieses Ereignis eng an die Verarbeitung von WM_MOUSEACTIVATE in Windows gebunden ist, wird die eigentliche Behandlung der Botschaft auf der TControl-Ebene ausgeführt. Dies ist der Punkt in der VCL-Hierarchie, wo das Steuerelement kein Fenster-Handle hat. Das Ereignis OnMouseActivate wird dann simuliert, da alle Nachfahren von TControl auch über die Ereignisse OnMouseDown, OnMouseMove und OnMouseUp verfügen. Dies gilt sowohl für VCL Win32 als auch für VCL.NET.

Siehe auch