后后,谢谢。。 为免骗分的嫌疑,把刚才的回答再贴一遍:================================================================== 设置shelltreeview的当前目录,当时我首先想到的办法就是直接用: ShellTreeView.Path:=xx; 来做,可是当我把这段代码用到我的程序后出现访问错误,原因好像和我设置完路径后需要动态删除和建立一些控件有关。后来,我用发送消息的办法来解决了: procedure TBrowseForm.ComboBoxPathSelect(Sender: TObject); begin if Assigned(FFileTreeViewForm) then begin FFileTreeViewForm.ChangeFolder(ComboBoxPath.Text); end; end; //当在combox中选择一个路径后,设置treeview中的path为这个路径,接着,程序跑到这里:procedure TFileTreeViewForm.ChangeFolder(AFolderName:String); begin //******************************************************************************* //!!) i have to use a message instead of change the treeview's path directly, //cause that will cause some exception when the ThumbFileView remove controls. FNewFolderName:=AFolderName; PostMessage(Handle,WM_CHANGEFOLDER,0,0); end; //自定义的一个方法,它不直接改filetreeview的path,而是先记录欲设置的path,并发送消息。const WM_CHANGEFOLDER = WM_USER+501;type TFileTreeViewForm = class (TForm) private procedure OnWMChangeFolder(var Message:TMsg);message WM_CHANGEFOLDER; .... end;procedure TFileTreeViewForm.OnWMChangeFolder(var Message:TMsg); var FolderTmp:String; begin FolderTmp:=FNewFolderName; if (ExtractFileName(FolderTmp)='..') then begin FolderTmp:=Copy(FolderTmp,1,LastDelimiter('\',FolderTmp)-1); FolderTmp:=Copy(FolderTmp,1,LastDelimiter('\',FolderTmp)); end; ShellTreeView.Path:=FolderTmp; if (ShellTreeView.Selected<>nil) then ShellTreeView.Selected.MakeVisible; end; //真正设置FileTreeView的path。这个不时什么好方法,应该有更可靠的方法吧,但是在我的程序里我就是这么干的,反正它能用了。另:to vitamin99(狼口一只羊) 再开个贴给我加点分怎么样,我还差100多久升星了,帮我一把吧
为免骗分的嫌疑,把刚才的回答再贴一遍:==================================================================
设置shelltreeview的当前目录,当时我首先想到的办法就是直接用:
ShellTreeView.Path:=xx;
来做,可是当我把这段代码用到我的程序后出现访问错误,原因好像和我设置完路径后需要动态删除和建立一些控件有关。后来,我用发送消息的办法来解决了:
procedure TBrowseForm.ComboBoxPathSelect(Sender: TObject);
begin
if Assigned(FFileTreeViewForm) then begin
FFileTreeViewForm.ChangeFolder(ComboBoxPath.Text);
end;
end;
//当在combox中选择一个路径后,设置treeview中的path为这个路径,接着,程序跑到这里:procedure TFileTreeViewForm.ChangeFolder(AFolderName:String);
begin
//*******************************************************************************
//!!) i have to use a message instead of change the treeview's path directly,
//cause that will cause some exception when the ThumbFileView remove controls.
FNewFolderName:=AFolderName;
PostMessage(Handle,WM_CHANGEFOLDER,0,0);
end;
//自定义的一个方法,它不直接改filetreeview的path,而是先记录欲设置的path,并发送消息。const
WM_CHANGEFOLDER = WM_USER+501;type
TFileTreeViewForm = class (TForm)
private
procedure OnWMChangeFolder(var Message:TMsg);message WM_CHANGEFOLDER;
....
end;procedure TFileTreeViewForm.OnWMChangeFolder(var Message:TMsg);
var
FolderTmp:String;
begin
FolderTmp:=FNewFolderName;
if (ExtractFileName(FolderTmp)='..') then begin
FolderTmp:=Copy(FolderTmp,1,LastDelimiter('\',FolderTmp)-1);
FolderTmp:=Copy(FolderTmp,1,LastDelimiter('\',FolderTmp));
end;
ShellTreeView.Path:=FolderTmp;
if (ShellTreeView.Selected<>nil) then
ShellTreeView.Selected.MakeVisible;
end;
//真正设置FileTreeView的path。这个不时什么好方法,应该有更可靠的方法吧,但是在我的程序里我就是这么干的,反正它能用了。另:to vitamin99(狼口一只羊)
再开个贴给我加点分怎么样,我还差100多久升星了,帮我一把吧