Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Help! Как создать диалог выбора папки на основе TCommonDialog? [D6, D7, WinXP]


SkySpeed   (28.05.07 22:51

Собственно, сабж...

Нужно создать диалог выбора папки, который будет наследовать свойства класса TCommonDialog

Только как создать?.. не догоню...

Заранее спасибо за помощь!


Сергей М. ©   (29.05.07 11:48[1]


> как создать?


По образу и подобию, например, TOpenDialog - он тоже наследник TCommonDialog


SkySpeed   (29.05.07 21:19[2]


> Сергей М. ©   (29.05.07 11:48) [1]
>
> > как создать?
>
>
> По образу и подобию, например, TOpenDialog - он тоже наследник
> TCommonDialog

Спасибо за подсказку, но есть несколько но:
- метод Execute использует функцию из "comdlg32.dll", функцию для вызова директории не нашёл
- как "внедрить" просмотрщик директории в диалог? И что имеенно внедрять?...
- как получить Handle созданного диалога и управлять им?

Это главные возникшие вопросы


Юрий Зотов ©   (29.05.07 21:47[3]

> SkySpeed   (29.05.07 21:19) [2]

Зачем все это? В Execute вызываете SelectDirectory - и никаких проблем.

Кроме одной - непонятно, зачем вообще нужен компонент, который полностью заменяется одной строчкой кода?


SkySpeed   (29.05.07 22:49[4]


> Юрий Зотов ©   (29.05.07 21:47) [3]
> > SkySpeed   (29.05.07 21:19) [2]
>
> Зачем все это? В Execute вызываете SelectDirectory - и никаких
> проблем.
>
> Кроме одной - непонятно, зачем вообще нужен компонент, который
> полностью заменяется одной строчкой кода?

Преподователя спросите! :-D

Препод задал нам лабу, суть которой в создании своего диалогового окна, родителем которого будет TCommonDialog. Данное диалоговое окно должно выполнять функцию выбора директории


Сергей М. ©   (30.05.07 09:08[5]


> диалогового окна, родителем которого будет TCommonDialog


TCommonDialog - это не окно.

Возьми за образец для изучения, например, компонент TElFolderDialog из состава ElDos Visual Component Library. Он реализован в точности так как звучит задание твоего препода.


SkySpeed   (02.06.07 21:47[6]

Что не окно - согласен, на метод SelectDirectory он согласился :-)


SkySpeed   (02.06.07 21:47[7]

Что не окно - согласен, на метод SelectDirectory он согласился :-)


DVM ©   (02.06.07 22:50[8]


> SkySpeed

На сайте Rouse есть такой компонент - его разработки.


DVM ©   (02.06.07 22:55[9]

http://rouse.drkb.ru/files/fwopendirectory.zip


SkySpeed   (03.06.07 14:11[10]

Да уж... код компонента не хилый.............

Вот мой код компонента с SelectDirectory:


unit DirectoryDialog;

interface

uses
 SysUtils, Classes, Dialogs, FileCtrl;

type
 TDirectoryDialog = class(TCommonDialog)
 private
   { Private declarations }
   FInitialDir: string;
   FTitle: string;
   FSelectDir:String;
   FCleanUp:Boolean;
   procedure SetInitialDir(const Value: string);
 protected
   { Protected declarations }
 public
   { Public declarations }
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   function Execute: Boolean; override;
   property SelectedDir:string read FSelectDir write FSelectDir;
 published
   { Published declarations }
   property InitialDir: string read FInitialDir write SetInitialDir;
   property Title: string read FTitle write FTitle;
   property CleanUpLastFolder:Boolean read FCleanUp write FCleanUp;
 end;

procedure Register;

implementation

constructor TDirectoryDialog.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 Title:='Быберите директорию...';
end;

destructor TDirectoryDialog.Destroy;
begin
 inherited Destroy;
end;

function TDirectoryDialog.Execute: Boolean;
begin
if CleanUpLastFolder then
 FSelectDir:='';
if (InitialDir='Desktop') then
 Result:=FileCtrl.SelectDirectory(self.title,'',FSelectDir) else
 Result:=FileCtrl.SelectDirectory(self.title,InitialDir,FSelectDir);
end;

procedure TDirectoryDialog.SetInitialDir(const Value: string);
var
 L: Integer;
begin
 L := Length(Value);
 if (L > 1) and IsPathDelimiter(Value, L)
   and not IsDelimiter(':', Value, L - 1) then Dec(L);
 FInitialDir := Copy(Value, 1, L);
end;

procedure Register;
begin
 RegisterComponents('Components', [TDirectoryDialog]);
end;

end.


На этот код преподователь согласился :-)


Юрий Зотов ©   (03.06.07 14:56[11]

А я бы на его месте не согласился. Или согласился, но не больше, чем на четверку. Потому что на пятерку надо убрать деструктор и свойство SelectedDir сделать read-only.

:о)


Roxane   (25.11.15 02:30[12]

Удалено модератором


имя   (03.09.17 15:06[13]

Удалено модератором


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо