![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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