Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизSelectDirectory с возможностью создать папку Найти похожие ветки
← →
Андрей М. © (2005-01-09 12:42) [0]Здравствуйте! В некоторых программах и в проводнике WinXP в диалоге SelectDirectory есть кнопка "создать папку". Пожалуйста, подскажите как сделать такой же.
← →
Almaz © (2005-01-09 16:24) [1]При заполнении структуры
TBrowseInfo
указать флагBIF_NEWDIALOGSTYLE
p.s. Не знаю как в D7, но в D6 эта константа не определена, поэтому ее надо определить самостоятельно:const
BIF_NEWDIALOGSTYLE = $0040;
Удачи.
← →
Андрей М. © (2005-01-09 17:44) [2]Как это? Ведь там синтаксис
SelectDirectory(Caption: string, Root: WideString, Directory: string): Boolean;
или
SelectDirectory(Directory: string, Options: TSelectDirOpts, HelpCtx: Longint): Boolean
или я чего-то не понимаю?
← →
Almaz © (2005-01-09 18:46) [3]
> Андрей М. © (09.01.05 17:44) [2]
> Как это? Ведь там синтаксис...
Понял свою ошибку - я, исходя из того, что форум по WinAPI предположил, что Вы спрашиваете именно о диалоге выбора папки. Про функцию SelectDirectory из модуля FileCtrl я просто не подумал, хотя Вы и написали именно ее.
Дело в том, что SelectDirectory в VCL реализована при помощи API функции SHBrowseForFolder, которая как раз и принимает структуру TBrowseInfo (посмотрите исходник SelectDirectory). Если вкрадце, то можно использовать следующую упрощенную конструкцию:
const
BIF_NEWDIALOGSTYLE = $0040;
function SelectDirectory: String;
var
BI: TBrowseInfo;
Path: array [0..MAX_PATH] of Char;
Item: PItemIDList;
begin
OleInitialize(nil);
Result := "";
ZeroMemory(@BI, sizeof(BI));
BI.hwndOwner := 0;
BI.lpszTitle := "Заголовок";
BI.ulFlags := BIF_RETURNONLYFSDIRS or BIF_NEWDIALOGSTYLE;
Item := SHBrowseForFolder(BI);
if Item <> nil then
if SHGetPathFromIDList(Item, Path) then
Result := Path;
end;
Что же касается самой функции SelectDirectory из FileCtrl то просто замените в ее исходниках строкуulFlags := BIF_RETURNONLYFSDIRS;
на, как Вы уже наверно догадались,ulFlags := BIF_RETURNONLYFSDIRS or BIF_NEWDIALOGSTYLE;
и перекомпилируйте модуль.
Удачи.
← →
Андрей М. © (2005-01-09 22:09) [4]Большое спасибо
← →
iskatel © (2005-01-10 00:42) [5]дельфи при каждой сборке исходники VCL перекомпилирует чтоли?
← →
Германн © (2005-01-10 02:17) [6]2 iskatel © (10.01.05 00:42) [5]
Да. Если имеется в виду "Build project" и если Дельфи знает, где лежат исходники VCL.
Но Борланд всегда, по крайней мере на моей памяти, предупреждал, что те исходники, которые поставляются в дистрибутиве, являются лишь "пособиями" для изучения. Т.е. прилагаемые *.dcl и *.bpl, могут не соответствовать прилагаемым *.pas!
← →
KSergey © (2005-01-10 11:00) [7]>> iskatel © (10.01.05 00:42) [5]
>> дельфи при каждой сборке исходники VCL перекомпилирует чтоли?
> [6] Германн © (10.01.05 02:17)
> Да.
Не правда ваша. Никто VCL никогда не перекомпилирует.
Однако, если некий модуль из VCL включить в проект (предварительно настоятельно рекомендуется его куда-либо скопировать дабы не изгадить поставляемые исходники VCL) - тогда он становится частью проекта и компилруется наравне с другими модулями проекта.
← →
Германн © (2005-01-11 03:43) [8]2 KSergey © (10.01.05 11:00) [7]
Ой-ли! Чем VCL - модуль отличается от любого другого модуля?
← →
Германн © (2005-01-11 03:52) [9]Да! Ну, конечно, я имел в виду, pas-текст модуля изменен. Иначе - нет смысла перекомпилировать модуль! Ну, или, изменены параметры "Условной компилляции"!
И нет необходимости включать сей модуль в проект! Достаточно указать его в uses!
← →
KSergey © (2005-01-11 07:56) [10]> [9] Германн © (11.01.05 03:52)
> Да!
Я, правда, не понял что именно значит "Да", но я скажу на него свое решительное Нет!
Сейчас специально провел эксперимент: принял для храбрости 200 грамм (ну не каждый же день исходники VCL прям по живому коверкаешь) и в код ShowMessage добавил строчку... да даже не важно какую.
Дык вот, еще раз ответсвтенно заявляю: неправда ваша!
Более того. Даже явно добавив это модуль в проект (прямо из того места, где исходники) не удалось добиться его перекомпиляции никакими известными мне методами...
Однако перенеся его в другой каталог (и добавив в проект!) - получил эффект от измененного кода.
Отсюда зародилось подозрение, что файлы, лежащие в пути исходников VCL, дельфи никогда не перекомпилирует. Оно и понятно: исходники как известно эти не полны. Мало ли как даты на компе или в файлах взглюкнут - тогда все просто перестанет работать...
Если будут какие-либо опровержения с фактами - всегда рад.
← →
begin...end © (2005-01-11 08:50) [11]> [10] KSergey © (11.01.05 07:56)
> принял для храбрости 200 грамм
Боже ж ты мой... С утра...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c