Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.055 c
3-1103587970
rosl
2004-12-21 03:12
2005.01.23
приём данных


14-1104756118
Piter
2005-01-03 15:41
2005.01.23
Где почитать про использование WinInet (HTTP) в Delphi?


4-1101999568
Frozzen
2004-12-02 17:59
2005.01.23
DeviceIoControl получение ID винчестера?


3-1103227504
Frozzen
2004-12-16 23:05
2005.01.23
работа с dbf через Tdbf


1-1105439297
Jeka
2005-01-11 13:28
2005.01.23
работа с OpenDialog





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский