打印本文 打印本文 关闭窗口 关闭窗口
利用Delphi中的画布画树
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1984  更新时间:2009/4/23 18:31:04  文章录入:mintao  责任编辑:mintao
in
      setselected(x,y);
  end;
end;

procedure TFrm_Tree.FormCreate(Sender: TObject);
begin
  OLst:=TList.Create;
  ToolNO:=0;
  Root:=true;
  SelID:='''''''';
  SearilID:=0;
  clicked:=false;
  with PaintBox1.Canvas do
  begin
    brush.Color:=clWhite;
    FillRect(rect(0,0,PaintBox1.Width,PaintBox1.Height));
  end;
end;

procedure TFrm_Tree.Button1Click(Sender: TObject);
begin
  ToolNO:=1;
end;

procedure TFrm_Tree.Button2Click(Sender: TObject);
begin
  ToolNO:=2;
end;

procedure TFrm_Tree.AddObj(id: string; x, y, typeno: integer;
  selected: boolean; Fnode: string;showed:boolean);
var
  Obj: ^TObj;
begin
  new(obj);
  obj.ObjId:=id;
  obj.CenterX:=x;
  obj.centery:=y;
  obj.TypeNo:=typeno;
  obj.Selected:=selected;
  obj.FNode:=fnode;
  obj.showed:=showed;
  OLst.Add(obj);
end;

function TFrm_Tree.getObj(id: string): TObj;
var
  i,j:integer;
begin
  j:=Olst.Count;
  for i:=0 to j-1 do
  begin
    if TObj(OLst.Items[i]^).ObjId=id then
    begin
      Result:=TObj(OLst.Items[i]^);
      Break;
    end;
  end;
end;

function TFrm_Tree.getselect: TObj;
var
  i,j:integer;
begin
  j:=Olst.Count;
  for i:=0 to j-1 do
  begin
    if TObj(OLst.Items[i]^).Selected then
    begin
      Result:=TObj(OLst.Items[i]^);
      Break;
    end;
  end;
end;

function TFrm_Tree.haveselect: boolean;
var
  i,j:integer;
begin
  Result:=false;
  j:=Olst.Count;
  for i:=0 to j-1 do
  begin
    if TObj(OLst.Items[i]^).Selected then
    begin
      Result:=true;
      Break;
    end;
  end;
end;

procedure TFrm_Tree.DrawFull;
var
  i,j:integer;
begin
  //PaintBox1.Canvas.FillRect(rect(0,0,PaintBox1.Width,PaintBox1.Height));
  clearCanvas;
  j:=olst.Count;
  for I:=0 to j-1 do
  begin
    DrawNode(TObj(OLst.Items[i]^).ObjId);
  end;
end;

procedure TFrm_Tree.PaintBox1Paint(Sender: TObject);
begin
DrawFull;
end;

procedure TFrm_Tree.setselected(x, y: integer);
var
  i,j:integer;
begin
  j:=olst.Count;
  for I:=0 to j-1 do
  begin
    TObj(OLst.Items[i]^).Selected:=false;
    if (TObj(OLst.Items[i]^).CenterX-10<x) and (TObj(OLst.Items[i]^).CenterX+10>x)
    and (TObj(OLst.Items[i]^).Centery-10<y) and (TObj(OLst.Items[i]^).Centery+10>y) then
    begin
      TObj(OLst.Items[i]^).Selected:=true;
      Label1.caption:=''''selected the node id:''''+ TObj(OLst.Items[i]^).objid;
    end;

  end;
  DrawFull;
end;

procedure TFrm_Tree.Button3Click(Sender: TObject);
begin
  ToolNO:=3;
end;

function TFrm_Tree.setshowsel(x, y: integer):tobj;
var
  i,j:integer;
begin
  j:=olst.Count;
  for I:=0 to j-1 do
  begin
    TObj(OLst.Items[i]^).Selected:=false;
    if (TObj(OLst.Items[i]^).CenterX-10<x) and (TObj(OLst.Items[i]^).CenterX+10>x)
    and (TObj(OLst.Items[i]^).Centery-10<y) and (TObj(OLst.Items[i]^).Centery+10>y) then
    begin
      TObj(OLst.Items[i]^).showed:=true;
      Label1.caption:=''''look the node id:''''+ TObj(OLst.Items[i]^).objid;
      Result:=TObj(OLst.Items[i]^);
      Break;
    end;
  end;
