원리는 간단하다.
OpenDialog 의 FolderChange 이벤트에서
OpenDialog->FileName 으로 바뀐 Folder의 경로를 확인해본후에
내가 원하는 폴더가 아니면 원하는 폴더로 옮겨버린다.
폴더를 옮길때는
- FindWindow로 파일명 입력창을 찾아서 변경을 원하는 폴더경로를 입력하고
- OK 버튼을 찾아서 sendmessage로 click 이벤트를 만들어서 날려준다.
const int ID_FILENAME_98 = 1152;
const int ID_FILENAME_WIN2K=1148;
const int ID_DLG_OK = 1;
void __fastcall SetOpenDialogDir(HWND hWnd,String Path,bool &Busy)
{
HWND hFileName;
HWND hOK;
char Buff[255];//:string[255];
if( Busy)return;
Busy=True;
if( Win32MajorVersion >= 5 )
{
hFileName= GetDlgItem(GetParent(hWnd), ID_FILENAME_WIN2K);
hFileName=FindWindowEx(hFileName,0,"COMBOBOX",NULL);
hFileName=FindWindowEx(hFileName,0,"EDIT",NULL);
}
else
hFileName = GetDlgItem(GetParent(hWnd), ID_FILENAME_98);
hOK = GetDlgItem(GetParent(hWnd), ID_DLG_OK);
GetWindowText(hFileName,&Buff[0],sizeof(Buff));
if( LowerCase(Buff)==LowerCase(Path) )
{
Busy =False;
return ;
}
SetWindowText(hFileName, Path.c_str());
SendMessage(hOK, WM_LBUTTONDOWN, MK_LBUTTON, MAKEWORD(0, 0));
SendMessage(hOK, WM_LBUTTONUP, MK_LBUTTON, MAKEWORD(0, 0));
Busy =False;
}
//------------------------------------------------------------------------
void __fastcall TForm1::OpenDialog1FolderChange(TObject *Sender)
{
static bool Busy;
String sPath=OpenDialog1->FileName;
sPath=sPath.UpperCase();
if(sPath.Pos("C:\\ZZANG")<1)
{
SetOpenDialogDir(OpenDialog1->Handle, "C:\\ZZANG",Busy);
return;
}
}
//------------------------------------------------------------------------
출처는?
http://www.87717.com/delphi/delphi_9301.html
그럼..
|