Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2016, 18:53   #1
dimkoss
Пользователь
 
Регистрация: 06.02.2016
Сообщений: 35
По умолчанию Передача названия объекта в процедуре

Допустим процедура / функция меняет значение Edit1.text. Edit разный, и хочется его передавать, как параметр процедуры. Как такое реализовать?
dimkoss вне форума Ответить с цитированием
Старый 21.03.2016, 18:56   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так и делать, передавать параметром функции TEdit.

И давать всему нормальные имена, а не Edit1, Edit2, ..., Edit99.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 21.03.2016 в 19:02.
Alex11223 вне форума Ответить с цитированием
Старый 21.03.2016, 20:18   #3
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от dimkoss Посмотреть сообщение
Допустим процедура / функция меняет значение Edit1.text. Edit разный, и хочется его передавать, как параметр процедуры. Как такое реализовать?
А оно уже реализовано...
Вы разве не заметили, что любая стандартная процедура имеет хотя бы один обязательный параметр?
Вот вам пример:
Код:
procedure Tfmain.BitBtn1Click(Sender: TObject);
Вот этот Sender класса TObject вам и нужен.
А в теле процедуры вы напишете:
Код:
if (Sender as TEdit).Name='Edit1' then
//сделать то-то...
А вызывать будете именно так:
Код:
BitBtn1Click(Edit1);
//или
BitBtn1Click(Edit2);

Последний раз редактировалось kropotkina-alice; 21.03.2016 в 20:21.
kropotkina-alice вне форума Ответить с цитированием
Старый 21.03.2016, 20:35   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Где автор говорил, что он подписывается на события Edit'ов?

И это не "стандартная процедура", а обработчик события.

И BitBtn1Click(Edit1) это бред, Sender не для этого предназначен и вообще не надо вызывать обработчики событий самому.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 21.03.2016 в 20:55.
Alex11223 вне форума Ответить с цитированием
Старый 21.03.2016, 21:58   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Где автор говорил, что он подписывается на события Edit'ов?
А где вы увидели события Edit'ов?
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
И это не "стандартная процедура", а обработчик события.
Не подскажете, каким переводчиком надо воспользоваться, чтобы перевести слово "procedure" как "обработчик события"?
Кстати, а вот это тоже "обработчик события"?
Код:
procedure Tfmain.MyProc;
var a,b,c: real;
begin
a:=5.2;
b:=3.7;
c:=b/a;
if c<1 then
ShowMessage('Вы женоненавистник?');
end;
Передавайте привет вашему учителю английского. У вас наверное, одни пятерки были?
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
И BitBtn1Click(Edit1) это бред, Sender не для этого предназначен и вообще не надо вызывать обработчики событий самому.
Это вы такое правило установили?
Кстати, "Sender" в переводе означает "передатчик", то есть тот, кто передает команду на выполнение вызываемой процедуры...

Последний раз редактировалось kropotkina-alice; 21.03.2016 в 22:01.
kropotkina-alice вне форума Ответить с цитированием
Старый 21.03.2016, 22:05   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Причем тут procedure, я про event handler. Дельфи ж создает такие процедуры с Sender именно для обработки событий, а не просто так.

И Sender обычно является объектом сгенерировавшим это событие, а не чем попало переданным.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 21.03.2016 в 22:08.
Alex11223 вне форума Ответить с цитированием
Старый 21.03.2016, 22:13   #7
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Дельфи ж создает такие процедуры с Sender именно для обработки событий... И Sender обычно является объектом сгенерировавшим это событие, а не чем попало переданным.
Sender в данном случае является объектом, вызывающим это событие...
Интересно, а почему вы считаете, что этого "вызывателя" нельзя подменить? Я, например, этот прием использую довольно часто...
Кстати, и вам это никто не запрещает...
И я впервые слышу, что это - "бред"...
kropotkina-alice вне форума Ответить с цитированием
Старый 21.03.2016, 22:20   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Sender в данном случае является объектом, вызывающим это событие...
И где логика? У вас Edit вызывает нажатие кнопки?

Тем более что коду внутри этой процедуры скорее всего вообще не нужна никакая кнопка и никакого отношения к обработке ее нажатия он не имеет.

Почему просто не сделать нормальную процедуру
Код:
procedure DoSomethingWithEdit(edt: TEdit);
и не вызвать ее? Заодно не придется кастовать из TObject.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 21.03.2016 в 22:24.
Alex11223 вне форума Ответить с цитированием
Старый 21.03.2016, 22:48   #9
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
И где логика? У вас Edit вызывает нажатие кнопки?
У вас какое-то странное восприятие...
Вообще-то, если вы внимательно посмотрите, событие вызывается нажатием на BitBtn.
И обработчик для этого события будет вызван в любом случае, кого бы мы сэндером ни назначили.
И кто мне запрещает указать сэндером не BitBtn (что происходит по умолчанию), а любой другой объект???
По вашей логике вы предлагаете плодить процедуры и вызывать из обработчика для BitBtn какую-то дополнительную DoSomethingWithEdit(edt: TEdit)...
А если мне понадобится по нажатию на BitBtn сотворить нечто с TPanel, к примеру?
Добавлять еще и DoSomethingWithPanel(pnl: TPanel)???
А если действия и в том, и в другом случае идентичны? Плодить одинаковые куски кода?
Извините, но вы сами знаете устоявшееся название для такого... м-м-м... "кода"...
З.Ы.
От дальнейшего бесплодного флуда уклоняюсь, ибо взаимопонимание маловероятно...
kropotkina-alice вне форума Ответить с цитированием
Старый 21.03.2016, 22:56   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну DoSomething это просто пример как Foo и Bar, на самом деле она должна иметь нормальное имя соответствующее задаче. Например, DrawBorder, HighlightErrorEdit, Clear, Fill(edit, data) и т.п.

Никто не запрещает, просто обычно так не делают, и не пихают весь подряд код в обработчик события кнопки, а разделяют его на процедуры (выполняющие какую-то четкую задачу). Это как раз и поможет не "плодить одинаковые куски кода".
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 21.03.2016 в 23:00.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров в хранимой процедуре Maxjuvefan БД в Delphi 7 17.09.2015 14:09
createthread и передача параметра процедуре fucil Win Api 9 19.01.2012 19:19
[Delphi] Передача параметров процедуре Язь Помощь студентам 0 09.12.2011 17:38
Передача процедуре статического массива cod48 Общие вопросы Delphi 1 24.08.2010 21:07
Передача параметра процедуре FormCreate Grandistok Общие вопросы Delphi 3 24.04.2010 15:42