如上图所示,当鼠标移动到某行与某列交汇区域时,窗口标题显示其内容,此图鼠标在B2处,那么窗口标题应该显示为:B2
这个功能如何实现???

解决方案 »

  1.   

    Delphi7+ListView
      

  2.   


    procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      vItem : TListItem;
    begin
      vItem := nil;
      vItem := ListView1.GetItemAt(x,y);
      if vItem<>nil then
      begin
        vItem.Caption;
        vItem.Data;
      end;
    end;
      

  3.   


    哥们,如果仅仅显示vItem.Caption,我就不发此帖了,问题的关键在于如何获得鼠标所在列
      

  4.   

    procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      vItem : TListItem;
      str :string;
    begin
      vItem := nil;
      vItem := ListView1.GetItemAt(x,y);
      if vItem<>nil then
      begin
        str := vItem.Caption;//第一列
        str := vItem.SubItems[0];//第二列
        str := vItem.SubItems[1];//第三列
    .
    .
    .
      end;
    end;
      

  5.   

    首先需要判断ListView的显示模式是否为Report,如果是,再通过DisplayRect(drBounds)取得占位,再根据Columns的width计算出是哪一列。
      

  6.   

    ListView1.GetItemAt(x,y);不用判断显示模式
      

  7.   

    GetItemAt是不需要判断显示模式,但是如果要根据鼠标位置取得SubItem,如果不是Report模式的话是毫无意义的。
      

  8.   


    僵哥,我试了其它模式,只要你添加了subitem,任何模式都可以访问到
      

  9.   


    procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      iRow, iCol, it : Integer;
      li  : TListItem;
      sText : string;
    begin
      if(not(Sender is TListView))then Exit;
      sText := '(Empty)';
      with TListView(Sender)do
      try
        if(ViewStyle <> vsReport)then
        begin
          sText := 'ViewStyle is not vsReport';
          Exit;
        end;    li  := GetItemAt(5, Y);
        if(not Assigned(li))then Exit;
        iRow  := Items.IndexOf(li);
        for iCol:=0 to Columns.Count-1 do
        begin
          it  := Columns[iCol].Width;
          if(X<it)then Break;
          Dec(X, it);
        end;
        if(iCol<Columns.Count)then
          sText := Format('[%d, %d] %s', [iRow, iCol, li.Caption]);
      finally
        Caption := sText;
      end;
    end;
      

  10.   

    那就再测试一下有横向滚动条的时候是否会有什么问题。其实类似的问题,在一些支持SubItem编辑的ListView控件当中就已经有现成的东西了。
      

  11.   

    To Seamour,如果没错的话,估计还需要考虑一下Columns的排列顺序。
      

  12.   

     REPORT下也只僵哥的辦法了。