Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Как отжать кнопку на ToolBar? |
Автор: Bima 30.1.2007, 15:05 | ||
Есть ToolBar и PopupMenu. Кнопки ToolBar привязаны к соответствующим пунктам меню. Задумка такая: если нажать на кнопку в ToolBar то она должна стать неактивной, до тех пор, пока не отработает подпрограмма подвешаная на нажатие этой кнопки. Задумка, задумкой а выходит следущее: я нажимаю кнопку, программа успевает отработать до того, как я ее отпущу и она под курсором сначала становится неактивной, а потом активной в нажатом состоянии. То есть в результате на ToolBar вместо обыкновенной кнопки получается кнопка нажатая и отжать ее я не знаю как. ![]() варианты:
Пробовал, не помогают. Может есть способ отжать кнопку программно? а то как то не красиво смотрится ![]() Добавлено @ 15:06 P.S. по форуму полазил ничего не нашел ![]() |
Автор: Vyacheslav 30.1.2007, 15:20 |
для таких вещей изпользут TSpeedButton |
Автор: Bima 30.1.2007, 15:24 | ||
Интересно, а ToolBar для чего используют??? Это что нужно самому создавать панель ToolBar на основе панели и кнопок TSpeedButton ??? Что-то кривоватый подход на мой взгляд? |
Автор: Vyacheslav 30.1.2007, 15:42 |
Извините, не обратил внимание на ToolBar. Тогда вопрос в другом. Как Вам вообще удалось ее сделать ее неотжимаемой ? Стиль tbsCheck установили что ли. Или программно с Down что творите? По умолчанию он отжимается сразу после нажатия |
Автор: Bima 30.1.2007, 16:28 |
Стиль стоит tbsButton c Down не играю. у меня только одни догадки. В подпрограмме, которая висит на кнопке я запускаю потоки. Перед запуском потоков, я делаю Enabled=false; сама подпрограмма заканчивается а потоки еще работают. После того как все потоки отработают, последний поток посылает сообщение формы и в обработчике сообщения я делаю Enabled=true. Может это быть причиной залипания кнопок, если да, то как можно избежать этого??? |
Автор: Vyacheslav 30.1.2007, 17:54 | ||
Вообще то, даже задисабленная кнопка будет отжата. Я в недоумении Добавлено @ 17:56 Опс. Я понял. У Вас в обработчике зацикливается отсновной поток Вот при таком ракладе кнопка остается нажатой
|
Автор: Bima 31.1.2007, 06:40 | ||
Интересно, каким образом он зацикливается? Если я правильно понял, то происходит следущее... Запускается подпрограмма, выставляется Enabled=false, а потом еще раз запускается подпрограмма(в момент ее работы)??? |
Автор: default_user 31.1.2007, 09:47 | ||||
Самому создавать не нужно. Просто на пустой тулбар шлепаешь TSpeedButton. У него есть свойство Down, которое можно менять программно. Кстати, у SpeedButton есть свойство Flat=true, с помощью которого панель можно сделать симпотишнее, попробуй.
Это легко решается - на Action свойство Caption не указывается, а в пунктах меню прописывается самостоятельно. |
Автор: Bima 31.1.2007, 10:46 | ||
Переделал, все заработало (даже не прибегая к свойствам Down) . Только вот все как то разношерстно получается ![]() Я вставлял иконки на меню и на кнопки в ToolBare. А SpeedButton принимает только bmp ![]() Как нибудь можно при инициализации программы вытащить рисунки из ImageList и вставить их на SpeedButton? или может не стоит этого делать, так как код скомпилированный превысит вес самих рисунков? Добавлено @ 10:58 Я сделал такой код:
но проблема с маской остается... можно указать конкретный пиксель для маски или цвет??? |
Автор: Vyacheslav 31.1.2007, 16:48 | ||
Вообще то я все ,в том числе и иконки , присваиваю в Action ( ActionList ) Добавлено @ 16:49 И как Вы это переделали? Добавлено @ 16:53
Без разницы. Кнопка задисаблится но будет отжата. Я вообще не понимаю, как Вам удалось добиться такого эффекта. К тому же у Вас сама Action срабатывает моментально, поскольку он просто запускает поток. Самое плохое, что должно случиться, так это получить задисайбленную отжатую кнопку. |
Автор: Anikmar 31.1.2007, 17:09 | ||||
Если привязка SpeedButton идет к акции - то она вытаскивает из ImageList картинку. Но проблема с Caption остается (см. мой пост выше). Причем если у SpeedButton Caption обнулить - в дизайнтайме все отлично. При запуске - он опять эти заголовки тянет. Как вариант обнулять их при запуске (не пробовал). Был совет:
Тогда теряется весь смысл использования списка акций - надо помнить где что изменять, как минимум основное меню, PopUp меню и т.п. |
Автор: Bima 1.2.2007, 07:14 | ||||||
удалил все кнопки с ToolBar, вставил туда кнопки SpeedButton. OnClick этих кнопок привязал соответствующим пунктам меню. Сконвертировал иконки в bmp (установив предварительно у нижнего левого пикселя цвет - цвет фона). и все, все заработало, без существенной переделки кода. код изменил: только заменой названия кнопок!!!
я сам не понимаю, но эффект был. Почему SpeedButton работает иначе чем кнопки ToolBar, я не понимаю.
Если честно, я с такой проблемой не сталкивался, и в моем проекте я ее не заметил ![]() |
Автор: default_user 1.2.2007, 10:47 | ||||
Ну, допустим, прям весь смысл акций не теряется ![]() |
Автор: Anikmar 1.2.2007, 11:01 | ||||
Я тоже очень удивился. Если Caption-а нет - все отлично. А если есть, то SpeedButton пфтается и картинку запихать и Caption. В дизайнтайме обнуляю, запускаю прогу - опять вылезли. Я не стал подробно разбираться с этим, почему так происходит, обошел другим способом. Может это у меня билдер какой-то глючный - не знаю.
Ну это естественно, я тут немного переборщил, но все равно - подход какой-то неправильный. У меня на главной форме порядка полусотни акций, как-то лень вручную дважды записывать. - и в основное меню и в PopUp... |