Создание непрямоугольных форм в Delphi и C++Builder
Запустите на выполнение Delphi или C++Builder. Создайте новый проект, выбрав в меню File | New | VCL
Forms Application - Delphi (File | New | VCL Forms Application – C++Builder). Появится
форма нового проекта.
Создание овальной формы
С вкладки Additional положите на форму компонент Image. Задайте для
него следующие свойства:
·
AutoSize = True.
·
Left = 0,
Top = 0.
Загрузите в этот компонент рисунок, щелкнув мышью справа
от свойства Picture
по кнопке с многоточием. Появится окно редактирования изображения:
Рис. 1. Окно Picture Editor
Щелкните мышью по кнопке Load и в каталоге на диске
выберите подходящий графический файл. В окне Picture Editor щелкните по
кнопке ОК.
Установите следующие свойства формы:
·
BorderStyle = bsNone.
·
Position
= poScreenCenter.
Размеры формы (Height и Width) установите в
соответствии с размерами картинки.
Положите на форму кнопку, задав для нее текст Close и размер
шрифта Font
7, начертание жирное, Bold.
Форма примет следующий вид:
Рис. 2.
Непрямоугольная форма
В обработчике события щелчка по этой кнопке задайте
оператор закрытия формы:
Close();
Изменить представление формы на экране, отличное от
прямоугольного, можно только в режиме выполнения программы. Напишите следующий
обработчик события создания формы (OnCreate):
procedure
begin
end;
TForm1.FormCreate(Sender: TObject);
begin
SetWindowRgn(Handle, CreateEllipticRgn(
0, // x-координата левого верхнего угла
// ограничивающего прямоугольника
0, // y-координата левого верхнего угла
// ограничивающего прямоугольника
Height, // x-координата правого нижнего
// угла ограничивающего прямоугольника
Width // y-координата правого нижнего
// угла ограничивающего прямоугольника
), TRUE);
end;
C++Builder
void
__fastcall
TForm1::FormCreate(TObject *Sender)
{
HRGN hRgn = CreateEllipticRgn(
0, // x-координата левого верхнего угла
// ограничивающего прямоугольника
0, // y-координата левого верхнего угла
//
ограничивающего прямоугольника
Height, // x-координата правого нижнего
// угла ограничивающего прямоугольника
Height // y-координата правого нижнего
// угла ограничивающего прямоугольника
);
SetWindowRgn(Handle, hRgn, TRUE);
}
Событие OnCreate возникает перед созданием
формы. В обработчике этого события создается объект hRgn типа HRGN.
Метод CreateEllipticRgn позволяет создать эллипс с указанными
характеристиками — координаты верхнего левого и правого нижнего угла (x, y). Функция SetWindowRgn
позволяет изменять внешний вид формы во время выполнения программы.
Запустите программу на выполнение. Появившаяся форма
будет иметь следующий вид:
Рис. 3.
Выполнение программы
Переместить такую форму мышью по экрану невозможно,
поскольку у нее отсутствует заголовок. Завершите работу программы, щелкнув по
кнопке закрытия.
>Переместить такую форму мышью по экрану невозможно, поскольку у нее отсутствует заголовок
ОтветитьУдалитьОтдать HTCAPTION в ответ на WM_NCHITTEST - никак? Раз уж SetWindowRgn осветили.
А то ведь прочитает молодежь - мол, переместить невозможно, поскольку окно без заголовка. Уж больно категорично и безапелляционно.