Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

Как определить, что мышь над TToolButton.   Найти похожие ветки 

 
Duo   (2007-11-24 04:41) [0]

type
 TToolButton = class(ComCtrls.TToolButton)
 private
 protected
   procedure Paint; override;
 end;

...

procedure TToolButton.Paint;
begin
 inherited;

 if Что-то then beep;

end;


Нужно, для ручной отрисовки.


 
Duo   (2007-11-24 04:45) [1]

Когда мышь наводишь на эту кнопку, то срабатывает Paint, и когда сводишь с кнопки, тоже срабатывает Paint. Но вот как понять, что мышь над кнопкой - не понятно.


 
engine ©   (2007-11-24 09:07) [2]

> [1] Duo   (24.11.07 04:45)

procedure TForm1.ToolButton1MouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);
begin
if Что-то then Чего-то;
end;


 
Черный Шаман   (2007-11-24 20:54) [3]

Лови
   procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
   procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

И при перехвате сообщения ставь флаговую переменную и Invalidate.


 
цц   (2007-11-24 21:56) [4]

емнип, этот компонент не имеет оконного хэндла
отсюда и геморрой


 
Черный Шаман   (2007-11-24 23:23) [5]


> цц   (24.11.07 21:56) [4]
>
> емнип, этот компонент не имеет оконного хэндла
> отсюда и геморрой
>


А он ему и не нужен.

CM_MOUSELEAVE и CM_MOUSEENTER это внутренние сообщения VCL, доступны для всех наследников TControl.


 
Duo   (2007-11-25 01:21) [6]


> Черный Шаман   (24.11.07 20:54) [3]
>
> Лови

А попроще нельзя?


 
Германн ©   (2007-11-25 01:31) [7]


> Duo   (25.11.07 01:21) [6]
>
>
> > Черный Шаман   (24.11.07 20:54) [3]
> >
> > Лови
>
> А попроще нельзя?
>


> Duo   (25.11.07 01:21) [6]
>
>
А чем это сложно?
> > Черный Шаман   (24.11.07 20:54) [3]
> >
> > Лови
>
> А попроще нельзя?
>


 
Черный Шаман   (2007-11-25 04:21) [8]



 TToolButton = class(ComCtrls.TToolButton)
 private
   FMouseEntered: Boolean;
   procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
   procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
 protected
   procedure Paint; override;
 end;

procedure TToolButton.CMMouseEnter(var Message: TMessage);
begin
 inherited;
 FMouseEntered := True;
 Invalidate;
end;

procedure TToolButton.CMMouseLeave(var Message: TMessage);
begin
 inherited;
 FMouseEntered := False;
 Invalidate;
end;

procedure TToolButton.Paint;
begin
 inherited;
 if (FMouseEntered) then
   рисуем розового крокодильчика
 else
   рисуем голубого крокодильчика;

end;


 
Duo   (2007-11-25 05:11) [9]

Спасибо !
Пошёл пробовать.

Я смотрю, у TButton и TBitBtn, нету что ли процедуры Paint?
Или вместо неё используется какая-то другая?

Заинтересовался TButton и TBitBtn потому, что у них есть фокус в отличии от ToolButton.


 
Черный Шаман   (2007-11-25 17:16) [10]


> Duo   (25.11.07 05:11) [9]


Посмотри как реализовано в TCustomControl, наследника от TWinControl и сделай так же.

TButton наследник от TWinControl


 
Duo   (2007-11-26 02:22) [11]


> Черный Шаман   (25.11.07 17:16) [10]
>
>
> > Duo   (25.11.07 05:11) [9]
>
>
> Посмотри как реализовано в TCustomControl, наследника от
> TWinControl и сделай так же.


Не понял, куда посмотреть?
То есть самому полностью написать кнопку?


 
Черный Шаман   (2007-11-26 04:51) [12]


> Duo   (26.11.07 02:22) [11]
>
>
> > Черный Шаман   (25.11.07 17:16) [10]
> >
> >
> > > Duo   (25.11.07 05:11) [9]
> >
> >
> > Посмотри как реализовано в TCustomControl, наследника
> от
> > TWinControl и сделай так же.
>
>
> Не понял, куда посмотреть?
> То есть самому полностью написать кнопку?


Нет, ловить WM_Paint и отрисовывать самому. Все остальное будет из стандартной кнопки.


 
Duo   (2007-11-27 02:15) [13]


> Черный Шаман   (26.11.07 04:51) [12]
> Нет, ловить WM_Paint и отрисовывать самому. Все остальное
> будет из стандартной кнопки.


Отловил. А канваса нету. На чём теперь рисовать?


 
Duo   (2007-11-28 02:10) [14]

Up


 
Черный Шаман   (2007-11-28 03:59) [15]


> Duo   (27.11.07 02:15) [13]
>
>
> > Черный Шаман   (26.11.07 04:51) [12]
> > Нет, ловить WM_Paint и отрисовывать самому. Все остальное
> > будет из стандартной кнопки.
>
>
> Отловил. А канваса нету. На чём теперь рисовать?


Ты все таки дубина :)

А канвас самому нужно создавать из TControlCanvas.


constructor TCustomControl.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FCanvas := TControlCanvas.Create;
 TControlCanvas(FCanvas).Control := Self;
end;


 
Duo   (2007-12-02 06:39) [16]


> Черный Шаман   (28.11.07 03:59) [15]
> Ты все таки дубина :)

Так себя вести не красиво. Не это поднимает ввысь.


> А канвас самому нужно создавать из TControlCanvas.


Теперь проблема, что если раньше нажатость кнопки отлавливалась через
if    (csLButtonDown in ControlState)
, то для TButton - это не работает.



Страницы: 1 вся ветка

Текущий архив: 2007.12.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
2-1196851391
Максим
2007-12-05 13:43
2007.12.30
DLL


8-1172084201
ы
2007-02-21 21:56
2007.12.30
картинка над фоном


2-1196721513
ZGadget
2007-12-04 01:38
2007.12.30
Отделение текста от бинарника


2-1196686616
Alexandr Malygin
2007-12-03 15:56
2007.12.30
Арифметика


2-1196750879
Kolan
2007-12-04 09:47
2007.12.30
А можно у TreeView отключить рисование пунктирных точек?