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

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

10.03.2013, 20:39. Показов 8796. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru