TreeView のproperty: ShowBarsをTrue にすると +/- が表示されますね。その状態で、アイテムの+/-のところをねらってクリックすると、自動的にexpand / collaps されるまではいいのですが、その時いつもルートフォルダが選択されてしまうのはどうしてですか?
下記のように各アイテムのクリックイベントを書いているのですが、使えません。
+/-付きのクリックされたアイテムを正確に選択状態にする方法が分かりません。
また、ShowBars=False にすれば各アイテムは選択状態になりますが、次のようなコードを書いてもビットイメージ切り替え結果がTreeView上に現れません。Updateなんて試してもだめですね。アドバイスをお願いいたします。
procedure TMyBrowserMainForm.TreeView1Click(Sender: TObject);
begin
if TreeView1.Selected.ImageIndex=8 then // collapsed Folder
begin
TreeView1.Selected.ImageIndex:=9; // set image of expanded folder
TreeView1.Selected.Expand(true);//expand
TreeView1.Update;
exit;
end
else
if TreeView1.Selected.ImageIndex=9 then // expanded Folder
begin
TreeView1.Selected.ImageIndex:=8;
TreeView1.Selected.Collapse(true);//collapse
TreeView1.Update;
exit;
end;
//個々のURLデータのアイテム がクリックされた
WebBrowser1.Navigate(xxx)
end;
ShowBarsでなくて、ShowButtonsですよね?
Delphi5を使用していますが、ShowBarsプロパティは見あたりません。
+/-が表示されると言うことなので、ShowButtonsのこととして書きます。
> その時いつもルートフォルダが選択されてしまうのはどうしてですか?
イベントの定義は、OnClickのみでしょうか。
こちらでは、前回選択位置が選択されたままで、ルートに移動してしまうことはありません。
> +/-付きのクリックされたアイテムを正確に選択状態にする方法が分かりません。
開いた(Expandされた)ときに、そのノードをselectすればいいと思います。
procedure TForm1.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
begin
Node.Selected := True;
end;
これだけです。
> また、ShowBars=False にすれば各アイテムは選択状態になりますが、次のようなコードを書いてもビットイメージ切り替え結果がTreeView上に現れません。Updateなんて試してもだめですね。アドバイスをお願いいたします。
選択状態を、自前で切り替える理由はありますか?
もしなければ、TTreeNodeオブジェクトの、SelectedIndexプロパティを使用した方が早いです。
自前でやる場合も、(自前で描画するのでなければ)SelectedIndexプロパティを変更する必要があります。
IDEで、「項目の設定」でも、「選択時インデックス」というのがあると思います。
にしのさま、ありがとうございました。
しつれい、ShowButtons の間違えでした。はい、イベント定義はonClick だけです。WebBrowser.Nevigate(xxxx) するためだけです。
ご説明で:
<TTreeNodeオブジェクトの、SelectedIndexプロパティを使用した方が早いです。
とありますが、なぜTTreeNodeオブジェクトが必要になるのですか?SeletedIndex プロパティというのはTTreeview のどこにあるのですか?
すみません、全くのわからんちんで。。。
TreeViewオブジェクトの持つ、Itemsオブジェクトは、TTreeNodesオブジェクトです。
TTreeNodesオブジェクトの持つ、Itemオブジェクトは、TTreeNodeオブジェクトです。
この辺は慣れですね。
VCLは、こういう構造が多いですから。
ヘルプで、どのプロパティがどういう働きをするのか確認して下さい。
(SelectedIndexを指定する例)
TreeView1.Items.Item[0].SelectedIndex := 1;
これは、下のようにも書けると思います。
TreeView1.Items[0].SelectedIndex := 1;
ありがとうございました。TTreeNode のこと理解できました。
お陰様でTreeView のクリックしたフォルダーがちゃんと選択されるようになりましたし、数回クリックし続ければ、フォルダーOpen のBitMapに変わってくれるようになりました。かなり僕のイメージに近くなってきました。
ありがとうございました。
ツイート | ![]() |