TreeView1を配置しております、FORMを開いたときにBookMark.txtから読み込むようになっていますが読み込んだ際に全てのフォルダが開いた状態になってほしいのですが方法がわかりません、自分なりに//この部分 の所に
TreeView1.FullExpand();
Node.Collapse(False);
Node.Expand(False);
などを入れてみましたが思ったようにいきません。
宜しくお願いします。
if FileExists('BookMark.txt') = True then
begin
SL1 := TStringList.Create;
try
SL1.LoadFromFile('BookMark.txt'); // ブックマークは、
intLevelB := 0; // ノードの階層レベル,タイトル,URL
Node := nil; // の形式で格納してある。
for i := 0 to SL1.Count - 1 do
begin
strLine := SL1.Strings[i];
intA := Pos(',', strLine);
for n := Length(strLine) downto 1 do
begin
if strLine[n] = ',' then
begin
intB := n;
Break;
end;
end;
try
intLevelA := StrToInt(Copy(strLine, 1, intA - 1));
except
on EConvertError do
begin
ShowMessage('ブックマークの読み込みに失敗しました。');
Exit;
end;
end;
// 読み込んだ設定ファイルをFolderに反映
strTitle := Copy(strLine, intA + 1, intB - intA - 1);
New(P);
P^.URL := Copy(strLine, intB + 1, Length(strLine) - intB);
Node := TreeView1.Items.AddObject(Node, strTitle, P);
if intLevelB > intLevelA then
begin
intLevelB := intLevelA;
while Node.Level > intLevelA do
begin
Node.MoveTo(Node.Parent, naAdd);
//この部分
end;
end
else if intLevelB < intLevelA then
begin
Node.MoveTo(Node.GetPrev, naAddChild);
intLevelB := intLevelA;
//この部分
end;
end;
// TreeView1.FullCollapse;
//この部分
finally
SL1.Free;
end;
end;
Book.txt の中身
0,検索,Folder
1,Google,http://www.google.co.jp/
これを実行しているのはどのイベントでしょう。
たとえばコンストラクタやOnCreateの中だと、まだTreeViewのウィンドウハンドルがないため
Expandしても効果がない(厳密に言うと、後でウィンドウの実体が作られたときにリセットされてしまう)のだったと思います。
OnShowあたりで実行するか、先にTreeView.HandleNeededを入れてみたらどうなりますか?
tor様早速のご返答ありがとうございます、どうしてこの様な状況になっているのかが理解できました、しかし、なかなかうまくきません、、、
このさいアプリが立ちあがってからFolderを展開するボタンを作ってもよいかと思ってきました、どの様にすればできますでしょうか?
さんぷる
procedure TForm6.FormCreate(Sender: TObject);
var
TreeNode1,TreeNode2,TreeNode3: TTreeNode;
begin
TreeNode1 := TreeView1.Items.AddFirst(TreeView1.TopItem,'AAA');
TreeNode2 := TreeView1.Items.AddChild(TreeNode1,'BBBB');
TreeNode3 := TreeView1.Items.AddChild(TreeNode2,'CCC');
TreeView1.TopItem.Expand(True);
end;
type
TMyNode = record
URL: String;
end;
PMyNode = ^TMyNode;
procedure TForm1.LoadBookMark(AFileName: String);
var
SL1: TStringList;
intA, intLevelA, intB, intLevelB: Integer;
strLine, strTitle: String;
i, n: Integer;
Node: TTreeNode;
P: PMyNode;
begin
if FileExists(AFileName) = True then
begin
SL1 := TStringList.Create;
try
SL1.LoadFromFile(AFileName); // ブックマークは、
intLevelB := 0; // ノードの階層レベル,タイトル,URL
Node := nil; // の形式で格納してある。
for i := 0 to SL1.Count - 1 do
begin
strLine := SL1.Strings[i];
intA := Pos(',', strLine);
for n := Length(strLine) downto 1 do
begin
if strLine[n] = ',' then
begin
intB := n;
Break;
end;
end;
try
intLevelA := StrToInt(Copy(strLine, 1, intA - 1));
except
on EConvertError do
begin
ShowMessage('ブックマークの読み込みに失敗しました。');
Exit;
end;
end;
// 読み込んだ設定ファイルをFolderに反映
strTitle := Copy(strLine, intA + 1, intB - intA - 1);
New(P);
P^.URL := Copy(strLine, intB + 1, Length(strLine) - intB);
Node := TreeView1.Items.AddObject(Node, strTitle, P);
if intLevelB > intLevelA then
begin
intLevelB := intLevelA;
while Node.Level > intLevelA do
begin
Node.MoveTo(Node.Parent, naAdd);
//この部分
end;
end
else if intLevelB < intLevelA then
begin
Node.MoveTo(Node.GetPrev, naAddChild);
intLevelB := intLevelA;
//この部分
end;
end;
// TreeView1.FullCollapse;
//この部分
finally
SL1.Free;
end;
end;
end;
//
procedure TForm1.FormCreate(Sender: TObject);
begin
TreeView1.Tag := 0;
LoadBookMark('Book.txt');
end;
//
procedure TForm1.Button1Click(Sender: TObject);
begin
if TreeView1.Tag=0 then
begin
TreeView1.FullCollapse;
TreeView1.Tag := 1;
end
else
begin
TreeView1.FullExpand;
TreeView1.Tag := 0;
end;
end;
なんて試してみましたが、開いた状態になっていると思いますよ。
SL1.LoadFromFile('BookMark.txt');
Book.txt の中身
ツイート | ![]() |