@@ -5,6 +5,7 @@ interface
55uses
66 System.Classes,
77 System.Actions,
8+ Vcl.Controls,
89 Vcl.ActnList,
910 VirtualTrees;
1011
@@ -20,7 +21,7 @@ TVirtualTreeAction = class(TCustomAction)
2021 fFilter: TVirtualNodeStates; // Apply only of nodes which match these states
2122 procedure SetControl (Value : TBaseVirtualTree); // Setter for the property "Control"
2223 procedure Notification (AComponent: TComponent; Operation: TOperation); override;
23- procedure DoAfterExecute ; // Fires the event "OnAfterExecute"
24+ procedure DoAfterExecute ; virtual ; // Fires the event "OnAfterExecute"
2425 property SelectedOnly: Boolean read GetSelectedOnly write SetSelectedOnly default False;
2526 public
2627 function HandlesTarget (Target: TObject): Boolean; override;
@@ -45,9 +46,11 @@ TVirtualTreeAction = class(TCustomAction)
4546 TVirtualTreePerItemAction = class (TVirtualTreeAction)
4647 strict private
4748 fOnBeforeExecute: TNotifyEvent;
49+ fOldCursor: TCursor;
4850 strict protected
4951 fToExecute: TVTGetNodeProc; // method which is executed per item to perform this action
50- procedure DoBeforeExecute ;
52+ procedure DoBeforeExecute ();
53+ procedure DoAfterExecute (); override;// Fires the event "OnAfterExecute"
5154 public
5255 constructor Create(AOwner: TComponent); override;
5356 procedure ExecuteTarget (Target: TObject); override;
@@ -79,10 +82,10 @@ TVirtualTreeSelectAll = class(TVirtualTreeAction)
7982
8083 // Base class for actions that are applied to selected nodes only
8184 TVirtualTreeForSelectedAction = class (TVirtualTreeAction)
82- public
83- constructor Create(AOwner: TComponent); override;
84- end ;
85-
85+ public
86+ constructor Create(AOwner: TComponent); override;
87+ end ;
88+
8689 TVirtualTreeCopy = class (TVirtualTreeForSelectedAction)
8790 public
8891 procedure ExecuteTarget (Target: TObject); override;
@@ -109,7 +112,7 @@ procedure Register;
109112implementation
110113
111114uses
112- Controls, Forms;
115+ Vcl. Forms;
113116
114117procedure Register ;
115118begin
@@ -128,18 +131,18 @@ constructor TVirtualTreeAction.Create(AOwner: TComponent);
128131end ;
129132
130133function TVirtualTreeAction.GetSelectedOnly : Boolean;
131- begin
132- exit(TVirtualNodeState.vsSelected in fFilter);
133- end ;
134-
134+ begin
135+ exit(TVirtualNodeState.vsSelected in fFilter);
136+ end ;
137+
135138procedure TVirtualTreeAction.SetSelectedOnly (const Value : Boolean);
136- begin
137- if Value then
138- Include(fFilter, TVirtualNodeState.vsSelected)
139- else
140- Exclude(fFilter, TVirtualNodeState.vsSelected);
141- end ;
142-
139+ begin
140+ if Value then
141+ Include(fFilter, TVirtualNodeState.vsSelected)
142+ else
143+ Exclude(fFilter, TVirtualNodeState.vsSelected);
144+ end ;
145+
143146procedure TVirtualTreeAction.DoAfterExecute ;
144147begin
145148 if Assigned(fOnAfterExecute) then
@@ -160,7 +163,7 @@ procedure TVirtualTreeAction.UpdateTarget(Target: TObject);
160163
161164procedure TVirtualTreeAction.ExecuteTarget (Target: TObject);
162165begin
163- DoAfterExecute();
166+ DoAfterExecute();
164167end ;
165168
166169procedure TVirtualTreeAction.Notification (AComponent: TComponent; Operation: TOperation);
@@ -186,35 +189,40 @@ procedure TVirtualTreeAction.SetControl(Value: TBaseVirtualTree);
186189{ TVirtualTreePerItemAction }
187190
188191constructor TVirtualTreePerItemAction.Create(AOwner: TComponent);
189- begin
190- inherited ;
191- fToExecute := nil ;
192- fOnBeforeExecute := nil ;
193- end ;
194-
192+ begin
193+ inherited ;
194+ fToExecute := nil ;
195+ fOnBeforeExecute := nil ;
196+ fOldCursor := crNone;
197+ end ;
198+
199+ procedure TVirtualTreePerItemAction.DoAfterExecute ;
200+ begin
201+ inherited ;
202+ Control.EndUpdate;
203+ if fOldCursor <> crNone then
204+ Screen.Cursor := fOldCursor;
205+ end ;
206+
195207procedure TVirtualTreePerItemAction.DoBeforeExecute ;
196208begin
209+ if Screen.Cursor <> crHourGlass then begin
210+ fOldCursor := Screen.Cursor;
211+ Screen.Cursor := crHourGlass;
212+ end ;// if
197213 if Assigned(fOnBeforeExecute) then
198214 fOnBeforeExecute(Self);
215+ Control.BeginUpdate();
199216end ;
200217
201218procedure TVirtualTreePerItemAction.ExecuteTarget (Target: TObject);
202- var
203- lOldCursor: TCursor;
204219begin
205- if Assigned(Self.Control) then
206- Target := Self.Control;
207220 DoBeforeExecute();
208- lOldCursor := Screen.Cursor;
209- Screen.Cursor := crHourGlass;
210- Control.BeginUpdate();
211221 try
212222 Control.IterateSubtree(nil , Self.fToExecute, nil , fFilter);
213- finally
214- Control.EndUpdate;
215- Screen.Cursor := lOldCursor;
223+ finally
224+ DoAfterExecute();
216225 end ;
217- Inherited ExecuteTarget(Target);
218226end ;
219227
220228{ TVirtualTreeCheckAll }
@@ -244,62 +252,62 @@ constructor TVirtualTreeUncheckAll.Create(AOwner: TComponent);
244252
245253
246254{ TVirtualStringSelectAll }
247-
255+
248256procedure TVirtualTreeSelectAll.UpdateTarget (Target: TObject);
249257begin
250- Inherited ;
251- // Enabled := Enabled and (toMultiSelect in Control.TreeOptions.SelectionOptions) // TreeOptions is protected :-(
258+ Inherited ;
259+ // Enabled := Enabled and (toMultiSelect in Control.TreeOptions.SelectionOptions) // TreeOptions is protected :-(
252260end ;
253261
254262procedure TVirtualTreeSelectAll.ExecuteTarget (Target: TObject);
255- begin
256- Control.SelectAll(False);
257- inherited ;
258- end ;
259-
260-
261- { TVirtualTreeForSelectedAction }
263+ begin
264+ Control.SelectAll(False);
265+ inherited ;
266+ end ;
267+
268+
269+ { TVirtualTreeForSelectedAction }
262270
263271constructor TVirtualTreeForSelectedAction.Create(AOwner: TComponent);
264- begin
265- inherited ;
266- SelectedOnly := True;
267- end ;
268-
269-
270- { TVirtualTreeCopy }
271-
272- procedure TVirtualTreeCopy.ExecuteTarget (Target: TObject);
273- begin
274- Control.CopyToClipboard();
275- Inherited ;
276- end ;
272+ begin
273+ inherited ;
274+ SelectedOnly := True;
275+ end ;
276+
277+
278+ { TVirtualTreeCopy }
279+
280+ procedure TVirtualTreeCopy.ExecuteTarget (Target: TObject);
281+ begin
282+ Control.CopyToClipboard();
283+ Inherited ;
284+ end ;
277285
278286
279287{ TVirtualTreeCut }
280-
281- procedure TVirtualTreeCut.ExecuteTarget (Target: TObject);
282- begin
283- Control.CutToClipboard();
284- Inherited ;
285- end ;
288+
289+ procedure TVirtualTreeCut.ExecuteTarget (Target: TObject);
290+ begin
291+ Control.CutToClipboard();
292+ Inherited ;
293+ end ;
286294
287295
288296{ TVirtualTreePaste }
289-
290- procedure TVirtualTreePaste.ExecuteTarget (Target: TObject);
291- begin
292- Control.PasteFromClipboard();
293- Inherited ;
294- end ;
297+
298+ procedure TVirtualTreePaste.ExecuteTarget (Target: TObject);
299+ begin
300+ Control.PasteFromClipboard();
301+ Inherited ;
302+ end ;
295303
296304
297305{ TVirtualTreeDelete }
298-
299- procedure TVirtualTreeDelete.ExecuteTarget (Target: TObject);
300- begin
301- Control.DeleteSelectedNodes();
302- Inherited ;
306+
307+ procedure TVirtualTreeDelete.ExecuteTarget (Target: TObject);
308+ begin
309+ Control.DeleteSelectedNodes();
310+ Inherited ;
303311end ;
304312
305313
0 commit comments