WinAPI: CreatePolyPolygonRgn - 建立多个多边形构成的区域
2008-05-26 17:01
288 查看
本例效果图:
下面的 "老A123" 需要使用动态数组, 可以改成这样:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var f: Boolean = False; procedure TForm1.FormClick(Sender: TObject); const n = 50; var ps: array[0..6] of TPoint; ns: array[0..1] of Integer; Rgn: HRGN; i: Integer; begin Refresh; ps[0] := Point(n, n div 2); ps[1] := Point(n, ClientHeight - n); ps[2] := Point(ClientWidth - n, ClientHeight - n); ps[3] := Point(ClientWidth - n, n div 2); ps[4] := Point(ClientWidth div 2, n); ps[5] := Point(n div 2, ClientHeight - n div 2); ps[6] := Point(ClientWidth - n div 2, ClientHeight - n div 2); ns[0] := 4; ns[1] := 3; {建立多个多边形构成的区域} if f then begin Rgn := CreatePolyPolygonRgn(ps, ns, Length(ns), WINDING); Text := '填充模式: WINDING'; end else begin Rgn := CreatePolyPolygonRgn(ps, ns, Length(ns), ALTERNATE); Text := '填充模式: ALTERNATE'; end; f := not f; {填充区域} Canvas.Brush.Color := clSilver; Canvas.Brush.Style := bsCross; FillRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle); {绘制区域边界} Canvas.Brush.Color := clRed; Canvas.Brush.Style := bsSolid; FrameRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle, 2, 2); Canvas.Brush.Color := Self.Color; for i := 0 to Length(ps) do Canvas.TextOut(ps[i].X, ps[i].Y, IntToStr(i)); DeleteObject(Rgn); end; end.
下面的 "老A123" 需要使用动态数组, 可以改成这样:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var f: Boolean = False; procedure TForm1.FormClick(Sender: TObject); const n = 50; var ps: array of TPoint; ns: array of Integer; Rgn: HRGN; i: Integer; begin SetLength(ps, 7); SetLength(ns, 2); Refresh; ps[0] := Point(n, n div 2); ps[1] := Point(n, ClientHeight - n); ps[2] := Point(ClientWidth - n, ClientHeight - n); ps[3] := Point(ClientWidth - n, n div 2); ps[4] := Point(ClientWidth div 2, n); ps[5] := Point(n div 2, ClientHeight - n div 2); ps[6] := Point(ClientWidth - n div 2, ClientHeight - n div 2); ns[0] := 4; ns[1] := 3; {建立多个多边形构成的区域} if f then begin Rgn := CreatePolyPolygonRgn(ps[0], ns[0], Length(ns), WINDING); Text := '填充模式: WINDING'; end else begin Rgn := CreatePolyPolygonRgn(ps[0], ns[0], Length(ns), ALTERNATE); Text := '填充模式: ALTERNATE'; end; f := not f; {填充区域} Canvas.Brush.Color := clSilver; Canvas.Brush.Style := bsCross; FillRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle); {绘制区域边界} Canvas.Brush.Color := clRed; Canvas.Brush.Style := bsSolid; FrameRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle, 2, 2); Canvas.Brush.Color := Self.Color; for i := 0 to Length(ps) do Canvas.TextOut(ps[i].X, ps[i].Y, IntToStr(i)); DeleteObject(Rgn); end; end.
相关文章推荐
- WinAPI: CreatePolygonRgn - 建立多边形区域
- WinAPI: CreateEllipticRgn、CreateEllipticRgnIndirect - 建立椭圆区域
- 改变多边形窗口的时机;SetWindowRgn;CreatePolygonRgn;POINT;PolyDraw
- WinAPI: CreatePatternBrush - 建立位图画刷
- WinAPI: CreateBrushIndirect - 根据画刷结构建立画刷
- WinAPI: CreateRoundRectRgn - 建立圆角矩形区域
- WINAPI 区域的建立与删除实际操作注意情况
- WinAPI: ExtCreateRegion - 区域变换
- WinAPI: CreateDirectoryEx - 根据模版建立文件夹
- 【转】WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体
- WinAPI: ExtCreateRegion - 区域变换
- WinAPI: Polygon - 绘制多边形
- WinAPI: CreatePenIndirect - 根据笔的参数结构建立画笔
- WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体
- WinAPI: CreateSolidBrush - 建立实心画刷
- WinAPI: CreateRectRgn、CreateRectRgnIndirect、FillRgn、FrameRgn - 建立矩形区域
- WinAPI: CreateHatchBrush - 建立阴影画刷
- 多边形区域填充算法--扫描线填充算法(有序边表法)
- 根据经纬度计算多边形的面积(calculcate polygon's area by lon and lat)