C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Какой кнопарик лучше?, так много компонентов-кнопариков...
bitanga
Отправлено: 05.07.2003, 14:38


Ученик-кочегар

Группа: Участник
Сообщений: 25



на форме много кнопок с цифрами и знаками (больше всего єто похоже на програму Калькулятор).
Нужно чтобы к примеру кнопка "1" на форме реагировала и на нажатие мышкой на неё и на нажатие клавиши на клавиатуре.
А теперь вопрос: Какой компонент-кнопку лучше для этого использовать?

и за одно, ещё общий вопрос:
Перечислите вкратце чем эти кнопарики отличаются, а то когда размещаю на форме, то выбираю "от балды".
Admin
Отправлено: 05.07.2003, 17:19


Владимир

Группа: Администратор
Сообщений: 1190



Смотря для чего.

Если нужна просто с надписью — то типа Button
Если нужно и с картинкой — то типа TBitBtn

Если нужно их несколько (группу), и только с картинками
(без надписей) то обычно это TSpeedButton, но они
фокус ввода от клавиатуры не получают.

Можно и надпись на них разместить — но обычно они используются
без надписей с картинками (например быстрые кнопки).
Также они могут образовывать группу (GroupIndex) и быть в положении
"нажата","отжата" одна из них (Down), то есть при переключении
одной из них в положение "нажата", остальные кнопки этой
группы (с одинаковым GroupIndex) становятся в положение "отжата",
прочитать состояние можно по свойству Down. (true если нажата).

То есть, в Вашем случае, если нужно чтобы реагировала и на мышку
и на клавиатуру и получала фокус ввода от клавиатуры,
и отражалась картинка, можно использовать типа TBitBtn
Если фокус ввода от клавиатуры не нужен, то можно
TSpeedButton, а реакцию на нажатие кнопки на клавиатуре
можно всегда программно передать на обработчик кнопке,
для этого фокус ввода от клавиатуры не нужен.

Например, в том же калькуляторе — кнопки фокус ввода от клавиатуры
не получают, но нажатие клавиш реагируют, это вполне можно
использовать TSpeedButton.
Например размещаем на форме 3 кнопки типа TSpeedButton
в свойстве формы ставим KeyPreview в true,
чтобы на уровне формы перехватывать нажатие кнопок
клавиатуры и передаем на обработку в кнопки, у кнопок ставим
AllowAllUp = true и GroupIndex = 1

CODE

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
SpeedButton1->Down = true;
Label1->Caption = "SpeedButton1";
Application->ProcessMessages();
Sleep(500);
SpeedButton1->Down = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
SpeedButton2->Down = true;
Label1->Caption = "SpeedButton2";
Application->ProcessMessages();
Sleep(500);
SpeedButton2->Down = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
SpeedButton3->Down = true;
Label1->Caption = "SpeedButton3";
Application->ProcessMessages();
Sleep(500);
SpeedButton3->Down = false;
}
//---------------------------------------------------------------------------
// реакция на нажатие на клавиатуре кнопок 1 2 3
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if(Key == '1') SpeedButton1->Click();
if(Key == '2') SpeedButton2->Click();
if(Key == '3') SpeedButton3->Click();
}
//-----------------------------------------------------



А различного вида и формы красивые кнопки есть в других
компонентах, например CoolControls, EldoS ElPack и т.д...
смотри в закрытом форуме для зарегистрированных участников

Отредактировано Admin — 05/07/2003, 19:00

Вернуться в Вопросы программирования в C++Builder