指定ノードフォルダにノードをコードで追加するには

解決


武田  2005-10-24 15:41:00  No: 18241  IP: 192.*.*.*

皆様にいつもお世話になっております。
自作のブラウザにTreeViewでお気に入りを登録表示させています。
新しいサイトのアドレスを追加するプログラムですがサンプルプログラムは下記のようになっています。
type
  PBookMarkItem = ^TBookMarkItem;
  TBookMarkItem = record
    URL:string;           //ブックマークのURLを格納するのに使用。
  end;
・・・・・・
ボタンをクリックして追加登録する。
procedure TAddBookMarkForm.Button1Click(Sender: TObject);
var
  P : PBookMarkItem;
  Node : TTreeNode;
begin
    New(P);
    P^.URL := URL;
    Node := TreeView1.Items.AddObject(TreeView1.Selected,'タイトル名',P);
    Self.Close;
end;
正常に作動するのですが、ツリービューの一番最後に追加されます。
質問は
予めツリービューにフォルダを作成しておく、たとえば「一時フォルダ」。
ノードを追加登録するとき、(マウスでセレクトすることなく)プログラムコードから予め指定したフォルダ(この例では「一時フォルダ」)の下に、追加登録したいのですが、できるでしょうか。
いろいろ、ノードの処理、TreeViewの解説をみるのですが、いずれもマウスでクリックしてセレクトしたノードの下に作成するなど参考になりません。
よろしくご指導をお願いいたします。m(_ _)m

編集 削除
ん?  2005-10-24 16:49:46  No: 18242  IP: 192.*.*.*

> Node := TreeView1.Items.AddObject(TreeView1.Selected,'タイトル名',P);

これ?
TreeView1.Items.AddChildObjectFirst(TreeView1.Selected,'タイトル名',P);

編集 削除
武田  2005-10-24 23:42:23  No: 18243  IP: 192.*.*.*

ん?様、早速のご指導ありがとうございます。
早速実行したのですが、うまくいきません。
Node := TreeView1.Items.AddObject(TreeView1.Selected,'タイトル名',P);
ここで述べている「タイトル名」は、現在表示して保存しようとしているWebページのTitleです。
つまり、いま登録しようとしているWebページの、TitleとURLをセットで保存しようとしています。
「一時フォルダ」の下に保存するという指示は不要なのでしょうか?
できましたら、小生のレベルが低いので、もう少し解説していただけないでしょうか。m(_ _)m
AddChildObjectFirstから察するに子ノードとしてFirst第一のノードに作るというのかなと思ったのですが。

編集 削除
武田  2005-10-25 00:13:40  No: 18244  IP: 192.*.*.*

ん様、自己レスです。記述漏れがありました。
一番先頭のフォルダの子としては登録されます。
ほかに方法がなければ、「一時フォルダ」を先頭に持ってくればいいですが。
項目の名前を指定してそこに登録できれば便利なのですが。
よろしくお願いいたします。

編集 削除
ん?  2005-10-25 08:11:47  No: 18245  IP: 192.*.*.*

> 項目の名前を指定してそこに登録できれば便利なのですが。
Help見るべし。

AddChildObjectFirst の第一引数はなんですか?
ヘルプから引用すると「指定したノードの最初の子として追加されます」ですね。
だったら、「一時フォルダ」のNodeを、第一引数に与えるだけでいいでしょう。

編集 削除
武田  2005-10-25 11:44:45  No: 18246  IP: 192.*.*.*

ん?様、早速のご指導ありがとうございました。
方法として「一時フォルダ」を先頭に作成し削除できないようにします。
StringList.IndexOf('一時フォルダ');の様に位置を取得して、できないのかなと考えてTTreeViewのプロパティを一個一個開いてみてみたのですがわからなかったためお尋ねしました。
有り難うございました。また教えてください。m(_ _)m

編集 削除
ん?  2005-10-25 11:51:06  No: 18247  IP: 192.*.*.*

for i := 0 to TreeView1.Items.Count -1 do begin
  if TreeView1.Items[i].Caption = '一時フォルダ' then begin
    〜〜〜
  end;
end;

ないし、

  TForm1 = class(TForm)
  protected
    TempNode :TTreeNode;
  end;

  TempNode := TreeView1.Items.AddObject(nil, '一時フォルダ');


ですが、なにか問題でも?
# タイプミスはあるかもな

編集 削除