end;

procedure TFrm_Tree.clearshowed;
var
  i,j:integer;
begin
  j:=olst.Count;
  for I:=0 to j-1 do
  begin
    TObj(olst.items[i]^).showed:=false;
  end;
end;

procedure TFrm_Tree.setfnode(id: string);
var
  curobj:^tobj;
begin
  if id<>'''''''' then
  begin
    //new(curobj);
    curobj:=getPObj(id);
    while curobj^.TypeNo=1 do
    begin
       curobj^.showed := true;
       curobj :=getpobj(curobj^.FNode);
    end;
    curobj^.showed:=true;
    //dispose(curobj);
  end;
end;

procedure TFrm_Tree.setcnode(id: string);
var
  curobj:^tobj;
  i,j:integer;
begin
  //curobj:=getobj(id);
  j:=olst.count;
  for i:=0 to j-1 do
  begin
    if tobj(olst.Items[i]^).FNode=id then
    begin
      curobj:=getpobj(tobj(olst.Items[i]^).ObjId);
      curobj^.showed:=true;
      setcnode(curobj^.ObjId);
    end;
  end;
end;

procedure TFrm_Tree.clearCanvas;
begin
  //PaintBox1.Canvas
  PaintBox1.Canvas.FillRect(rect(0,0,PaintBox1.Width,PaintBox1.Height));
end;

procedure TFrm_Tree.Button4Click(Sender: TObject);
begin
  clicked:=false;
  PaintBox1.Canvas.FillRect(rect(0,0,PaintBox1.Width,PaintBox1.Height));
  OLst.Clear;
  Root:=true;
  SelID:='''''''';
  SearilID:=0;
 { with PaintBox1.Canvas do
    begin
        Pen.Width :=2;
        Pen.Color:=clblack;
        pen.Style :=psclear;
        Brush.Style:=bsSolid;
        Brush.Color:=clwhite;
        Rectangle(0,0,PaintBox1.Width,PaintBox1.Height);
    end;}
end;

procedure TFrm_Tree.Button5Click(Sender: TObject);
var
  i,j: integer;
begin
  j:=olst.count;
  for i:=0 to j-1 do
  begin
    tobj(olst.Items[i]^).showed:=true;

  end;
  DrawFull;
end;

function TFrm_Tree.getPObj(id: string): Pointer;
var
  i,j:integer;
begin
  Result:=nil;
  j:=Olst.Count;
  for i:=0 to j-1 do
  begin
    if TObj(OLst.Items[i]^).ObjId=id then
    begin
      Result:=OLst.Items[i];
      Break;
    end;
  end;
end;

function TFrm_Tree.clickobj(x, y: integer): string;
var
  i,j:integer;
begin
  Result:='''''''';
  j:=olst.Count;
  setselected(x,y);
  for I:=0 to j-1 do
  begin
    if (TObj(OLst.Items[i]^).CenterX-10<x) and (TObj(OLst.Items[i]^).CenterX+10>x)
    and (TObj(OLst.Items[i]^).Centery-10<y) and (TObj(OLst.Items[i]^).Centery+10>y) then
    begin
      Label1.caption:=''''click the node id:''''+ TObj(OLst.Items[i]^).objid;
      Result:=TObj(OLst.Items[i]^).ObjId;
      Break;
    end;
  end;
end;

procedure TFrm_Tree.Button6Click(Sender: TObject);
begin
  ToolNO:=4;
end;

procedure TFrm_Tree.moveobj(dx, dy: integer);
var
  i,j:integer;
begin
  j:=olst.Count;
  for I:=0 to j-1 do
  begin
    TObj(OLst.Items[i]^).CenterX:= TObj(OLst.Items[i]^).CenterX+dx;
    TObj(OLst.Items[i]^).Centery:= TObj(OLst.Items[i]^).Centery+dy;
  end;
  //DrawFull;
end;

procedure TFrm_Tree.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  case toolno of
    4:
    begin
      if clicked then
      begin
        endx:=x;
        endy:=y;
        moveobj((endx-beginx),(endy-beginy));
      end;
      clicked:=false;
    end;
    5:
    begin
      clicked:=false;
 &

上一页  [1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口