![]() |
| ||
|
|
Новости |
Поиск |
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)?
Большая просьба просто объяснить. Специально задал вопрос в разделе "Начинающим". Не нужно каких-то ненужных комментариев, типа: А зачем это нужно? А не проще ли...? Ты не понимаешь разницу между..., Ты не знаешь азов... и т.д.
Заранее спасибо.
Германн (2014-10-23 02:13:00) [1]
> Плохиш © (23.10.14 02:12) [40]
+1
Опоздал со своим ответом. Я хотел предложить несколько другой бред. :)
Плохиш (2014-10-23 02:12:00) [2]Не только поставить телегу впереди лошади, но ещë и придушить эту кобылу...
Предлагаю внедрить в поделку веб-сервисы, штук надцать, на каждоë дëрганье свой и датаснап, для кучи.
DQ (2014-10-22 20:29:00) [3]эх... В любом случае если " обработчик кнопок выносить в отдельный модуль, разбивать на отдельные процедуры" то дёргать оттуда обратно за интерфейс....
Германн (2014-10-22 01:39:00) [4]
> Kilkennycat © (21.10.14 10:58) [30]
>
>
> > не связанную напрямую с нажатием кнопки? И ту же процедуру
> > вызывать при нажатии кнопки?
>
> конечно же можно. ненапрямую. написать функцию, весь смысл
> которой в вызове другой функции. вот уж не ожидал такого
> предложения от электронщика ;)
Боюсь ты меня не понял или понял с точностью до наоборот.
Kilkennycat (2014-10-21 22:05:00) [5]Да, если мы будем углубляться в частности мы получим миллионы разных комбинаций, где оба будем правы. И даже где еще куча мнений будет иметь право.
Но я не за это "борюсь" )
Я против навязывания шаблонов, типа неиспользования гоу-ту, разделения обработчиков и т.д.
Мы же не знаем конкретную задачу автора. А он создает не идеологию, а конкретную программу. И не зная частностей, крайне глупо утверждать, что так делать нельзя.
На мой взгляд, всегда считать байт 8-мибитным и начало нумерации массивов с нуля - это ограничить свое мышление, убить в зародыше возможные изящные решения.
Inovet (2014-10-21 20:55:00) [6]> [35] Inovet © (21.10.14 20:52)
> неисправность предохранителя нагревателя
"нагреватель" заменить на "регулирующий вентиль".
Inovet (2014-10-21 20:52:00) [7]Общие примеры можно привести. Тот же регулятор температуры.
Температура в баке 98Ц. Работа прораммы:
Ручной режим. Выводим рядом с копкой "+" красную надпись "Максимально допустимая температура". Запрещаем кнопку "+", или при попытке нажатия вежливым поставленным голосом сообщаем "Тепература достигла предела, в целях предотвращения взрывной аварии резервуара, дальнейшее увеличение не было произведено".
Автоматический режим. Выводим рядом с копкой "+" красную надпись "Максимально допустимая температура". При поступлении положительной разности от компаратора, вежливым поставленным голосом сообщаем "Внимание! Неполадки в системе. Возможные причины и способы их устранениня: утечка тепла в следствии открытых окон в зимний период - закройте окна, закрыты технологические вентили на радиаторах - откройте технологические вентили, неисправность предохранителя нагревателя - замените предохранитель, В остальных случаях обратитесь за помощью в авторизированный сервисный центр."
Несколько разные пути у обработчика кнопки и обработчика компаратора.
Kilkennycat (2014-10-21 19:22:00) [8]субъективно.
Inovet (2014-10-21 17:01:00) [9]> [32] Kilkennycat © (21.10.14 11:55)
> пользователем?
Собой
Kilkennycat (2014-10-21 11:55:00) [10]
> Inovet © (21.10.14 11:18) [31]
для читаемости кем? пользователем?
Inovet (2014-10-21 11:18:00) [11]> [30] Kilkennycat © (21.10.14 10:58)
Ну так это правильнее вообще-то, для читаемости.
Kilkennycat (2014-10-21 10:58:00) [12]
> не связанную напрямую с нажатием кнопки? И ту же процедуру
> вызывать при нажатии кнопки?
конечно же можно. ненапрямую. написать функцию, весь смысл которой в вызове другой функции. вот уж не ожидал такого предложения от электронщика ;)
Германн (2014-10-21 02:34:00) [13]
> kilkennycat © (20.10.14 21:15) [28]
>
> Глупости какие. Как может быть связан код внутри обработчика
> с такими теориямио желаниях программиста и буратинах?
>
> Пример: есть некий регулятор температуры (код в обработчике),
> занимающийся охрененной процедурой нагрева-охлаждения.
> Есть две кнопки, которыми можно вручную нагревать-охлаждать.
> Они вызывают эту процедуру.
> Есть автоматический режим. Он выключает эти кнопки, но суть
> его действий, что он тоже то одну нажмет, то другую.
>
> И что, писать кучу одинакового, чтоб не быть буратиной?
А что в автоматическом режиме нельзя вызывать некую процедуру "нагрева-охлаждения", не связанную напрямую с нажатием кнопки? И ту же процедуру вызывать при нажатии кнопки?
kilkennycat (2014-10-20 21:15:00) [14]Глупости какие. Как может быть связан код внутри обработчика с такими теориямио желаниях программиста и буратинах?
Пример: есть некий регулятор температуры (код в обработчике), занимающийся охрененной процедурой нагрева-охлаждения. Есть две кнопки, которыми можно вручную нагревать-охлаждать. Они вызывают эту процедуру.
Есть автоматический режим. Он выключает эти кнопки, но суть его действий, что он тоже то одну нажмет, то другую.
И что, писать кучу одинакового, чтоб не быть буратиной?
NoUser (2014-10-20 16:10:00) [15]> azl (20.10.14 14:21) [26]
;))))
> Т.к., при неактивной кнопке мышкой ее нажать нельзя,
Вот-вот, именно этого наверное и хотел программист, когда в какой-то момент времени делал кнопку неактивной !
> а с помощью этого метода процедура OnClick все равно выполнится.
А это уже какой-то другой --буратино-- программист, все равноищет способ проткнуть носом печку, - мол, есть же законный способ сделать это, а вы, господа Мастера, от меня его утаиваете...
azl (2014-10-20 14:21:00) [16]
> Не совсем так или совсем не так.
http://delphimaster.net/view/2-1293352804/8
Не совсем так, согласен. Т.к., при неактивной кнопке мышкой ее нажать нельзя, а с помощью этого метода процедура OnClick все равно выполнится.
Германн (2014-10-20 01:44:00) [17]
> Ну и наконец Form1.Button2.Click; - метод, предназначенный
> для программного нажатия кнопки. Например, если нужно много
> раз нажимать кнопку, скажем, через определенный интервал.
> Чтобы не делать этого вручную, можно это сделать по таймеру.
> Указав в обработчике таймера Button2.Click; По сути таймер
> вместо нас будет кликать эту кнопку.
Не совсем так или совсем не так. Но тут ещё читать и читать в т.ч. справку по TAction. Ибо этот метод появился только с появлением в Делфи акций.
Inovet (2014-10-19 15:17:00) [18]> [23] Inovet © (19.10.14 14:14)
> Send
Sender
Inovet (2014-10-19 14:14:00) [19]Вопрос "что такое send"? Вот что туда поставишь, то и будет вызывателем события, а что с этим делать или не делать, уже решать в обработчике. Вообще Send как раз и нужен, чтобы можно было обратиться к объекту, независимо от текущих имён, от текущего количества объектов на форме и т.п..
Как там его использовать уже зависит от желаний. Может, мне надо просто определить кнопка это или кнопка_с_приделанной_мной_финтифлюшкой - это одно, а, может, я насоздавал динамически (в рантайм) 100 кнопок и присвоил один обработчик, тогда определять буду что за кнопка - это другое, а, може... и пятое, и десятое, и ещё много чего може.
azl (2014-10-19 13:08:00) [20]
> kilkennycat ©
Золотые слова. Абсолютно со всем согласен и добавить нечего. Спасибо большое.
Тут вопрос был даже не в том, как лучше или как правильнее. Просто хотел услышать объяснение для полного понимания.