Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/41: Рейтинг темы: голосов - 41, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 17

BitBtn - изменение состояния кнопки при нажатии

10.03.2013, 20:39. Показов 8695. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите. как сделать, что б при нажатии BitBtn кнопка меняла вид на нажатую, при повторном нажатии кнопка возвращалась в своё первоначальное положение.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2013, 20:39
Ответы с готовыми решениями:

Изменение картинки при нажатии на BitBtn
Как правильно записать условие? if (BitBtn6->Glyph->LoadFromFile("bmp\\strelka_up.bmp")) ...

Изменение состояния картинки на кнопке при ее нажатии
Всем доброго времени суток! Сделал значит я кнопки, наложил на них картинку через BackgroundImage, а в событиях на MouseDown и MauseUp,...

Изменение текста при нажатии кнопки
Добрый день. Сразу извиняюсь что не в ту тему, но здесь в базах данных, сидят более Опытные программисты. Надеюсь Вы, сможете мне...

15
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.03.2013, 21:17
Для этих целей больше подходит SpeedButton и его свойство Down

типа:
C++
1
SpeedButton1->Down = true; // типа нажата
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 17
10.03.2013, 21:41  [ТС]
не работает, ничего не происходит, программа запускается но вид кнопки на нажатую не меняется.
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.03.2013, 22:04
Походу по одиночки не хотят, я кинул второй и в инспекторе появилось свойство gropindex я поставил 1 в обеих кнопках.
Исходник во вложении.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
 
  SpeedButton1->Down = true;
  SpeedButton2->Down = false;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
  SpeedButton2->Down = true;
  SpeedButton1->Down = false;
}
//---------------------------------------------------------------------------
Вложения
Тип файла: rar SpeedBt.rar (382.6 Кб, 20 просмотров)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
10.03.2013, 22:19
А так?
C++
1
2
3
4
5
6
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
SpeedButton1->GroupIndex = 1;
SpeedButton1->Down = true;
 
}
Добавлено через 12 минут
А так вообще чудово
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool f = true;
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
 
SpeedButton1->AllowAllUp = true;
 
 if(f)
{
 SpeedButton1->GroupIndex = 1;
 SpeedButton1->Down = true;
 f = false;
}
else
{
 SpeedButton1->GroupIndex = 0;
 SpeedButton1->Down = false;
 f = true;
}
 
}
2
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 17
10.03.2013, 23:21  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool f = true;
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
 
