![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов процедуры OnClick из модуля
azl © (2014-10-17 20:48:00)Здравствуйте, уважаемые мастера.
Есть форма Form1. На форме 2 кнопки. Есть модуль Unit2 (без формы).
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Test;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('Button2Click');
end;
end.
unit Unit2;
interface
procedure Test;
implementation
uses Unit1;
procedure Test;
begin
Form1.Button2Click(Form1);
end;
end.
Либо:
unit Unit2;
interface
procedure Test(Sender: TObject);
implementation
uses Unit1;
procedure Test(Sender: TObject);
begin
Form1.Button2Click(Sender);
end;
end.
Ну и, соответственно, вызов процедуры Test будет таков:
procedure TForm1.Button1Click(Sender: TObject);
begin
Test(Self);
end;
1. Объясните, пожалуйста, популярно в чем разница между:
Form1.Button2Click(Sender); //Только при условии, что процедура объявлена как: procedure Test(Sender: TObject);
Form1.Button2Click(Form1);
Form1.Button2Click(nil);
Form1.Button2.Click;
2. Есть ли необходимость объявлять, как procedure Test(Sender: TObject)?
Большая просьба просто объяснить. Специально задал вопрос в разделе "Начинающим". Не нужно каких-то ненужных комментариев, типа: А зачем это нужно? А не проще ли...? Ты не понимаешь разницу между..., Ты не знаешь азов... и т.д.
Заранее спасибо.
MBo (2014-10-17 22:11:00) [41]не проверял корректность, но для строк
Form1.Button2Click(Sender); //Только при условии, что процедура объявлена как: procedure Test(Sender: TObject);
Form1.Button2Click(Form1);
Form1.Button2Click(nil);
Вызовется метод-обработчик события OnClick, в который в качестве аргумента передаётся то, что в скобках
А зачем это нужно?Подобные ручные вызовы обработчиков - плохой код.
Form1.Button2.Click;
Вызовется метод Click, внутри которого, в частности, вызывается обработчик OnClick, если он был назначен, а аргументом обработчика будет экземпляр кнопки Button2