怎么说才能让大家伙清楚我的需求呢?就像桌面快捷方式的这种Node之类的控件
(由图标和一个文本框组成的节点)
最起码是像它的文本框的控件,
需求:可修改,且框宽度固定,高度自动应该说清楚了吧?!
谢谢~

解决方案 »

  1.   

    你用LISTVIEW实现大图标方式不就行了吗?自己再加一个双击事件修改它的名称就OK了!
      

  2.   

    完全就是treeView,你要的功能都可以实现。
      

  3.   

    不好意思大家!我说的这个问题是可以用ListView解决
    但是,
    其实我是想要的还有,这些节点(Node)之间有连线!而且在拖动Node时(或之后)连现有保持连结(就是说连线要自动重绘)
    谢谢!分嘛!放心!下午给!
    :)
      

  4.   

    要有连线就用treeview吧!拖动后就 treeview1.Invalidate;
      

  5.   

    其实是想做一个设计软件吧?就象Rose。
    用图标表示对象,用连接表示其关系等
      

  6.   

    如果仅仅是实现windows 的界面没任何问题
    :使用listview imagelist 再针对相应事件编程即可  
    但是楼主想实现的目标比较难 
      不过也非不可能  我想你针对
       listview 的 oncustomdraw 和 oncustomdrawitem 事件进行编程
    因该可以实现 我就是用此事件实现背景的绘制
      

  7.   

    可能用treeview 效果更好 :)
      

  8.   

    对!是打算做个Designer的工具
    觉得Node还是ListView的好!所以往这上面考虑了!
    要是解决画线的问题就好了!
    其实简单的画线倒是不难!
    只是做不到自动重绘!
    所以像做个连线的对象之类的!
    不知思路!望大家赐教!
    :)ListView的绘图之类的是哪个事件控制的?
      

  9.   

    看到不少大侠推荐是用treeview?
    如何做?怎么做随意摆放?行吗?
    不会~~
    望赐教
      

  10.   



    procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
      const ARect: TRect; var DefaultDraw: Boolean);
    var
    x,y,w,h : LongInt;
    begin      //listview1.Canvas.Refresh;
      // listview1.Canvas.Create;
         // listview1.Canvas.Create;
      with Bmp do begin
      W := Width;
      H := Height;
      end;
      Y := 0;
      while Y < Height do begin
      X := 0;
      while X < Width do begin
      listview1.Canvas.Refresh ;
      listview1.Canvas.Draw(x,y,bmp);  //画上个背景
      Inc(X,W);
      end;
      Inc(Y,H);
    end;
         // bb:=true;
    end; procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
      function GetRGBColor(Value: TColor): DWORD;
      begin
        Result := ColorToRGB(Value);
        case Result of
          clNone: Result := CLR_NONE;
          clDefault: Result :=clr_none;
                         //CLR_DEFAULT;
        end;
      end;
    begin
       DefaultDraw:=False;
       if Item.Selected then
       begin
                                //clHighlight;
         Sender.Canvas.Brush.Color:=clHighlight;
         Sender.Canvas.Font.Color:=clHighlightText;
         ImageList_DrawEx(ImageList1.Handle, item.ImageIndex, Sender.Canvas.Handle, Item.Left,Item.Top, 0, 0,        GetRGBColor(ImageList1.BkColor), GetRGBColor(ImageList1.BlendColor), 4);
       end
       else
         ImageList1.Draw(Sender.Canvas,Item.Left,Item.Top,Item.ImageIndex,True);
         Sender.Canvas.TextRect(Item.DisplayRect(drLabel),Item.Left+(ImageList1.Width+(Length(Item.Caption)div 2)*TListView(Sender).Font.Height)div 2, Item.Top+ImageList1.Height+4,Item.Caption);
       if Item.Selected or Item.Focused then
         Sender.Canvas.DrawFocusRect(Item.DisplayRect(drLabel));
    end;