На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное 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:
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0347 ]   [ 17 queries used ]   [ Generated: 16.04.24, 18:09 GMT ]