Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Изменение заголовка окон.


Автор: Fenix 12.7.2006, 18:34
Доброго времени суток.
Меня интересует возможно ли ислользуя Api изменить заголовок окон (точнее даже модальных окон) программы. Тоесть изменить цвет, размер, рисунки кнопок и тд. Для определенного окна. Я читал, что вроде через WinApi это можно реализовать. 
Если кто знает как это сделать прошу помочь.
Заранее благодарен. 

Автор: Wing 12.7.2006, 20:47
Что-то я не помню что-бы через API можно было как-нибудь менять цвет кнопочек в заголовке. А вот текст в заголовке можно - см. SetWindowText. 

Автор: Fenix 12.7.2006, 20:59
Хм... тогда подскажите как это можно сделать. Просто ставить bsNone и самому прописывать заголовок как то нехочеться, да и лишняя загрузка системы тоже будет не к месту smile

Автор: Alexeis 12.7.2006, 21:04
Цитата(Wing @  12.7.2006,  20:47 Найти цитируемый пост)
Что-то я не помню что-бы через API можно было как-нибудь менять цвет кнопочек в заголовке
 только если переключится на стиль XP, и то Api здесь не при чем.
Цитата(Wing @  12.7.2006,  20:47 Найти цитируемый пост)
А вот текст в заголовке можно - см. SetWindowText. 

Текст в заголовке легко меняется и без api form1.caption smile 
А заголовок можно вообще удалить и свой нарисовать и заодно кнопки на свой вкус, правда к api это уже не имеет отношения.

С помощью Api можно удалять кнопки из заголовка. Можно еще поменять иконку слева на панели. 
Можно с помощью api рисовать что-то свое на этой панели, перехватывая сообщение неклиентской областию

Добавлено @ 21:06 
Цитата(Fenix @  12.7.2006,  20:59 Найти цитируемый пост)
подскажите как это можно сделать

Так что конкретно не получается?
Цвет заголовка можно менять только у всех окон одновременно.
 

Автор: Fenix 12.7.2006, 21:16
Цитата(alexeis1 @ 12.7.2006,  21:04)
А заголовок можно вообще удалить и свой нарисовать и заодно кнопки на свой вкус, правда к api это уже не имеет отношения.

Вот именно это мне и надо. Я конечно могу сделать это через канву, но думаю это не оптимальный выход. Объясни или дай ссылки, где можно почитать про создание своих заголовков. А то сейчас это мне очень нужно, и не могу двигаться дальше пока не решу эту проблему... 

Автор: Alexeis 13.7.2006, 10:32
Fenix
Цитата(Fenix @  12.7.2006,  21:16 Найти цитируемый пост)
Объясни или дай ссылки, где можно почитать про создание своих заголовков. А то сейчас это мне очень нужно, и не могу двигаться дальше пока не решу эту проблему... 

Я для себя решал просто! Кинул TImage в него png-шку (у меня еще TpngImage был) установил прилипание к верху (align-> altop), правда zoom пришлось отменить (но приложение было скиновое так что выхода не было). И все,  image, сам себя прекрасно перерисовывает, когда нужно, быстро и надежно!  

Автор: Fenix 13.7.2006, 12:42
Я примерно так и делал... ток я через DelphiX делал.... И потом просто обработать нажатия мыши в определенном месте (где кнопки свернуть, закрыть). Но я думаю, это не оптимальный вариант smile притом если будет много окон.... 

Автор: Alexeis 13.7.2006, 14:59
Цитата(Fenix @  13.7.2006,  12:42 Найти цитируемый пост)
 Но я думаю, это не оптимальный вариант

А в чем неоптимальность? 

Автор: Fenix 13.7.2006, 16:10
Да хотябы в том что пспользуеться VCL, и не заменяеться заголовок, а создаеться новый, прописываються новые обработчики событий.... 

Автор: Alexeis 13.7.2006, 16:23
Цитата(Fenix @  13.7.2006,  16:10 Найти цитируемый пост)
 и не заменяеться заголовок

как незаменяется когда он удаляется целиком, а значит что просто системные обработчики заменяются своими - это не такая потеря, кроме того можно воспользоватья обработчиком WM_PAINT и рисовать в нем при помощи api Функции PatBlt, тогда вообще не будет потери в скорости. 

Автор: Mr.Floppy 27.7.2006, 15:37
Цитата
менять цвет кнопочек в заголовке

Разве что менять палитру
Код
SetSysColors

Но, она поменяет цвет во всех приложениях 

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