界面库

优化绘图
This commit is contained in:
tslediter 2024-02-04 14:53:12 +08:00
parent 27fb67b49a
commit 32151f8d94
5 changed files with 2335 additions and 1085 deletions

View File

@ -773,6 +773,7 @@ type tsgtkapi = class(tgtkapis)
r := gtk_object_get_data(hdc,"brush");
gtk_object_set_data(hdc,"brush",gdiobj);
gtk_object_set_data(hdc,"brush.color",o.color);
gtk_object_set_data(hdc,"brush.style",o.style);
end
"font":
begin
@ -1093,6 +1094,59 @@ type tsgtkapi = class(tgtkapis)
return 1;
end
end
function cairo_set_pen_color(dc);
begin
pc := gtk_object_get_data(dc,"pen.color");
pt := gtk_object_get_data(dc,"pen.style");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
if pc=0 then
begin
if pt=5 then
begin
cairo_set_source_rgba(dc,1,1,1,0);
end else
begin
cairo_set_source_rgb(dc,0,0,0);
end
end else
begin
if pt=5 then
begin
cairo_set_source_rgba(dc,1,1,1,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
end
end
function cairo_set_brush_color(dc);
begin
brc := gtk_object_get_data(dc,"brush.color");
bst := gtk_object_get_data(dc,"brush.style");
if brc=0 then
begin
if bst=1 then
begin
cairo_set_source_rgba(dc,1,1,1,0);
end else
begin
cairo_set_source_rgb(dc,0,0,0);
end
end else
begin
if bst=1 then
begin
cairo_set_source_rgba(dc,1,1,1,0);
end else
begin
gtk_rgb_color_rgb(brc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
end
end
Function FillRect(dc:pointer;rec:array of integer;br:pointer):integer;
begin
@ -1239,6 +1293,18 @@ type tsgtkapi = class(tgtkapis)
gtk_gdi_object_globals[inttostr(ptr)] := array(p,"brush");
return ptr;
end
function CreateBrushIndirect(lblf:pointer);
begin
global gtk_gdi_object_globals;
p := new ttgtk_brush();
p2 := new ttgtk_brush(lblf);
p.color := p2.color;
p.style := p2.style;
//p.color := crColor;
ptr := p._getptr_();
gtk_gdi_object_globals[inttostr(ptr)] := array(p,"brush");
return ptr;
end
function CreateFontIndirectA(lplf:pointer);
begin
global gtk_gdi_object_globals;
@ -1270,19 +1336,10 @@ type tsgtkapi = class(tgtkapis)
begin
xb := gtk_object_get_data(dc,"viewport.x");
yb := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
pw := gtk_object_get_data(dc,"pen.width");
pt := gtk_object_get_data(dc,"pen.style");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_applay_pen_style(dc); //LineTo
xy := gtk_object_get_data(dc,"movepointto");
if xy then
@ -1505,9 +1562,7 @@ type tsgtkapi = class(tgtkapis)
begin
x := gtk_object_get_data(dc,"viewport.x");
y := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
pw := gtk_object_get_data(dc,"pen.width");
brc := gtk_object_get_data(dc,"brush.color");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
if pc=0 then
@ -1525,23 +1580,9 @@ type tsgtkapi = class(tgtkapis)
cairo_line_to(dc,l+x,b+y);
cairo_line_to(dc,l+x,t+y);
if brc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(brc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_brush_color(dc);
cairo_fill_preserve(dc);
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_stroke(dc);
return 1;
@ -1552,9 +1593,7 @@ type tsgtkapi = class(tgtkapis)
//³¤¶È
x := gtk_object_get_data(dc,"viewport.x");
y := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
pw := gtk_object_get_data(dc,"pen.width");
brc := gtk_object_get_data(dc,"brush.color");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
mx := (l+r)/2+x;
@ -1565,23 +1604,9 @@ type tsgtkapi = class(tgtkapis)
cairo_scale(dc,1,ry/rx);
cairo_applay_pen_style(dc);
cairo_arc(dc, 0, 0, rx, 0, 2 * pi());
if brc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(brc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_brush_color(dc);
cairo_fill_preserve(dc);
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_stroke(dc);
cairo_scale(dc,1,rx/ry);
cairo_translate(dc,0-mx,0-my);
@ -1591,26 +1616,15 @@ type tsgtkapi = class(tgtkapis)
begin
xb := gtk_object_get_data(dc,"viewport.x");
yb := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
pw := gtk_object_get_data(dc,"pen.width");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
cairo_applay_pen_style(dc);
cairo_draw_round_rectangle(dc,l,t,r-l,b-t,wid);
bsh := gtk_object_get_data(dc,"brush.color");
gtk_rgb_color_rgb(bsh,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
cairo_set_brush_color(dc);
cairo_fill_preserve(dc); //»æÖƵ×É«
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_stroke(dc);//»æÖƱ߿ò
return 1;
end
@ -1618,9 +1632,7 @@ type tsgtkapi = class(tgtkapis)
begin
x := gtk_object_get_data(dc,"viewport.x");
y := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
pw := gtk_object_get_data(dc,"pen.width");
brc := gtk_object_get_data(dc,"brush.color");
direct := gtk_object_get_data(dc,"arcdirection");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
@ -1646,25 +1658,11 @@ type tsgtkapi = class(tgtkapis)
cairo_arc(dc, 0, 0, rx, arg2, arg1);
end
if brc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(brc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_brush_color(dc);
cairo_move_to(dc,cos(arg1)*rx,sin(arg1)*rx);
cairo_line_to(dc,cos(arg2)*rx,sin(arg2)*rx);
cairo_fill_preserve(dc);
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_stroke(dc);
cairo_scale(dc,1,rx/ry);
@ -1674,9 +1672,7 @@ type tsgtkapi = class(tgtkapis)
begin
x := gtk_object_get_data(dc,"viewport.x");
y := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
pw := gtk_object_get_data(dc,"pen.width");
brc := gtk_object_get_data(dc,"brush.color");
direct := gtk_object_get_data(dc,"arcdirection");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
@ -1701,27 +1697,12 @@ type tsgtkapi = class(tgtkapis)
begin
cairo_arc(dc, 0, 0, rx, arg2, arg1);
end
if brc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(brc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_brush_color(dc);
cairo_move_to(dc,cos(arg1)*rx,sin(arg1)*rx);
cairo_line_to(dc,0,0);
cairo_line_to(dc,cos(arg2)*rx,sin(arg2)*rx);
cairo_fill_preserve(dc);
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_stroke(dc);
cairo_scale(dc,1,rx/ry);
@ -1776,7 +1757,6 @@ type tsgtkapi = class(tgtkapis)
begin
x := gtk_object_get_data(dc,"viewport.x");
y := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
pw := gtk_object_get_data(dc,"pen.width");
//brc := gtk_object_get_data(dc,"brush.color");
direct := gtk_object_get_data(dc,"arcdirection");
@ -1812,14 +1792,7 @@ type tsgtkapi = class(tgtkapis)
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_fill_preserve(dc); }
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_stroke(dc);
cairo_scale(dc,1,rx/ry);
cairo_translate(dc,0-mx,0-my);
@ -1829,8 +1802,6 @@ type tsgtkapi = class(tgtkapis)
if n<3 then return ;
x := gtk_object_get_data(dc,"viewport.x");
y := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
brc := gtk_object_get_data(dc,"brush.color");
pw := gtk_object_get_data(dc,"pen.width");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
@ -1842,23 +1813,9 @@ type tsgtkapi = class(tgtkapis)
cairo_line_to(dc,Points[i,0]+x,Points[i,1]+y);
end
cairo_line_to(dc,Points[0,0]+x,Points[0,1]+y);
if brc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(brc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_brush_color(dc);
cairo_fill_preserve(dc);
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_stroke(dc);
end
Function PolyBezier(dc :pointer;points:array of integer;n:integer):integer;
@ -1866,18 +1823,10 @@ type tsgtkapi = class(tgtkapis)
if length(points)<4 then return 0;
x := gtk_object_get_data(dc,"viewport.x");
y := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
pw := gtk_object_get_data(dc,"pen.width");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_applay_pen_style(dc);
cairo_move_to(dc,points[0,0]+x,Points[0,1]+y);
for i := 1 to length(points)-2 step 3 do
@ -1896,18 +1845,10 @@ type tsgtkapi = class(tgtkapis)
if n<2 then return ;
x := gtk_object_get_data(dc,"viewport.x");
y := gtk_object_get_data(dc,"viewport.y");
pc := gtk_object_get_data(dc,"pen.color");
pw := gtk_object_get_data(dc,"pen.width");
if pw>0 then cairo_set_line_width(dc,pw);
else cairo_set_line_width(dc,1);
if pc=0 then
begin
cairo_set_source_rgb(dc,0,0,0);
end else
begin
gtk_rgb_color_rgb(pc,rc,gc,bc);
cairo_set_source_rgb(dc,rc,gc,bc);
end
cairo_set_pen_color(dc);
cairo_applay_pen_style(dc);
for i := 0 to n-1 do
begin
@ -4613,7 +4554,7 @@ type tgtkapis = class() //gtk
return ##_f_(c);
end
//procedure draw_round_rectangle(c:pointer;x:double;y:double;w:double;h:double;r:double);cdecl;external 'libgtk-3.so';
procedure cairo_arc (cr:pointer; xc:double;yc:double;radius:double;angle1:double;angle2:double);
procedure cairo_arc(cr:pointer; xc:double;yc:double;radius:double;angle1:double;angle2:double);
begin
_f_ := static procedure(cr:pointer; xc:double;yc:double;radius:double;angle1:double;angle2:double);cdecl;external getfuncptrbyname(0,functionname());
return ##_f_(cr,xc,yc,radius,angle1,angle2);
@ -4736,27 +4677,47 @@ type tgtkapis = class() //gtk
function cairo_applay_pen_style(dc);
begin
pt := gtk_object_get_data(dc,"pen.style");
if pt=0x2 or pt=0x3 or pt=0x4 then
case pt of
1:
begin
cairo_set_dash(dc,array(4.0,1.0),2,0);
ds := array(14,6);
cairo_set_dash(dc,ds,length(ds),0);
end
2:
begin
ds := array(3,3);
cairo_set_dash(dc,ds,length(ds),0);
end
3:
begin
ds := array(10,4,3,4);
cairo_set_dash(dc,ds,length(ds),0);
end
4:
begin
ds := array(10,3,3,3,3,3);
cairo_set_dash(dc,ds,length(ds),0);
end else
begin
cairo_set_dash(dc,array(0),0,0);
end
end
else cairo_set_dash(dc,array(4.0,0.0),2,0);
return pt=5;
end
function cairo_draw_round_rectangle(cr,x,y,w,h,r);
begin
cairo_move_to (cr, x + r, y);
cairo_line_to (cr, x + w - r, y);
cairo_move_to (cr, x + w, y + r);
cairo_line_to (cr, x + w, y + h - r);
cairo_move_to (cr, x + w - r, y + h);
cairo_line_to (cr, x + r, y + h);
cairo_move_to (cr, x, y + h - r);
cairo_line_to (cr, x, y + r);
cairo_arc (cr, x + r, y + r, r, 3.14, 3 * 3.14 / 2.0);
cairo_arc (cr, x + w - r, y + r, r, 3 * 3.14 / 2, 2 * 3.14);
cairo_arc (cr, x + w - r, y + h - r, r, 0, 3.14 / 2);
cairo_arc (cr, x + r, y + h - r, r, 3.14 / 2, 3.14);
cairo_move_to(cr, x + r, y);
cairo_line_to(cr, x + w - r, y);
cairo_move_to(cr, x + w, y + r);
cairo_line_to(cr, x + w, y + h - r);
cairo_move_to(cr, x + w - r, y + h);
cairo_line_to(cr, x + r, y + h);
cairo_move_to(cr, x, y + h - r);
cairo_line_to(cr, x, y + r);
cairo_arc(cr, x + r, y + r, r, 3.14, 3 * 3.14 / 2.0);
cairo_arc(cr, x + w - r, y + r, r, 3 * 3.14 / 2, 2 * 3.14);
cairo_arc(cr, x + w - r, y + h - r, r, 0, 3.14 / 2);
cairo_arc(cr, x + r, y + h - r, r, 3.14 / 2, 3.14);
end
//////////////////////text//////// https://developer.gnome.org/cairo/stable/cairo-cairo-font-options-t.html#cairo-font-options-get-hint-metrics
procedure cairo_show_text(c:pointer;t:string);

View File

@ -1554,6 +1554,16 @@ type TNode = class() //
if idx >= 0 then return FItems[idx];
return nil;
end
function set_node_index(nd,idx); //ÉèÖÃ×ÓÏî´ÎÐò
begin
if not(idx>=0) then return -1;
oidx := FItems.indexof(v);
if oidx>=0 and idx<>oidx then
begin
setorder(oidx,idx);
end else return 0;
return 1;
end
function indexof(v); //获得序号
begin
return FItems.indexof(v);
@ -1624,9 +1634,9 @@ type TNode = class() //
if not nd then return;
//是否显示处理
FItems.Deli(idx);
CurrentDeleteNode := nd;
FCurrentDeleteNode := nd;
nd.parent := self(true);
CurrentDeleteNode := nil;
FCurrentDeleteNode := nil;
return true;
end
function DeleteChildren();virtual; //
@ -1638,9 +1648,9 @@ type TNode = class() //
begin
idx := 0;
it := FItems[idx];
CurrentDeleteNode := it;
FCurrentDeleteNode := it;
it.parent := self(true);
CurrentDeleteNode := nil;
FCurrentDeleteNode := nil;
FItems.Deli(idx);
end
end
@ -1660,9 +1670,9 @@ type TNode = class() //
if(it is class(TNode))and(not it.Parent)then
begin
FItems.InsertBefor(it,idx0);
CurrentAddNode := it;
FCurrentAddNode := it;
it.Parent := self(true);
CurrentAddNode := nil;
FCurrentAddNode := nil;
idx0++;
end
end
@ -1680,9 +1690,9 @@ type TNode = class() //
if idx>FItems.Count then idx := FItems.Count;
if not(idx >= 0)then idx := 0;
FItems.InsertBefor(it,idx);
CurrentAddNode := it;
FCurrentAddNode := it;
it.Parent := self(true);
CurrentAddNode := nil;
FCurrentAddNode := nil;
return true;
end
end
@ -1726,15 +1736,20 @@ type TNode = class() //
@param(Parent)(TNode) 父节点 %%
**}
protected
property CurrentDeleteNode read FCurrentDeleteNode write FCurrentDeleteNode;
property CurrentAddNode read FCurrentAddNode write FCurrentAddNode;
property CurrentDeleteNode read FCurrentDeleteNode;
property CurrentAddNode read FCurrentAddNode;
{**
@ignoremembers(CurrentDeleteNode,CurrentAddNode)
**}
function SetParent(V);virtual;
begin
tp := Parent;
if v=tp then return;
if tp and (v=tp) and( v.CurrentDeleteNode=self ) then
begin
FParent := nil;
return;
end
if (v=tp) then return;
if(v is class(TNode))then
begin
if v.CurrentAddNode=self then
@ -1759,6 +1774,8 @@ type TNode = class() //
end
end
private
fwilldelete;
fwilladd;
function GetLstChild();
begin
return FItems[FItems.Count-1];

View File

@ -611,6 +611,14 @@ type tcustombrush=class(tgdi)
FColor := c;
end
end
function SetStyle(s);
begin
if (s <> FStyle) and (s in array(BS_SOLID,BS_NULL)) then
begin
onchange();
FStyle := s;
end
end
public
class function sinit();override;
begin
@ -637,11 +645,11 @@ type tcustombrush=class(tgdi)
hp := reference();
if not hp then
begin
//LOGSTRUCT._setvalue_("lbstyle",FStyle);
//LOGSTRUCT._setvalue_("lbcolor",FColor);
LOGSTRUCT._setvalue_("lbstyle",FStyle);
LOGSTRUCT._setvalue_("lbcolor",FColor);
//LOGSTRUCT._setvalue_("lbhatch",FHatch);
//hp := _wapi.CreateBrushIndirect(LOGSTRUCT._getptr_);
hp := _wapi.CreateSolidBrush(FColor);
hp := _wapi.CreateBrushIndirect(LOGSTRUCT._getptr_);
//hp := _wapi.CreateSolidBrush(FColor);
addsource(hp);
end
FHandle := hp;
@ -671,7 +679,7 @@ type tcustombrush=class(tgdi)
end
end
end
//property Style read FStyle write SetStyle;
property Style read FStyle write SetStyle;
property Color read FColor write SetColor;
//property Hatch read FHatch write SetHatch;
end
@ -814,59 +822,7 @@ type TRGNRoundRect=class(TRGNELLIP)
property EllipseWidth:integer read FEllipseWidth write SetEllipseWidth;
property EllipseHeight:integer read FEllipseHeight write SetEllipseHeight;
end
type TRGNPOLY=class(TRGN) //多边形
{**
@explan(说明)多边形区域%%
**}
private
FPoints;
FImode;
function pointtovector(pts); //点转换为数组
begin
t := array();
lt := 0;
if not ifarray(pts)then return array();
for i,v in pts do
begin
if ifarray(v)and ifnumber(v[0])and ifnumber(v[1])then
begin
t[lt++]:= v[0];
t[lt++]:= v[1];
end
end
return t;
end
function SetImode(v);
begin
if(v in array(1,2))and v <> FImode then
begin
FImode := v;
DestroyHandle();
end
end
function SetPoints(v);
begin
if v <> FPoints then
begin
FPoints := v;
DestroyHandle();
end
end
public
function create(); //点 和填充模式
begin
inherited;
FImode := ALTERNATE;
end
function CreateRgn();override;
begin
t := pointtovector(FPoints);
len := length(t);
if len>5 then return _wapi.CreatePolygonRgn(t,len/2,FImode);
end
property Points read FPoints write SetPoints;
property Imode read FImode write SetImode;
end
type tcustomimage=class(TSLUIBASE)
{**
@ -3210,11 +3166,10 @@ type tshapechord = class(tshape,tshaperect,tsepoint)
return inherited;
end
end
type tshapepolygon = class(tshape)
type tshapepolygon = class(tshapepolyline)
function create(dc);
begin
inherited;
fbpoints := array();
end
function draw();override;
begin
@ -3224,6 +3179,22 @@ type tshapepolygon = class(tshape)
end
return inherited;
end
function points(ps);override;
begin
r := inherited;
if length(fbpoints)<2 then
begin
fbpoints := array();
end
return r;
end
end
type tshapepolyline = class(tshape)
function create(dc);
begin
inherited;
fbpoints := array();
end
function points(ps);virtual;
begin
tps := array();
@ -3234,21 +3205,13 @@ type tshapepolygon = class(tshape)
tps[idx++] := array(v[0],v[1]);
end
end
if length(tps)>2 then
if length(tps)>1 then
begin
fbpoints := tps;
end
return self(true);
end
protected
fbpoints;
end
type tshapepolyline = class(tshapepolygon)
function create(dc);
begin
inherited;
end
function draw();override;
begin
if fcanvas and fcanvas.HandleAllocated() and fbpoints then
@ -3257,6 +3220,8 @@ type tshapepolyline = class(tshapepolygon)
end
return self(true);
end
protected
fbpoints;
end
type tshapeBezier = class(tshape)
function create(dc);
@ -3416,3 +3381,58 @@ class(tUIglobalData).uisetdata("G_T_ICON_",class(TcustomIcon));
finalization
end.
(*
type TRGNPOLY=class(TRGN) //多边形
{**
@explan(说明)多边形区域%%
**}
private
FPoints;
FImode;
function pointtovector(pts); //点转换为数组
begin
t := array();
lt := 0;
if not ifarray(pts)then return array();
for i,v in pts do
begin
if ifarray(v)and ifnumber(v[0])and ifnumber(v[1])then
begin
t[lt++]:= v[0];
t[lt++]:= v[1];
end
end
return t;
end
function SetImode(v);
begin
if(v in array(1,2))and v <> FImode then
begin
FImode := v;
DestroyHandle();
end
end
function SetPoints(v);
begin
if v <> FPoints then
begin
FPoints := v;
DestroyHandle();
end
end
public
function create(); //点 和填充模式
begin
inherited;
FImode := ALTERNATE;
end
function CreateRgn();override;
begin
t := pointtovector(FPoints);
len := length(t);
if len>5 then return _wapi.CreatePolygonRgn(t,len/2,FImode);
end
property Points read FPoints write SetPoints;
property Imode read FImode write SetImode;
end
*)

View File

@ -980,9 +980,9 @@ type TcustomTreeCtlNode = class(tsluibase) //
Owner.DeleteItemByIndex(Owner.GetItemIndex(nd));
end
FItems.Deli(idx);
CurrentDeleteNode := nd;
FCurrentDeleteNode := nd;
nd.parent := self(true);
CurrentDeleteNode := nil;
FCurrentDeleteNode := nil;
if nd = Owner.CurrentNode then
begin
Owner.SetSel(nil);
@ -1015,9 +1015,9 @@ type TcustomTreeCtlNode = class(tsluibase) //
begin
idx := 0; //ItemCount-1;
it := FItems[idx];
CurrentDeleteNode := it;
FCurrentDeleteNode := it;
it.parent := self(true);
CurrentDeleteNode := nil;
FCurrentDeleteNode := nil;
FItems.Deli(idx);
end
end
@ -1061,9 +1061,9 @@ type TcustomTreeCtlNode = class(tsluibase) //
odexp := it.Expanded;
it.UnExpand();
FItems.InsertBefor(it,idx0);
CurrentAddNode := it;
FCurrentAddNode := it;
it.Parent := self(true);
CurrentAddNode := nil;
FCurrentAddNode := nil;
it.UpDateHierarchy();
nits[nitsi++]:= it;
idx0++;
@ -1095,9 +1095,9 @@ type TcustomTreeCtlNode = class(tsluibase) //
odexp := it.Expanded;
it.UnExpand();
FItems.InsertBefor(it,idx);
CurrentAddNode := it;
FCurrentAddNode := it;
it.Parent := self(true);
CurrentAddNode := nil;
FCurrentAddNode := nil;
it.UpDateHierarchy();
if Expanded and Owner.NodeInList(self)then
begin
@ -1297,8 +1297,8 @@ type TcustomTreeCtlNode = class(tsluibase) //
@param(Owner)(TcustomTreeCtl) 所有者 %%
**}
protected //父子节点设置相关
property CurrentDeleteNode read FCurrentDeleteNode write FCurrentDeleteNode;
property CurrentAddNode read FCurrentAddNode write FCurrentAddNode;
property CurrentDeleteNode read FCurrentDeleteNode;
property CurrentAddNode read FCurrentAddNode;
FItems; //子项
[weakref]FParent; //父节点
function Gitems();

File diff suppressed because it is too large Load Diff