На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> KOL Диалог - нескольких папок?, Как реализовать в программе Диалог - нескольких папок?
Всем привет. Возможно, я что - то просмотрел и такая тема была, но не смог найти. ;)

Существует диалог выбора одной папки.
Нужен диалог выбора нескольких папок. :'( :yes:
Например
Для выбора нескольких текстовых файлов работает такой вариант.
ExpandedWrap disabled
    procedure clickbutton2(dummy:pointer;Sender:PControl; var mouse:TMouseEventData);
    var s: String;
     
    begin
    Dialog := NewOpenSaveDialog( '',FileFullPath('Project1.exe'), [ OSFileMustExist, OSHideReadonly, OSAllowMultiSelect, OSOverwritePrompt, OSPathMustExist ] );
    dialog.Filter := '*.txt|*.txt|все|*.*';
    Dialog.OpenDialog := true;
     
     if Dialog.Execute then //else exit;
    s:=Dialog.Filename;  k:=-1;
    while s <> '' do
                      begin
                            inc(k);
                            a[k]:=Trim( Parse( s, #13 ) );
                            s := Trim( s );
              end;
     
    form.Caption:=int2str(k);
    Form.Add2AutoFree(Dialog);
    end;

Вопрос: как сделать для нескольких папок? :scratch:
Заранее :thanks:
Сообщение отредактировано: RusSun -
плохо, когда уверенность
в своей правоте ограничивает видимость
собственным носом
KOL lib с офф сайта.
kolmck

ExpandedWrap disabled
    program Project1;
     
    uses
      windows,
      kol;
     
    {$R *.res}
    var
    form,EditBox1,
    Button1:PControl;
    Button2:PControl;
    Button3:PControl;
     
    OpenDD1:pOpenDirDialog;
    //--------------------
    Dialog:pOpenSaveDialog; k: Integer;
     a: array[ 0..MAX_PATH ] of string;
    //--------------------
    //область для процедур
     
    procedure ButtonClick(Dummy : Pointer; Sender: PControl );
    begin
    if OpenDD1.Execute then
    editbox1.Text := OpenDD1.Path;
    end;
     
     
     
    procedure clickbutton2(dummy:pointer;Sender:PControl; var mouse:TMouseEventData);
    var s: String;
     
    begin
    Dialog := NewOpenSaveDialog( '',FileFullPath('Project1.exe'), [ OSFileMustExist, OSHideReadonly, OSAllowMultiSelect, OSOverwritePrompt, OSPathMustExist ] );
    dialog.Filter := '*.txt|*.txt|все|*.*';
    Dialog.OpenDialog := true;
     
     if Dialog.Execute then //else exit;
    s:=Dialog.Filename;  k:=-1;
    while s <> '' do
                      begin
                            inc(k);
                            a[k]:=Trim( Parse( s, #13 ) );
                            s := Trim( s );
              end;
     
    form.Caption:=int2str(k);
    Form.Add2AutoFree(Dialog);
    end;
     
     
     
    procedure ButtonClick3(Dummy : Pointer; Sender: PControl );
    var S:string;
    begin
    S := 'procedure GetDirList (path:string);'+#10#13+
     'var SearchDir:TsearchRec;'+#10#13+
     'begin'+#10#13+
       'SetCurrentDir(path);'+#10#13+
       'If FindFirst ('+#39+'*'+#39+',faDirectory,SearchDir)=0 then'+#10#13+
      'begin'+#10#13+
           'repeat'+#10#13+
            'begin'+#10#13+
                 'If (SearchDir.Attr and faDirectory) = faDirectory then'+#10#13+
                 'begin'+#10#13+
                 'if (SearchDir.Name <> '+#39+'..'+#39+') and (SearchDir.Name <> '+#39+'.'+#39+') then'+#10#13+
                    'begin'+#10#13+
                         'writeln(Path + SearchDir.Name +' + #39+'/'+#39+');'+#10#13+
                         'dir[countD]:=Path + SearchDir.Name +' + #39+'/'+#39+';'+#10#13+
                         'Inc(countD);'+#10#13+
                    'end;'+#10#13+
                 'end;'+#10#13+
            'end;'+#10#13+
     
            'until FindNext(SearchDir)<>0;'+#10#13+
       'end;'+#10#13+
       'FindClose(SearchDir);'+#10#13+
     'end;   ';
     Msgok( S );
    end;
     
     
     
    Begin
    form:=NewForm(Applet,'OpenDirDialog').SetSize(350,200).centeronparent.Tabulate;//.setposition(330,300);
    Form.Font.FontName:='Times New Roman';
    Form.Font.FontCharset := 3;
    Form.Font.FontHeight := -18;
    OpenDD1 := NewOpenDirDialog( '', [  ] ); //BIF_RETURNONLYFSDIRS
    Form.Add2AutoFree( OpenDD1 );
    EditBox1 := NewEditBox(Form, [  ] ).SetPosition( 28, 20 ).SetSize(180,0); //eoPassword
    EditBox1.color:=clwhite;
    Button1 := NewButton( Form, 'Путь к папке ' ).SetPosition( 28, 54 ).AutoSize( true );
    Button2 := NewButton( Form, 'Множвество текстовых файлов' ).SetPosition( 28, 84 ).AutoSize( true );
    Button3 := NewButton( Form, 'Диалог множвество папок файлов' ).SetPosition( 28, 114 ).AutoSize( true );
    //.centeronparent.Tabulate;
    //область для работы  
     
    Button1.OnClick:=TonEvent(MakeMethod(nil,@ButtonClick));
    Button2.OnClick:=TonEvent(MakeMethod(nil,@clickbutton2));
    Button3.OnClick:=TonEvent(MakeMethod(nil,@ButtonClick3));
    Run(form);
    end.


https://yadi.sk/d/UZmGSqFlTbtDrg
плохо, когда уверенность
в своей правоте ограничивает видимость
собственным носом
Всем привет. :)
"Механика процесса" как я представляю так
1. Он Execute должен открыться "OpenDialog".
2. Фильтр "папки" должен давать возможность выбирать только папки в той папке которую выбираем через этот же диалог.
(то есть как для обычного множественного выбора файлов (только выбор папок!))
3. В строке выбора появляются имена папок (путь ко всем папкам идет как путь папка из которой был сделан выбор)
//4. Все это из select'a строки должно "перенесено в TStringList".
//5. Должен быть доступ к данному TStringList или txt или через Items.
4 Результат в виде строки состоящих из путей к папкам, которые можно передавать в TStringList.txt.

Подскажите, пожалуйста, два момента:
1 Как сделать фильтр, позволяющий выбирать только папки в папке (пардон, если звучит как масло масляное :D )
2 Как из selecta получить имена папок. Именно имена попадают в select?

Спасибо. :thanks:
плохо, когда уверенность
в своей правоте ограничивает видимость
собственным носом
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0868 ]   [ 20 queries used ]   [ Generated: 25.03.19, 03:40 GMT ]