这是个饱受非议的控件; 我通过尝试, 理解了非议, 也能理解作者. 总之向作者的思路靠拢吧, 还是不错的.
TIWTreeView 所在单元及继承链:
IWCompTreeview.TIWTreeView < TIWCustomControl < TIWBaseHTMLControl < TIWBaseControl < TIWVCLBaseControl < TControl < TComponent < TPersistent < TObject
主要成员:
property Items: TIWTreeViewItems //所有 Item 的集合 property Selected: TIWTreeViewItem //在这里, 叫做 "当前 Item" 更合适 property AutoIndent: Boolean //是否自动缩排; 默认 True property DoServerSidePlusMinus: Boolean //如果是 True, Html 中不包含被折叠的部分, 需要展开时再从服务器读取; 相反, Html 中包含所有节点; 默认 False property TreeViewImages: TIWTreeViewImages //通过其 OpenFolderImage、ClosedFolderImage、DocumentImage、PlusImage、MinusImage 子属性指定五个图标 property ItemSpace: TIWTreeViewItemSpace //调整纵、横间距 property UseItemImages: Boolean //是否使用 Item 标志图像 property TreeViewImagesWidth: Integer //图标宽度 property TreeViewImagesHeigth: Integer //图标高度 property UseFrame: Boolean //是否使用框架 property ScrollToName: string //滚动到指定名称的 Item property ScrollBars: TIWScrollStyle //滚动条选项 property WrapItems: Boolean //Item 文本能否换行; 默认 False property DoRefreshControl: Boolean //在修改某些属性时必须让它为 True 才会有效 property TreeItemClick: TIWTreeViewClickEvent //通过它可以为每个 Item 指定 Click 事件 property OnPlusMinus: TTreeViewPlusMinusProc //每当展开或收拢子节点时 procedure ClearAll //
TIWTreeViewItems 与 TIWTreeViewItem:
{IWCompTreeview.TIWTreeViewItems < TOwnedCollection < TCollection < TPersistent < TObject}
property Count: Integer
property Items[AIndex: Integer]: TIWTreeViewItem
function Add(aParentItem: TIWTreeViewItem): TIWTreeViewItem
procedure Clear
procedure Delete(Index: Integer)
function Insert(Index: Integer): TCollectionItem
{IWCompTreeview.TIWTreeViewItem < TCollectionItem < TPersistent < TObject}
property ParentItem: TIWTreeViewItem
property SubItems: TList
property UserData: TObject
property Caption: string
property Expanded: Boolean
property Font: TIWFont
property Hint: string
property ItemImages: TIWTreeViewImages
property Tag: Integer
property URL: string
property Version: Integer
property Css: string
property Collection: TCollection
property ID: Integer
property Index: Integer
property Name: string
property DisplayName: string
property OnClick: TNotifyEvent
procedure DoClick
function HasChild: Boolean
测试:
{在空白窗体上放 IWRegion1 和 IWTreeView1; 下面代码在设计时实现会更方便}
procedure TIWForm1.IWAppFormCreate(Sender: TObject);
var
fItem: TIWTreeViewItem;
begin
IWRegion1.Width := 200;
IWRegion1.Align := alLeft;
IWRegion1.Color := clWebYellow;
LinkColor := clWebRed; //如果给 TIWTreeViewItem 指定了 OnClick 事件, 它会被呈现为链接
IWTreeView1.Parent := IWRegion1;
IWTreeView1.Align := alClient;
IWTreeView1.Items.Add(nil).Caption := 'ItemA';
IWTreeView1.Items.Add(nil).Caption := 'ItemB';
IWTreeView1.Items.Add(nil).Caption := 'ItemC';
fItem := IWTreeView1.Items.Add(nil);
fItem.Caption := 'ItemD';
IWTreeView1.Items.Add(fItem).Caption := 'ItemD1';
IWTreeView1.Items.Add(fItem).Caption := 'ItemD2';
fItem := IWTreeView1.Items.Add(fItem);
fItem.Caption := 'ItemD3';
IWTreeView1.Items.Add(fItem).Caption := 'ItemD31';
IWTreeView1.Items.Add(fItem).Caption := 'ItemD32';
end;
{尽管可以为每个 Item 指定 OnClick, 但我觉得用 TreeItemClick 事件一起指定更方便; 事件中可以通过其 Tag、ID、Name、Caption等来区别}
procedure TIWForm1.IWTreeView1TreeItemClick(Sender: TObject; ATreeViewItem: TIWTreeViewItem);
begin
if not ATreeViewItem.HasChild then
WebApplication.ShowMessage(ATreeViewItem.Caption);
end;
效果图:

浙公网安备 33010602011771号