Hej
Kan man lave det sådan, at når musen bevæges over bitbtn,
så skifter font'en fave f.eks fra sort til blå?
Kan du give et kode eksempel?
Med venlig hilsen
Monie Jacobsen
E-mail: energy@sunwind.dk
Hej,
Du kan "fange" alle mus'e events samt skifte font farven når musen er over din bitbtn (OnMouseMove) og når så din x eller y (på musen) er uden for din bitbtn så kan skifte farven tilbage.
Det kan gøres på følgende måde:
For at få det til at fungere skal du lave en form med en bitbtn og dobbelt klikke på "OnMouseMove" i Object Inspector'en.
Du skal nu tilføje 2 variabler til din form (under private) :
FOldCapture : HWND;
FCaptured : Boolean;
De 2 variabler skal initialiseres i din forms "FormCreate" event:
FOldCapture := 0;
FCaptured := False;
Koden her under sætter du ind i event-funktionen "TForm1.BitBtn1MouseMove".
procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1.Caption := '('+IntToStr(X)+','+IntToStr(Y)+')';
if not FCaptured then
begin // okay, vi skal fange alle mousemove events.
FOldCapture := Windows.SetCapture(TBitBtn(Sender).Handle);
BitBtn1.Font.Color := RGB(255,0,0);
FCaptured := True;
end
else
begin
if (X < 0) or (X > TBitBtn(Sender).Width) or
(Y < 0) or (Y > TBitBtn(Sender).Height) then
begin // Vi er uden for vores bitbtn
BitBtn1.Font.Color := RGB(0,0,0);
Windows.ReleaseCapture;
Windows.SetCapture(FOldCapture);
FOldCapture := 0;
FCaptured := False;
end;
end;
end;
Hele din unit burde ende op med at se således ud:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
FOldCapture : HWND;
FCaptured : Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
FOldCapture := 0;
FCaptured := False;
end;
procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
// Label1.Caption := '('+IntToStr(X)+','+IntToStr(Y)+')';
if not FCaptured then
begin // okay, vi skal fange alle mousemove events.
FOldCapture := Windows.SetCapture(TBitBtn(Sender).Handle);
BitBtn1.Font.Color := RGB(255,0,0);
FCaptured := True;
end
else
begin
if (X < 0) or (X > TBitBtn(Sender).Width) or (Y < 0) or (Y > TBitBtn(Sender).Height) then
begin // Vi er uden for vores bitbtn
BitBtn1.Font.Color := RGB(0,0,0);
Windows.ReleaseCapture;
Windows.SetCapture(FOldCapture);
FOldCapture := 0;
FCaptured := False;
end;
end;
end;
end.
/Michael.
[Redigeret d. 29/12-03 21:52:42 af Michael Skovslund][Redigeret d. 29/12-03 21:53:11 af Michael Skovslund]