Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как повесить обработчик события, определенный в дургом модуле? / 22 сообщений из 22, страница 1 из 1
11.10.2007, 10:37:34
    #34862248
Quazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
чтобы не повторять его в нескольких модулях...
...
Рейтинг: 0 / 0
11.10.2007, 11:22:03
    #34862458
pandrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
Quazarчтобы не повторять его в нескольких модулях...
А в чем проблема? Это же обычный метод класса. Есть же модификаторы: public, static. Можно даже глобальным сделать.
Лишь бы компилятор и линковщик "ушли довольными". ;)
...
Рейтинг: 0 / 0
11.10.2007, 11:29:21
    #34862488
Quazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
Тоесть все равно опеределяется обработчик в каждой форме, из когорого вызывается необходимый метод... так?... просто в DFM пишется
Код: plaintext
<имя события> = <имя метода>
... но имя ищет только в локальном моделе... я подумал, можно ли как то сделать ссылку на другой модуль...
...
Рейтинг: 0 / 0
11.10.2007, 11:31:34
    #34862502
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
Определи функцию, можно и глобально, и вызывай её из любого обработчика, к примеру ...
...
Рейтинг: 0 / 0
11.10.2007, 11:37:49
    #34862536
Quazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
Глобально - это имеется ввиду вне класса?)
...
Рейтинг: 0 / 0
11.10.2007, 11:56:30
    #34862644
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
ну да, если религия позволяет и ко внутренним структурам доступ не нужен
...
Рейтинг: 0 / 0
11.10.2007, 12:01:46
    #34862676
pandrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
QuazarТоесть все равно опеределяется обработчик в каждой форме, из когорого вызывается необходимый метод... так?... просто в DFM пишется
Код: plaintext
<имя события> = <имя метода>
... но имя ищет только в локальном моделе... я подумал, можно ли как то сделать ссылку на другой модуль...
Естественно у каждой формы в хедере обработчик должен быть определен. Однако, его реализация м.б. просто инлайн подстановка вызова какой-то функции.
Для компилятора достаточно добавить #include ".."
Увлекаться глобальными методами нехорошо. Это противоречит принципам ООП. Если нельзя выкрутиться в рамках классов, значит проектировщик хреновый. Однако редко-редко все этим грешат. :))
...
Рейтинг: 0 / 0
11.10.2007, 12:03:14
    #34862685
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
вот-вот, я про религию и упомянул
...
Рейтинг: 0 / 0
11.10.2007, 12:14:12
    #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
11.10.2007, 12:15:50
    #34862742
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
pandrewУвлекаться глобальными методами нехорошо. Это противоречит принципам ООП. Если нельзя выкрутиться в рамках классов, значит проектировщик хреновый. Однако редко-редко все этим грешат. :))

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

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

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

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

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

Ну, и хорошо. Я тоже.
...
Рейтинг: 0 / 0
11.10.2007, 13:18:44
    #34863050
Quazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
Что то я с указателями тут не разберусь... обработчик определен таким образом
Код: plaintext
1.
void __fastcall <имя обработчика>(TObject *Sender,
	  AnsiString Name, AnsiString &Value)
Name - входной параметр, Value - выходной.
как мне описать функцию, которая вызывается из обрабочика, используя эти параметры?
...
Рейтинг: 0 / 0
11.10.2007, 13:49:07
    #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
11.10.2007, 14:04:00
    #34863242
pandrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
Akh pandrew AkhСтатик пойдет, если, нельзя давать общий доступ (например, последствия, которые тянут за собой API системы), иначе, можно выкинуть, пусть другие пользуются (просто оствить в том же неймспейсе).
Сделать в классе статик публичным, эквивалентно оставлению в неймспейсе.

Не хорошо присваивать мне слова, которые я не говорил. Читайте внимательнее. Или лучше обдумывайте. Где написано про публичность статика?
Наезд не по делу. Это я утверждаю, что публичный статик метод (внутри класса) решает те же задачи, что и глобальная функция. Т.е. все-таки ваш совет молодому скорее вреден, чем полезен.
...
Рейтинг: 0 / 0
11.10.2007, 14:04:32
    #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
11.10.2007, 14:19:50
    #34863299
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
pandrew Akh pandrew AkhСтатик пойдет, если, нельзя давать общий доступ (например, последствия, которые тянут за собой API системы), иначе, можно выкинуть, пусть другие пользуются (просто оствить в том же неймспейсе).
Сделать в классе статик публичным, эквивалентно оставлению в неймспейсе.

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

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

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

Воспринимать как аксиому? :)
...
Рейтинг: 0 / 0
11.10.2007, 15:20:30
    #34863552
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
холивар?
если не верите в глобальные функции и/или публик статики - никто ведь и не заставляет ими пользоваться, верно? а иногда бывает удобным, а иногда - и более ОО, как ни парадоксально
...
Рейтинг: 0 / 0
11.10.2007, 18:45:27
    #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
11.10.2007, 18:46:39
    #34864254
quaid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повесить обработчик события, определенный в дургом модуле?
Сорри, тэги не работают внутри блока src (((
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как повесить обработчик события, определенный в дургом модуле? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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