Содержание материала

Code:

procedure TForm1.FormCreate(Sender: TObject);

var

R1,R2 : HRgn;

P : array [0..2] of TPoint;

// Массив для создания полигона

begin

  // Создаем начальный прямоугольник

  R1 :=CreateRectRgn(0,0,270,233);

  // Отрезаем сверху слева

  R2:= CreateEllipticRgn(-20,-20,135+5,20);

  CombineRgn(R1,R1,R2,RGN_DIFF);

  // Отрезаем сверху справа

  R2:= CreateEllipticRgn(135-5,-20,270+20,20);

  CombineRgn(R1,R1,R2,RGN_DIFF);

  // Отрезаем левый бок

  R2:= CreateEllipticRgn(-15,10,8,233);

  CombineRgn(R1,R1,R2,RGN_DIFF);

  // Отрезаем правый бок

  R2:= CreateEllipticRgn(270-7,10,270+16,233);

  CombineRgn(R1,R1,R2,RGN_DIFF);

  // Добавляем овал снизу

  R2:= CreateEllipticRgn(0,150,270,320);

  CombineRgn(R1,R1,R2,RGN_OR);

  // Добавляем острие (треугольник) снизу

  P[0] := Point(135-40, 310);

  P[1] := Point(135+40, 310);

  P[2] := Point(135, 335);

  R2 := CreatePolygonRgn(P, 3, WINDING);

  CombineRgn(R1,R1,R2,RGN_OR);

  // Назначаем итоговый регион нашей форме

  SetWindowRgn(Handle, R1, True);

end;

 

Попробуем создать что-либо еще более сложное и непохожее на щит.

 

Code:

procedure TForm1.FormCreate(Sender: TObject);

var

R1,R2 : HRgn;

P : array [0..2] of TPoint;

begin

  R1:= CreateEllipticRgn(135-110, 45, 135-40, 105);

  // Овал, образующий ухо

  R2:= CreateEllipticRgn(135+40, 45, 135+110, 105);

  // Овал, образующий ухо

  CombineRgn(R1,R1,R2,RGN_OR);

 

  // Отсекаем треугольником лишнюю часть овалов,

  // тем самым завершаем формирование ушей

  P[0] := Point(135-140, 40);

 

  P[1] := Point(135+140, 40);

  P[2] := Point(135, 140);

  R2 := CreatePolygonRgn(P, 3, WINDING);

  CombineRgn(R1,R1,R2,RGN_DIFF);

 

  // Формируем полумесяц рогов

  R2:= CreateEllipticRgn(135-90, 0, 135+90, 100);

  CombineRgn(R1,R1,R2,RGN_OR);

 

  R2:= CreateEllipticRgn(135-70, -5, 135+70, 70);

  CombineRgn(R1,R1,R2,RGN_DIFF);

 

  // Формируем морду

  R2:= CreateEllipticRgn(135-70, 60, 135+70, 170);

  CombineRgn(R1,R1,R2,RGN_OR);

 

 

  R2:= CreateEllipticRgn(135-40, 150, 135+40, 210);

  CombineRgn(R1,R1,R2,RGN_OR);

 

  // Назначаем итоговый регион нашей форме

  SetWindowRgn(Handle, R1, True);

 

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить