?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

貝斯特官網最奢華游戲:再學GDI+56 路徑Warp

?

經由過程路徑的 Warp 措施可以讓路徑在一個范圍內(四個點抉擇的范圍)變換;

第一個參數可所以 3 個點或 4 個點的數組, 假如是 3 個的數組, 那么第 4 個點將自動跟 隨一個平行四邊形;

第二個參數用來指定點數組的個數, 本例便是經由過程這個參數節制了點的個數;

第三個參數是一個矩形, 這個矩形應該是路徑的外接矩形, 之后的參數都是可選的;

第四個參數也是一個矩陣變換, 起因專門的 例子 , 這里沒有考試測驗;

第五個參數是 TWarpMode(WarpModePerspective, WarpModeBilinear) , 默認前者;

第六個參數可以指定 Flatten 變換, 前面有 例子 , 這里也沒有考試測驗.

本例效果圖:

代碼文件:unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls;

type

TForm1 = class(TForm)

CheckBox1: TCheckBox;

procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure CheckBox1Click(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses GDIPOBJ, GDIPAPI;

var

ptfs: array[0..3] of TGPPointF;

ptCount: Integer = 4;

pti: Integer;

R: TRect;

flag: Boolean;

procedure TForm1.FormCreate(Sender: TObject);

begin

CheckBox1.Caption := '只用 3 個點節制';

R := Rect(20, 20, ClientWidth-20, ClientHeight - 40);

ptfs[0] := MakePoint(R.Left*1.0, R.Top);

ptfs[貝斯特官網最奢華游戲1] := MakePoint(R.Right*1.0, R.Top);

ptfs[2] := MakePoint(R.Left*1.0, R.Bottom);

ptfs[3] := MakePoint(R.Right*1.0, R.Bottom);

end;

procedure TForm1.FormPaint(Sender: TObject);

var

g: TGPGraphics;

p: TGPPen;

b: TGPBrush;

path: TGPGraphicsPath;

fontFamily: TGPFontFamily;

StringFormat: TGPStringFormat;

rectf: TGPRectF;

i: Integer;

begin

g := TGPGraphics.Create(Canvas.Handle);

p := TGPPen.Create(aclRed, 貝斯特官網最奢華游戲1);

b := TGPHatchBrush.Create(HatchStyleShingle, aclDarkCyan);

path 貝斯特官網最奢華游戲:= TGPGraphicsPath.Create;

path.AddEllipse(MakeRect(R));

fontFamily := TGPFontFamily.Create('Arial Black');

StringFormat := TGPStringFormat.Create;

StringFormat.SetAlignment(StringAlignmentCenter);

StringFormat.SetLineAlignment(StringAlignmentCenter);

path.GetBounds(r貝斯特官網最奢華游戲ectf);

path.AddString('Delphi', -1, fontFamily, FontStyleRegular, 48, rectf, StringFormat);

path.Warp(PGPPointF(@ptfs), Length(ptfs), rectf);

g.FillPath(b, path);

for i := 0 to ptCount - 1 do

g.DrawRectangle(p, MakeRect(ptfs[i].X-3, ptfs[i].Y-3, 6, 6));

StringFormat.Free;

fontFamily.Free;

path.Free;

b.Free;

p.Free;

g.Free;

end;

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

ptCount := 4;

if CheckBox1.Checked then ptCount := 3;

Repaint;

end;

procedure TForm1.FormMouseDown(Sender: TObject; 貝斯特官網最奢華游戲Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

i: Integer;

begin

for i := 0 to 3 do

if PtInRect(Bounds(Trunc(ptfs[i].X-3), Trunc(ptfs[i].Y-3), 6, 6), Point(X, Y)) then

begin

pti := i;

flag := True;

Exit;

end;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

if flag then

begin

ptfs[pti].X := X;

ptfs[pti].Y := Y;

Repaint;

end;

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

flag := False;

end;

end.

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

浙江体彩20选5开奖号 电子棋牌游戏 中华商标超市网 华西村股票 吉林微乐长春麻将 11选5中4个多少钱 证券投资分析师 贵阳捉鸡麻将技巧 20选5选号技巧 权威配资 快3计划软件 中国十大p2p理财公司 瑞银网 福建31选7最新开奖结果今天 太原股票配资 北京快3和值走势图 中国十大理财机构排名