本例效果图:
代码文件:
代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure FormClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses GDIPOBJ, GDIPAPI; procedure TForm1.FormPaint(Sender: TObject); var g: TGPGraphics; b: TGPSolidBrush; path: TGPGraphicsPath; rgn: TGPRegion; Matrix: TGPMatrix; RectCount: Integer; rts: array of TGPRect; i: Integer; begin g := TGPGraphics.Create(Canvas.Handle); b := TGPSolidBrush.Create(MakeColor(50, 0, 0, 255)); path := TGPGraphicsPath.Create; path.AddEllipse(MakeRect(20, 10, ClientWidth-40, ClientHeight-20)); rgn := TGPRegion.Create(path); Matrix := TGPMatrix.Create; {它在本例中只是个摆设, 因为参选需要} RectCount := rgn.GetRegionScansCount(Matrix); SetLength(rts, RectCount); rgn.GetRegionScans(Matrix, PGPRect(rts), RectCount); Randomize; for i := 0 to RectCount - 1 do begin b.SetColor(ColorRefToARGB(Random($FFFFFF))); g.FillRectangle(b, rts[i]); end; Matrix.Free; rgn.Free; path.Free; b.Free; g.Free; end; procedure TForm1.FormClick(Sender: TObject); begin Repaint; end; end.窗体文件:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 217 ClientWidth = 219 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False Position = poDesktopCenter OnClick = FormClick OnPaint = FormPaint PixelsPerInch = 96 TextHeight = 13 end