unit Shapes;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TfmShapes = class(TForm)
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmShapes: TfmShapes;

implementation

{$R *.dfm}

procedure TfmShapes.FormPaint(Sender: TObject);
var
  hCurDC: HDC;
  hCurPen, hOldPen: HPEN;
  hCurBrush, hOldBrush: HBRUSH;
begin
  // получаем общий контекст устройства
  hCurDC := GetDC(Handle);
  // создаем графический объект карандаш
  hCurPen := CreatePen(PS_SOLID, 2, RGB(255, 64, 0));
  // выбираем его для общего контекта устройства экрана
  // и запоминаем ранее выбранный
  hOldPen := SelectObject(hCurDC, hCurPen);
  // создаем графический объект кисть
  hCurBrush := CreateSolidBrush(RGB(0, 128, 255));
  // выбираем ее для общего контекта устройства экрана
  // и запоминаем ранее выбранную
  hOldBrush := SelectObject(hCurDC, hCurBrush);
  // рисуем эллипс
  Ellipse(hCurDC, 10, 10, 100, 70);
  // рисуем прямоугольник
  Rectangle(hCurDC, 110, 10, 210, 70);
  // прямоугольник со скругленными углами
  RoundRect(hCurDC, 10, 80, 100, 140, 10, 10);
  // прямоугольник в виде "бочки"
  RoundRect(hCurDC, 110, 80, 210, 140, 10, 100);
  // рисуем прямую
  MoveToEx(hCurDC, 10, 150, nil);
  LineTo(hCurDC, 100, 220);
  // рисуем дугу
  Arc(hCurDC, 110, 150, 210, 220, 110, 150, 210, 220);
  // восстанавливаем ранее выбранную кисть
  SelectObject(hCurDC, hOldPen);
  // удаляем созданную кисть
  DeleteObject(hCurPen);
  // восстанавливаем ранее выбранный карандаш
  SelectObject(hCurDC, hOldPen);
  // удаляем созданный карандаш
  DeleteObject(hCurPen);
  // освобождаем общий контекст устройства
  ReleaseDC(Handle, hCurDC);
end;

end.
