powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как повесить обработчик события, определенный в дургом модуле?
22 сообщений из 22, страница 1 из 1
Как повесить обработчик события, определенный в дургом модуле?
    #34862248
Quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы не повторять его в нескольких модулях...
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862458
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Quazarчтобы не повторять его в нескольких модулях...
А в чем проблема? Это же обычный метод класса. Есть же модификаторы: public, static. Можно даже глобальным сделать.
Лишь бы компилятор и линковщик "ушли довольными". ;)
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862488
Quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоесть все равно опеределяется обработчик в каждой форме, из когорого вызывается необходимый метод... так?... просто в DFM пишется
Код: plaintext
<имя события> = <имя метода>
... но имя ищет только в локальном моделе... я подумал, можно ли как то сделать ссылку на другой модуль...
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862502
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Определи функцию, можно и глобально, и вызывай её из любого обработчика, к примеру ...
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862536
Quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глобально - это имеется ввиду вне класса?)
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862644
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, если религия позволяет и ко внутренним структурам доступ не нужен
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862676
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
QuazarТоесть все равно опеределяется обработчик в каждой форме, из когорого вызывается необходимый метод... так?... просто в DFM пишется
Код: plaintext
<имя события> = <имя метода>
... но имя ищет только в локальном моделе... я подумал, можно ли как то сделать ссылку на другой модуль...
Естественно у каждой формы в хедере обработчик должен быть определен. Однако, его реализация м.б. просто инлайн подстановка вызова какой-то функции.
Для компилятора достаточно добавить #include ".."
Увлекаться глобальными методами нехорошо. Это противоречит принципам ООП. Если нельзя выкрутиться в рамках классов, значит проектировщик хреновый. Однако редко-редко все этим грешат. :))
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862685
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот-вот, я про религию и упомянул
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862732
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Quazar... но имя ищет только в локальном моделе... я подумал, можно ли как то сделать ссылку на другой модуль...

По моему, в Qt это делается легко и непринуждённо.
Код: plaintext
QObject::connect(const QObject* sender, const char* signal, const QObject* receiver, const char* slot);
если вместо sender некий объект высылающий сигналы(события), а вместо receiver — this, то имя метода обработчика ищется в текущем классе и его модуле. А если receiver это указатель на объект другого класса, то имя метода обработчика ищется в том другом классе, даже если это другой модуль.
Но автор упоминает DFM. Надо полагать, что у него Builder.
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862742
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrewУвлекаться глобальными методами нехорошо. Это противоречит принципам ООП. Если нельзя выкрутиться в рамках классов, значит проектировщик хреновый. Однако редко-редко все этим грешат. :))

Не согласен с такой критичностью.

Все подряд пихать в классы не хорошо. Если метод класса не обращается к его свойствам, то ему два пути - в статик или вон из класса. Статик пойдет, если, нельзя давать общий доступ (например, последствия, которые тянут за собой API системы), иначе, можно выкинуть, пусть другие пользуются (просто оствить в том же неймспейсе).

Это как поиск компромиса. Можно нагорадить иерархии и ссылки, но выйдет это в 10-ки раз сложнее и запутаней.

Не одним ООП сыт С++. ;)
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862782
Quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет Билдера угадали)
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862788
Quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот что такое Qt я и вовсе не знаю :(
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862846
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkhСтатик пойдет, если, нельзя давать общий доступ (например, последствия, которые тянут за собой API системы), иначе, можно выкинуть, пусть другие пользуются (просто оствить в том же неймспейсе).
Сделать в классе статик публичным, эквивалентно оставлению в неймспейсе.
Однако, я раньше думал, что goto зачем-то нужен. Уже лет 15 ни разу не использовал, обхожусь.
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34862911
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrew AkhСтатик пойдет, если, нельзя давать общий доступ (например, последствия, которые тянут за собой API системы), иначе, можно выкинуть, пусть другие пользуются (просто оствить в том же неймспейсе).
Сделать в классе статик публичным, эквивалентно оставлению в неймспейсе.
Однако, я раньше думал, что goto зачем-то нужен. Уже лет 15 ни разу не использовал, обхожусь.

Не хорошо присваивать мне слова, которые я не говорил. Читайте внимательнее. Или лучше обдумывайте. Где написано про публичность статика?

Ну, и хорошо. Я тоже.
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34863050
Quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что то я с указателями тут не разберусь... обработчик определен таким образом
Код: plaintext
1.
void __fastcall <имя обработчика>(TObject *Sender,
	  AnsiString Name, AnsiString &Value)
Name - входной параметр, Value - выходной.
как мне описать функцию, которая вызывается из обрабочика, используя эти параметры?
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34863187
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может так?
Код: plaintext
1.
2.
3.
4.
5.
6.
void __fastcall <имя функции>(AnsiString Name, AnsiString &Value);

//и вызов
void __fastcall <имя обработчика>(TObject *Sender,AnsiString Name, AnsiString &Value)
{
  <имя функции>(Name,Value);
}
)))
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34863242
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh pandrew AkhСтатик пойдет, если, нельзя давать общий доступ (например, последствия, которые тянут за собой API системы), иначе, можно выкинуть, пусть другие пользуются (просто оствить в том же неймспейсе).
Сделать в классе статик публичным, эквивалентно оставлению в неймспейсе.

