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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2011, 17:55   #1
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
Вопрос Как для визуального объекта запустить выполнение OnChange без изменения данных?

Здравствуйте!
Есть кнопка A, по нажатию которой из процедуры A_OnPress нужно вызвать у поля для ввода B событие-процедуру установленное на OnChange - B_OnChange.
Заковырка в том, что в обработчике B_OnChange используются Self,Sender, то есть нельзя просто вызвать процедуру B_OnChange из кода A_OnPress, нужно чтобы процедуру вызвал сам объект B! (как будто данные действительно изменились)
Пробовал кучу разных вариантов - либо ничего не происходит, либо критическая ошибка. Можно конечно i:=B.Text,B.Clear,B.Text:=i - но это как-то тупо.
Как же вызвать процедуру OnChange от имени того объекта без Change???
delphicoding вне форума Ответить с цитированием
Старый 01.10.2011, 17:57   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

B_OnChange(B)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.10.2011, 18:17   #3
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Спасибо. То есть нужно обязательно точно указать "якобы отправлявшего запрос"? Просто процедура B_OnChange на самом деле универсальная и стоит на множестве объектов, поэтому гораздо лучше бы подошло нечто типа: Bx.OnChange(Self); - но такая строка при вызове из другой процедуры (A_OnPress) другого объекта (A) вызывает ошибку может таки есть более универсальный метод?
delphicoding вне форума Ответить с цитированием
Старый 01.10.2011, 18:29   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В вашем случае Self - указатель на форму. А какой может быть более универсальный способ? Если в B_OnChange значение параметра Sender актуально, то надо и актуальное значение ему передавать. Если Sender в B_OnChange не используется - спокойно nil передавайте
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.10.2011, 19:02   #5
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Всё, заработало вот так TField(Sender).OnChange(Sender). Спасибо за наводку!
delphicoding вне форума Ответить с цитированием
Старый 01.10.2011, 19:09   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Есть кнопка A, по нажатию которой из процедуры A_OnPress нужно вызвать у поля для ввода B событие-процедуру установленное на OnChange - B_OnChange.
Т.е. параметр Sender процедуры A_OnPress (Sender - указатель на кнопку A) передаете в качестве параметра для B_OnChange поля ввода B? Круто
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.10.2011, 19:13   #7
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Там сложная связка, очень долго объяснять. Но в общем заработало как написано.
Спасибо!
delphicoding вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Вызов метода без создания объекта. Предотвращение изменения фокуса. Colder M Помощь студентам 3 03.05.2011 23:42
Как поменять одну из текстур объекта не меняя все остальные и без повторной загрузки объекта в GLScene DomKr@t Мультимедиа в Delphi 0 14.12.2008 01:52
Диассемблиравание для изменения строковых данных без знания ассемблера GanGSISoft Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 06.10.2008 20:35
Как запустить на выполнение шаблон класса FTemplate? unwanted Общие вопросы Delphi 3 14.08.2007 11:44
Как уменьшить картинку быстро но без изменения палитры Joker_kpi Общие вопросы Delphi 2 04.06.2007 23:49