再學 GDI 57 路徑 Widen

2021-09-05 19:13:20 字數 3126 閱讀 2226

路徑的 widen 方法可以把路徑中的線, 根據指定畫筆的寬度與樣式, 轉換為乙個範圍(有點類似區域); 但轉換後再描繪路徑就只能使用 fillpath 而不是 drawpath 了. 本例沒有測試它的兩個預設引數, 因為前面已多次提到了.

本例效果圖:

**檔案:

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs, stdctrls;

type

tform1 = class(tform)

checkbox1: tcheckbox;

checkbox2: tcheckbox;

procedure formcreate(sender: tobject);

procedure formpaint(sender: tobject);

procedure checkbox1click(sender: tobject);

procedure checkbox2click(sender: tobject);

end;

var form1: tform1;

implementation

uses gdipobj, gdipapi;

procedure tform1.formcreate(sender: tobject);

begin

checkbox1.caption := '執行 widen';

checkbox2.caption := '顯示路徑中所有的點';

end;

procedure tform1.formpaint(sender: tobject);

var g: tgpgraphics;

p: tgppen;

b1,b2: tgpbrush;

path: tgpgraphicspath;

pts: array of tgppoint;

i: integer;

begin

g := tgpgraphics.create(canvas.handle);

p := tgppen.create(aclslategray, 20);

p.setendcap(linecaparrowanchor);

b1 := tgpsolidbrush.create(aclred);

b2 := tgphatchbrush.create(hatchstylediagonalcross, aclsilver, aclslategray);

path := tgpgraphicspath.create;

path.addline(40, 50, clientwidth-40, 50);

if checkbox1.checked then

begin

path.widen(p);

g.fillpath(b2, path);

end else g.drawpath(p, path);

if checkbox2.checked then

begin

setlength(pts, path.getpointcount);

path.getpathpoints(pgppoint(pts), length(pts));

tgpsolidbrush(b1).setcolor(aclred);

for i := 0 to length(pts) - 1 do

g.fillrectangle(b1, pts[i].x-3, pts[i].y-3, 6, 6);

end;

path.free;

b1.free;

b2.free;

p.free;

g.free;

end;

procedure tform1.checkbox1click(sender: tobject);

begin

repaint;

end;

procedure tform1.checkbox2click(sender: tobject);

begin

repaint;

end;

end.

窗體檔案:

object form1: tform1

left = 0

top = 0

caption = 'form1'

clientheight = 136

clientwidth = 287

color = clbtnface

font.charset = default_charset

font.color = clwindowtext

font.height = -11

font.name = 'tahoma'

font.style =

oldcreateorder = false

position = podesktopcenter

oncreate = formcreate

onpaint = formpaint

pixelsperinch = 96

textheight = 13

object checkbox1: tcheckbox

left = 43

top = 104

width = 97

height = 17

caption = 'checkbox1'

taborder = 0

onclick = checkbox1click

endobject checkbox2: tcheckbox

left = 138

top = 104

width = 125

height = 17

caption = 'checkbox2'

taborder = 1

onclick = checkbox2click

endend

1967 路徑定向

給出乙個有向圖,要求給每條邊重定向,使得定向後出度等於入度的點最多,輸出答案和任意一種方案 input 第一行兩個正整數n,m,表示1 n號點與m條邊 接下來m行,每行兩個正整數xi,yi,表示存在一條有向邊從xi指向yi n 10 5,m 3 10 5,xi,yi noutput 第一行乙個整數a...

4 路徑資訊

1.絕對路徑和相對路徑 絕對路徑 從根目錄 開始表示的路徑 相對路徑 從當前的目錄開始表示的路徑 2.隱藏目錄.和.當前目錄 當前目錄的上一級目錄 和.可以用指令ls a顯示出來。3.輸入shell指令前的部分代表的意思 例如 xuechao ubuntu desktop study xuechao...

25 路徑總和

題目描述 我的思路 首先檢視的是根節點,然後用num 根節點的值,並且要考慮到節點是否為空 需要注意的是這裡的遞迴要注意,二叉樹基本都是遞迴來實現 再一次使用遞迴 public static boolean haspathsum treenode root,int sum else return h...