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

 
Изменение шрифта на кнопке
Pan-SQL
Отправлено: 01.04.2005, 11:59


Не зарегистрирован







Можно ли программно изменить шрифт на кнопке, например, сделать полужирным. Если можно, то как? Заранее большое спасибо.
Guest
Отправлено: 01.04.2005, 12:02


Не зарегистрирован







TBitBtn
Pan-SQL
Отправлено: 01.04.2005, 12:08


Не зарегистрирован







Можно небольшой примерчик кода.
Guest
Отправлено: 01.04.2005, 12:38


Не зарегистрирован







CODE

TBitBtn *bt = Bt_Load;
bt->Font->Color = clLime;
bt->Font->Size = 28;
...

** Harold
Отправлено: 01.04.2005, 22:25


Не зарегистрирован







Я помучился с этими БитБатонами и ... взял TPanel и совершенно доморошенными способами, типа bevel вверх/вниз, поимел из него кнопку, которую раскрасить или картику приставить, али текст в три этажа, ну как мышкой пару раз по порноссылке щелкнуть...

CODE

void __fastcall TForm1::pnl1Click(TObject *Sender)
{
...
if (pnl1_Clicked == true)  
  {
   pnl1->Color=0x00C8D0D4;   //серый  
   pnl1->BevelOuter= bvRaised;
   pnl1_Clicked = false;
   }
  else                        
   {
    pnl1->Color=0x0000C000;    //зеленый
    pnl1->BevelOuter= bvLowered;
    pnl1_Clicked = true;
    }
...
}


Я конечно, чайник, но зачем еще тогда VCL?!

Удачи.

Rius
Отправлено: 02.04.2005, 07:59


Мастер участка

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



Это конечно хорошо, но как будет такая кнопка воспринимать стили XP ???
Вот эта не воспринимает, так как прорисовывается сама.
А текст в три этажа можно и обычными способами вывести:
CODE
//---------------------------------------------------------------------------

void __fastcall TFormMain::SetButtonMultiline(TButton *btn)
{
//Многострочная кнопка
DWORD h = GetWindowLong(btn->Handle, GWL_STYLE);
SetWindowLong(btn->Handle, GWL_STYLE, h | BS_MULTILINE);
}
...
SetButtonMultiline(Button1);
Button1->Caption = "Abra\nkadabra";
...


Отредактировано Rius — 02/04/2005, 11:03
** Harold
Отправлено: 04.04.2005, 22:53


Не зарегистрирован







Ну, раз такое писать, Builder-то зачем тогда нужен? Надо уж сразу на MS переходить, нафига с такими знаниями "чужие" (borland'овые) обертки стандартных API'шных функций разворачивать/мусолить... wink.gif
Rius
Отправлено: 05.04.2005, 06:54


Мастер участка

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



Ещё никогда не слыхал, что VCL — это плохо? Жрет ресурсы, тормозит... все переходим на MSVC!
Панель не будет сама прорисовыватся как кнопка в системах, использующих MS Visual Styles, т.е. программа будет выглядеть чужеродно. Есть понятие стандартного интерфейса, которому дожны соответствовать все программы под Windows.
VCL только для удобства проектирования, а не для того, чтобы на пустом месте огород городить.

QUOTE
Надо уж сразу на MS переходить, нафига с такими знаниями "чужие" (borland'овые) обертки стандартных API'шных функций разворачивать/мусолить...
Любая хорошая программа под Windows будет использовать API, хоть в BCB/Delphi, хоть в MSVC. Как например будешь делать прозрачные панельки?

Отредактировано Rius — 05/04/2005, 10:00
62316e
Отправлено: 05.04.2005, 14:07


Дежурный стрелочник

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



Кстати, вот такой вопрос: а как зделать МултиЛайнKапшен у ТБатона под Kylix?
GIZMO
Отправлено: 06.04.2005, 10:12


Машинист паровоза

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



[QUOTE=** Harold,01/04/2005, 22:25]Я конечно, чайник, но зачем еще тогда VCL?!
[/QUOTE]
А зачем Ты тогда св-ми пользуешься?
TPanel::Color, TPanel::BevelOuter ... это VCL

[QUOTE=Rius]Панель не будет сама прорисовыватся как кнопка в системах, использующих MS Visual Styles, т.е. программа будет выглядеть чужеродно.[/QUOTE]
GetVersionEx если XP рисуем соответственно...
Rius
Отправлено: 06.04.2005, 10:18


Мастер участка

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



QUOTE (GIZMO @ 06/04/2005, 13:12)
GetVersionEx если XP рисуем соответственно...

Т.е. юзаем Uxtheme API для того, чтобы панель стала выглядеть в XP как кнопка? Не слишком ли много заморочек?
Pan_SQL
Отправлено: 07.04.2005, 13:46


Не зарегистрирован







Хочу подробнее пояснить свою задачу: на форме имеется поле и пара кнопок SpeedButton. Когда я ввел какой-либо текст в поле и нажал Enter, текст одной из кнопок должен становиться поужырным, т.е. кнопка как бы активизировалась. Как можно это сделать?
Valdemar
Отправлено: 07.04.2005, 14:11


Мастер участка

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



Можно так:
CODE
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
     TShiftState Shift)
{
   if (Key == VK_RETURN)
       SpeedButton1->Font->Style=TFontStyles()<< fsBold;
}

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