Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Изменение цвета текста в заголовке формы?


Автор: Vitaly333 13.5.2007, 14:26
Данный вопрос на форуме уже поднимался но вразумительного ответа на него я пока не нашел

Автор: jonie 13.5.2007, 18:10
за перерисовку (как собственно и за все другое НЕ клиенское) отвечают сообщения WM_NC* (от non-client)
Т.о. надо перехватить сообщение WM_NCPAINT, а далее рисуйте что хотите TextOut - ом ....

Автор: Klin 13.5.2007, 19:24
Легче создать свой собственный. Про перемещение не за заголовок можите прочитать в FAQ.

Автор: mr.Anderson 13.5.2007, 19:55
Еще как вариант (еще более простой) - сделать рамку формы как bsNone и нарисовать собственную полосу заголовка (ну, и с собственными кнопками свернуть/развернуть/закрыть, если надо). Элементарно, и можно сделать заголовок вообще любым шрифтом и цветом. smile

Автор: Klin 13.5.2007, 21:51
mr.Anderson, а я о чем? smile Я и имел ввиду создать какой-нибудь TPanel, на него можно добавить изображения для понтов или просто изменить шрифт у Panel.

Автор: mr.Anderson 14.5.2007, 13:17
Klin, а я имел в виду не TPanel, а TImage. smile Только TImage в качестве заголовка, куда тут еще панель-то засовывать?

Автор: Klin 14.5.2007, 16:14
Цитата(mr.Anderson @  14.5.2007,  14:17 Найти цитируемый пост)
Только TImage в качестве заголовка, куда тут еще панель-то засовывать?

гы-гы, а доп. кнопки будут просто нарисованы, или попросим пользователя окошечко клавой закрывать? smile

Добавлено через 3 минуты и 11 секунд
можно конечно обработчик для этого написать, но зачем лишний геморой?

Автор: Dem_max 14.5.2007, 18:24
Просто в качестве варианта тебе предложили рисовать свои кнопки на TImage, ставишь свойство формы bsNone.
картинку прилагаю 

Автор: Klin 14.5.2007, 18:47
Dem_max, это вы вовремя предложили smile

Добавлено через 2 минуты и 28 секунд
в принципе, и без панели, можно обойтись, только тогда не канвой, а обычные image добавлять придеться (их их перемещать при действиях с формой)

Автор: jonie 14.5.2007, 22:47
и всеже отвечая "по топу", чем вам не нравится субклассирование окна?а дальше отлавливайте все что хотите и рисуйте где и чего хотите)
Код

//---------------------------------------------------------------------------
LRESULT CALLBACK NewWindowProc(HWND hWnd, UINT msg, WPARAM w,
LPARAM l)
{
  if(msg==WM_NCPAINT){
        TCanvas* canvas = new TCanvas();
        canvas->Handle = GetWindowDC(Form1->Handle);
        canvas->Brush->Color = clRed;
        canvas->Rectangle(0,0,300,10);
        ReleaseDC(Form1->Handle,canvas->Handle);
        delete canvas;
       return 0; //break process this message
  }
  return CallWindowProc((FARPROC)Form1->OldWndProc, hWnd, msg, w, l);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 OldWindowProc = (WNDPROC)SetWindowLong(Handle, GWL_WNDPROC, (long)NewWindowProc);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
 SetWindowLong(Handle, GWL_WNDPROC, (long)OldWindowProc);
}
//---------------------------------------------------------------------------
 симитировать мб и проще, но офтоп))

зЫ: в билдере не рублю, потому делал как знаю)

Автор: Klin 14.5.2007, 23:33
Цитата(jonie @  14.5.2007,  23:47 Найти цитируемый пост)
чем вам не нравится субклассирование окна?

Да нормуль все, просто новичку, гораздо легче добавить рисунок и сделать из него заголовок, чем изменить стандартный. Операции легче, эффекту больше smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)