SpeedButton1->AllowAllUp = true;
 
 if(f)
{
 SpeedButton1->GroupIndex = 1;
 SpeedButton1->Down = true;
 f = false;
}
else
{
 SpeedButton1->GroupIndex = 0;
 SpeedButton1->Down = false;
 f = true;
}
 
}
всё хорошо ,супер.
а как этот код сделать например на 10 кнопок или на 20.. писать в каждой кнопке или можно както ссылку давать?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.03.2013, 23:41
откройте для себя dynamic_cast или FindComponent, и цикл
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.03.2013, 23:52
Цитата Сообщение от Jazva Посмотреть сообщение
а как этот код сделать например на 10 кнопок или на 20..
C++
1
2
3
4
5
6
7
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
  if (((TSpeedButton *)Sender)->Name == "SpeedButton1")
  {
  бла-бла-бла // Код уважаемого Sasha
  }
}
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 17
11.03.2013, 00:18  [ТС]
C++
1
2
3
4
5
6
7
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
  if (((TSpeedButton *)Sender)->Name == "SpeedButton1")
  {
  бла-бла-бла // Код уважаемого Sasha
  }
}
чесное слово не могу понять как это работает, можете сделать пример кнопки на 3-и?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.03.2013, 02:24
Тут бы ещё подумать как этот код с циклом в одну функцию втулить? А потом просто копировать по кнопкам эту функцию и всё
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.03.2013, 10:31
Цитата Сообщение от Jazva Посмотреть сообщение
можете сделать пример кнопки на 3-и?
Присваиваете кнопкам свой индивидуальный Tag (напр. 1, 2, 3), назначаете им один общий обработчик нажатия, в котором пишете__
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
     TSpeedButton * knopka = (TSpeedButton*)Sender ;
     switch (knopka->Tag)
   {
       case 1: /* действия при нажатии кнопки 1 */ break;
       case 2: /* действия при нажатии кнопки 2 */ break;
       case 3: /* действия при нажатии кнопки 3 */ break;
   }
}
.. здесь для удобства обзывается 'knopka' нажатая клавиша, от которой пришел запрос
1
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 17
11.03.2013, 18:14  [ТС]
спасибо конешно всем, но я на столько туп, что не могу с данной информацией ничего сделать..
вот уменя код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
SpeedButton1->AllowAllUp = true;
 if(f)
{
 SpeedButton1->GroupIndex = 10;
 SpeedButton1->Down = true;
 f = false;
}
else
{
 SpeedButton1->GroupIndex = 10;
 SpeedButton1->Down = false;
 f = true;
}
}
потом я вставил есчё например 3 кнопки
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
 
}
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
 
}
void __fastcall TForm1::SpeedButton4Click(TObject *Sender)
{
 
}
Подскажите плиз есчё разок, что мне записать в эти кнопки чтоб она работали как кнопка первая?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.03.2013, 19:34
Цитата Сообщение от Jazva Посмотреть сообщение
Подскажите плиз есчё разок, что мне записать
Не нужно ничего записывать; берегите силы. В Object Inspector - Events назначаете на событие OnClick клавишам SpeedButton2, SpeedButton3, SpeedButton4 --- SpeedButton1Click, но только в обработчике SpeedButton1Click() должен присутствовать Sender, а не SpeedButton1. Прочтите тему еще раз и попробуйте вникнуть в то, что вам писали.
0
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 17
11.03.2013, 21:15  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
     TSpeedButton * knopka = (TSpeedButton*)Sender ;
     switch (knopka->Tag)
   {
       case 1: /* действия при нажатии кнопки 1 */ break;
       case 2: /* действия при нажатии кнопки 2 */ break;
       case 3: /* действия при нажатии кнопки 3 */ break;
   }
}
вот что тут написано,куда что писать, я понимаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)  \\ тут я открываю кнопку №1
{
     TSpeedButton * knopka = (TSpeedButton*)Sender ;                 \\ В этой открытой кнопке сразу пишу этот текст?
     switch (knopka->Tag)                                                         \\ и этот текст мне переписывать без изменений?
   {
       case 1: /* действия при нажатии кнопки 1 */ break;              \\ сдесь полная Ж для моего мозга "действия при нажатии  кнопки 1" - это место этого текста мне ,что надо написать, мой код кнопки? вот этот?
                 SpeedButton1->AllowAllUp = true;
                  if(f)
                  {
                  SpeedButton1->GroupIndex = 10;
                   SpeedButton1->Down = true;
                   f = false;
                  }
                  else
                  {
                   SpeedButton1->GroupIndex = 10;
                   SpeedButton1->Down = false;
                   f = true;
                  }
а что такое case 1: /* и 1 */ break; ?
 
       case 2: /* действия при нажатии кнопки 2 */ break;                    \\ а сдесь что? тоже писать этот же мой  код?
       case 3: /* действия при нажатии кнопки 3 */ break;
люди мне просто это очень нужно, поэтому я не бросаю эту муку.
если кто может сделайте исходник, чтоб я его запустил со своего компа и разобрался там.
СПАСИБО.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
12.03.2013, 00:54
По моему у вас "легкая паника" (не обижайтесь). Вам всего-то нужно было, чтоб кнопка фиксировалась в нажатом положении и "отлипала" при повторном нажатии. Для этого вообще ничего писать не нужно было. Просто у спидбатона по умолчанию свойство Group=0; а если ее изменить на другое число и проставить AllowUp=true, то все и будет как вы хотели. Принцип такой: если на форме много кнопок (SpeedButton), то присваивая им группу вы получаете то, что в одной группе может быть нажата лишь одна кнопка, - нажатие любой другой кнопки в этой группе отпускает кнопку, нажатую ранее. Если AllowUp=false (по умолчанию), то всегда хоть одна кнопка группы остается нажатой; если true, то могут быть отжаты все кнопки. К группе 0 это не относится. А все разговоры на тему Sender - это попытки объяснить, что можно написать одну функцию для обработки нажатия любой кнопки, если операции в обработчике однотипные. Просто аргумент (TObject *Sender) у функции SpeedButtonClick - это и есть конкретная кнопка, которой назначили эту функцию в качестве обработчика нажатия: в случае SpeedButton2 Sender - это SpeedButton2, в случае SpeedButton3 Sender - это SpeedButton3 и т.д. Но напрямую использовать в функции имя Sender не получится, а посредством приведения типов (может это по другому называется, но выглядит так: ((TSpeedButton*)Sender) ) -можно.

Добавлено через 1 час 17 минут
П.С. Я ошибся: Group имеется в виду GroupIndex
1
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 17
12.03.2013, 20:22  [ТС]
спасибо ОГРОМНОЕ , мне такое нажатие кнопок устраивает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.03.2013, 20:22
Помогаю со студенческими работами здесь

Изменение цвета кнопки при нажатии
Подскажите, пожалуйста, как сделать так, что бы цвет кнопки при наведении был одним, а при нажатии, то есть при непосредственно клике цвет...

Изменение цвета кнопки при ее нажатии
На форме есть несколько кнопок. При нажатии на кнопку запускается метод fun, в который передается два int. private void...

Изменение цвета кнопки при ее нажатии
Как сделать,чтобы при нажатии на кнопку она изменила свой цвет в visual studio 2010?

Изменение фона при нажатии кнопки
Здравствуйте, нужно сделать так, чтоб при нажатии на Button, её фон менялся, нужно как-то так делать button1.BackColor, наверно. Помогите...

Изменение положения формы при нажатии кнопки
На форме есть кнопка jump. Как сделать так, чтобы при нажатии на неё один раз окно меняло место положение, а при нажатие второй раз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru