Выполнение альтернативной процедуры для двух объектов

Рейтинг: 1Ответов: 1Опубликовано: 09.04.2011

Есть два объекта: Button1, Image1. Хочу, чтобы нажимая на картинку, выполнялась та же процедура, что и при нажатии на кнопку. Как реализовать:?

procedure TProForm.Button1Click(Sender: TObject);
begin
MessageBox(handle,'Нажали на кнопку! Нажмите на картинку','БД',mb_ok);
end;

procedure TProForm.Image1Click(Sender: TObject);
begin

end;

Можно, конечно, просто копировать всё то, что есть в первой процедуре, а что если код огромный, что делать?

Ответы

▲ 2

Все очень просто

procedure TProForm.Click(Sender: TObject);
var
  myBtn: TButton;
  myImg: TImage;
begin 
 if Sender is TButton then
   begin
      myBtn := (Sender as TButton);
     //код, если нажата кнопка
   end;
 if Sender is TImage then
   begin
      myImg := (Sender as TImage);
     //код, если нажата картинка
   end;
 //общий код
end;

А в редакторе Events можете указать на эту процедуру для обоих объектов. Либо сделать динамически, например в методе OnFormCreate:

myButton.onClick := self.Click;
myImage.onClick := self.Click;

Если мне не изменяет память, то вот так, нету под рукой дельфей, чтобы проверить.

UPD

А еще можно ваш способ использовать так:

procedure TProForm.CommonClick;
begin
 //ваш длинный код
end;

procedure TProForm.Button1Click(Sender: TObject);
begin
 self.CommonClick;
end;

procedure TProForm.Image1Click(Sender: TObject);
begin
 self.CommonClick;
end;

Или же мой:

procedure TProForm.Click(Sender: TObject);
var
  myBtn: TButton;
  myImg: TImage;

 procedure DoSomthing;
 begin
  //ваш длинный код
 end;

begin 
 if Sender is TButton then
   begin
     myBtn := (Sender as TButton);
     DoSomthing;
   end;
 if Sender is TImage then
   begin
     myImg := (Sender as TImage);
     DoSomthing;
   end;
end;