Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов процедуры OnClick из модуля


Страницы:   1 2 3

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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо