Изменение формы - сглаживаем углы

Мы должны сделать форму программы нестандартной, а по форме нашего рисунка. Это может быть рисунок любой геометрической формы. Мы выбрали прямоугольник с закругленными углами в форме блокнота.

На открытие формы мы формируем внешний вид формы:

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;

 
    © 2008-2011 Портал практического программирования Delphi T-SQL
Besucherzahler mail order brides
счетчик посещений