Главная страница
    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.051 c
9-1096788065
Delphis
2004-10-03 11:21
2005.01.23
как сделать так, чтобы на любом разрешении визуальное оформление


1-1104923323
franky
2005-01-05 14:08
2005.01.23
messagedlg


10-1081170687
malkolinge
2004-04-05 17:11
2005.01.23
COM сервер и два интерфейса (можно3 )


14-1104471184
Grinders
2004-12-31 08:33
2005.01.23
Новый Год!


9-1097696674
rydmi
2004-10-13 23:44
2005.01.23
Вращение спрайтов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский