|
Мы должны сделать форму программы нестандартной, а по форме нашего рисунка. Это может быть рисунок любой геометрической формы. Мы выбрали прямоугольник с закругленными углами в форме блокнота.
На открытие формы мы формируем внешний вид формы:
a : TBitMap; - объявлено в глобальных переменных
a:= TBitMap.Create; a.LoadFromResourceName(HInstance,'BITFON'); Form1.canvas.Draw(0,0,a); SetWindowRgn(Form1.Handle,BitmapToRegion(a,clRed),true);
Наша форма принимает вид и границы нашего рисунка:

procedure Tform1.WMLButtonDown(var Msg: TMessage); begin Perform(WM_NCLBUTTONDOWN, HTCAPTION, Msg.LParam); end;
function BitmapToRegion(Bitmap: TBitmap; TransColor: TColor): HRGN; var X, Y: Integer; XStart: Integer; begin Result := 0; with Bitmap do for Y := 0 to Height - 1 do begin X := 0; while X < Width do begin // Пропускаем прозрачные точки while (X < Width) and (Canvas.Pixels[X, Y] = TransColor) do Inc(X); if X >= Width then Break; XStart := X; // Пропускаем непрозрачные точки while (X < Width) and (Canvas.Pixels[X, Y] TransColor) do Inc(X); // Создаём новый прямоугольный регион и добавляем его к // региону всей картинки if Result = 0 then Result := CreateRectRgn(XStart, Y, X, Y + 1) else CombineRgn(Result, Result, CreateRectRgn(XStart, Y, X, Y + 1), RGN_OR); end; end; end; |