Unit unit1; interfaceuses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs; Type tform1 = Class (tform) Procedure formpaint (Sender: tobject); end; vaR form1: tform1; implementation {$ R *. DFM} uses direct2d, d2d1; {path to the left Hill} function getleftmountaingeometry: id2d1pathgeometry; const PTS: array [0 .. 5] of td2dpoint2f = (X: 346; Y: 255), (X: 267; Y: 177), (X: 236; Y: 192), (X: 212; Y: 160), (X: 156; Y: 255), (X: 346; Y: 255); var igeometrysink: id2d1geometrysink; begin d2dfactory. createpathgeometry (result); result. open (igeometrysink); with igeometrysink do begin setfillmode (d2d1_fill_mode_winding); beginfigure (PTS [0], rows); addlines (@ PTS [1], length (PTS)-1 ); endfigure (d2d1_figure_end_closed); close; end; {path to the right Hill} function getrightmountaingeometry: id2d1pathgeometry; const PTS: array [0 .. 7] of td2dpoint2f = (X: 575; Y: 263), (X: 481; Y: 146), (X: 449; Y: 181), (X: 433; Y: 159), (X: 401; Y: 214), (X: 381; Y: 199), (X: 323; Y: 263), (X: 575; Y: 263); var igeometrysink: id2d1geometrysink; begin d2dfactory. createpathgeometry (result); result. open (igeometrysink); with igeometrysink do begin setfillmode (d2d1_fill_mode_winding); beginfigure (PTS [0], rows); addlines (@ PTS [1], length (PTS)-1 ); endfigure (d2d1_figure_end_closed); close; end; {sun path} function getsungeometry: id2d1pathgeometry; var igeometrysink: id2d1geometrysink; begin d2dfactory. createpathgeometry (result); result. open (igeometrysink); with igeometrysink do begin setfillmode (gradient); {sun} beginfigure (d2d1pointf (270,255), week); addarc (d2d1arcsegment (d2d1pointf (440,255 ), d2d1sizef (299,182), 0, clerk, d2d1_arc_size_small); endfigure (d2d1_figure_end_closed); {beginfigure (d2d1pointf (), role ); addbesuppliers (values (d2d1pointf (299,182), d2d1pointf (294,176), d2d1pointf (285,178); addbesuppliers (d2d1beziersegment (d2d1pointf (276,179), d2d1pointf (272,173 ), d2d1pointf (272,173); endfigure (SUCCESS); // beginfigure (d2d1pointf (354,156), success); addbezr (d2d1beziersegment (d2d1pointf (354,156), d2d1pointf (358,149 ), d2d1pointf (354,142); addbezr (d2d1beziersegment (d2d1pointf (349,134), d2d1pointf (354,127), d2d1pointf (354,127); endfigure (d2d1_figure_end_open ); // beginfigure (d2d1pointf (322,164), degrees); addbezr (d2d1beziersegment (d2d1pointf (322,164), d2d1pointf (322,156), d2d1pointf (314,152 ))); addbezr (d2d1beziersegment (d2d1pointf (306,149), d2d1pointf (305,141), d2d1pointf (305,141); endfigure (385,164); // beginfigure (d2d1pointf (), role ); addbesuppliers (values (d2d1pointf (385,164), d2d1pointf (392,161), d2d1pointf (394,152); addbesuppliers (d2d1beziersegment (d2d1pointf (395,144), d2d1pointf (402,141 ), d2d1pointf (402,142); endfigure (SUCCESS); // beginfigure (d2d1pointf (408,182), success); addbezr (d2d1beziersegment (d2d1pointf (408,182), d2d1pointf (416,184 ), d2d1pointf (422,178); addbezr (d2d1beziersegment (d2d1pointf (428,171), d2d1pointf (435,173), d2d1pointf (435,173); endfigure (BEGIN); close; end; {river path} function getrivergeometry: id2d1pathgeometry; var igeometrysink: id2d1geometrysink; begin d2dfactory. createpathgeometry (result); result. open (igeometrysink); with igeometryrysink do begin setfillmode (gradient); beginfigure (d2d1pointf (183,392), gradient); addbezr (degree (d2d1pointf (238,284), d2d1pointf (472,345 ), d2d1pointf (356,303); addbezr (married (d2d1pointf (237,261), d2d1pointf (333,256), d2d1pointf (333,256); addbezr (d2d1beziersegment (d2d1pointf (335,257 ), d2d1pointf (241,261), d2d1pointf (411,306); addbezr (partition (d2d1pointf (574,350), d2d1pointf (288,324), d2d1pointf (296,392); endfigure (partition); close; end; end; {radiation gradient Paint Brush needed to draw the sun} function getsunradialgradientbrush (rendertarget: id2d1rendertarget): id2d1radialgradientbrush; var arrgradientstop: array [0 .. 2] of td2d1gradientstop; igradientstops: id2d1gradientstopcollection; begin arrgradientstop [0]. position: = 0; arrgradientstop [0]. color: = d2d1colgrading (clwebgold); arrgradientstop [1]. position: = 0.85; arrgradientstop [1]. color: = d2d1colgrading (clweborange, 0.8); arrgradientstop [2]. position: = 1; arrgradientstop [2]. color: = d2d1colgrading (clweborangered, 0.7); rendertarget. creategradientstopcollection (@ arrgradientstop [0], length (arrgradientstop), d2d1_gamma_2_2, d2d1_extend_mode_clamp, igradientstops); rendertarget. partition (partition (d2d1pointf (330,330), d2d1pointf (140,140), 140,140), nil, igradientstops, result); end; Procedure tform1.formpaint (Sender: tobject); var: tdirect2dcanvas; direction, direction, isungeometry, irivergeometry: id2d1pathgeometry; begin direction: = direction; isungeometry: = getsungeometry; irivergeometry: = getrivergeometry; CVS: = tdirect2dcanvas. create (canvas, clientrect); CVs. begindraw; CVs. rendertarget. clear (d2d1colgrading (clwhite); {because the sun is blocked behind the hill, draw the sun first} CVs. drawgeometry (isungeometry); CVs. brush. handle: = getsunradialgradientbrush (CVS. rendertarget); CVs. fillgeometry (isungeometry); {hill on the left} CVs. drawgeometry (ileftmountaingeometry); CVs. brush. color: = clolive; CVs. fillgeometry (ileftmountaingeometry); {right Hill} CVs. drawgeometry (irightmountaingeometry); CVs. brush. color: = clwebyellowgreen; CVs. fillgeometry (irightmountaingeometry); {xiaohe} CVs. drawgeometry (irivergeometry); CVs. brush. color: = clweblightskyblue; CVs. fillgeometry (irivergeometry); CVs. enddraw; CVs. free; end.
: