15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
Delphi2.0JでDirectoryOutlineを動的に生成した場合、中に何も表示されま
せん。また、新たなドライブに移ったとき、DirectoryListBox のように、
ルート下の1段目のディレクトリーは表示して欲しいのですが、どうすれば
よいですか?
[A]
ソースを[例]のように変更し、コンパイルし、新たな Diroutln.dcu を
\Program Files\Borland\Delphi 2.0\LIB にオーバーライトして、コンポー
ネントの再構築をして下さい。
すると、動的に生成した場合でも表示されます。
また、新たなドライブに移ったとき、ルート下の1段目のディレクトリー
は表示します。その分、表示に余計な時間がかかってしまいますが。
[例]
unit DirOutln;
(..略..)
procedure TDirectoryOutline.CreateWnd;
(..略..)
begin
(..略..)
if (not (csLoading in ComponentState)) (*and {*コメント化}
(csDesigning in ComponentState)*) then begin
BuildTree;
if Items[1].Data=nil then Items[1].Expanded:=true; {*追加}
end;
end;
(..略..)
procedure TDirectoryOutl.SetDrive(NewDrive: Char);
(..略..)
begin
(..略..)
if (FDrive = #0) (..略..)then
begin
(..略..)
if not (csLoading in ComponentState) then BuildTree;
{ this ends up calling Change }
(改行位置変えました)
end;
if Items[1].Data=nil then Items[1].Expanded:=true; {*追加*注1}
end;
end;
それから、直接関係ありませんが、FindFirst/FindNext が閉じていません
でした。
procedure TDirectoryOutline.BuildOneLevel(RootItem: Longint);
(..略..)
begin
New(NodeInfo);
try
with NodeInfo^ do
begin
(..略..)
DosError := FindFirst(RootName, faDirectory, SearchRec);
while DosError = 0 do
begin
if (..略..) then
begin
(..略..)
end;
DosError := FindNext(SearchRec);
end;
SysUtils.FindClose(SearchRec); {*追加}
end;
(..略..)
finally
Dispose(NodeInfo);
end;
end;
(*注1)同じドライブを再度指定したときに展開するよう、ずらしました。
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|