Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отжать кнопку на ToolBar? 
:(
    Опции темы
Bima
Дата 30.1.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Есть ToolBar и PopupMenu. Кнопки ToolBar привязаны к соответствующим пунктам меню.
Задумка такая: если нажать на кнопку в ToolBar то она должна стать неактивной, до тех пор, пока не отработает подпрограмма подвешаная на нажатие этой кнопки.
Задумка, задумкой а выходит следущее: я нажимаю кнопку, программа успевает отработать до того, как я ее отпущу и она под курсором сначала становится неактивной, а потом активной в нажатом состоянии. То есть в результате на ToolBar вместо обыкновенной кнопки получается кнопка нажатая и отжать ее я не знаю как. smile

варианты:
Код

Application->ProcessMessages();
ToolBar1->Update();
ToolBar1->Refresh();

Пробовал, не помогают.

Может есть способ отжать кнопку программно? а то как то не красиво смотрится smile

Добавлено @ 15:06 
P.S. по форуму полазил ничего не нашел smile


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Vyacheslav
Дата 30.1.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



для таких вещей изпользут TSpeedButton


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Bima
Дата 30.1.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Цитата

для таких вещей изпользут TSpeedButton 


Интересно, а ToolBar для чего используют???

Это что нужно самому создавать панель ToolBar  на основе панели и кнопок TSpeedButton ??? Что-то кривоватый подход на мой взгляд?


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Vyacheslav
Дата 30.1.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Извините, не обратил внимание на ToolBar. Тогда вопрос в другом. Как Вам вообще удалось ее  сделать ее неотжимаемой ? Стиль tbsCheck установили что ли. Или программно с Down что творите? По умолчанию он отжимается сразу после нажатия


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Anikmar
Дата 30.1.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Bima @  30.1.2007,  15:24 Найти цитируемый пост)
Это что нужно самому создавать панель ToolBar  на основе панели и кнопок TSpeedButton ??? Что-то кривоватый подход на мой взгляд? 

SpeedButton на ToolBare плохо смотрятся, если привязаны к акциям, у которой установлен Caption.

Немного похожую задачу я реализовывал с помощью SpeedButton на обычной панели, у которой выравнивание стоит alTop. По виду от ToolBar не отличается. Мне правда нужно было залипание кнопок в нажатом состоянии. 
PM MAIL ICQ   Вверх
Bima
Дата 30.1.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Стиль стоит tbsButton
c Down не играю.

у меня только одни догадки.

В подпрограмме, которая висит на кнопке я запускаю потоки. Перед запуском потоков, я делаю Enabled=false;
сама подпрограмма заканчивается а потоки еще работают. После того как все потоки отработают, последний поток посылает сообщение формы и в обработчике сообщения я делаю Enabled=true.

Может это быть причиной залипания кнопок, если да, то как можно избежать этого???


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Vyacheslav
Дата 30.1.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Вообще то, даже задисабленная кнопка будет отжата. Я в недоумении

Добавлено @ 17:56 
Опс. Я понял.  У Вас в обработчике зацикливается отсновной поток
Вот при таком ракладе кнопка остается нажатой
Код

void __fastcall TForm1::ToolButton1Click(TObject *Sender)
{
 while(1);
}



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Bima
Дата 31.1.2007, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Цитата

Опс. Я понял.  У Вас в обработчике зацикливается отсновной поток


Интересно, каким образом он зацикливается?
Если я правильно понял, то происходит следущее...
Запускается подпрограмма, выставляется Enabled=false, а потом еще раз запускается подпрограмма(в момент ее работы)???


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
default_user
Дата 31.1.2007, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 27.12.2006
Где: Москва

Репутация: 1
Всего: 1



Цитата(Bima @ 30.1.2007,  15:24)
Это что нужно самому создавать панель ToolBar  на основе панели и кнопок TSpeedButton ??? Что-то кривоватый подход на мой взгляд?

Самому создавать не нужно. Просто на пустой тулбар шлепаешь TSpeedButton. У него есть свойство Down, которое можно менять программно. Кстати, у SpeedButton есть свойство Flat=true, с помощью которого панель можно сделать симпотишнее, попробуй. 

Цитата

SpeedButton на ToolBare плохо смотрятся, если привязаны к акциям, у которой установлен Caption.


Это легко решается - на Action свойство Caption не указывается, а в пунктах меню прописывается самостоятельно.
PM MAIL   Вверх
Bima
Дата 31.1.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Переделал, все заработало (даже не прибегая к свойствам Down) .
Только вот все как то разношерстно получается smile

Я вставлял иконки на меню и на кнопки в ToolBare. А SpeedButton принимает только bmp smile. Причем маска у этого рисунка формируется на базе левого нижнего пикселя. Пришлось конвертировать рисунки и выставлять этот пиксель согласно фону. Естественно это сказалось на размере, так как по две картинки находятся в памяти только разного формата.

Как нибудь можно при инициализации программы вытащить рисунки из ImageList и вставить их на SpeedButton? или может не стоит этого делать, так как код скомпилированный превысит вес самих рисунков?

