Итак, когда курсор мышки попадает в область кнопки (WmMouseMove), то компонент запускает таймер либо счётчик количества сообщений о перемещении. По истечении определённого времени либо при получении нужного количества сообщений о перемещении, компонент эмулирует событие нажатия кнопкой.
Code: |
procedure TAutoButton2.WmMouseMove (var Msg: TWMMouse); begin inherited; if not Capture then begin SetCapture (Handle); Capture := True; CurrMov := 0; if FAutoKind <> akMovement then begin MyTimer := TTimer.Create (Parent); if FSeconds <> 0 then MyTimer.Interval := 3000 else MyTimer.Interval := FSeconds * 1000; MyTimer.OnTimer := TimerProc; MyTimer.Enabled := True; end; end else // захватываем begin if (Msg.XPos > 0) and (Msg.XPos < Width) and (Msg.YPos > 0) and (Msg.YPos < Height) then begin // если мы подсчитываем кол-во движений... if FAutoKind <> akTime then begin Inc (CurrMov); if CurrMov >= FMovements then begin if Assigned (OnClick) then OnClick (self); EndCapture; end; end; end else // за пределами... стоп! EndCapture; end; end;
procedure TAutoButton2.EndCapture; begin Capture := False; ReleaseCapture; if Assigned (MyTimer) then begin MyTimer.Enabled := False; MyTimer.Free; MyTimer := nil; end; end;
procedure TAutoButton2.TimerProc (Sender: TObject); begin if Assigned (OnClick) then OnClick (self); EndCapture; end;
procedure TAutoButton2.WmLBUttonDown (var Msg: TMessage); begin if not Capture then inherited; end;
procedure TAutoButton2.WmLButtonUp (var Msg: TMessage); begin if not Capture then inherited; end; |
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!