|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.05.2011, 19:12 | #1 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Что нужно передавать в качестве параметра обработчика нажатия кнопки при его вызове из другого метода?
Здравствуйте.
У меня возникла необходимость при вызове пункта меню (меню – имеется ввиду: файл, правка, вид, и так далее, как в большинстве программ) дублировать действие, выполняемое при нажатии кнопки, располагающейся на этой же форме, что и меню (для избыточности). В коде это выглядит следующим образом: Код:
Но в более серьёзных проектах переменна form1 имеет существенно больший размер, нежели чем в данном примере, и при попытке передать её в качестве параметра происходит переполнение стека (как это произошло у меня). Итак, я прошу помочь мне в данном вопросе: каким образом можно выполнить описанное здесь дублирование; что необходимо передавать в качестве параметра, чтобы не свалиться в переполнение стека. Я пробовал передавать адрес переменной Form1 (через оператор @) – не помогло Заранее большое спасибо. P.S. Программу-пример леплю в качестве приложения |
01.05.2011, 19:49 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
01.05.2011, 19:55 | #3 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Когда вызывается процедура обработки события кнопки, то ей в качестве параметра передается указатель на эту самую кнопку. Так происходит в недрах винды.
Для "самостоятельного" вызова обработчика можно передать nil, если в процедуре обработки параметр Sender никак не участвует. Если же будет участвовать, то передается указатель на саму кнопку. Код:
|
01.05.2011, 21:30 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Переменная такого типа в любых проектах будет иметь один и тот же размер, поскольку это указатель. И если Sender не используется в процедуре, то в общем-то не важно что передать: от nil до любого TObject
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 01.05.2011 в 21:32. |
01.05.2011, 23:19 | #5 | |||
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Всем огромное спасибо. И за предоставленную информацию тоже. Всё оказалось просто. Причина - у меня в подписи.
Вот смотрите. Процедура обработки нажатия кнопки у меня имеет такой заголовок: Цитата:
Цитата:
Цитата:
Код:
ПС. Не будет наверное того случая, когда я с первого раза напишу непростую программку, без единого бага... Все отвечавшие получают плюсики. Stilet. Не могу что-то я тебе поднять репутацию... Последний раз редактировалось Вадим Мошев; 01.05.2011 в 23:22. |
|||
03.05.2011, 10:14 | #6 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
советую для написания множественных "вызывателей" одного действия поизучать Tactionlist
примерный аналог ему же - писать собственные процедуры/функи в public формы или в интерфейсе unit'a и потом просто вызывать их нужными кнопками/менюшками/тулбарами ну и маленький хинт - лучше внутри метода конкретной формы не указывать конкретная_форма.её_поле(или метод) а просто сразу её_поле , а то потом захотите рефакторить , переназвать форму, и везде придётся удалять/менять эти строки |
03.05.2011, 14:00 | #7 | ||
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Цитата:
Во-первых, нет никакого смысла к объекту, если мы описываем его метод, ну, а, во-вторых, всё то, что сказали вы. Спасибо. Цитата:
|
||
03.05.2011, 14:31 | #8 |
VisualC++/DirectX
Форумчанин
Регистрация: 16.07.2010
Сообщений: 831
|
А я бы просто написал процедуру, а после вызывал ее.
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
что нужно сделать с <td> что бы между картинками другого <table> не было разделения? | alex555 | HTML и CSS | 22 | 24.04.2012 16:43 |
Ошибка при вызове метода класса | coNsept | Общие вопросы C/C++ | 2 | 14.12.2010 13:09 |
Передача метода класса в качестве параметра в другой метод | Dmytry87 | Общие вопросы C/C++ | 0 | 12.11.2008 15:28 |
что нужно сделать, чтобы при нажатии кнопки запускалась процедура | mager | Общие вопросы Delphi | 15 | 19.11.2006 15:02 |