Текущий архив: 2003.05.19;
Скачать: CL | DM;
ВнизМоя кнопка (Код прилагается) Найти похожие ветки
← →
tytus (2003-05-03 09:04) [0]Доброе утро ВСЕМ. Когда кладу свою кнопку на форму, то при наведении на ней мышкой или изменении Caption-а, кнопка произвольно меняет свой цвет. А когда запускаю программу - то все нормально... В Чем тут дело?????
Код кнопки
unit MB;
{$S-,W-,R-,H+,X+}
{$C PRELOAD}
interface
uses
SysUtils, Windows, Messages, Classes, Controls, Forms, Graphics, StdCtrls,
ExtCtrls, CommCtrl;
type
TMButton = class(TGraphicControl)
private
{ Private declarations }
MouseOnControl:Boolean;
FOnMouseEnter:TNotifyEvent;
FOnMouseLeave:TNotifyEvent;
FCaption:string;
FDeep3D:integer;
FColor:tColor;
FColorOn:TColor;
FColorBg:TColor;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure MbDrawText(const x:integer;Caption:string);
protected
{ Protected declarations }
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure Paint; override;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Click; override;
property OnMouseEnter:TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave:TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
published
{ Published declarations }
property Caption:string read FCaption write FCaption;
property Deep3D:integer read FDeep3D write FDeep3D;
property OnColor:TColor read FColorOn write FColorOn;
property BgColor:TColor read FColorBg write FColorBg;
property Color:TColor read FColor write FColor;
property OnClick;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property ParentShowHint;
property ShowHint;
end;
procedure Register;
implementation
var PaintRect:TRect;
procedure Register;
begin
RegisterComponents("MaPage", [TMButton]);
end;
constructor TMButton.Create(AOwner:TCOmponent);
begin inherited Create(AOwner);
MouseOnControl:=False;
setbounds(10,10,75,25);
FColorOn:=$00efd3c6;
FColorBg:=$00c66931;
FColor:=$00efd3c6;
FCaption:="MButton";
FDeep3D:=1;
end;
destructor TMButton.Destroy;
begin
inherited Destroy;
end;
procedure TMButton.Paint;
var i:integer;
begin
PaintRect:=ClientRect;
canvas.Pen.Color:=Fcolor;
with canvas do begin
for i:=paintrect.Top to (paintrect.Top+paintrect.Bottom) do begin
MoveTo(paintrect.Left,i);
LineTo(paintrect.Right,i);
Pen.Color:=canvas.Pen.Color-$6ff;
end; end;
frame3d(canvas,paintrect,FColorOn,FColorBg,FDeep3D);
MbDrawText(0,FCaption);
end;
procedure TMButton.Click;
begin
inherited click;
end;
procedure TMButton.CMMouseEnter(var Message:TMessage);
begin
MouseOnControl:=True;
Fcolor:=Fcolor+$2eff;
repaint;
end;
procedure TMButton.CMMouseLeave(var Message:TMessage);
begin MouseOnControl:=False;
Fcolor:=FColor-$2eff;
repaint;
end;
procedure TMButton.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
var cap:string;
begin
if MouseOnControl=true then begin
Cap:=FCaption; FCaption:="";repaint;
paintrect:=clientrect; { invalidate;}
Frame3d(canvas,paintrect,FColorBg,FColorOn,FDeep3D);
FCaption:=Cap; mbdrawtext(1,FCaption);
inherited MouseDown(Button, Shift, X, Y);
end;
end;
procedure TMButton.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
repaint;
inherited MouseUp(Button, Shift, X, Y);
{ invalidate;}
end;
procedure TMButton.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
inherited MouseMove(Shift, X, Y);
{invalidate; }
end;
procedure TMButton.MbDrawText(const x:integer;Caption:string);
begin canvas.Font.Color:=clblack;
setbkMode(canvas.Handle,transparent);
OffSetRect(PaintRect,x,x+3);
DrawText(canvas.Handle,PChar(FCaption),Length(FCaption),PaintRect,dt_Center);
end;
end.
← →
damx (2003-05-03 12:35) [1]Лучше объясни, что и как ты делаешь, а то в такой длинный код никто вникать не будет :)
← →
Dima1 (2003-05-04 02:25) [2]попробуй вставить в обработчик:
такое...
procedure TMButton.CMMouseLeave(var Message:TMessage);
begin
if csDesigning in ComponentState then exit;
.....
И не мешало бы обработать сообщение "MouseIn" где надо бы тоже
аналогичный код вставить. Например:
procedure TMyButton.MouseIn(var msg: tmessage);
begin
if csDesigning in ComponentState then exit;
.....
Дерзай
← →
Um (2003-05-07 14:39) [3]CMMouseLeave может произойти и без CMMouseEnter
нажал, подвел, отпустил, вышел и Fcolor:=FColor-$2eff!
Какая взаимосвязь между цветами?
А в дизайне у меня всё ок!
Только отловить надо CM_FONTCHANGED,CM_TEXTCHANGED,CM_SYSCOLORCHANGE
и установку цвета делать через процедуру с обновлением!
Какая должна быть кнопка: с градиентом и ярче при наведении?
Страницы: 1 вся ветка
Текущий архив: 2003.05.19;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.006 c