Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.190.217.134] |
|
Сообщ.
#1
,
|
|
|
Всем привет. Возможно, я что - то просмотрел и такая тема была, но не смог найти.
Существует диалог выбора одной папки. Нужен диалог выбора нескольких папок. Например Для выбора нескольких текстовых файлов работает такой вариант. 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; Вопрос: как сделать для нескольких папок? Заранее |
Сообщ.
#2
,
|
|
|
KOL lib с офф сайта.
kolmck 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 |
Сообщ.
#3
,
|
|
|
Всем привет.
"Механика процесса" как я представляю так 1. Он Execute должен открыться "OpenDialog". 2. Фильтр "папки" должен давать возможность выбирать только папки в той папке которую выбираем через этот же диалог. (то есть как для обычного множественного выбора файлов (только выбор папок!)) 3. В строке выбора появляются имена папок (путь ко всем папкам идет как путь папка из которой был сделан выбор) //4. Все это из select'a строки должно "перенесено в TStringList". //5. Должен быть доступ к данному TStringList или txt или через Items. 4 Результат в виде строки состоящих из путей к папкам, которые можно передавать в TStringList.txt. Подскажите, пожалуйста, два момента: 1 Как сделать фильтр, позволяющий выбирать только папки в папке (пардон, если звучит как масло масляное ) 2 Как из selecta получить имена папок. Именно имена попадают в select? Спасибо. |