Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Окно выбора папок. Как ... ? / 19 сообщений из 19, страница 1 из 1
24.05.2006, 14:15
    #33748522
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно выбора папок. Как ... ?
В ПБ есть стандартное окно выбора папок GetFolder( ... ).
Как в него добавить кнопочку "Создать папку" ?
...
Рейтинг: 0 / 0
25.05.2006, 14:42
    #33751621
ИвановНН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно выбора папок. Как ... ?
См. winapi
Код: plaintext
SHBrowseForFolder
...
Рейтинг: 0 / 0
25.05.2006, 21:45
    #33752801
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно выбора папок. Как ... ?
2 ИвановНН
Спасибо, получилось !

Но теперь другая проблема:
Как заставить SHBrowseForFolder инициализироваться дерево папок на указанной папке.
Желательно с примерчиком ... ;)
...
Рейтинг: 0 / 0
25.05.2006, 22:33
    #33752831
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно выбора папок. Как ... ?
Смени текущий фолдер приложения...
...
Рейтинг: 0 / 0
26.05.2006, 10:23
    #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
26.05.2006, 11:20
    #33753528
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно выбора папок. Как ... ?
PaulJB wrote:

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

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

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

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

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

Сергей

------------------
Умом Россию не понять...
С умом она несовместима.
...
Рейтинг: 0 / 0
26.05.2006, 15:51
    #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
26.05.2006, 16:51
    #33754948
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно выбора папок. Как ... ?
Робяты - всем спасибо за советы - но не работает п@#$%^& :)
Прилагаю обьектик (с чем работаю) - посмотрите, может чего присоветуете ...
...
Рейтинг: 0 / 0
26.05.2006, 19:10
    #33755378
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно выбора папок. Как ... ?
---------- Compiler: Errors
test.pbl(n_cst_user32).n_cst_user32.waitforinputidle.7: Error C0051: Unknown function name: strjustify
---------- Finished Errors
...
Рейтинг: 0 / 0
26.05.2006, 21:20
    #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
26.05.2006, 21:26
    #33755529
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно выбора папок. Как ... ?
Все верно там....
Действительно нельзя без колбеков проинициализировать этот диалог каким-либо каталогом.
Увы, но прийдется браться за PBNI.
...
Рейтинг: 0 / 0
27.05.2006, 20:07
    #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
29.05.2006, 09:54
    #33757407
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно выбора папок. Как ... ?
Филипп wrote:

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

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

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

А что тогда это ?:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetidlistfromobject.asp
...
Рейтинг: 0 / 0
29.05.2006, 12:16
    #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
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Окно выбора папок. Как ... ? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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