我从 TTreeView 继承了一个自定义控件,需要捕获 TreeView 节点的“添加、删除、修改、移动”的事件,从而自动对数据库记录进行修改,请问如何捕获这样的事件呢?或者有没有其它思路使对 TreeView 节点的修改可以关联到 数据库记录 的修改?(我想使用 TFieldDatalink 将 TreeView 与数据库连接)
我从 TTreeView 继承了一个自定义控件,需要捕获 TreeView 节点的“添加、删除、修改、移动”的事件,从而自动对数据库记录进行修改,请问如何捕获这样的事件呢?或者有没有其它思路使对 TreeView 节点的修改可以关联到 数据库记录 的修改?(我想使用 TFieldDatalink 将 TreeView 与数据库连接)
FRClickNode: TTreeNode;
FTreeNodes: TTreeNodes;
procedure SelectNode(Node: TTreeNode);
用treeview的事件OnDeletion、OnAddition可以实现对添加和删除节点的控制,编辑应该也可以
移动貌似不行,不过如何能移动节点呢?
节点移动是指:TTreeView.Selected.MoveTo也就是 TTreeNode.MoveTo
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;type
TForm1 = class(TForm)
tv1: TTreeView;
btn1: TButton;
mmo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure tv1Addition(Sender: TObject; Node: TTreeNode);
procedure tv1Deletion(Sender: TObject; Node: TTreeNode);
procedure tv1Change(Sender: TObject; Node: TTreeNode);
procedure tv1AdvancedCustomDraw(Sender: TCustomTreeView; const ARect: TRect;
Stage: TCustomDrawStage; var DefaultDraw: Boolean);
procedure tv1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
procedure tv1CancelEdit(Sender: TObject; Node: TTreeNode);
procedure tv1Changing(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
procedure tv1Click(Sender: TObject);
procedure tv1Collapsed(Sender: TObject; Node: TTreeNode);
procedure tv1Collapsing(Sender: TObject; Node: TTreeNode;
var AllowCollapse: Boolean);
procedure tv1Compare(Sender: TObject; Node1, Node2: TTreeNode;
Data: Integer; var Compare: Integer);
procedure tv1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
procedure tv1CreateNodeClass(Sender: TCustomTreeView;
var NodeClass: TTreeNodeClass);
procedure tv1CustomDraw(Sender: TCustomTreeView; const ARect: TRect;
var DefaultDraw: Boolean);
procedure tv1CustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode;
State: TCustomDrawState; var DefaultDraw: Boolean);
procedure tv1DblClick(Sender: TObject);
procedure tv1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure tv1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure tv1Edited(Sender: TObject; Node: TTreeNode; var S: string);
procedure tv1Editing(Sender: TObject; Node: TTreeNode;
var AllowEdit: Boolean);
procedure tv1EndDock(Sender, Target: TObject; X, Y: Integer);
procedure tv1EndDrag(Sender, Target: TObject; X, Y: Integer);
procedure tv1Enter(Sender: TObject);
procedure tv1Exit(Sender: TObject);
procedure tv1Expanded(Sender: TObject; Node: TTreeNode);
procedure tv1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure tv1Gesture(Sender: TObject; const EventInfo: TGestureEventInfo;
var Handled: Boolean);
procedure tv1GetSelectedIndex(Sender: TObject; Node: TTreeNode);
procedure tv1GetImageIndex(Sender: TObject; Node: TTreeNode);
procedure tv1Hint(Sender: TObject; const Node: TTreeNode; var Hint: string);
procedure tv1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure tv1KeyPress(Sender: TObject; var Key: Char);
procedure tv1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure tv1MouseActivate(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y, HitTest: Integer;
var MouseActivate: TMouseActivate);
procedure tv1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure tv1MouseEnter(Sender: TObject);
procedure tv1MouseLeave(Sender: TObject);
procedure tv1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure tv1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure tv1StartDock(Sender: TObject; var DragObject: TDragDockObject);
procedure tv1StartDrag(Sender: TObject; var DragObject: TDragObject);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
bDrawLine: Boolean;
iEventGroupIndex: Integer;implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
begin
mmo1.Clear;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
tv1.Items.Add(nil, '111');
tv1.Items.Add(nil, '222');
tv1.Items.Add(nil, '333');
tv1.Items.Add(nil, '444');
tv1.Items.Add(nil, '555');
bDrawLine := True;
iEventGroupIndex := 0;
end;procedure TForm1.tv1Addition(Sender: TObject; Node: TTreeNode);
begin
mmo1.Lines.Add('OnAddition');
bDrawLine := True;
end;procedure TForm1.tv1AdvancedCustomDraw(Sender: TCustomTreeView;
const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
// mmo1.Lines.Add('OnAdvancedCustomDraw');
// bDrawLine := True;
end;procedure TForm1.tv1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
begin
// mmo1.Lines.Add('OnAdvancedCustomDrawItem');
// bDrawLine := True;
end;procedure TForm1.tv1CancelEdit(Sender: TObject; Node: TTreeNode);
begin
mmo1.Lines.Add('OnCancelEdit');
bDrawLine := True;
end;procedure TForm1.tv1Change(Sender: TObject; Node: TTreeNode);
begin
// mmo1.Lines.Add('OnChange');
// bDrawLine := True;
end;procedure TForm1.tv1Changing(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
// mmo1.Lines.Add('OnChanging');
// bDrawLine := True;
end;procedure TForm1.tv1Click(Sender: TObject);
begin
// mmo1.Lines.Add('OnClick');
// bDrawLine := True;
end;procedure TForm1.tv1Collapsed(Sender: TObject; Node: TTreeNode);
begin
// mmo1.Lines.Add('OnCollapsed');
// bDrawLine := True;
end;procedure TForm1.tv1Collapsing(Sender: TObject; Node: TTreeNode;
var AllowCollapse: Boolean);
begin
// mmo1.Lines.Add('OnCollapsing');
// bDrawLine := True;
end;procedure TForm1.tv1Compare(Sender: TObject; Node1, Node2: TTreeNode;
Data: Integer; var Compare: Integer);
begin
mmo1.Lines.Add('OnCompare');
bDrawLine := True;
end;procedure TForm1.tv1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
mmo1.Lines.Add('OnContextPopup');
bDrawLine := True;
end;procedure TForm1.tv1CreateNodeClass(Sender: TCustomTreeView;
var NodeClass: TTreeNodeClass);
begin
mmo1.Lines.Add('OnCreateNodeClass');
bDrawLine := True;
end;procedure TForm1.tv1CustomDraw(Sender: TCustomTreeView; const ARect: TRect;
var DefaultDraw: Boolean);
begin
// mmo1.Lines.Add('OnCustomDraw');
// bDrawLine := True;
end;
State: TCustomDrawState; var DefaultDraw: Boolean);
begin
// mmo1.Lines.Add('OnCustomDrawItem');
// bDrawLine := True;
end;procedure TForm1.tv1DblClick(Sender: TObject);
begin
mmo1.Lines.Add('OnDblClick');
bDrawLine := True;
end;procedure TForm1.tv1Deletion(Sender: TObject; Node: TTreeNode);
begin
mmo1.Lines.Add('OnDeletion');
bDrawLine := True;
end;procedure TForm1.tv1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
mmo1.Lines.Add('OnDragDrop');
bDrawLine := True;
end;procedure TForm1.tv1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
// mmo1.Lines.Add('OnDragOver');
// bDrawLine := True;
end;procedure TForm1.tv1Edited(Sender: TObject; Node: TTreeNode; var S: string);
begin
mmo1.Lines.Add('OnEdited');
bDrawLine := True;
end;procedure TForm1.tv1Editing(Sender: TObject; Node: TTreeNode;
var AllowEdit: Boolean);
begin
mmo1.Lines.Add('OnEditing');
bDrawLine := True;
end;procedure TForm1.tv1EndDock(Sender, Target: TObject; X, Y: Integer);
begin
mmo1.Lines.Add('OnEndDock');
bDrawLine := True;
end;procedure TForm1.tv1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
mmo1.Lines.Add('OnEndDrag');
bDrawLine := True;
end;procedure TForm1.tv1Enter(Sender: TObject);
begin
// mmo1.Lines.Add('OnEnter');
// bDrawLine := True;
end;procedure TForm1.tv1Exit(Sender: TObject);
begin
// mmo1.Lines.Add('OnExit');
// bDrawLine := True;
end;procedure TForm1.tv1Expanded(Sender: TObject; Node: TTreeNode);
begin
// mmo1.Lines.Add('OnExpanded');
// bDrawLine := True;
end;procedure TForm1.tv1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
// mmo1.Lines.Add('OnExpanding');
// bDrawLine := True;
end;procedure TForm1.tv1Gesture(Sender: TObject; const EventInfo: TGestureEventInfo;
var Handled: Boolean);
begin
mmo1.Lines.Add('OnGesture');
bDrawLine := True;
end;procedure TForm1.tv1GetImageIndex(Sender: TObject; Node: TTreeNode);
begin
// mmo1.Lines.Add('OnGetImageIndex');
// bDrawLine := True;
end;procedure TForm1.tv1GetSelectedIndex(Sender: TObject; Node: TTreeNode);
begin
// mmo1.Lines.Add('OnGetSelectedIndex');
// bDrawLine := True;
end;procedure TForm1.tv1Hint(Sender: TObject; const Node: TTreeNode;
var Hint: string);
begin
// mmo1.Lines.Add('OnHint');
// bDrawLine := True;
end;procedure TForm1.tv1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// mmo1.Lines.Add('OnKeyDown');
// bDrawLine := True;
end;procedure TForm1.tv1KeyPress(Sender: TObject; var Key: Char);
begin
// mmo1.Lines.Add('OnKeyPress');
// bDrawLine := True;
end;procedure TForm1.tv1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// mmo1.Lines.Add('OnKeyUp');
// bDrawLine := True;
end;procedure TForm1.tv1MouseActivate(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y, HitTest: Integer;
var MouseActivate: TMouseActivate);
begin
// mmo1.Lines.Add('OnMouseActivate');
// bDrawLine := True;
end;procedure TForm1.tv1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// mmo1.Lines.Add('OnMouseDown');
// bDrawLine := True;
end;procedure TForm1.tv1MouseEnter(Sender: TObject);
begin
// mmo1.Lines.Add('OnMouseEnter');
// bDrawLine := True;
end;procedure TForm1.tv1MouseLeave(Sender: TObject);
begin
// mmo1.Lines.Add('OnMouseLeave');
// bDrawLine := True;
end;procedure TForm1.tv1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
// mmo1.Lines.Add('OnMouseMove');
if bDrawLine then begin
mmo1.Lines.Add(IntToStr(iEventGroupIndex) + '------------------------------');
bDrawLine := False;
Inc(iEventGroupIndex);
end;
end;procedure TForm1.tv1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// mmo1.Lines.Add('OnMouseUp');
// bDrawLine := True;
end;procedure TForm1.tv1StartDock(Sender: TObject; var DragObject: TDragDockObject);
begin
mmo1.Lines.Add('OnStartDock');
bDrawLine := True;
end;procedure TForm1.tv1StartDrag(Sender: TObject; var DragObject: TDragObject);
begin
mmo1.Lines.Add('OnStartDrag');
bDrawLine := True;
end;end.
TTreeView 中的 OnChange 捕捉的是节点的焦点被改变,也就是说,当你用鼠标选择另一个节点时,就会触发 OnChange 事件。MoveTo 不会触发 OnChange。