Автор: Stalkersof
Дата сообщения: 12.10.2011 12:55
Вопрос к знатокам.
В APMS совершенно не устраивает Dialog.FolderBrowse
А именно невозможно в нем вывести содержимое только папки
Shell.GetFolder(SHF_STARTMENUPROGRAMS_COMMON) т.к
Отображается весь каталог. Все мои попытки ограничить выбор
пользователя только этой папки привели вот к такому ужасному коду.
[more=Сам код]
Код: --[[
**********************************************************************************
Function: g_GrupPageFolderBrowse
Purpose: Обзор папки и заполняем поле ввода путем выбранной папки. Используем
текст в поле ввода как путь к папке в folder browse dialog.
Arguments: (number) nIDEditField - Имя поля редактирования
(string) strPrompt - Текст в folder browse dialog
Returns: Ничего.
**********************************************************************************
--]]
function g_GrupPageFolderBrowse(nIDEditField, strPrompt)
-- Получение текущих свойств поля редактирования
local tbEditProps = Input.GetProperties(nIDEditField);
if(not tbEditProps) then
-- Поле редактирования недоступно или не существует
return;
end
-- Путь к папке Меню все программы.
--Где GroupGame - папка с игрой по умолчанию
--Изначально GroupGame будет при старте программы в Инпут
local strBaseFolder = Shell.GetFolder(SHF_STARTMENUPROGRAMS_COMMON)
local strInitialFolder = ""
if not (tbEditProps.Text == GroupGame) then
strInitialFolder = strBaseFolder.."\\"..tbEditProps.Text;
else
strInitialFolder = strBaseFolder
end
-- Покажем диалог выбор папки, используя текущее содержимое поля
-- Поле, как начальный путь к папке (папка для начала просмотра)
local strTargetFolder = Dialog.FolderBrowse(strPrompt, strInitialFolder);
if((strTargetFolder == "") or (strTargetFolder == "CANCEL")) then
return;
end
-- Отсекаем путь оставляем только имя папки которое выбрали
local nBaseFolderLength = String.Length(strBaseFolder);
local nTargetFolderLength = String.Length(strTargetFolder);
local strFolderName = String.Right(strTargetFolder, (nTargetFolderLength - nBaseFolderLength));
strFolderName = String.TrimLeft(strFolderName, "\\");
-- Проверка:
--Если путь к папке которую мы выбрали не соответствует
--Shell.GetFolder(SHF_STARTMENUPROGRAMS_COMMON)
--Выводим в инпуте название папки по умолчанию
local StrPathProverka = String.Left(strTargetFolder, nBaseFolderLength);
if StrPathProverka == strBaseFolder then
tbEditProps.Text = strFolderName;
else
tbEditProps.Text = GroupGame;
end
--заменим содержимое поля на путь к папке, которая была выбрана
Input.SetProperties(nIDEditField, tbEditProps);
end
-- Вызываем функцию при нажатии кнопки обзор
-- InpSelectGroup--имя текстового поля
--Открываем папку для просмотра
g_GrupPageFolderBrowse("InpSelectGroup", "Папка в Меню пуск")
--PS
-- изначально в InpSelectGroup выводим текст GroupGame
--только один раз при запуске программы
-- где GroupGame - переменная с именем папки установки