用 windows message 吧截获
解决方案 »
- 关于DBGridEh 哪个朋友有DBGridEh这样的例子 让DBGridEh 向excel一样的一行一行的输入数据,还能自动求和,和检测数据输入的合法性的代
- 网络高手请帮忙!如何实现即插即用功能?
- 请问:有谁知道THexEditor控件哪里可以下载吗?谢谢
- 超级难题在Dbgrid 中选择多行记录?
- 水圆对骂,信誉减少,“痛快”,散分!!!!
- ocx控件中汉字的显示,up
- 用了多年D7,现在不知道转成C#.net还是用delphi.net,大家来谈谈
- MDI问题,很急,请进!
- 各位,公司老总发疯了,要求三个小伙子在一个月内完成一套财务软件,请大家评价一下!!!
- 如何让查询出来的记录分屏显示?
- 欢迎讨论,关于VB的一点看法
- 在程序中动态创建的控件在窗体关闭时是否要释放掉?
DataSet->First();
for (int i=0; i<DataSet->RecordCount; i++)
{
DBGrid->SelectedRows->CurrentRowSelected = true;
DataSet->Next();
}
或是下一个控件
windindance(风舞轻扬) ( ) :怎样确定选中的一块的开始记录和结束记录呢?还有就是取消选中的记录呢?
没有用过
这样试试:
在MouseDown、MouseMove和MouseUp事件中:
根据DBGrid.MouseCoord得到鼠标位置所在的行列
然后将Table的当前记录指向该行(没有试过,不知道如何实现)
然后按上面的方法
定义了 private ,choseTkte,choseTktb,确定起,止,然后在DbGrid2上如下处理:procedure TFrmCSalManage.DBGrid2MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var lstyptkt,temptkt:string;
i:integer;
begin
inherited; lstyptkt:=DS_SalCTick.DataSet.Fields [3].asstring+DS_SalCTick.DataSet.Fields[4].asstring; if ssshift in Shift then
begin
choseTkte:=lstyptkt;
DS_SalCTick.DataSet.First;
while not DS_SalCTick.DataSet.Eof do
begin
temptkt:=DS_SalCTick.DataSet.Fields[3].asstring
+DS_SalCTick.DataSet.Fields[4].asstring;
if ((choseTktb<=temptkt) And (temptkt<=choseTkte)) then
DBGrid2.SelectedRows.CurrentRowSelected:= true;
if (temptkt>=choseTkte) then
break;
DS_SalCTick.DataSet.next;
end;
end; i:=0;
DS_SalCTick.DataSet.First;
while not DS_SalCTick.DataSet.Eof do
begin
if DBGrid2.SelectedRows.CurrentRowSelected = true
then
break;
i:=i+1;
DS_SalCTick.DataSet.next;
end;
DS_SalCTick.DataSet.First;
DS_SalCTick.DataSet.MoveBy(i); choseTktb:=DS_SalCTick.DataSet.Fields[3].asstring
+DS_SalCTick.DataSet.Fields[4].asstring;
end; 执行后可随意使用shift,Ctrl选定和取消记录,但还有些问题:
1.我的DS_SalCTick.DataSet是按Fields[3],Fields[4]排序的,因此可利用此特性,但我想应有更通用的方法。
2.如shift选定一块后,第三次选择在该块中间,后面,都与windows的方法一致,
但第三次选择在该块前面,有问题。
任务紧,暂无时间细想,望能抛砖引玉。