shelltreeview缺省选择在根目录,怎么让他缺省选择某一个我指定的目录呢?比如让他缺省选择
d:\movie目录而不是桌面。

解决方案 »

  1.   

    顶一下,我也碰到这个问题,楼上的说Root那个属性,设置一下那其它目录不是没了,我只想选中指定的目录,其它列表也都要在,
      

  2.   

    //有一个Path可以控制,可以现在测试无效,是VCL的bug
    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;
    //如下代码,Delphi6测试通过uses ComObj, ShlObj, TypInfo;function DesktopShellFolder: IShellFolder;
    begin
      OleCheck(SHGetDesktopFolder(Result));
    end;type TSetPathFromID = procedure(ID: PItemIDList) of object;procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      P: PWideChar;
      NewPIDL: PItemIDList;
      NumChars,
      Flags: LongWord;
      Value: string;
      vSetPathFromID: TSetPathFromID;
      vPropInfo: PPropInfo;
    begin
      Value := 'd:\movie';
      NumChars := Length(Value);
      P := StringToOleStr(Value);
      try
        OLECheck(DesktopShellFolder.ParseDisplayName(
            0,
            nil,
            P,
            NumChars,
            NewPIDL,
            Flags)
         );
        vPropInfo := GetPropInfo(TShellTreeView, 'Root');
        TMethod(vSetPathFromID).Code := Pointer(Integer(vPropInfo.SetProc) - $180);
        TMethod(vSetPathFromID).Data := ShellTreeView1; //为了调用TCustomShellTreeView.SetPathFromID私有方法
        vSetPathFromID(NewPIDL);
      except
      end;
    end;