функции рисования в win api
Итак, в статье я опишу функции рисования в win api. Их довольно много, поэтому рассмотрим основные:
Rectangle(DC:HDC, x1:integer, y1:integer, x2:integer, y2:integer); - рисует прямоугольник на канве DC, с координатами левого верхнего угла x1,y1 и правого нижнего в x2,y2. Вот поясняющая картинка.
Ellipse(DC:HDC, x1:integer, y1:integer, x2:integer, y2:integer); - рисует овал, с теме же параметрами, что и
прямоугольник, вот поясняющая картинка.
MoveToEx(DC:HDC, p2:integer, p3:integer, p4:PPoint); - перемещает указатель на канве DC в координаты p2,p3, последний параметр
нам не нужен, поэтому устанавливаем его в nil. Функция используется при рисовании линией LineTo.
LineTo(DC:HDC, x:integer, y:integer); - рисует линию из текущей позиции указателя, в точку с координатами x,y. Указатель перемещается
функцией MoveToEx() (см.выше). Вот картинка, примерно отображающая использование LineTo(), MoveToEx().
Чтобы получить
такую картинку в первом случае был такой код:
MoveToEx(Image1.Canvas.Handle, 10, 10, nil);
LineTo(Image1.Canvas.Handle, 70, 100);
MoveToEx(Image1.Canvas.Handle, 10, 10, nil);
LineTo(Image1.Canvas.Handle, 100, 100);
А во втором случае такой:
MoveToEx(Image1.Canvas.Handle, 10, 10, nil);
LineTo(Image1.Canvas.Handle, 70, 100);
LineTo(Image1.Canvas.Handle, 100, 100);
DrawIcon(DC:HDC, x:integer, y:integer, hIcon:HICON); - рисует иконку на поверхности DC, в координате x,y, сама иконка
передаётся в последнем параметре, как HICON.
DrawFocusRect(DC:HDC, const lprc:TRECT); - рисует прямоугольник фокуса (пунктирная линия, вроде той которая используется
при выделении чего-либо). Её передаются всего два параметра - канва, на которой нужно вывести рисунок, и TRect - прямоугольник.
DrawText(DC:HDC, lpString:PAnsiChar, nCount:integer, lpRect:TRect, uFormat:cardinal); - выводит текст lpString, в прямоугольнике lpRect.
SetPixel(DC:HDC, x:integer, y:integer, Color:Cardinal); - закрашивает пиксел в координате x,y цветом color.
GetPixel(DC:HDC, x:integer, y:integer) - возвращает цвет пиксела в координате x,y.
Чтобы было понятней, приведу пример всех описанных выше функций, плюс ещё несколько фишек - в примере, мы будем вырисовывать всё на десктопе,
и главное - изменит аттрибуты канвы, такие как цвет кисти (HBRUSH) и цвет карандаша (HPEN), тоесть например если на
десктопе вывести прямоугольник, с помощью Rectangle(), то внешняя линия будет чёрной, а цвет заливки - белой, это параметры по умолчанию,
я покажу как изменять толщину, цвет и другие параметры заливки и линии. Итак вот пример:
program DeskColorDraw;
uses
Windows,
ShellApi; // здесь нужна только для извлечения иконки
var
lpen : LOGPEN;
lbrush : LOGBRUSH;
pen : HPEN;
brush : HBRUSH;
dc : HDC;
pnt: TPoint;
rct : TRect;
ico : HICON;
begin
ico := ExtractIcon(0, 'icon.ico', 0);
pnt.X := 10;
pnt.Y := 10;
rct.Top := 300;
rct.Left := 300;
rct.Right := 400;
rct.Bottom := 400;
lpen.lopnStyle := PS_STYLE_MASK;
lpen.lopnWidth := pnt;
lpen.lopnColor := 1000;
lbrush.lbStyle := windows.BS_SOLID;
lbrush.lbColor := 65535;
lbrush.lbHatch := 0;
dc := GetDC(0);
pen := windows.CreatePenIndirect(lpen);
brush := windows.CreateBrushIndirect(lbrush);
SelectObject(dc, pen);
SelectObject(dc, brush);
MoveToEx(dc, 50, 50, nil);
LineTo(dc, 300, 50);
MoveToEx(dc, 50, 70, nil);
LineTo(dc, 300, 70);
DrawFocusRect(dc, rct);
DrawText(dc, 'text', 4, rct, 0);
Rectangle(dc, 200,200,300,300);
Ellipse(dc, 100,100,200,200);
SetPixel(dc, 10, 10, 255); // 255 - код красного цвета
//color := GetPixel(dc, 30, 30); // здесь color - переменная типа cardinal
DrawIcon(dc, 200, 200, ico);
DeleteObject(SelectObject(dc, brush));
DeleteObject(SelectObject(dc, pen));
end.
Исходник
SLAyer
Другие статьи
По всем вопросам и предложениям по сайту пишите на info@comp-info.ru  
|