2013-03-12 10 views
6

TFileOpenDialogのFilenameプロパティを設定して実行すると、Filenameフィールドで選択されたファイル名の最後の14文字のみが表示されます。私がを押した場合文字列全体が表示されているのがわかりますが、もちろん正しく表示したいのですが。私は2つのWindows 7と1つのWindows 8マシンで同じ結果をテストしました。問題を解決するためのヒントや提案はありますか?TOpenFileDialogのファイル名プロパティを設定する

FileOpenDialog1.FileName := 
    'C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\available_downloads_en.htm'; 
if FileOpenDialog1.Execute then 
    ShowMessage(FileOpenDialog1.FileName); 

問題を示す初期表示: Image showing problem

ホームを押した後、文字列全体: How I think it should look

+3

これはIFileDialogのバグで、Windows 7で導入されたようです。http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/c0c79498-3399-4346-b514 -b15336cd7c68/ – RRUZ

+2

これはよく知られています。 –

答えて

7

TFileOpenDialogは、Windows Vista以降のMicrosoftのIFileDialogインターフェイス周りだけ薄いラッパーです。ダイアログが表示されたときのダイアログの動作を制御することはできません。最後の文字しか表示されていない場合(そしてWin7のボックスでその動作を再現できた場合)、それは単にダイアログが一般的にどのように機能するかです。ただし、IFileDialogは、絶対フォルダパスとファイル名だけを別々に設定することができますが、どのように使用すればよいのですか?残念ながら、TFileOpenDialogはその分離を行いません(Embarcaderoバグ?)。したがって、その機能が必要な場合は、IFileDialogを直接使用し、TFileOpenDialogを使用しないでください。

+0

'TFileOpenDialog'から' IFileDialog'を得ることができます。それを完全に放棄する必要はありません。 –

+1

答えの2番目の部分は何ですか?確かに、Delphiラッパーはファイルへの完全なパスを表示しますが、それを設定すると、フォルダーが変更され、ファイルが変更されます。これがどのように問題に対処しているのか分かりません。シンプルな「これは回避策がない既知の問題です」という問題があります。 –

+0

@DavidHeffernan: 'TFileOpenDialog'は、' Execile() 'が呼び出されるまでその' IFileDialog'インスタンスを生成しません。その時点で 'TFileOpenDialog'プロパティがどのように割り当てられるかを変更することができません。 'Execute()'を独自の実装でオーバーライドします。 –

関連する問題