![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Garik |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Клуба Сообщений: 216 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 4 |
Видел я пример кода на благополучно скончавшемся programme.ru, который позволял создать окно программы в форме какого-то изображения.
Теперь подробнее. Хотелось бы сделать программу со скинами, типа WMP, чтобы можно было использовать любое изображение. При этом окно программы чтобы принимало форму этого изображения (задавать настройки формы окна жестко - не проходит). Как это сделать на Builder'e? --------------------
Программист - это не профессия. Это диагноз... |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
создаем обычный проект (New), и вносим туда слеующие изменения:
1. Проверяем юниты, использующиеся в проекте - там обязательно должны быть следующие: Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; 2. В раздел private необходимо добавить следующие строки: rgn : HRGN; //используется для задания региона, который будет занят формой. procedure WMNCHitTest(var Message : TWMNCHitTest); message WM_NCHITTEST; //используется при проверке - "Где сидит мышь" - для 2-ой части задания. 3. Дважды кликаем на форме, вызывая обработчик события (On Create). 4. Обрабатываем это событие (добавляем следующий код): rgn := CreateEllipticRgn(0, 0, Width, Height); SetWindowRgn(Handle, rgn, True); end; //Мы выделили программе ее круг, т.е. указали вид окна. // Вместо Width и Height МОЖНО (но не обязательно) использовать свои числа... 5. Задаем новую процедуру - чтобы перемещать окно за любую точку формы: Т.к. процедура наполовину самопальная , то приведу весь ее код: procedure TForm1.WMNCHitTest(var Message : TWMNCHitTest); begin if PtInRegion(rgn, Message.XPos, Message.YPos) then Message.Result := HTCAPTION else Message.Result := HTNOWHERE; end; 6. Для того, чтобы после закрытия программы весь регион отошел обратно к Windows, при закрытии программы его необходимо уничтожить- Кликаем на форме и в ObjecInspector'е выбираем процедуру - OnDestroy. 7. Добавляем в эту процедуру одну строчку: DeleteObject(rgn); примерно так -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |