Однажды столкнулся с маленькой проблемкой: нужно было создать форму, которая имеет нестандартную для Delphi геометрическую форму. Описываю процесс создания на примере простенькой программы, окно которой имеет форму подсказки, может кому пригодится(исходники прикреплены).
Итак, для создания окна такой формы в событии OnCreate основной формы нужно прописать следующий код:
Раздел описания переменных имеет следующий вид:
Вот какая форма в результате получилась у меня, окошко появляется при наведении мыши:

Итак, для создания окна такой формы в событии OnCreate основной формы нужно прописать следующий код:
| Код |
|---|
procedure TForm1.FormCreate(Sender: TObject); begin //Создаем массив точек с координатами нижнего треугольника StemPts[0] := Point(Form1.Width - 37,Form1.Height - 16); //левая верхняя вершина StemPts[1] := Point(Form1.Width - 25,Form1.Height - 16); //правая верхняя вершина StemPts[2] := Point(Form1.Width - 25,Form1.Height - 2); //нижняя вершина //Создаем прямоугольник с закругленными краями RoundRectForm := CreateRoundRectRgn(0,0,Form1.Width - 15,Form1.Height - 15,20,20); //Создаем треугольник, передаем массив точек с координатами TriangleForm := CreatePolygonRgn(StemPts, 3, WINDING); //Создаем дополнительный регион, для обьединения треугольника с прямоугольником Region := CreateRectRgn(0, 0, 1, 1); //Обьединяем регионы CombineRgn(Region, RoundRectForm, TriangleForm, RGN_OR); //Устанасливаем наш регион вместо стандартной формы SetWindowRgn(Handle,Region,true); end; |
Раздел описания переменных имеет следующий вид:
| Код |
|---|
var Form1: TForm1; RoundRectForm, TriangleForm, Region : HRGN; StemPts: array[0..2] of TPoint; |
Вот какая форма в результате получилась у меня, окошко появляется при наведении мыши:

Изменено:
Сергей Коржевский - 29.06.2010 21:22:52