Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Вниз

Моя кнопка (Код прилагается)   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
14-59864
Slavik
2003-04-29 01:12
2003.05.19
Transfer of application from Delphi 5 to Delphi 7


3-59617
dtm
2003-04-28 19:11
2003.05.19
Суммирование количества записей в QReport


1-59685
lightix
2003-05-07 16:31
2003.05.19
Вопрос по QReport


6-59827
AlexeyMir
2003-03-22 13:01
2003.05.19
Лок-ая сеть


1-59794
Anatoly P
2003-05-06 21:39
2003.05.19
ToolButton





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский