TreeViewの全展開を知りたい

解決


EUserNotFound  2021-09-18 16:58:48  No: 149838

TreeViewのノードでテンキーの'*'を押したときに下位ノードが全て展開されますが、これが行われようとしている、あるいは行われたことを検知する方法はあるでしょうか。


HFUKUSHI  2021-09-19 21:24:01  No: 149839

ちょっと調べてみましたが、Windows/VCL的には簡単ではなさそうです。
思いつく範囲だと、TVN_KEYDOWNメッセージ https://docs.microsoft.com/en-us/windows/win32/controls/tvn-keydown で'*'の入力を捕まえるか、
TTreeView.OnExpanded イベントで TTreeView.Items.Item[] を全部チェックして子供を持つ(HasChildren = True)ノードの Expanded が True かどうかをチェックするか、
ぐらいでしょうか。


EUserNotFound  2021-09-20 08:46:17  No: 149840

やはりKEYDOWNで捕まえるあたりが解法でしょうか。
OnExpandingのところで把握できるのがベストなのですが難しそうですね。
ありがとうございました。


AAA  2021-09-20 08:46:40  No: 149841

 * の展開の判断ならば *押されただけで良い気もするけど

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;


EUserNotFound  2021-09-20 12:22:14  No: 149842

HFUKUSHIさん、AAAさん、ありがとうございます。

OnKeyDownでvkMultiply(106)をチェックしてフラグを立てることでOnExpandingでの状況が把握できました。
ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加