如题。。
在D7环境下,响应双击事件时,跟踪了下,在获取文件名的时候出错,接下来后面的处理就不能做了
试了几种方法无解中。。
//ItemIndex = -1...
ShellListView1.Folders[ShellListView1.ItemIndex].PathName;//selected 无效错误
if not shelllistview1.Folders[ShelllistView1.Selected.index].IsFolder then 。ShellListView1.SelectedFolder.PathName;这个也不行

解决方案 »

  1.   

    你不要在双击事件中取这个值,因为双击后,就会执行你选择的文件,那样itemindex就会被重置为-1,你可以试着在OnChange事件中先取得itemindex
      

  2.   

    可在onchange或closeup事件中處理它的indexID...
      

  3.   

    只有第一次的时候可以
    第二次就出现异常了貌似网上说ShellListView这个组件好像不咋的。。
    先吃饭,回来再接着问。。
      

  4.   

    我晕,肯定要双击的呀,比如,不双击,我怎么打开文件。。
    而对不是exe文件,如txt需要进行双击时,运行了notepad在后台,而不是打开该文本文件
    我个人认为呢,在单击到文件时seletefolder.pathname其实应该有值的,不过事实非我所想。。
    嗯,再就是帮助文件中查不到ShellListView等组件的帮助信息,就弄的一塌糊涂了。。PS:我没有说一定要取itemindex,而是说用到这方法时边界异常了,用其他方法则是内存错误。。
      

  5.   

    那就在双击前先获得itemindex不就行了
      

  6.   

    onchange中获得一次后,再双击事件中第一次双击没问题,第二次就不行了。
      

  7.   

    procedure TForm1.ShellListView1DblClick(Sender: TObject);
    begin
    ShowMessage(IntToStr(i));
    end;procedure TForm1.ShellListView1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if ShellListView1.Selected = nil then
        i := -1
      else
        i := ShellListView1.ItemIndex;
    end;
      

  8.   

    bdmh
    取文件是行了,不过如果双击在取到文件时,txt文件直接双击则启动了notepad而不是打开这个文本文件
    我下面处理也不行,跟没做处理一样的都是后台启动notepad,而不是打开文本文件。。procedure TForm1.ShellListView1DblClick(Sender: TObject);
    begin
      //当双击时文件夹时,shelltreeview.path会发生改变,
      //则将地址栏的路径重新显示
      cbbAddrUsed.Text := ShellTreeView1.Path;
      if i<> -1 then
        if not ShellListView1.Folders[i].IsFolder then
        begin
          ShellExecute(handle,'open ',PChar(ShellListView1.Folders[i].PathName),nil,nil,SW_SHOW);
          //ShowMessage(ShellListView1.Folders[i].PathName);
        end;
    end;
    ps:谢谢你的热心。。