Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Есть ли в Дельфи стандартный компонент... [D6, Win95/98]


AL2002 ©   (2002-10-17 18:22:00) 

...который являет собой диалог и позволяет выбрать каталог для сохранения файлов? Очень не хочется ещё одну форму создавать.


Pumpkin   (2002-10-18 12:32:00) [1]

А чем тебе SHBrowseForFolder не нравится?

function BrowseFolder(Owner: HWND; OldDir:String): String;
var
Bi:TBrowseInfo;
IL:PItemIDList;
P:packed array[0..MAX_PATH] of Char;
begin
FillChar(P,MAX_PATH+1,0);
Move(OldDir[1], P, Length(OldDir));
Bi.hwndOwner := Owner;
Bi.pidlRoot := nil;
Bi.pszDisplayName := @P;
Bi.lpszTitle := "Choose folder";
Bi.ulFlags := BIF_RETURNONLYFSDIRS;
Bi.lpfn := nil;
IL := SHBrowseForFolder( Bi );
if ( IL <> nil ) and SHGetPathFromIDList( IL, P ) then Result := P
else Result := OldDir;
end;


AL2002   (2002-10-18 12:05:00) [2]

>andrey_pst © (18.10.02 11:51)
Попробую. Чуть позже скажу, что получилось.


andrey_pst   (2002-10-18 11:51:00) [3]

>> Вы знаете, для этого надо QDialogs Unit
можно и так:
uses FileCtrlу меня работает


AL2002   (2002-10-18 11:37:00) [4]

>Юрий Федоров © (18.10.02 11:03)
QDialogs и компонента SaveDialog делают ошибку.
"Error Reading SaveDialog.OnTypeChange. Property does not exist".


Юрий Федоров   (2002-10-18 11:03:00) [5]

cм.
1. andrey_pst
2. TTCustomDelphiMaster


AL2002   (2002-10-18 10:23:00) [6]

>pusrg © (17.10.02 19:41)
Ага. Так ты прислал.
Раз прислал, придётся пробовать. Тока может быть, придётся тебя поFAQать немножко.


AL2002   (2002-10-18 10:16:00) [7]

>pusrg © (17.10.02 19:41)
Спасибо, но, ИМХО, это жестоко. Я такое накручу, что сам потом не рад буду. Вот если б ты исходник формы, в которой это есть, прислал, вот тагда бы да бы.

> andrey_pst © (17.10.02 18:24)
> SelectDirectory("Выбор папки", "", NewDir);
Вы знаете, для этого надо QDialogs Unit. И теперь прога просто зависает. Со словами: "Error Reading SaveDialog.OnTypeChange. Property does not exist".


pusrg   (2002-10-17 19:41:00) [8]

Кракозябликами там вышли мессаги на русском (писал под конкретную ситуацию), можешь вставить что-то свое.

Заодно и обработку сохранения файлов добавить (невнимательно прочитал вначале).


pusrg   (2002-10-17 19:37:00) [9]

Честно говоря, зачем высылать :) Вот код:


unit SelectDirDlg;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, FileCtrl, ExtCtrls;

type
TFormDlg = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
DriveComboBox: TDriveComboBox;
DirectoryListBox: TDirectoryListBox;
BOk: TBitBtn;
BCancel: TBitBtn;
GroupBox1: TGroupBox;
EDir: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;

type TSelectDirDlg = class (TComponent)
private
FInitialDir:string;
FormDlg:TformDlg;
FTitle:string;
FNewDirectory,FQuestion:boolean;
FOnDriveChange:TNotifyEvent;
FOnDirChange:TNotifyEvent;
protected
procedure DriveChange(sender:TObject);
procedure DirChange(sender:TObject);
public
DirPath:String;
function Execute:boolean;
published
property InitialDir:String read FInitialDir write FInitialDir;
property Title:string read FTitle write FTitle;
property NewDirectory:boolean read FNewDirectory write FNewDirectory;
property Question:boolean read FQuestion write FQuestion;
property OnDriveChange:TNotifyEvent read FOnDriveChange write FOnDriveChange;
property OnDirChange:TNotifyEvent read FOnDirChange write FOnDirChange;
end;

procedure Register;

implementation

{$R *.DFM}
{$R SelectDirDlg.dcr}

procedure Register;
begin
RegisterComponents("MyComponent",[TSelectDirDlg]);
end;

function TSelectDirDlg.Execute: boolean;
begin
FormDlg:=TFormDlg.Create(Application);
try
Result:=false;
DirPath:="";
FormDlg.Caption:=FTitle;
FormDlg.EDir.Enabled:=FNewDirectory;
FormDlg.DriveComboBox.OnChange:=DriveChange;
FormDlg.DirectoryListBox.OnChange:=DirChange;
if not DirectoryExists(FInitialDir) then
FormDlg.DriveComboBox.Drive:="c"
else
begin
FormDlg.DriveComboBox.Text:=ExtractFileDrive(FInitialDir);
FormDlg.DirectoryListBox.Directory:=FInitialDir;
end;
FormDlg.EDir.Text:=FormDlg.DirectoryListBox.Directory;
if FormDlg.ShowModal=mrOk then
begin
if not DirectoryExists(FormDlg.EDir.Text) then
begin
if FQuestion then
if application.MessageBox(PChar("


pusrg   (2002-10-17 19:32:00) [10]

Если хош могу выслать компонент, который сам накатал, честно говоря уже давненько, так что возможные баги можешь исправить сам.
Правда там делать нечего, насколько я по помню, я его за полчасика смайстрячил.


TTCustomDelphiMaster   (2002-10-17 18:49:00) [11]

SHBrowseForFolder


Андрей Прокофьев   (2002-10-17 18:38:00) [12]

см
andrey_pst © (17.10.02 18:24)


AL2002   (2002-10-17 18:36:00) [13]

>Smithson © (17.10.02 18:28)
Понимаете, мне нужно сохранять сразу несколько файлов. Нужно, чтобы поля для имени файла там не было.


Smithson   (2002-10-17 18:28:00) [14]

SaveDialog


andrey_pst   (2002-10-17 18:24:00) [15]

SelectDirectory("Выбор папки", "", NewDir);


Наверх

Титульная страница Поиск, карта сайта Написать письмо