Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.01.2014, 16:28
Aleks99 Aleks99 вне форума
Прохожий
 
Регистрация: 06.01.2014
Сообщения: 21
Версия Delphi: 10
Репутация: 10
По умолчанию Установить начальный каталог в SelectDirectory

Доброго времяни суток Мастера подскажите, есть ли возможность установить начальный каталог в SelectDirectory так что бы дерево папок развернулась до указанной папки, и была возможность перемещаться по нему вверх в плоть до выбора диска
Ответить с цитированием
  #2  
Старый 06.01.2014, 18:22
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Возможность есть, весь секрет в установке значений для StartDir и в параметрах TSelectDirOpts...
Ответить с цитированием
  #3  
Старый 06.01.2014, 18:51
Aleks99 Aleks99 вне форума
Прохожий
 
Регистрация: 06.01.2014
Сообщения: 21
Версия Delphi: 10
Репутация: 10
По умолчанию

Поделись секретом. Я делаю так.
Код:
var
a:String;
 begin
  if SelectDirectory('Выберите каталог','d:\',a ) then
    Begin
        FileListBox1.Directory := a;
    End
  else
    ShowMessage('Выбор был отменен');
Edit1.text:=a;
end;
Во время выбора папки, нет возможнасти перейти к другому диску или вверх по каталогу, а очень нужно.

Последний раз редактировалось Aleks99, 07.01.2014 в 01:44.
Ответить с цитированием
  #4  
Старый 06.01.2014, 20:41
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
if SelectDirectory(a, [sdAllowCreate, sdPerformCreate, sdPrompt], 1000) then...
Ответить с цитированием
  #5  
Старый 06.01.2014, 21:20
Aleks99 Aleks99 вне форума
Прохожий
 
Регистрация: 06.01.2014
Сообщения: 21
Версия Delphi: 10
Репутация: 10
По умолчанию

Может в unit Unit1; что добавить нужно?
а так
Код:
if SelectDirectory(a, [sdAllowCreate, sdPerformCreate, sdPrompt], 1000) then
не работает. ошибку выдаёт

[DCC Warning] Unit1.pas(7): W1005 Unit 'FileCtrl' is specific to a platform
[DCC Error] Unit1.pas(53): E2001 Ordinal type required
[DCC Error] Unit1.pas(53): E2010 Incompatible types: 'Integer' and 'string'
[DCC Error] Unit1.pas(53): E2250 There is no overloaded version of 'SelectDirectory' that can be called with these arguments
[DCC Warning] Unit1.pas(83): W1019 For loop control variable must be simple local variable
[DCC Warning] Unit1.pas(109): W1019 For loop control variable must be simple local variable
[DCC Warning] Unit1.pas(117): W1019 For loop control variable must be simple local variable
[DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'



Если не трудно с рабочим примером помоги.
тут фотки программы "Так есть" - нет возможности выбрать другой диск

http://img-fotki.yandex.ru/get/6730/...5e98fb3f_L.jpg http://img-fotki.yandex.ru/get/9797/...e262d98e_L.jpg

Последний раз редактировалось Aleks99, 07.01.2014 в 01:45.
Ответить с цитированием
  #6  
Старый 06.01.2014, 21:32
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Это работает под D7, вероятно в десятке что-то выкинули, тогда попробуйте вот так
Код:
SelectDirectory('Выберите каталог', '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}', a )
т.е. принудительно задайте началкой папку "Мой комп"
Ответить с цитированием
  #7  
Старый 06.01.2014, 22:04
Aleks99 Aleks99 вне форума
Прохожий
 
Регистрация: 06.01.2014
Сообщения: 21
Версия Delphi: 10
Репутация: 10
По умолчанию

Вы меня не правильно поняли. Я могу установить любой каталог, не суть.
дело в том, что когда я устанавливаю начальный каталог например d:/ то в открывшемся диологовом окне я не могу подняться вверх по дереву каталога например не могу выбрать диск Е или С.

программа запоминает последнюю открытую окном диолог папку и при следующим старте открывает её же, (удобно) но не всегда нужен одина и та же папка.
Вот попробуй
Код:
var
 a:String;
 begin
 if SelectDirectory('Выберите каталог','d:\',a ) then
 Begin
 Label1.Caption := a;
 End
 else
 ShowMessage('Выбор был отменен');
 end;

Последний раз редактировалось Aleks99, 07.01.2014 в 01:45.
Ответить с цитированием
  #8  
Старый 06.01.2014, 22:37
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Aleks99
...Вот попробуй...
К сожалению, нечем В моей среде такой напруги не возникает, вышеприведенные куски работают как надо, так что я не в теме.

З.Ы. Оффтоп:

Пжлст, пока ни кто не видел, отредактируйте ваши сообщения заключив бодяшки кода в тег [ CODE ]...[ /CODE ] только без пробелов - повысится вероятность того, что кто-то вам подскажет решение сабжевой проблемы. Извнт и удачи!
Ответить с цитированием
  #9  
Старый 06.01.2014, 23:09
Aleks99 Aleks99 вне форума
Прохожий
 
Регистрация: 06.01.2014
Сообщения: 21
Версия Delphi: 10
Репутация: 10
По умолчанию

procedure TForm1.ToolButton5Click(Sender: TObject);
Код:
var
a,: String;
begin
      /// Этот путь вроде у всех есть кто на win7 (в оригинале переменная с memo1.text)
     if SelectDirectory('Выберите каталог','C:\Windows\System32\drivers',a) then                    
     else
       ShowMessage('Выбор был отменен');
end;
Проблемма в том что я не могу подняться в папку System32 или Windows и так далие.
Попробуй ты сможешь выбрать папку System32 ??
Спасибо за участие.

Последний раз редактировалось Aleks99, 07.01.2014 в 01:48.
Ответить с цитированием
  #10  
Старый 06.01.2014, 23:41
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Aleks99
...Попробуй ты сможешь выбрать папку System32 ??.
Попробовал - да, могу: вот

Ответить с цитированием
  #11  
Старый 06.01.2014, 23:56
Aleks99 Aleks99 вне форума
Прохожий
 
Регистрация: 06.01.2014
Сообщения: 21
Версия Delphi: 10
Репутация: 10
По умолчанию

http://www.delphisources.ru/forum/at...d=138903815 3

а У меня так, как ты на верх поднялся?
Изображения
Тип файла: jpg так.jpg (25.8 Кбайт, 5 просмотров)
Ответить с цитированием
  #12  
Старый 07.01.2014, 00:07
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код ваш, установка начального каталога - как в #6: так можно лазить по всему доступному дисковому пространству машинки, открывается на изначально указанной папке и ещё можно подниматься вверх, вплоть до смены рабочего диска. Видимо разработчики немножко код в десятке почикали, такие пироги. Хотя, есть ещё SHBrowseForFolder...
Ответить с цитированием
  #13  
Старый 07.01.2014, 00:14
Aleks99 Aleks99 вне форума
Прохожий
 
Регистрация: 06.01.2014
Сообщения: 21
Версия Delphi: 10
Репутация: 10
По умолчанию

Вот не хорошие люди кто с 10 поковырялся. А я только вчера 7 снёс, жаль.... буду ковырять SHBrowseForFolder.
спс
Ответить с цитированием
  #14  
Старый 07.01.2014, 00:34
Aleks99 Aleks99 вне форума
Прохожий
 
Регистрация: 06.01.2014
Сообщения: 21
Версия Delphi: 10
Репутация: 10
По умолчанию

Не подскажишь как тут установить начальный каталог
Код:
uses ShellAPI, ShlObj;
procedure TForm1.Button1Click(Sender: TObject);
var
TitleName : string;
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
BrowseInfo.hwndOwner := Form1.Handle;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := 'Please specify a directory';
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then begin
SHGetPathFromIDList(lpItemID, TempPath);
ShowMessage(TempPath);
GlobalFreePtr(lpItemID);
end;
end;

Последний раз редактировалось Aleks99, 07.01.2014 в 02:03.
Ответить с цитированием
  #15  
Старый 07.01.2014, 01:17
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:
Всё же пжлст, оформите код тегом
Код:
 [СODE]...[/СODE]
вот инструкция как этим всем пользоваться, а иначе нарушение ПФ пункт 2.8, может и на орехи перепасть

По теме
вот некоторые ссылки,
вот и вот
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter