• ベストアンサー

delphiにてtreeviewの書き出し

お世話になっております。 当方初心者なのですが、ツリーの書き出しで つまってしまいました。 treeviewの書き出しではSavetofileがありますが、 あくまでテキスト情報のみですよね。 アイコン、というかimageindexの情報も含めて 書き出す、ということはできないでしょうか? またそれを読み込み、treeviewの再構築ということは できないでしょうか? ここで完全に息詰まってしまいました。 よろしくおねがいします。

  • yo-ya
  • お礼率65% (145/221)

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 新規Formに、TreeView1,Button1,ImageList1を置き、ImageList1にはNode用のImageを入れてある状態です。 IDE環境から起動した場合、初回実行時は、datファイルがないのでエラーになりますが、2回目以降はエラーになりません。 Delphi5でテストしてます。 //******************************************************** //読込み procedure TForm1.FormCreate(Sender: TObject); var FStream : TFileStream;   FName  : String; begin  FName := ChangeFileExt(Application.ExeName,'.dat');  FStream := TFileStream.Create(FName,fmOpenRead);  try   FStream.ReadComponent(TreeView1);  finally   FStream.Free;  end; end; //******************************************************** //保存 procedure TForm1.FormDestroy(Sender: TObject); var FStream : TFileStream;   FName  : String; begin  FName := ChangeFileExt(Application.ExeName,'.dat');  FStream := TFileStream.Create(FName,fmCreate);  try   FStream.WriteComponent(TreeView1);  finally   FStream.Free;  end; end; //******************************************************** //ノードの追加 procedure TForm1.Button1Click(Sender: TObject); var Node : TTreeNode; begin  Node := TreeView1.Items.Add(TreeView1.Selected,'追加');  Node.ImageIndex  := 0; end;

yo-ya
質問者

お礼

回答ありがとうございます。 なにぶん初心者なもので、どうやらようやっと スクリプトの書き方になれてきたかな~という程度でして、 ヘルプにもまだまだ慣れずにいます。 自分が何がしたいのか、そのためにはどこを見ればよいか、 というのがもう少しわかってくるといいのですが。 何かコツなどあるのでしょうか? やはり慣れですかね・・・。 忙しくてなかなか手をつけられずにいたのですが、今日、明日あたりに さっそく試させていただきます。

