powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Окно выбора папок. Как ... ?
19 сообщений из 19, страница 1 из 1
Окно выбора папок. Как ... ?
    #33748522
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ПБ есть стандартное окно выбора папок GetFolder( ... ).
Как в него добавить кнопочку "Создать папку" ?
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33751621
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
См. winapi
Код: plaintext
SHBrowseForFolder
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33752801
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ИвановНН
Спасибо, получилось !

Но теперь другая проблема:
Как заставить SHBrowseForFolder инициализироваться дерево папок на указанной папке.
Желательно с примерчиком ... ;)
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33752831
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смени текущий фолдер приложения...
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33753326
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 White Owl
Не слушается.
Инициализируется всегда на "Мой компутер"

Вот такой код:
browseinfo lst_bi
long ll_pidl
int li_thispos
string ls_path, ls_xs
long ll_rc
ls_path=strjustify(trim(ls_path), 512, 1, " ") //space(512) // maximum path lenght
lst_bi.howner=this.hwnd // handle of the window
lst_bi.pidlRoot = 0 //GetCurrentDirectory ( )
lst_bi.pszdisplayname = space(260)
lst_bi.lpszTitle = ctitle
lst_bi.ulFlags = BIF_RETURNONLYFSDIRS + BIF_NEWDIALOGSTYLE
ll_pidl = SHBrowseForFolderA(lst_bi)
IF ll_pidl > 0 THEN
// ll_rc = SHGetPathFromIDListA(ll_pidl, ls_path)
// IF NOT ll_rc > 0 THEN ls_path = ''
IF (NOT SHGetPathFromIDListA(ll_pidl, ls_path)) THEN ls_path = ''
CoTaskMemFree( lst_bi.pidlRoot )
ELSE
ls_path = ''
END IF
return ls_path

Есть подозрение, что дело в lst_bi.pidlRoot, но я не знаю как с ним бороться.
Что тут не так ?
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33753528
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulJB wrote:

> Как заставить SHBrowseForFolder инициализироваться дерево папок на
> указанной папке.

Оставаясь в рамках эхотага - никак, там нужно использовать Callback.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33753684
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в PB 9 есть

GetFolder ( title, directory )
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33753739
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сам вижу что сморозил...

можно пользовать GetFileSaveName c фильтром который не будет показывать файлы.

там уж можно создавать директории...
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33754298
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dmitry.
Не ... нада именно окно выбора папок.

Тут добрые люди подсказали, что для получения идентификатора стартовой папки можно воспользоваться SHGetIDListFromObject

Но у меня не получается ее обьявить:

Вот так описано в МСДН:

MSDN
Syntax

HRESULT SHGetIDListFromObject( IUnknown *punk,
PIDLIST_ABSOLUTE *ppidl
);

Parameters

punk [in] A pointer to the IUnknown of the object from which to get the PIDL.
ppidl [out] A pointer to the PIDL of the given object.

Return Value
Returns S_OK if successful, or an error value otherwise.

Как правильно ее обьявить ?
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33754527
gerss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulJB, а обязательно все писать на PB? Может, стоит написать некую интерфейсную dll-ку, например на С++ или на ObjectPascal (в среде Delphi) с простыми параметрами и простым вызовом? А уже в этой dll-ке сделать вызов и SHBrowseForFolder и SHGetIDListFromObject?

Сергей

------------------
Умом Россию не понять...
С умом она несовместима.
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33754698
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function long SHBrowseForFolder (ref t_browseInfo sBrowseInfo) Library "Shell32"
Function long SHGetPathFromIDList (long pidList, ref string lpBuffer) Library "Shell32"

//--------------------------------------------
t_browseinfo lt_BrowseInfo // BROWSE_INFO Win32 API's structure
long lpIDList
string s

lt_BrowseInfo.hWndOwner = Handle(This)
// Specifying the options for the dialog box
lt_tBrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS + ...
// Getting selected directory path
lpIDList = SHBrowseForFolder(lt_BrowseInfo)

