2013-03-12 15 views
6

Po ustawieniu właściwości Filename obiektu TFileOpenDialog, a następnie jego wykonaniu, widzę tylko 14 ostatnich znaków nazwy pliku zaznaczonych w polu Nazwa pliku. Jeśli naciśniesz Home Widzę, że cały ciąg jest tam, ale chciałbym, aby wyświetlał się poprawnie. Przetestowałem na dwóch komputerach z Windows 7 i jednym Windows 8 z tymi samymi wynikami. Czy ktoś ma jakieś sugestie lub wskazówki, jak rozwiązać problem?Ustawianie właściwości pliku dla TOpenFileDialog

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

początkowe wyświetlacz pokazujący Problem: Image showing problem

Cały ciąg po naciśnięciu Home: How I think it should look

+3

To jest błąd w IFileDialog, wydaje się, że został wprowadzony w systemie Windows 7, przeczytaj ten http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/c0c79498-3399-4346-b514 -b15336cd7c68/ – RRUZ

+2

Tak, to jest dobrze znane. –

Odpowiedz

7

TFileOpenDialog jest tylko cienka owijka wokół IFileDialog interfejsem Microsoft Windows Vista i nowszych. Nie masz kontroli nad tym, jak zachowuje się okno dialogowe po wyświetleniu. Jeśli pokazuje tylko ostatnie znaki (i udało mi się odtworzyć to zachowanie w moim Win7), to jest to po prostu ogólne działanie okna dialogowego. Jednak z tym, IFileDialog pozwala ustawić bezwzględną ścieżkę folderu i samą nazwę pliku oddzielnie, i tak powinno się ich używać, ale TFileOpenDialog nie tworzy lub nie eksponuje tego podziału, niestety (błąd Embarcadero?). Więc jeśli potrzebujesz tej funkcjonalności, będziesz musiał użyć bezpośrednio IFileDialog i nie używać w ogóle TFileOpenDialog.

+0

Możesz otrzymać 'IFileDialog' z' TFileOpenDialog'. Nie ma potrzeby porzucać go całkowicie. –

+1

Na czym polega druga część odpowiedzi? Z pewnością opakowanie Delphi przedstawia pełną ścieżkę do pliku, ale po ustawieniu powoduje zmianę w folderze i zmianę w pliku. Nie rozumiem, jak to rozwiązuje pytanie. Wystarczyłby prosty "jest znany problem bez obejścia". –

+0

@DavidHeffernan: 'TFileOpenDialog' nie tworzy swojej instancji' IFileDialog' dopóki nie zostanie wywołane 'Execute()', w którym to momencie jest za późno, aby zmienić przypisanie do właściwości 'TFileOpenDialog', chyba że wywodzi się z' TFileOpenDialog 'i zastąp' Execute() 'własną implementacją. –

Powiązane problemy