Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Преобразование TGroupBox'а (BCB) в стиль WinXP

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Преобразование TGroupBox'а (BCB) в стиль WinXP
Имя
Сообщение << Старые топики   Новые топики >>
Преобразование 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-овский контрол в форму в Биледере? Заранее спасибо за ответы!
Post #: 1
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.
Post #: 2
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-04 17:09:09.950000   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
А ты создай GroupBox апи функцией CreateWindowEx да и все ..
Post #: 3
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-&gt;Handle, 0, (HINSTANCE)GetModuleHandle(NULL), NULL)

Ничего не отображается. Форма как была, так и осталась. Никаких изменений. Тем не менее, функция CreateWindow возвращает true. Странно … Что скажешь?
Post #: 4
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-04 21:48:54.310000   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
Хм, даже незнаю .. голова чето неварит, завтра с утра подумаю )

ЗЫ:
впринципе, можеш заюзать сторонний компонент ..
Post #: 5
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, или же, вызвал ее не в тот момент (при нажатии на кнопку/создании формы - безрезультатно).
Post #: 6
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-&gt;Handle, 0, (HINSTANCE)GetModuleHandle(NULL), NULL)

Почему я говорю "примерно". Дело в том, что и на этом не все проблемы кончились. При сворачивании/разворачивании и перетаскивании формы за края экрана GroupBox свой фон заменяет изображением того, что находиться за окном. Короче, получается так, как будто бы этот самый GroupBox - дыра в форме и через нее видно, что за формой находиться. И еще, при подключении манифеста к приложению текст (заголовок) GroupBox'а отображается не на фоне формы, а на белом фоне. Что скажешь? Идеи есть?
Post #: 7
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-&gt;Handle, 0, (HINSTANCE)GetModuleHandle(NULL), NULL)

Почему я говорю "примерно". Дело в том, что и на этом не все проблемы кончились. При сворачивании/разворачивании и перетаскивании формы за края экрана GroupBox свой фон заменяет изображением того, что находиться за окном. Короче, получается так, как будто бы этот самый GroupBox - дыра в форме и через нее видно, что за формой находиться. И еще, при подключении манифеста к приложению текст (заголовок) GroupBox'а отображается не на фоне формы, а на белом фоне. Что скажешь? Идеи есть?

Наверно тебе придется обрабатывать сообшение прорисовки групбокса .. С++ я незнаю, поэтому примером помочь немогу, но гугл думаю ответит )
Post #: 8
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, только не на Асме (с ним совсем туго).
Post #: 9
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 говорил, я говорил о обработке сообшений от групбокса, созданного с помошью апи ..
Писать пример влом, тк гамаю в линейку ) эт уж извиняй ..
Post #: 10
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, может он покатит
Post #: 11
RE: Преобразование TGroupBox'а (BCB) в стиль WinXP - 2007-05-07 14:34:07.933333   
voody

Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
Уже пробовал, не прокатило! Замена (HINSTANCE)GetModuleHandle(NULL) на Application-&gt;Handle тоже не помогла. Причем, весь прикол в том, что этот код на отлично работает в Win32-приложении в MS VC++ 2005. Не знаю, что и думать. Какой-то этот C++ Builder кривой. Не первый раз уже сталкиваюсь в нем с проблемами, которых в MS VC++ нет. Но есть одно но, мне сейчас нужно использовать именно C++ Builder, т.к. писать оконное приложение на чистом WinAPI - это вообще пипец, а с MFC я не дружу. В нем тоже разбираться надо. У кого-нибудь еще идеи есть? Где вы, знатоки WinAPI!?
Post #: 12
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Преобразование TGroupBox'а (BCB) в стиль WinXP







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.