|
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
サンプルコンポDirectoryOutlineのルートのファイル表示ができません。
1.0Jからこの不具合があり、2.0Jにも引き継がれています。SBORLAND/13/10
>Delphi 1.0J マニュアルの追加・訂正
では、
>◇ユーザズガイドの P450 について補足説明します。
> コンポーネントパレットの Samples ページにある DirectoryOutline コ
> ンポーネントではルートディレクトリを選択している時に Directory プ
> ロパティが取得できません。 このため,OnChange イベントで
> DirectoryOutline の Directory プロパティを取得し,選択されたディレ
> クトリにあるファイルを表示する様な処理(ユーザズガイドの P450 にあ
> るような)を記述していてもルートディレクトリを選択した場合には,
> OnChange イベントが発生せず,ファイルリストも表示できません。
(改行位置変えました)
とあるだけなのですが。
[A]
最近、質問があがっていましたが、気づきませんでした。どうも失礼。
>FDELPHI/10/1472 YAS さん、DirectoryOutlineサンプルについて
>(10) 97/04/25 01:36
>
>(..略..)
>
>ルートディレクトリを選択したとき、ルートにあるファイル名をFileListBox
>に表示させる方法。
実は、1.0Jでは、SBORLAND/旧9/3775 に解決法をPostしたことがあります。
SBORLAND の FAQ にもPostした記憶がありますが、こちらには移住させてい
なかったようです。m(_ _)m
>Kennywell RE^4:DirectoryOutlineルート表示成功!
>( 9) 95/12/26
Delphi Sample Component の TDirectoryOutline のソースコード
DELPHI\SOURCE\SAMPLES\DIROUTLN.PAS を以下のように1ヶ所訂正し、コンパ
イルされた DIROUTLN.DCU を DELPHI\LIB にオーバーライトし、オプション
(O)|ライブラリの再構築(R) を実行します。
コードの元々の意味は、末尾の'\'だけ削除すればいいようになっています
が、コメントにもつけましたが、ルートに動いたときだけここで末尾の'\'が
ついたままです。
{////////////////////////////////////////////////////////////////////}
unit DirOutln;
...
{216行目から}
procedure TDirectoryOutline.SetDirectory(const NewDirectory:
TFileName);
var
TempPath: TFileName;
begin
if Length(NewDirectory) > 0 then { ignore empty directory }
begin
TempPath := ForceCase(ExpandFileName(NewDirectory));
{ expand to full path }
{見つけたぞ! ルートに動くとここで古いディレクトリー末尾に'\'付加}
if (Length(TempPath) > 3) and (GetLastChar(TempPath) = '\') then
{remove trailing backslash}
{TempPath[0] := Char(Length(TempPath) - 1);}
{ ~~~~~~~~~~~~~~~~~~~~}
TempPath[0] := Char(3); {remove trailing backslash}
{ <==== これが正しい!}
...
end;
...
end.
{////////////////////////////////////////////////////////////////////}
さて、2.0J も同じです。1.0J に比べて、方々をいじった形跡があるので
すが、この部分はなぜかそのまま、SetLength に変えただけで素通りしてま
す。
{////////////////////////////////////////////////////////////////////}
unit DirOutln;
...
{233行目から}
procedure TDirectoryOutline.SetDirectory(const NewDirectory: TFileName);
var
TempPath: TFileName;
begin
if Length(NewDirectory) > 0 then { ignore empty directory }
begin { expand to full path }
TempPath := ForceCase(ExpandFileName(NewDirectory));
if (Length(TempPath) > 3) and (GetLastChar(TempPath) = '\') then
{SetLength(TempPath, Length(TempPath) - 1);}{ <==== 誤 }
SetLength(TempPath,3); { <==== 正 }
...
{////////////////////////////////////////////////////////////////////}
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|