Выполнить действие для автоматически отключенной кнопки в Delphi - PullRequest
3 голосов
/ 08 октября 2008

У меня есть одно действие, которое я хочу выполнить, когда нажата кнопка TSpeedButton, и другое, которое я хочу выполнить, когда та же кнопка «нажата». Я знаю, что нет события onunpress, но есть ли для меня какой-нибудь простой способ заставить действие выполняться при нажатии другой кнопки?

procedure ActionName.ActionNameExecute(Sender: TObject);
begin
  PreviousActionName.execute(Sender);
  //
end;

Кажется слишком неуклюжим.

Ответы [ 2 ]

5 голосов
/ 09 октября 2008

Из того, что вы описали, я полагаю, что вы используете свою скоростную кнопку с GroupIndex <> 0, но без других кнопок в той же группе, или, по крайней мере, не работаете как RadioButtons (AllowAllUp True).

У вас есть только 1 событие onClick для нажатия кнопки, но что делать, зависит от состояния кнопки, если она имеет GroupIndex.
Итак, вы должны проверить, чтобы Down был False в вашем обработчике события onClick, так как Down обновляется до запуска обработчика onClick.

например:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  with Sender as TSpeedButton do
  begin
    if Down then
      showmessage('pressing')
    else
      showmessage('unpressing');
  end;
end;
5 голосов
/ 08 октября 2008

Нет распаковки, но вы можете запросить свойство Down.

В примере использовались некоторые грязные приведения, но он работает как для действия, так и для OnClick.

procedure Form1.ActionExecute(Sender: TObject);
var
  sb : TSpeedButton;
begin
  if Sender is TSpeedButton then
    sb := TSpeedButton(Sender)
  else if (Sender is TAction) and (TAction(Sender).ActionComponent is TSpeedButton) then
    sb := TSpeedButton(TAction(Sender).ActionComponent)
  else 
    sb := nil;

  if sb=nil then
    DoNormalAction(Sender)
  else if sb.Down then
    DoDownAction(sb)
  else 
    DoUpAction(sb);
end;
...