如果说我要得到一个clistctrl里的item的总数,
我可以这样.int nItemCount = ::SendMessage(hWnd, LVM_GETITEMCOUNT, (WPARAM)0, (LPARAM)0);但是如果我想得到dephi中的tdbgrid里面的item的总数?应该sendmessage(hwnd,这儿应该是什么消息?
多谢.

解决方案 »

  1.   

    DBGgrid.DataSource.DataSet.RecordCount
      

  2.   

    不是这样,我想以SendMessage来得到行的总数,
    说白了,就是我想在别外一个程序里得到dephi中tdbgrid里item的总数.
    我已经实现在得到其他程序(是vb编的用的是clistctrl里所有的内容).就是发送LVM_GETITEMCOUNT,但对于dephi的tdbgrid里这个LVM_GETITEMCOUNT应该变成什么值?
    因为我没有dephi,所以只好向各位大大求救了.
      

  3.   

    to windindance(风舞轻扬)
    楼主是想通过发送消息得到ROM的值!(虽然可以通过属性得到)
      

  4.   

    直接从dbgrid得到行数恐怕不行,因为dbgrid的行数是由他的数据源决定的,取别的控件如memo等的还可以
    for exampleprocedure TForm1.Button1Click(Sender: TObject);
    var
     Linecount: Integer;
    begin
      Linecount := sendmessage(memo1.Handle,EM_GETLINECOUNT, $FFFF, 0);
      showmessage(IntToStr(Linecount));
    end;
      

  5.   

    可能做不到啊,我试过了,没有找到TDBGrid的相关消息。
    你就不能通过其他手段达到你的目的吗?要知道
    “条条大道通罗马”,应该有其他的解决方案,不要吊死
    在一棵树上!!
      

  6.   

    TDBGRID所在的VCL库里面没有这方面的消息的封装,如果想要通过其它程序发消息到Delphi编的程序中取得TDBGRID的ROW值是办不到的,只能想其它办法了。
      

  7.   

    这是LVM_GETITEMCOUNT在ListView控件中的定义:
    ComCtrls单元里:
    function TListItems.GetCount: Integer;
    begin
      if Owner.HandleAllocated then Result := ListView_GetItemCount(Handle)
      else Result := 0;
    end;
    Commctrl单元里:
    function ListView_GetItemCount(hWnd: HWND): Integer;
    begin
      Result := SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);
    end;
      

  8.   

    呵呵,俺来说两句:
    首先,DBGrid中的行数永远是你当前看到的行数,因为它根本不保存任何数据,只是在需要数据时根据DataSource从相应的DataSet中获得。这与TStringGrid一样,希望得到的行数与数据有关,而与看到的窗口行数无关。
    第二,楼主显然想获得的是数据的行数而不是DBGrid的行数,俺猜想恐怕就Delphi目前提供的TDBGrid组件尚不能直接实现。
    第三,楼主以VB中的类来推断Delphi中外观相似的类的特征,忽略了前提,那就是楼主列举的类,其数据存储在类的内部,应该是私有成员吧,而Delphi中的TDBGrid中显示的数据全部从DataSource、DataSet中获得,根本不保存任何来自数据集的数据。更何况楼主列举的类来源于Windows,而TDBGrid根本与TEdit、TListView等控件不是一回事(后面列举的控件,在Windows中响应什么消息,在Delphi中同样响应什么消息,因为它们来源于Windows)。
      

  9.   

    类似问题:http://expert.csdn.net/Expert/TopicView1.asp?id=1201326
      

  10.   

    to cnsuyong(小可) :
    根本不保存任何来自数据集的数据?这个有点疑问.
    不管怎么说,tdbgrid总要把数据缓存在自己的类空间里吧.比方说我拖动tdbgrid的滚动条,这个时侯tdbgrid肯定响应wm_paint吧哈.应该更新屏幕内容吧,如果让我来设制这个类的话,我不会在响应一次wm_paint,就向数据库提交一次申请吧哈.而是把一次提交的内容包存在自己的私有空间(暂时这么叫吧哈).不过你分析得挺有道理的.pfpf.哪天我想学dephi,教教我好不好.
    我承认,单纯采用sendmessage不可能得到itemcount;(如果类本来就没这个消息,发送这个消息也没用哈).
      

  11.   

    yeah,i see it.data store in DBGgrid.DataSource.DataSet;
    sorry.结贴,给分。