TreeViewのノードでテンキーの'*'を押したときに下位ノードが全て展開されますが、これが行われようとしている、あるいは行われたことを検知する方法はあるでしょうか。
ちょっと調べてみましたが、Windows/VCL的には簡単ではなさそうです。
思いつく範囲だと、TVN_KEYDOWNメッセージ https://docs.microsoft.com/en-us/windows/win32/controls/tvn-keydown で'*'の入力を捕まえるか、
TTreeView.OnExpanded イベントで TTreeView.Items.Item[] を全部チェックして子供を持つ(HasChildren = True)ノードの Expanded が True かどうかをチェックするか、
ぐらいでしょうか。
やはりKEYDOWNで捕まえるあたりが解法でしょうか。
OnExpandingのところで把握できるのがベストなのですが難しそうですね。
ありがとうございました。
* の展開の判断ならば *押されただけで良い気もするけど
procedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = 106 then
begin
end;
end;
----------------------------------
Expanded / Expanding が クリックの展開か * の展開かを区別したいのならば
procedure TForm1.TreeView1Collapsing(Sender: TObject; Node: TTreeNode;
var AllowCollapse: Boolean);
begin
Node.Data := Pointer(0);
end;
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
if SAVEKEY = 106 then
begin
if Node.Data = Pointer(0) then
begin
Node.Data := Pointer(1);
Memo1.Lines.Add('*で展開された Expanding');
end
else
begin
Memo1.Lines.Add('*で展開された Expanding(展開済み)');
end;
end
else
begin
Memo1.Lines.Add('Expanding');
end;
end;
procedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
SAVEKEY := KEY;
end;
procedure TForm1.TreeView1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
SAVEKEY := 0;
end;
HFUKUSHIさん、AAAさん、ありがとうございます。
OnKeyDownでvkMultiply(106)をチェックしてフラグを立てることでOnExpandingでの状況が把握できました。
ありがとうございました。
ツイート | ![]() |