Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
3-1103439966
Black
2004-12-19 10:06
2005.01.23
Пользаватели в SQL Server 2000


3-1103633684
den_777
2004-12-21 15:54
2005.01.23
Частое изменение метаданных в INTERBASE


1-1104994030
korvin
2005-01-06 09:47
2005.01.23
негодный mxFlatFormTitle в пакете mxFlatPack ?


14-1104571070
Меломан
2005-01-01 12:17
2005.01.23
Sweetbox - Shout


14-1104443459
olookin
2004-12-31 00:50
2005.01.23
Томительно легко... откуда строчки?