Форум: "Прочее";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
ВнизКак определить, что мышь над 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c