Цитата:
Сообщение от
NeveB
Модифицировать форму FilePathLookup_RU
в четверке эту форму прибили похоже, глянул в 3ку, но все равно она поставленной задачи не решает

диалог выбора каталога все равно открывается по default'у на рабочем столе, а 3ий параметр метода browseForFolder всего лишь берется в том, случае если мы ничего не выбрали в диалоге. Вот код того метода в 3.0:
X++:
str browseForFolder(int _hwnd, str _title, str _defaultFolder = "")
{
str folder;
int il;
// Declare the DLL's we need to use
DLL dll = new DLL(#dLL);
DLLFunction shBrowseForFolder = new DLLFunction(dll, #browseFolder);
DLLFunction shGetPathFromIDList = new DLLFunction(dll, #browsePath);
DLL dllOle = new DLL(#dLLOLE);
DLLFunction coTaskMemFree = new DLLFunction(dllOle, #dLLFuncMemFree);
Binary struct = new Binary(#structSize);
Binary titleStruct = new Binary(strlen(_title) + 1);
Binary folderStruct = new Binary(#fileNameLength);
shBrowseForFolder.returns(ExtTypes::DWORD);
shBrowseForFolder.arg(ExtTypes::POINTER);
shGetPathFromIDList.returns(ExtTypes::DWORD);
shGetPathFromIDList.arg(ExtTypes::DWORD, ExtTypes::POINTER);
coTaskMemFree.arg(ExtTypes::DWORD);
titleStruct.string(0, _title);
struct.dWord(0, _hwnd); // hwndOwner
struct.dWord(4, 0); // pidlRoot
struct.dWord(8, 0); // pszDisplayName
struct.binary(12, titleStruct); // lpszTitle
struct.dWord(16, 0); // ulFlags
struct.dWord(20, 0); // lpfn
struct.dWord(24, 0); // lParam
struct.dWord(28, 0); // iImage
// Put up the Select Folder dialogue
il = shBrowseForFolder.call(struct);
if (il)
{
// extract folder name
if (shGetPathFromIDList.call(il, folderStruct))
{
folder = folderStruct.string(0);
}
// clean up
coTaskMemFree.call(il);
}
else
{
folder = _defaultFolder;
}
return folder;
}
вот если бы параметр _defaultFolder как то передавался в метод DLL, тогда - да, но к сожалению в данном случае можно лишь рулить параметром pidlRoot - struct.dWord(4, 0); где 2ой параметр=0 как раз и говорит что открывать надо Рабочий стол. Но он насколько я понимаю может быть только предопределенным значением, типа: Рабочий стол, Мои документы и т.п.... А строку передать не удастся...