Добавлено @ 10:58 
Я сделал такой код:
Код

Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
ImageList->GetBitmap(11,Bitmap1); //
Bitmap1->Transparent=true;//
SpeedButton1->Glyph=Bitmap1;
delete Bitmap1;

но проблема с маской остается... можно указать конкретный пиксель для маски или цвет???


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Vyacheslav
Дата 31.1.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Вообще то я все ,в том числе и иконки ,  присваиваю в Action ( ActionList )

Добавлено @ 16:49 
Цитата(Bima @  31.1.2007,  10:46 Найти цитируемый пост)
Переделал, все заработало (даже не прибегая к свойствам Down) .

И как Вы это переделали?

Добавлено @ 16:53 
Цитата(Bima @  31.1.2007,  06:40 Найти цитируемый пост)
Запускается подпрограмма, выставляется Enabled=false, а потом еще раз запускается подпрограмма(в момент ее работы)??? 

Без разницы. Кнопка задисаблится но будет отжата. Я вообще не понимаю, как Вам удалось добиться такого эффекта. К тому же у Вас сама Action срабатывает моментально, поскольку он просто запускает поток. Самое плохое, что должно случиться, так это получить задисайбленную отжатую кнопку.



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Anikmar
Дата 31.1.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Bima @  31.1.2007,  10:46 Найти цитируемый пост)
Как нибудь можно при инициализации программы вытащить рисунки из ImageList и вставить их на SpeedButton? или может не стоит этого делать, так как код скомпилированный превысит вес самих рисунков?

Если привязка SpeedButton идет к акции - то она вытаскивает из ImageList картинку. Но проблема с Caption остается (см. мой пост выше).
Причем если у SpeedButton Caption обнулить - в дизайнтайме все отлично. При запуске - он опять эти заголовки тянет. Как вариант обнулять их при запуске (не пробовал).

Был совет:
Цитата(default_user @  31.1.2007,  09:47 Найти цитируемый пост)
Это легко решается - на Action свойство Caption не указывается, а в пунктах меню прописывается самостоятельно. 


Тогда теряется весь смысл использования списка акций - надо помнить где что изменять, как минимум основное меню, PopUp меню и т.п.

PM MAIL ICQ   Вверх
Bima
Дата 1.2.2007, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Цитата

И как Вы это переделали?

удалил все кнопки с ToolBar, вставил туда кнопки SpeedButton. OnClick этих кнопок привязал соответствующим пунктам меню. Сконвертировал иконки в bmp (установив предварительно у нижнего левого пикселя цвет - цвет фона). и все, все заработало, без существенной переделки кода.
код изменил: только заменой названия кнопок!!!
Цитата

Я вообще не понимаю, как Вам удалось добиться такого эффекта. 

я сам не понимаю, но эффект был. Почему SpeedButton работает иначе чем кнопки ToolBar, я не понимаю.
Цитата

Если привязка SpeedButton идет к акции - то она вытаскивает из ImageList картинку. Но проблема с Caption остается (см. мой пост выше).

Если честно, я с такой проблемой не сталкивался, и в моем проекте я ее не заметил smile


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
default_user
Дата 1.2.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 27.12.2006
Где: Москва

Репутация: 1
Всего: 1



Цитата(Anikmar @ 31.1.2007,  17:09)
Был совет:
Цитата(default_user @  31.1.2007,  09:47 Найти цитируемый пост)
Это легко решается - на Action свойство Caption не указывается, а в пунктах меню прописывается самостоятельно. 


Тогда теряется весь смысл использования списка акций - надо помнить где что изменять, как минимум основное меню, PopUp меню и т.п.

Ну, допустим, прям весь смысл акций не теряется  smile  Код ведь дублировать и картинки не придется? К тому же, не так уж и часто Caption акций используется где-то еще. У меня чаще всего получается тулбар+меню.
PM MAIL   Вверх
Anikmar
Дата 1.2.2007, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Bima @  1.2.2007,  07:14 Найти цитируемый пост)
Если честно, я с такой проблемой не сталкивался, и в моем проекте я ее не заметил  

Я тоже очень удивился.
Если Caption-а нет - все отлично. А если есть, то SpeedButton пфтается и картинку запихать и Caption. В дизайнтайме обнуляю, запускаю прогу - опять вылезли. Я не стал подробно разбираться с этим, почему так происходит, обошел другим способом. Может это у меня билдер какой-то глючный - не знаю.
Цитата(default_user @  1.2.2007,  10:47 Найти цитируемый пост)
Ну, допустим, прям весь смысл акций не теряется    Код ведь дублировать и картинки не придется? К тому же, не так уж и часто Caption акций используется где-то еще. У меня чаще всего получается тулбар+меню.

Ну это естественно, я тут немного переборщил, но все равно - подход какой-то неправильный. У меня на главной форме порядка полусотни акций, как-то  лень вручную дважды записывать. - и в основное меню и в PopUp...

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1468 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.