Не хорошо присваивать мне слова, которые я не говорил. Читайте внимательнее. Или лучше обдумывайте. Где написано про публичность статика?
Наезд не по делу. Это я утверждаю, что публичный статик метод (внутри класса) решает те же задачи, что и глобальная функция. Т.е. все-таки ваш совет молодому скорее вреден, чем полезен.
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34863245
Quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychможет так?
Код: plaintext
1.
2.
3.
4.
5.
6.
void __fastcall <имя функции>(AnsiString Name, AnsiString &Value);

//и вызов
void __fastcall <имя обработчика>(TObject *Sender,AnsiString Name, AnsiString &Value)
{
  <имя функции>(Name,Value);
}
)))

Спасибо, работает... почему то я голову ломал над передачей выходного параметра %)
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34863299
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrew Akh pandrew AkhСтатик пойдет, если, нельзя давать общий доступ (например, последствия, которые тянут за собой API системы), иначе, можно выкинуть, пусть другие пользуются (просто оствить в том же неймспейсе).
Сделать в классе статик публичным, эквивалентно оставлению в неймспейсе.

Не хорошо присваивать мне слова, которые я не говорил. Читайте внимательнее. Или лучше обдумывайте. Где написано про публичность статика?
Наезд не по делу. Это я утверждаю, что публичный статик метод (внутри класса) решает те же задачи, что и глобальная функция.

Ладно проехали.

pandrew Т.е. все-таки ваш совет молодому скорее вреден, чем полезен.

Воспринимать как аксиому? :)
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34863552
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
холивар?
если не верите в глобальные функции и/или публик статики - никто ведь и не заставляет ими пользоваться, верно? а иногда бывает удобным, а иногда - и более ОО, как ни парадоксально
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34864253
Фотография quaid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Quazar egorychможет так?
Код: plaintext
1.
2.
3.
4.
5.
6.
void __fastcall <имя функции>(AnsiString Name, AnsiString &Value);

//и вызов
void __fastcall <имя обработчика>(TObject *Sender,AnsiString Name, AnsiString &Value)
{
  <имя функции>(Name,Value);
}
)))

Спасибо, работает... почему то я голову ломал над передачей выходного параметра %)

Еще один подход:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// декларация глобальной функции
void __fastcall <имя глобальной функции>(TObject *Fake, TObject *Sender, AnsiString Name, AnsiString &Value);

// и вызов в конструкторе формы, в компоненте которой Вы 
// хотите переопределить событие

__fastcall TForm1::TForm1(TComponent *Owner) : TForm(Owner)
{
  TMethod M;
  M.Data = this;
  M.Code = <имя_глобальной_функции>;
  <имя_компонента>->OnОбработчик = *(TОписаниеEvent *)&M;
}


где

On Обработчик это, например, OnClick, или OnEnter, или OnMouseMove и т.д.
T Описание Event * это, например, TNotifyEvent, или THelpEvent, или TFindMethodEvent и т.д - то есть описание Вашего стандартного обработчика.
...
Рейтинг: 0 / 0
Как повесить обработчик события, определенный в дургом модуле?
    #34864254
Фотография quaid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, тэги не работают внутри блока src (((
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как повесить обработчик события, определенный в дургом модуле?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]