?
Hi,
naja ich habs nun doch noch hinbekommen, fragt mich nicht warum ich mich so blöde angestellt habe die ganzen Tage.
Hier jetzt der --- UNICODE OPENFOLDER DIALOG ---
//---------------------------------------------------------------------------
#define NO_WIN32_LEAN_AND_MEAN
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
wchar_t FolderName[MAX_PATH + 1] = L"\0";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
wcscpy(FolderName, L"C:\\");
}
//---------------------------------------------------------------------------
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg)
{
case BFFM_INITIALIZED :
if(lpData)
SendMessage(hwnd, BFFM_SETSELECTIONW, TRUE, lpData);
break;
case BFFM_SELCHANGED :
SHGetPathFromIDListW(PItemIDList(lParam), FolderName); //kopiert von LParam nach Foldername
break;
case BFFM_VALIDATEFAILED :
break;
default:
break;
}
return 0;
}
bool ChooseFolder(wchar_t* FolderName)
{
bool bReturn;
wchar_t dirName[MAX_PATH + 1] = {0};
wcscpy ( dirName, FolderName );
BROWSEINFOW brInfo;
brInfo.hwndOwner = Form1->Handle;
brInfo.pidlRoot = NULL;
brInfo.pszDisplayName = dirName;
brInfo.lpszTitle = L"Ordner auswählen:";
brInfo.ulFlags = 0;
brInfo.lpfn = BrowseCallbackProc;
brInfo.lParam = (long) dirName; //Folder_name for initial_selection
brInfo.iImage = 4;
LPITEMIDLIST pidl;
if(pidl=SHBrowseForFolderW(&brInfo))
{
// Item was selected && OK was selected
if( SHGetPathFromIDListW(pidl, dirName) )
{
//MessageBoxW(Application->Handle, dirName, L"TestDialog", 0);
// got Full_Path for selected dirName
FolderName = dirName;
bReturn = true;
}
else
{
bReturn = false;
}
}
else
{
// CANCEL was selected
// FolderName is undefined
bReturn = false;
}
// Allocate a pointer to an IMalloc interface
LPMALLOC pMalloc;
// Get the address of our task allocator's IMalloc interface
SHGetMalloc(&pMalloc);
// Free the item ID list allocated by SHGetSpecialFolderLocation
pMalloc->Free(pidl);
// Free our task allocator
pMalloc->Release();
return bReturn;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ChooseFolder(FolderName);
}
//---------------------------------------------------------------------------