IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила форума Всем прочитать перед созданием темы!
 
Ответить в данную темуНачать новую тему
Как сделать окно нестандартное формы (например круговое)?
MonK
сообщение 1.03.2003 - 07:19
Сообщение #1


The Faithful one
Иконка группы

Группа: Пользователи
Пользователь №: 31
Сообщений: 93
Регистрация: 28.02.2003
Из: Toril --> Forgotten Realms --> Waterdeep
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 0 раз(а)



Пожалуй, одним из самых распространенных вопросов
о программировании на Delphi сейчас является создане
непрямоугольных форм. Сейчас мы попробуем рассмотреть,
как это можно сделать...
Это - не самая сложная проблема, а потому мы объединим ее
еще с одной - перетаскиванием окна не только за заголовок
(caption), но за любую точку формы.
Итак, создаем обычный проект (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. Задаем новую процедуру - чтобы перемещать окно за любую точку формы:
Т.к. процедура наполовину самопальная biggrin.gif , то приведу весь ее код:
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);
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28.03.2024 - 22:49
Ошибка работы драйвера БД

Ошибка при работе с базой данных

Возникла проблема при работе с базой данных.
Вы можете попробовать обновить эту страницу, нажав сюда