-Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в community_coding

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.12.2004
Записей:
Комментариев:
Написано: 536


хай, великий All!

Вторник, 13 Июня 2006 г. 02:50 + в цитатник
Saint_Glook все записи автора народ, я программлю на дельфях, у меня тут интересная задача...

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

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

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

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

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

Настроение сейчас - дайте мне дебаггер для мозгов!

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

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

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

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

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

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку