Hallo Scrat,
irgendwie versteh ich das ganze noch nicht, das mit den Messages MouseEnter und MouseLeave ist ja einleuchtend,
aber wieso und wie ich das jetzt durch die anderen Messages ersetzen soll ist mir unklar.
Der zweite Link von dir verweist auf Messages die etwas mit klicken zutun haben was auch soweit gut ist, jedoch
frag ich mich wie ich jetzt dem "OnCaptionClick" von mir beibringe auf diese Message zu reagieren.
Delphi-Quellcode:
uses
SysUtils, Classes, Controls, StdCtrls, Messages, Windows;
type
TLabeledGroupBox = class(TGroupBox)
private
{ Private-Deklarationen }
FCursor : TCursor;
FStoredCursor : TCursor;
FOnCaptionClick : TNotifyEvent;
procedure SetCursor(const Value: TCursor);
procedure CMMouseEnter(var msg: TMessage) ; message CM_MOUSEENTER;
procedure CMMouseLeave(var msg: TMessage) ; message CM_MOUSELEAVE;
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
constructor Create(AOwner: TComponent); override;
published
{ Published-Deklarationen }
property CaptionCursor: TCursor read FCursor write SetCursor default crDefault;
property OnCaptionClick: TNotifyEvent read FOnCaptionClick write FOnCaptionClick;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TLabeledGroupBox]);
end;
procedure TLabeledGroupBox.CMMouseEnter(var msg: TMessage);
begin
if msg.WParam = HTCAPTION then begin
FStoredCursor := Cursor;
Cursor := FCursor;
end;
inherited;
end;
procedure TLabeledGroupBox.CMMouseLeave(var msg: TMessage);
begin
if msg.WParam = HTCAPTION then begin
Cursor := FStoredCursor;
end;
inherited;
end;
constructor TLabeledGroupBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FCursor := crDefault;
FStoredCursor := crDefault;
end;
procedure TLabeledGroupBox.SetCursor(const Value: TCursor);
begin
if FCursor <> Value then begin
FCursor := Value;
Perform(CM_CURSORCHANGED, 0, 0);
end;
end;