関連するQ&A

  • delphi、treeviewについて再び

    お世話になっております。 たびたびtreeviewがらみなんですが、 treeview上で、nodeのテキストを変更可能にした時、 OnEditedで該当ノードのテキストを取得しようとすると、 やり方が悪いのか、どうしても変更前のテキストしか取得できません。 変更後のテキストを取得するにはどうしたらいいのでしょう?

  • TreeViewについて

    いつも大変お世話になっております。福島です。 TreeViewのことで教えて頂きたいのですが・・・ 社員登録で3階層(部・課・社員)のツリー構造をなす TreeViewを作成しましたが、1社員の情報を変更したときに 状態を反映するためにTreeView全体を消去してから書き直しています。 (例えば)課や部を移動したとき しかし表示する数が多くなってきた為に再構築に非常に時間が かかってしまい実用的でなくなってしまいました。 あるノードの下だけ変更(削除)する方法はありますか? 今は、「treeView.Nodes.Clear」を使用して全体を削除して 再度ツリーを作成しています。 aNode(部) bNode(課) cNode(社員) のようになっています。 宜しくお願い申し上げます。 Windows2000SP2 + VB6.0SP4

  • TreeViewについて

    C++Builderを使用しています。 TreeViewで、ノードのテキストにより、アイコンを 変えたいのですが、方法を教えていただけないでしょうか。 たとえば、ノードの名前がABCだっったら、 Aを読み取り、アイコンを自動設定するような・・・。 よろしくお願いします。

  • TreeViewの内容を出力する方法

    VB6.0でコントロールTreeViewを使って、 親子関係を持つデータをツリー表示する フォームを作っています。 TreeViewに表示された内容をビットマップに出力 したいのですが、いい方法が見つかりません。 PrintFormメソッドでフォーム全体をPDF形式で出力 させることは出来たのですが、ツリー情報が多岐に 渡る場合、情報が欠けてしまいます。 出来ればフォーム全体ではなく、ツリーの内容を全て出力させたいです。 ビットマップが無理ならば他の方法でも構わないので ご存知の方がいましたら是非教えて下さい。

  • VC#のTreeViewコントロールについて

    こんばんは。 VC#2005ExpressEditionで、TreeViewコントロールを使ったフォームを作ろうとしています。 フォームの左側にTreeViewコントロールをおいて、 ノードを選択するたびに、右側が切り替わるようなフォームを作りたいと考えています。 ちょうどeclipseの設定画面みたいな感じです。 ノードの数はすでに決定しています。 ただ、いろいろ調べたのですが、 ノードを追加したり削除したり、コードにアイコンを設定したり、 そういった情報はあるのですが、私がやってみたいことの情報は見つかりませんでした・・・。 ノードに対応するフォームをひとつづつ作って、ノードが選択されたときにそれを呼び出す、 のような感じだと思うのですが、具体的にどのように設定したらよいか分かりません・・・。 ご存知の方がいらっしゃったら教えていただけませんか? よろしくおねがいします。

  • TreeViewの再表示のちらつきをなくす方法

    お世話になっております。 VB2005でWinアプリ開発中です。 テキストボックスに条件を入力し、ボタンを押下すると、 TreeViewに該当データのノードを設定し、 ノードを展開した状態で表示する処理があります。 ノードが展開表示されている状態で、ボタンを押下し 新しい情報を再表示すると、 ノードが折りたたまれて展開されたというような動きが見えてしまいます。 SuspendLayout/ResumeLayoutを入れてみたのですが、変化無しでした。 ノードが展開された状態で、パッと再表示するには、 どのようにすればよいのでしょうか? よろしくお願いします!

  • VB2005 TreeViewの任意ノード選択

    お世話になっております。 VB2005でWinアプリを開発中です。 ルートノードは1つで、 そこから子、孫、ひ孫・・・と階段状になるTreeViewを作っています。 親   L子      L孫         Lひ孫             ・・・・ このようなツリーに対し、プログラムで任意のノードを選択状態にしたいのですが、 ノードの名称などで一発で指定する方法はありますでしょうか?? 上の例で、「孫」を選択状態にしたい場合、 TreeView1.SelectedNode = TreeView1.Nodes(0).Nodes(0).Nodes(0) と書けば、できることはできるのですが。 他にもっとよい方法があるはずと思うのですが、見つけられませんでした。 VB6.0なら、下記に方法があったのですが・・・ http://oshiete1.goo.ne.jp/qa732490.html よろしくお願いします。

  • delphiにてみたび、ノードの間隔

    お世話になっております。 みたび(いつまで続くのか?)TreeViewについてです。 ツリーの項目をドラッグドロップで順番入れ替えたりできるようにしている最中です。 とりあえず簡単な移動は何とかできたのですが、そのテストをしている最中にはたと 気づきました。フォルダをつかんでフォルダの列の中に 移動させようとすると、フォルダの中に入ってしまいます。 で、そうならないように、つまりあるフォルダのひとつ上のノードにもうひとつの フォルダを移動させたいのです。 そこで、ツリーのノードとノードの間を取得すればできるのではないかと思ったのですが、その取得方法 (なのか、それともツリーのノード同士の間隔を広げる方法なのか?なのですが) まだ見付けられずにいます。 どなたかdelphi使いの先輩がた、教えてください。よろしくお願いいたします。

  • PHPからPDF書き出し

    お世話になります。 PHPのメールフォームで入力・選択した情報(テキストやプルダウンメニューや画像のパス)を基に最終的に印刷用のPDF書き出しを行うことは可能でしょうか? イメージとしては、テンプレートと画像は高解像度のものをサーバーに置いておき、選択された情報を読み込んでサーバー内の高解像度の画像やテンプレートに置換えて書き出しを行うようなものといったとこですが、実現可能でしょうか? ざっくりとしすぎててすみませんが、今の私の中でのイメージはこんな感じとしかいえません。 どなたかご教授をお願いいたします。

    • 締切済み
    • PHP
  • ASP.NET2.0 TreeView チェックボックス

    皆様、お世話になります。 長田と申します。 環境はASP.NET2.0です。 1.新規にWebフォームを作成して、その中にTreeViewとボタンを作成します。 2.TreeViewはチェックボックスを持つように設定。 3.ボタン押下時にTreeViewの中でチェックボックスを選択されているものを取得して、ラベルに表示。 ネットにてサンプルを見つけたのですが、C#なため解読できません。(泣く VB.NETでしたらどのようになりますでしょうか宜しければご教授頂きたく思ってます。 ご指導お願い致します。 TreeViewイメージ □大分類A  □中分類1   □小分類1   □小分類2   □小分類3  □中分類2   □小分類1   □小分類2   □小分類3 □大分類B  □中分類1   □小分類1 コード(※ツリービューを作る所は省略) //ボタン押下時 protected void Button1_Click(object sender, EventArgs e) {   System.Text.StringBuilder sb = new System.Text.StringBuilder();   //大分類   sb.Append(SelectNode(TV1.Nodes));   foreach (TreeNode tn in TV1.Nodes)   {     //中分類     sb.Append(SelectNode(tn.ChildNodes));     foreach (TreeNode tn2 in tn.ChildNodes)     {       //小分類       sb.Append(SelectNode(tn2.ChildNodes));     }   }   Label1.Text = sb.ToString(); } //ノードに日もづく子ノードで且つ選択されているものを取得 public static string SelectNode(TreeNodeCollection tnc) {   System.Text.StringBuilder sb = new System.Text.StringBuilder();   foreach (TreeNode tn in tnc)   {     if (tn.Checked)     {       sb.Append(tn.Text);     }   }   return sb.ToString(); }

専門家に質問してみよう