// Checking whether the user selects directory from the standard Windows dialog
If lpIDList<>0 Then
s = Space(MAX_PATH)
SHGetPathFromIDList(lpIDList, s)
end if
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33754948
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Робяты - всем спасибо за советы - но не работает п@#$%^& :)
Прилагаю обьектик (с чем работаю) - посмотрите, может чего присоветуете ...
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33755378
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
---------- Compiler: Errors
test.pbl(n_cst_user32).n_cst_user32.waitforinputidle.7: Error C0051: Unknown function name: strjustify
---------- Finished Errors
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33755521
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ls_path=strjustify(trim(ls_path), 512, 1, " ") //space(512) // maximum path lenght

... ааа ... сорри ... фанковские штучки ... переводим ...
ls_path = trim(ls_path)
ls_path = ls_path + space(512 - lenght(ls_path)) //space(512) // maximum path lenght

карочи ... идея в том, что-бы строку дополнить пробелами справа до длины 512 или обрезать ... .
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33755529
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все верно там....
Действительно нельзя без колбеков проинициализировать этот диалог каким-либо каталогом.
Увы, но прийдется браться за PBNI.
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33756204
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё это очень интересно, но
1) SHGetIDListFromObject НЕ существует.
2) Если вы хотите выбрать (preselect) определённую папку, а НЕ сделать её root для диалога, тогда нужен callback
3) Если вы можете удовлетвориться тем, что нужная вам папка будет root of the namespace, тогда:
FAQ: How to convert a file system path to a pidl
Aside from what SHGetSpecialFolderLocation returns in the way of pre-defined special shell folders (including virtual folders), there are a two ways that I'm aware of to covert any file system path to a pidl, one the hard and proper way, the other the easy and undocumented way. First the hard and proper way...

Encapsulate and the shell's IShellFolder interface and call its ParseDisplayName member function. This entails defining the IShellFolder member functions in ODL or IDL (Object/Interface Description Language, see the SDK for more info) and compiling a type library. But you're in luck, the EnumDeskVB example on my site contains a file named ISHF_Ex.tlb in which I've wrapped the IShellFolder interface into a type library. See the GetPIDLFromPath function in the EnumDeskVB project's IShellFolder.bas file to see how ParseDisplayName is called.

For the easy and undocumented way, Shell32.dll contains a rather neat little undocumented function that essentially duplicates what GetPIDLFromPath does (calls ParseDisplayName with the path passed to it converted to Unicode and returns the path's pidl) called SHSimpleIDListFromPath. Here's the declare:

Declare Function SHSimpleIDListFromPath Lib "shell32" Alias "#162" _
(ByVal szPath As String) As Long
Some things to consider about this function: First, as far as I know, the function is exported at the specified ordinal in all current versions of Shell32.dll (including Win95 and WinNT's v4.00.*, IE3's v4.70, IE4 and WinNT 5.0's v4.71, and Win98's v4.72), but there is nothing that says it will be at this ordinal or will be available at all in any future versions of the library. Secondly, szPath must be specified as an ANSII string in when this function is called from Win95, and as a Unicode string when called on WinNT. Finally the function's name is misleading. The function returns an absolute pidl relative to the desktop folder (as opposed to a "simple" pidl relative to its parent IShellFolder).
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33757407
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп wrote:

> 1) SHGetIDListFromObject НЕ существует.

А я уж думал, что сошёл с ума, т.к. не смог найти эту функцию не только
на сайте MS, но и где бы то ни было ещё .
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33757783
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп, большое спасибо - ща буду пробовать.

> 1) SHGetIDListFromObject НЕ существует.

А что тогда это ?:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetidlistfromobject.asp
...
Рейтинг: 0 / 0
Окно выбора папок. Как ... ?
    #33757799
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulJB wrote:

>> 1) SHGetIDListFromObject НЕ существует.
> А что тогда это ?:
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetidlistfromobject.asp

А это кто-то не умеет читать ;)... там же написано:

Minimum operating systems Windows Vista
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Окно выбора папок. Как ... ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]