• Авторизация


хай, великий All! 13-06-2006 02:50 к комментариям - к полной версии - понравилось!


народ, я программлю на дельфях, у меня тут интересная задача...

не буду вдаваться в само ТЗ, расскажу о проблемах.

у меня есть достаточно большой динамически генерирующийся массив кнопок TBitBtn, требуется сделать к каждой кнопке PopUp меню как минимум из одного TMenuItem'а, и в обработчике OnClick для этого итема мне необходимо знать номер в массиве кнопок той кнопки, чей это попап. короче, мозги сейчас слабо варят, так что пишу немного запутанно...

я решил эту проблему так: в констракторе моей BitBtn прописал создание и ассоциацию PopUpMenu, а OnClick для TMenuItem присвоил свой. и в свойство hint в текстовом виде запихнул две координаты кнопки в массиве. потом в обработчике нажатия я эти координаты оттуда извлекаю, беря (Sender as TUnit).hint, где TUnit=class(TBitBtn) - мой класс.

вопрос такой: а можно ли это сделать немного покрасивее, а? а то как-то совсем уж... ну, можно ещё и имя TMenuItem'а менять на координаты, но это не многим лучше, imho...

в общем, жду советов...

Настроение сейчас - дайте мне дебаггер для мозгов!
вверх^ к полной версии понравилось! в evernote
Комментарии (8):
Teonanacatl 13-06-2006-10:09 удалить
Можно... Используй свойство TBitBtn.Tag как указатель на адрес некой структуры, которая и будет содержать информацию о координатах...
Saint_Glook 13-06-2006-11:14 удалить
в том-то и дело, что как Sender в OnClick выступает не TBitBtn, а TMenuItem... информация о координатах у меня и так вшита в TBitBtn
Teonanacatl 13-06-2006-11:45 удалить
Если я тебя правильно понял, то:
TMenuItem принадлежит TPopupMenu, который, в свою очередь, принадлежит TBitBtn (или твоему какому либо классу)... Что в этом случае мешает тебе обратиться к свойствам конкретного TBitBtn через свойство Owner?
А вообще, прежде чем задавать вопросы, научись их формулировать...
И тот способ, который используешь ты, называется не иначе, как ИЗВРАЩЕНИЕ...
Я бы за такое расстреливал...
Saint_Glook 13-06-2006-11:48 удалить
ну, как придумал - так и делаю )) но я и не претендую на роль крутого программера, я учусь ещё ) насчёт Owner - попробую, спасибо. ))
ZardoZ 13-06-2006-16:09 удалить
А зачем создавать для каждой кнопки своё меню???
Делаем одно меню, которое присваиваем каждой кнопке при создании(также сохраняем её номер в массиве в её совойстве Tag). В зависимости от того на какую кнопку нажали - генерим свои итемы и присваиваем им соответствующие действия. IMHO так проще и менее ресурсоёмко будет.
Saint_Glook 13-06-2006-16:19 удалить
ZardoZ, у меня обработчик итак один на все кнопки... был трабл с передачей координат кнопки в этот обработчик, но используя (sender as TUnit).Owner я с этим справился...

вообще, ресурсоёмкость меня тут мало волнует - заказ не на скорость работы, а на правильность...

а вообще, у меня двумерный массив и в один Tag номер запихнуть - тож проблема геморная, тем более что координаты могут быть и отрицательными (ну, специфика такая...)
ZardoZ 13-06-2006-17:07 удалить
С хозяином объекта в твоём случае конечно проще, но очень советую как начинающему задумываться над _оптимизацией кода_.

А я бы, наверное, унаследовал класс, куда дополнительно ввёл две координаты и прочее. Затем генерил эти батоны и расставлял им координаты и итемы как я писал - создавал бы динамически на основе одного меню.
IMHO
по началу всегда кажется главное чтоб работало... а потом начинаешь понимать...

А как сравнивается интересно скорость работы программы и правильность? :) Вообще-то я просто говорю о более оптимальной IMHO реализации без потери качества.
Saint_Glook 13-06-2006-17:56 удалить
ZardoZ, ну, TUnit=class(TBitBtn) - мой класс, там есть координаты. генерится всё нормально, но вот с меню были такие вот проблемы... просто в процедуру-обработчик для выбора пункта меню надо было координаты передать - я и извращался ) а через owner действительно проще вышло...


Комментарии (8): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник хай, великий All! | community_coding - Сообщество программистов | Лента друзей community_coding / Полная версия Добавить в друзья Страницы: раньше»