。 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;
但是,
其实我是想要的还有,这些节点(Node)之间有连线!而且在拖动Node时(或之后)连现有保持连结(就是说连线要自动重绘)
谢谢!分嘛!放心!下午给!
:)
用图标表示对象,用连接表示其关系等
:使用listview imagelist 再针对相应事件编程即可
但是楼主想实现的目标比较难
不过也非不可能 我想你针对
listview 的 oncustomdraw 和 oncustomdrawitem 事件进行编程
因该可以实现 我就是用此事件实现背景的绘制
觉得Node还是ListView的好!所以往这上面考虑了!
要是解决画线的问题就好了!
其实简单的画线倒是不难!
只是做不到自动重绘!
所以像做个连线的对象之类的!
不知思路!望大家赐教!
:)ListView的绘图之类的是哪个事件控制的?
如何做?怎么做随意摆放?行吗?
不会~~
望赐教
。
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;