Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Хочу свой SpeedButton


Автор: Reaper 2.4.2004, 18:42
Создаю компонент наследником от TGraphicControl.
Как сделать так, что бы при наведении мыши кнопка изменялась постепенно
(например разворачивалась).

Автор: pascal 3.4.2004, 03:36
отслеживаем приход / уход и сохраняем статус в переменной компоненты
Код

 TTest = class(TGraphicControl)
 private
 ...
   procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
   procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
 ...


ставим на приходе / уходе таймер
Код

       SetTimer(FHandle, XXX, FAnimateTime, nil)

где:
  FHandle - Handle объекта кому будет приходить сообщение таймера
  FAnimateTime - время через которое будет следующий шаг анимации (желательно не меньше 50)
  XXX - информация которая будет возвращена тебе в сообщении таймера
           кстати XXX это ещё и уникальный идентификатор таймера в пределах FHandle
           то есть если попытаешься создать ещё один таймер с тем же XXX, то будет изменён старый
           кстати на приходе и уходе используй одинаоквый XXX
           (так проще и для тебя и для операционки)

теперь остался последний шаг, обработка событый таймера
Код

 TTest = class(TGraphicControl)
 ...
 protected
 ...
   procedure WndProc(var Message: TMessage);
 ...

procedure TTest.WndProc(var Message: TMessage);
begin
 if Message.Msg=WM_TIMER then
 begin
   if Message.WParam=XXX then
   begin
     ... // обратываем
     if (последний кадр) then KillTimer(FHandle, XXX);
   end;
 end
 else with Message do Result := DefWindowProc(FHandle, Msg, WParam, LParam);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)