2013-03-12 7 views
6

Quando imposto la proprietà Nomefile di un oggetto TFileOpenDialog e poi la eseguo, vedo solo i 14 caratteri finali del nome file selezionato nel campo Nome file. Se premo Home Posso vedere che l'intera stringa è lì, ma mi piacerebbe che fosse visualizzata correttamente, naturalmente. Ho provato su due computer Windows 7 e uno Windows 8 con gli stessi risultati. Qualcuno ha suggerimenti o suggerimenti su come risolvere il problema?Impostazione della proprietà del nome file per TOpenFileDialog

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

iniziale display che mostra problema: Image showing problem

L'intera stringa dopo aver premuto casa: How I think it should look

+3

Questo è un bug di IFileDialog, sembra essere stato introdotto in Windows 7, leggere questo http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/c0c79498-3399-4346-b514 -b15336cd7c68/ – RRUZ

+2

Sì, questo è ben noto. –

risposta

7

TFileOpenDialog è solo un wrapper sottile intorno interfaccia IFileDialog di Microsoft su Windows Vista e versioni successive. Non hai il controllo su come si comporta la finestra di dialogo quando viene mostrata. Se mostra solo gli ultimi caratteri (e sono stato in grado di riprodurre questo comportamento sulla mia casella di Win7), questo è semplicemente il modo in cui la finestra di dialogo funziona in generale. Tuttavia, con ciò detto, IFileDialog non consente il percorso della cartella assoluta e solo il nome file da impostare separatamente, e questo è il modo in cui dovrebbero essere utilizzati, ma TFileOpenDialog non crea o espone tale separazione, sfortunatamente (errore Embarcadero?). Quindi, se hai bisogno di questa funzionalità, dovrai utilizzare direttamente IFileDialog e non utilizzare lo TFileOpenDialog.

+0

È possibile ottenere 'IFileDialog' da' TFileOpenDialog'. Non c'è bisogno di abbandonarlo completamente. –

+1

Qual è la seconda parte della risposta? Sicuramente il wrapper Delphi presenta il percorso completo del file, ma quando lo si imposta si traduce in una modifica alla cartella e una modifica al file. Non riesco a vedere come questo risolva la domanda. Un semplice, "questo è un problema noto senza soluzione" sarebbe sufficiente. –

+0

@DavidHeffernan: 'TFileOpenDialog' non crea l'istanza' IFileDialog' finché non viene chiamato 'Execute()', a questo punto è troppo tardi per cambiare il modo in cui le proprietà 'TFileOpenDialog' vengono assegnate, a meno che non si derivi da' TFileOpenDialog 'e sovrascrive' Esegui() 'con la tua implementazione. –

Problemi correlati