Einzelnen Beitrag anzeigen

Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

Mausereignisse in meiner Komponente

  Alt 23. Mär 2004, 20:58
Hallöchen nochmal!

Ich habe mal mit meinem Buch nocheine Kompo gebastelt: Eine Kompoente aus einem Bild und einem Bevel. Das Bevel ist unsichtbar, bis die Maus über das Bild fährt, wenn die Maus das Bild verlässt, verschwindet auch das Bevel wieder, beim Draufklicken soll es (MouseDown) bsLowered und (MouseUp) bsRaised annehmen (bsRaised ist der Startzustand, beim sichtbar werden).

Die leichteste Methode wäre es natürlich, diese Methoden von dem Image abzuleiten, das ich mit benutze, ich weiß aber nicht wie!
Eine MouseEnter und Leave Methode von einem alten Thread von mir abgeguckt (da gings um 'ne ScrollBox).

Bis jetzt mach' ich's so:
Delphi-Quellcode:
type
  TRahmenImage = class(TCustomControl)
  private FOnMouseDown: TNotifyEvent;
    FOnMouseUp: TNotifyEvent;
    FImage: TImage;
    FBevel: TBevel;
    procedure WMMButtonDown(var msg: TMessage); message WM_MBUTTONDOWN;
    procedure WMMButtonUp(var msg: TMessage); message WM_MBUTTONUP;
    procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
    property OnMouseDown: TNotifyEvent read FOnMouseDown write FOnMouseDown;
    property OnMouseUp: TNotifyEvent read FOnMouseUp write FOnMouseUp;
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
    { Published-Deklarationen }
  end;

   { ... }

procedure TRahmenImage.CMMouseEnter(var msg: TMessage);
begin
 if Assigned(FOnMouseEnter) then
    FOnMouseEnter(Self);

 FBevel.Style := bsRaised;
 FBevel.Show;
end;

procedure TRahmenImage.CMMouseLeave(var msg: TMessage);
begin
 if Assigned(FOnMouseLeave) then
    FOnMouseLeave(Self);

 FBevel.Hide;
end;

procedure TRahmenImage.WMMButtonDown(var msg: TMessage);
begin
 if Assigned(FOnMouseDown) then
    FOnMouseDown(Self);

 if FBevel.Visible = False then FBevel.Show;

 FBevel.Style := bsLowered;
end;

procedure TRahmenImage.WMMButtonUp(var msg: TMessage);
begin
 if Assigned(FOnMouseUp) then
    FOnMouseUp(Self);

 if FBevel.Visible = False then FBevel.Show;

 FBevel.Style := bsRaised;
end;
Das MouseEnter und Leave funktioniert, aber das MouseDown und up nicht.
Liegt es vielleicht daran, dass ich WM-Messages nehme, bei den anderen 2 wurde ja CM... verwendet?!

Danke schonmal!
  Mit Zitat antworten Zitat