私はDelphiのVirtual Treeviewを試していて、F2キーを押してエディタを呼び出すサンプルプログラムを実行しました。編集プロセスを開始するには、Virtualtreeviewの組み込みエディタを使用しました。テキストは変更されましたが、別のノードをクリックしたときにすぐに元の状態に戻りました。TVirtualTreeviewエディタはどのように機能しますか?
これで、VirtualTrees.pasのソースコードを調べて、編集プロセスの仕組みを調べました。すべてが沸騰してTBaseVirtualTree.doedit
に見えます。私は各ステップを調べましたが、列に配置された編集ボックスを正確に操作するものは不明です。
procedure TBaseVirtualTree.DoEdit;
begin
Application.CancelHint;
StopTimer(ScrollTimer);
StopTimer(EditTimer);
DoStateChange([], [tsEditPending]);
if Assigned(FFocusedNode) and not (vsDisabled in FFocusedNode.States) and
not (toReadOnly in FOptions.FMiscOptions) and (FEditLink = nil) then
begin
FEditLink := DoCreateEditor(FFocusedNode, FEditColumn);
if Assigned(FEditLink) then
begin
DoStateChange([tsEditing], [tsDrawSelecting, tsDrawSelPending, tsToggleFocusedSelection, tsOLEDragPending,
tsOLEDragging, tsClearPending, tsDrawSelPending, tsScrollPending, tsScrolling, tsMouseCheckPending]);
ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions,
not (toDisableAutoscrollOnEdit in FOptions.AutoOptions));
if FEditLink.PrepareEdit(Self, FFocusedNode, FEditColumn) then
begin
UpdateEditBounds;
// Node needs repaint because the selection rectangle and static text must disappear.
InvalidateNode(FFocusedNode);
if not FEditLink.BeginEdit then
DoStateChange([], [tsEditing]);
end
else
DoStateChange([], [tsEditing]);
if not (tsEditing in FStates) then
FEditLink := nil;
end;
end;
end;
だから私の質問は、実際のキーボード入力がVirtualTreeでnode.textに配置されている方法で、どのようにデータレコードに置か編集の結果は?