Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2011, 13:46   #1
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию ShellTreeView где ты?

В моей Д2010 не существует компонента ShellTreeView. На нем в Д7 строил диалог выбора папок. Теперь вот нету и куды бечь?

Может кто подскажет где его взять.
Или наведет на диалог выбора папок. Не на того уродца, который в стиле Win 3.1 (он то как раз есть в палитре компонентов), а посимпатичнее чего-нибудь.
Прик вне форума Ответить с цитированием
Старый 16.06.2011, 19:46   #2
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

Я делал так
Код:
uses ShlObj;
procedure CoTaskMemFree(pv: Pointer); stdcall;
  external 'ole32.dll' name 'CoTaskMemFree';
function GetFolderPath: String;
var
  bi: TBrowseInfo;
  i: PitemIDList;
  p: pointer;
  buf: array [0..MAX_PATH-1] of char;
begin
  Result:='';
  ZeroMemory(@bi, SizeOf(bi));
  bi.hwndOwner:=Application.Handle;
  bi.lpszTitle:=PChar('Выбор каталога');
  bi.ulFlags:=BIF_RETURNONLYFSDIRS;
  i:=SHBrowseForFolder(bi);
  if i<>nil then
  begin
    if SHGetPathFromIDList(i, @buf) then
    begin
      Result:=buf;
      if (Length(Result)>0) and
        (Result[Length(Result)]<>'\') then
        Result:=Result+'\';
    end;
    CoTaskMemFree(i);
  end;
end;

Последний раз редактировалось Silver_S; 16.06.2011 в 22:23. Причина: Исправил ошибки
Silver_S вне форума Ответить с цитированием
Старый 16.06.2011, 20:14   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Это можно заменить
Код:
  if SHGetPathFromIDList(i, @buf) then
  begin
    Result:=buf; 
    if (Length(Result)>0) and (Result[Length(Result)]<>'\') then
      Result:=Result+'\';
  end;
на
Код:
  if SHGetPathFromIDList(i, @buf) then
  begin
    Result:=buf; 
    if Length(Result) > 0 then
      Result := IncludeTrailingBackslash(Result);
  end;
Alter вне форума Ответить с цитированием
Старый 16.06.2011, 20:47   #4
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

Скопировал со старого исходника не задумываясь... Тут кажется утечка памяти. попозже постараюсь исправить.

Исправил

Последний раз редактировалось Silver_S; 16.06.2011 в 22:11.
Silver_S вне форума Ответить с цитированием
Старый 16.06.2011, 20:48   #5
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Поставьте Alphacontrols, там есть TsShellTreeView

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 16.06.2011, 21:39   #6
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Можно и компонентами JEDI VCL. TJvBrowseForFolderDialog со вкладки Jv Dialogs. Можно полностью настроить вид.

Установка:
0. Delphi закрыт, не запущен
1. после скачивания архива распаковать содержимое в каталог с путем из латинских символов
2. зайти в папку jsl и запустит Install.bat, следовать инструкции инсталлятора.
3. после удачной установки содержимого из jsl, зайти в папку jvcl и запустите Install.bat, следовать инструкции инсталлятора.
4. Установка завершена.
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонент ShellTreeView chigivaro78 Компоненты Delphi 0 24.03.2011 19:28
Shelltreeview и DBGrid Stian БД в Delphi 1 04.03.2011 00:12
checkbox in ShellTreeView SergGhost Помощь студентам 1 31.08.2009 17:51
Порблема с SHelltreeview VenMaster Компоненты Delphi 6 29.05.2008 16:21
вопрос по shelltreeview VenMaster Компоненты Delphi 4 26.05.2008 16:23