Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TShellTreeView [D6]


Hro ©   (2002-08-30 23:44:00) 

Привет всем. Народ подскажите где взять help по TShellTreeView или как при инициализации установить нужный путь?

Заранее благодарю.


Hro   (2002-09-03 23:30:00) [1]

> Ученик © Ok! Значит все нормально! Спасибо за помощь!


Ученик   (2002-09-03 09:40:00) [2]

В моем исходнике FUpdating := True; нет, и сейчас припоминаю, что когда-то его убирал, но очень давно, сорри.


Hro   (2002-09-03 09:31:00) [3]

> Ученик ©
Смотри что я выцепил при отладке. В методе SetPath перед вызовом
SetPathFromID стоит FUpdating := True, а в SetPathFromID с самого начала при условии FUpdating = True - выход. Может я чего недопонял, но стоило мне поставить FUpdating := False как все заработало! Ниже привожу кусок из файла ShellCtrls и жирным выделил ключевые моменты. Сравни пожалуйста со своим исходником.

procedure TCustomShellTreeView.SetPath(const Value: string);
var
P: PWideChar;
NewPIDL: PItemIDList;
Flags,
NumChars: LongWord;
begin
NumChars := Length(Value);
Flags := 0;
P := StringToOleStr(Value);
try
OLECheck(DesktopShellFolder.ParseDisplayName(
0,
nil,
P,
NumChars,
NewPIDL,
Flags)
);
FUpdating := True;
SetPathFromID(NewPIDL);

except on EOleSysError do
raise EInvalidPath.CreateFmt(SErrorSettingPath, [Value]);
end;
FUpdating := False;
end;

procedure TCustomShellTreeView.SetPathFromID(ID: PItemIDList);
var
I: Integer;
Pidls: TList;
Temp, Node: TTreeNode;
begin
if FUpdating or (csLoading in ComponentState)
or ((SelectedFolder <> nil) and SamePIDL(SelectedFolder.AbsoluteID, ID)) then Exit;

FUpdating := True;
Items.BeginUpdate;
try
Pidls := CreatePIDLList(ID);
try
Node := Items[0];
for I := 0 to Pidls.Count-1 do
begin
Temp := FolderExists(Pidls[I], Node);
if Temp <> nil then
begin
Node := Temp;
Node.Expand(False);
end;
end;
Node := FolderExists(ID, Node);
Selected := Node;
if Assigned(Node) then
begin
if Assigned(FListView) then
FListView.TreeUpdate(TShellFolder(Node.Data).AbsoluteID);
if Assigned(FComboBox) then
FComboBox.TreeUpdate(TShellFolder(Node.Data).AbsoluteID);
end;
finally
DestroyPIDLList(Pidls);
end;
finally
Items.EndUpdate;
FUpdating := False;
end;
end;


Ученик   (2002-09-02 12:57:00) [4]

>Hro © (02.09.02 12:49)
А не пробовал пройти в отладчике, что именно не работает, в тестовом примере я просто поместил TShellTreeView на форму и добавил Ученик © (01.09.02 11:50)


Hro   (2002-09-02 12:49:00) [5]

> Ученик. К сожалению предложенный тобой вариант неработает :(
Может какие свойства TShellView не так выставленны?


Ученик   (2002-09-01 11:50:00) [6]

>Hro © (01.09.02 09:40)

procedure TForm1.FormCreate(Sender: TObject);
begin
ShellTreeView1.Path := "C:\";
end;

работает ?


Hro   (2002-09-01 09:40:00) [7]

Ну. Ну чтож это такое. Неужели никто не делал настройку какого либо каталога из свойе программы!


Hro   (2002-08-31 21:01:00) [8]

>SuperOleg Мне необходимо не выбирать выбранный (тофталогия получилась :) ) в дереве файл, а наоборот! Есть некая глобальная переменная S : string со значением например S := "C:\programs\myprog" и есть форма с TShellTreeView, вот необходимо чтоб при открытии этой формы в ShellTreeView была выбрана именно папка myprog.


SuperOleg   (2002-08-31 14:25:00) [9]

не знаю чего там у тебя но я сделал так (внимательно просмотри это кусок из проги по этому сам знаешь но всё работоет)!!!

procedure TForm1.ShellListView1Click(Sender: TObject);
var s: string;
begin
with ShellListView1 do
if SelCount=1 then
with Folders[ItemIndex] do
begin
S:=PathName; //Полный путь к файлу
if S="" then //не все иконки соотв. файлам,напр. спсок
//групп в сетевом окружении
S:=DisplayName; //подпись к иконке
Memo1.Lines.LoadFromFile("Txt\"+s+".txt");
Image1.Picture.LoadFromFile("Picture\"+s+".bmp");
ExecuteDefault;
Label1.Caption:=S;
WinExec(PChar(s),SW_SHOW);
end;
end;


Hro   (2002-08-31 09:14:00) [10]

> ShellTreeView1.Path := Путь; не сработал :(
Однако за путь к исходникам спасибо.


Ученик   (2002-08-31 00:23:00) [11]

ShellTreeView1.Path := Путь;
Исходники в Delphi6\Demos\ShellControls


Наверх

Титульная страница Поиск, карта сайта Написать письмо