当鼠标经过listview时如何通过消息获得每一行的信息!谢了!

解决方案 »

  1.   

    procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      item: TListItem;
    begin
      item := ListView1.GetItemAt(X, Y);
      if (item <> nil) then Self.Caption := 'Mouse at: ' + item.Caption;
    end;
      

  2.   

    “通过消息”什么意思?你的意思是想获得外部程序的ListView的信息?那没做过……
      

  3.   

    通过在OnMouseMove事件处理函数里判断坐标位置,提取所在位置的行信息。ListView有个函数function GetItemAt(X, Y: Integer): TListItem;
      

  4.   

    uses CommCtrl;procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      item: TListItem;
      lvhti: LV_HITTESTINFO;
    begin
      item := ListView1.GetItemAt(X, Y);
      if (item <> nil) then
        Caption := 'Mouse at: ' + item.Caption
      else
      begin
        lvhti.pt.X := X;
        lvhti.pt.Y := Y;
        ListView_SubItemHitTest(ListView1.Handle, @lvhti);
        if Assigned(ListView1.Items[lvhti.iItem])
          and (ListView1.Items[lvhti.iItem].SubItems.Count >= lvhti.iSubItem) then
          Caption := 'Mouse at:' + ListView1.Items[lvhti.iItem].SubItems[lvhti.iSubItem - 1];
      end;
    end;
      

  5.   

    konhon(优华)兄的做法有点接近了,但是我需要鼠标任意一行时得到该行的所有列的信息,如何做呢,
    上述的做法只能得到鼠标经过某一行某一列的信息,还望指点,谢!
      

  6.   

    问题解决了,谢谢konhon兄的指点,谢了!
      

  7.   

    在这里顺便问一下,TImage控件里如何发生KeyPress事件,有办法吗?谢!
      

  8.   

    在这里顺便问一下,TImage控件里如何发生KeyPress事件,有办法吗?谢!不知道你要干什麼???
      

  9.   

    有一个简单的方法,将ListView的RowSelect设置为True(即允许整行选择),然后还是用我的代码就可以解决问题了,至于其它列的信息,通过item.SubItems来获取即可
      

  10.   

    欢迎加入Borland DELPHI女程序员,参与群里技术讨论!欢迎女孩子,也欢迎男孩子参与技术讨论!群号15154361
      

  11.   

    樓主一個貼問了好幾個問題呀.
    樓主信譽分好低喲, 請一定要結貼喲.如何在状态里实现滚动的字幕效果,unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        StatusBar1: TStatusBar;
        Timer1: TTimer;
        Label1: TLabel;
        ProgressBar1: TProgressBar;
        procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
          Panel: TStatusPanel; const Rect: TRect);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
        StatusDrawRect: TRect;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
    begin
      StatusDrawRect := rect;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      label1.Parent := statusBar1;
      label1.Caption := 'abc';
      label1.top := StatusDrawRect.Top + 5;
      label1.Left := StatusDrawRect.Left;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      label1.Left := label1.Left + 1;
      if Label1.Left > StatusBar1.Width + 5 then
        Label1.Left := StatusDrawRect.Left;
    end;end.