Преобразование TGroupBox'а (BCB) в стиль WinXP
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-03 02:43:28.163333
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
Здравствуйте. Я создал эту тему в продолжение к предыдущей (о создании кнопок со скругленными углами). Та проблема решилась добавлением манифеста к программе, но при этом осталась еще одна проблема. Дело в том, что стили WinXP действуют на все, кроме контрола TGroupBox. Это, как я понимаю, происходит из-за того, что TGroupBox - Борландовский аналог обычного GroupBox'а. Стили для обычного MS-овского контрола на него не действуют. Так вот, сам вопрос: как все-таки повлиять на стиль этого контрола? Это вообще реально? Или, как добавить MS-овский контрол в форму в Биледере? Заранее спасибо за ответы!
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-04 15:30:39.496666
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
Мда … Что-то я смотрю, эта тема никого не интересует. Или, скорее, никто не знает ответа на мой вопрос, т.к. я сомневаюсь, что на этом форуме нет такого человека, который не столкнулся бы с подобной проблемой. Значит так, напишу, что получилось у меня (мало ли, кому-нибудь пригодиться). Погуглив еще пару дней я наткнулся на компонент, совместимый с Delphi и C++ Builder'ом, который называется "Theme Manager XP". После установки я нашел у себя новую закладку в визуальных компонентах под названием "XP". Перетащил ее на форму, добавил манифест и, о, чудо (!), TGroupBox стал отображаться в стиле XP. И все было бы хорошо, если бы не размер проги. Он вырос с ~450 КБ аж до целых ~780 КБ! Вот и думаю теперь, а стоит ли оно того? Увеличивать размер проги на почти 400 КБ только из-за какого-то GroupBox'а. Я был бы очень рад, если бы кто-то дал совет, как уменьшить размер проги (упаковщики не в счет - я спрашиваю, может можно как-то выкинуть что-нибудь лишнее из проги), или, как средствами WinAPI добавить на уже созданную форму в BCB Майкрософтовский GroupBox.
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-04 17:09:09.950000
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
А ты создай GroupBox апи функцией CreateWindowEx да и все ..
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-04 21:45:02.616666
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
Уже интереснее, а как не подскажешь? Я попробовал сделать так, а результат нулевой: CreateWindow("BUTTON", "GroupBox", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10, 10, 200, 150, Application->Handle, 0, (HINSTANCE)GetModuleHandle(NULL), NULL) Ничего не отображается. Форма как была, так и осталась. Никаких изменений. Тем не менее, функция CreateWindow возвращает true. Странно … Что скажешь?
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-04 21:48:54.310000
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
Хм, даже незнаю .. голова чето неварит, завтра с утра подумаю ) ЗЫ: впринципе, можеш заюзать сторонний компонент ..
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-04 22:10:07.746666
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
Подумай, был бы очень благодарен. quote:
ЗЫ: впринципе, можеш заюзать сторонний компонент .. Читай мои посты выше. Уже заюзал. И вес проги вырос в ~2 раза. А проблема всего-то в том, что мне нужно MS-овский GroupBox на VCL-форму кинуть. Я не верю, что этого нельзя сделать. Скорее всего, я просто неправильно указал какие-то параметры в функции CreateWindow, или же, вызвал ее не в тот момент (при нажатии на кнопку/создании формы - безрезультатно).
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-05 22:20:02.450000
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
Эй, blacksun, куда пропал? Кое-что начинает проясняться. Я понял, почему у меня не создавалось окно. Я тогда указывал хэндл приложения, а не окна, в одном из параметров. Надо было делать примерно так: CreateWindow("BUTTON", "GroupBox", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10, 10, 200, 150, Application->Handle, 0, (HINSTANCE)GetModuleHandle(NULL), NULL) Почему я говорю "примерно". Дело в том, что и на этом не все проблемы кончились. При сворачивании/разворачивании и перетаскивании формы за края экрана GroupBox свой фон заменяет изображением того, что находиться за окном. Короче, получается так, как будто бы этот самый GroupBox - дыра в форме и через нее видно, что за формой находиться. И еще, при подключении манифеста к приложению текст (заголовок) GroupBox'а отображается не на фоне формы, а на белом фоне. Что скажешь? Идеи есть?
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-06 00:03:44.780000
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
quote:
ORIGINAL: voody Эй, blacksun, куда пропал? Кое-что начинает проясняться. Я понял, почему у меня не создавалось окно. Я тогда указывал хэндл приложения, а не окна, в одном из параметров. Надо было делать примерно так: CreateWindow("BUTTON", "GroupBox", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10, 10, 200, 150, Application->Handle, 0, (HINSTANCE)GetModuleHandle(NULL), NULL) Почему я говорю "примерно". Дело в том, что и на этом не все проблемы кончились. При сворачивании/разворачивании и перетаскивании формы за края экрана GroupBox свой фон заменяет изображением того, что находиться за окном. Короче, получается так, как будто бы этот самый GroupBox - дыра в форме и через нее видно, что за формой находиться. И еще, при подключении манифеста к приложению текст (заголовок) GroupBox'а отображается не на фоне формы, а на белом фоне. Что скажешь? Идеи есть? Наверно тебе придется обрабатывать сообшение прорисовки групбокса .. С++ я незнаю, поэтому примером помочь немогу, но гугл думаю ответит )
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-06 00:11:44.800000
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
quote:
Наверно тебе придется обрабатывать сообшение прорисовки групбокса .. С++ я незнаю, поэтому примером помочь немогу, но гугл думаю ответит ) Так вот, вся проблема как раз в том, что VCL, вроде бы, не позволяет обрабатывать сообщения вручную. А мне, на самом деле, не обязательно нужен пример именно на C++. Мне бы подошел и на Delphi, VB, только не на Асме (с ним совсем туго).
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-06 00:15:37.193333
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
quote:
ORIGINAL: voody quote:
Наверно тебе придется обрабатывать сообшение прорисовки групбокса .. С++ я незнаю, поэтому примером помочь немогу, но гугл думаю ответит ) Так вот, вся проблема как раз в том, что VCL, вроде бы, не позволяет обрабатывать сообщения вручную. А мне, на самом деле, не обязательно нужен пример именно на C++. Мне бы подошел и на Delphi, VB, только не на Асме (с ним совсем туго). Я не про VCL говорил, я говорил о обработке сообшений от групбокса, созданного с помошью апи .. Писать пример влом, тк гамаю в линейку ) эт уж извиняй ..
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-07 11:40:08.120000
|
|
|
JTG
Сообщений: 1189
Оценки: 0
Присоединился: 2007-03-05 11:56:01.993333
|
Банан вам, вместо Application->Handle надо Form1->handle, тебе ведь дескриптор окна надо, а не модуля. А вместо (HINSTANCE)GetModuleHandle(NULL) может как раз Application->Handle (?) – Пардон, заметил пост выше Кстати в делфи с этим проблем не было (ну в смысле xp-стиль). Пробуй CreateWindowEx, может он покатит
|
|
|
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-07 14:34:07.933333
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
Уже пробовал, не прокатило! Замена (HINSTANCE)GetModuleHandle(NULL) на Application->Handle тоже не помогла. Причем, весь прикол в том, что этот код на отлично работает в Win32-приложении в MS VC++ 2005. Не знаю, что и думать. Какой-то этот C++ Builder кривой. Не первый раз уже сталкиваюсь в нем с проблемами, которых в MS VC++ нет. Но есть одно но, мне сейчас нужно использовать именно C++ Builder, т.к. писать оконное приложение на чистом WinAPI - это вообще пипец, а с MFC я не дружу. В нем тоже разбираться надо. У кого-нибудь еще идеи есть? Где вы, знатоки WinAPI!?
|
|
|
|
|