用戶可以通過單擊相應的列標題,按名稱,日期或大小手動對標準Windows打開對話框(在「詳細信息」視圖模式下)中的文件進行排序。如何在應用程序中以編程方式在Open Dialog(Delphi中的TOpenDialog類)中設置排序模式,以便該對話框以首選排序方式打開?如何在打開的對話框中設置排序模式
1
A
回答
1
GetOpenFileName()API和Vista IFileDialog接口不支持此操作。您可以按照this magazine article中的演示來破解對話框。注意文章是相當過時的。而像這樣的黑客很脆弱,他們可能會停止在下一個版本的Windows上工作。
2
TFileOpenDialog(D2009)內部使用Windows的IFileDialog接口。該接口不提供任何設置文件排序的方式。但它確實有SetClientGuid和ClearClientData。 TFileOpenDialog通過它的ClientGUID屬性使用它們。爲特定實例設置ClientGuid將指示窗口保持對話狀態。然後Windows會記住最後打開的文件夾,文件列出方式和排序方式。
因此,如果您只想通過記住打開文件時設置對話框的最後一種方式來滿足您的用戶,您只需設置FileOpenDialog的ClientGUID即可。
要獲取GUID,請在代碼編輯器中按Ctrl-Shft-G。只要記住將它粘貼到ClientGUID屬性中時不要使用方括號。
0
你可以使用像DexExpress'TcxShellListView這樣的組件來推出自己的產品。它允許對文件進行排序。
0
使用Google受試者後,我發現一些「幻數」,並得出以下溶液(TOpenDialog.OnFolderChange事件處理程序):
procedure TDM.OpenDlgFolderChange(Sender: TObject);
const
FCIDM_SHVIEW_LARGEICON = $7029;
FCIDM_SHVIEW_SMALLICON = $702A;
FCIDM_SHVIEW_LIST = $702B;
FCIDM_SHVIEW_REPORT = $702C;
FCIDM_SHVIEW_THUMBNAIL = $702D;
FCIDM_SHVIEW_TILE = $702E;
ByName = $7602;
BySize = $7603;
ByType = $7604;
ByModified = $7605;
ByAttributes = $7608;
var
Handle: THandle;
begin
Handle:= FindWindowEx(GetParent(OpenDlg.Handle), 0, 'SHELLDLL_DefView', nil);
SendMessage(Handle, WM_COMMAND, FCIDM_SHVIEW_REPORT, 0);
SendMessage(Handle, WM_COMMAND, ByAttributes, 0);
SendMessage(Handle, WM_COMMAND, ByName, 0);
end;
第一消息設置「詳細信息」視圖模式中,第二組分選「按屬性」和第三個「按名稱」;兩個不同的'排序'信息需要兩個保證,最終的排序是上升的。
上述代碼在Win XP上正常工作,但排序部分在Win 2000 SP4上不起作用;在Win 7上,「排序幻數」被移動,即「ByName = $ 7603」等。
相關問題
- 1. 如何在「打開方式」對話框中設置程序的名稱?
- 2. jQuery UI的模式,對話框:在對話框打開
- 3. 如何在模態模式下打開對話框
- 4. 在新打開的模式窗口頂部打開對話框
- 5. 有模式對話框打開輔助對話框的問題
- 6. 如何設置Dojo對話框打開的位置?
- 7. 打開對話框保留設置
- 8. 如何打開模型或對話框?
- 9. 打開html模式對話框
- 10. 重新打開模式對話框jquery
- 11. RegisterStartupScript無法打開模式對話框
- 12. OnInit打開模式對話框兩次
- 13. jQueryUI無法打開模式對話框
- 14. 如何在iphone中打開對話框?
- 15. 如何在asp.net中打開對話框?
- 16. 如何在jquery模式對話框中設置cookie
- 17. 如何打開在控制雙擊模式對話框#
- 18. 如何在選擇標籤上打開Jquery對話框模式
- 19. 如何在開始對話框打開時在其中設置文本?
- 20. 在Angular 4中的函數中打開模式對話框
- 21. 在jqGrid中打開單元格中的模式對話框
- 22. 的WinForms:在打開第二個模式對話框已打開的模態對話框
- 23. 如何關閉所有打開的durandaljs模式對話框
- 24. 如何在「更改」維護模式下排序對話框Dlg
- 25. 如何在ember.js的模態對話框中打開路線?
- 26. 在打開的模式對話框中識別SimpleModal html內容
- 27. 如何在文件對話框中設置焦點在Vbscript中打開
- 28. 如何在asp.net中的Repeater控件中打開模式對話框
- 29. 以編程方式打開DPI設置對話框?
- 30. 如何打開一個對話框(模式)從C#