2010-06-03 2 views
1

사용자는 해당 열 머리글을 클릭하여 이름, 날짜 또는 크기별로 표준 Windows 열기 대화 상자 (세부 정보보기 모드)에서 파일을 수동으로 정렬 할 수 있습니다. 선호하는 정렬 방식으로 대화 상자가 열리도록 프로그램에서 프로그래밍 방식으로 열기 대화 상자 (Delphi의 TOpenDialog 클래스)에서 정렬 모드를 설정하는 방법은 무엇입니까?열기 대화 상자에서 정렬 모드를 설정하는 방법

답변

1

GetOpenFileName() API 및 Vista IFileDialog 인터페이스는이 기능을 지원하지 않습니다. this magazine article과 같이 대화 상자를 해킹 할 수 있습니다. 기사가 꽤 오래된 것을주의하십시오. 그리고 이러한 해킹은 취약하며, 다음 버전의 Windows에서 작업을 중단 할 수도 있습니다.

2

TFileOpenDialog (D2009)는 Windows에서 IFileDialog 인터페이스를 내부적으로 사용합니다. 이 인터페이스는 파일의 정렬을 설정하는 방법을 제공하지 않습니다. 그러나 그것은 SetClientGuid와 ClearClientData를 가지고 있습니다. 이들은 ClientGUID 속성을 통해 TFileOpenDialog에 의해 사용됩니다. 특정 인스턴스에 대해 ClientGuid를 설정하면 창에 대화 상자의 상태를 유지하도록 지시합니다. 그러면 Windows는 마지막 폴더가 열릴 때, 파일이 나열되는 방식 및 정렬을 기억합니다.

파일을 열 때 대화 상자가 설정된 마지막 방법을 기억하여 사용자를 수용하려는 경우 FileOpenDialog의 ClientGUID를 설정하기 만하면됩니다.

GUID를 얻으려면 코드 편집기에서 Ctrl-Shft-G를 누릅니다. 이것을 ClientGUID 속성에 붙여 넣을 때는 대괄호를 사용하지 않는 것이 좋습니다.

0

DexExpress 'TcxShellListView와 같은 구성 요소를 사용하여 직접 롤 수 있습니다. 그것은 파일의 정렬을 허용합니다.

0

주제를 인터넷 검색 후 나는 약간의 "매직 넘버"를 발견하고 다음 솔루션 (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; 

첫 번째 메시지가 설정 "세부 사항"보기 모드 "By Attributes"와 세 번째 "By Name"; 두 개의 서로 다른 '정렬'메시지는 최종 정렬이 오름차순이라는 두 가지 보장이 필요합니다.

위의 코드는 Windows XP에서 제대로 작동하지만 정렬 부분은 Windows 2000 SP4에서 작동하지 않습니다. Win 7에서 "정렬 마법 번호"가 이동됩니다 (예 : "ByName = $ 7603"등).

관련 문제