DBGrid使用Crtl+鼠标可以实现多行选择,如果只用鼠标可以实现多行选择吗?
解决方案 »
- 如何修改火狐浏览器配置文件 实现 火狐修改代理的设置
- 向大家推荐好东东:数据库结构文档生成器
- 为什么用web service 无发保存上传信息 ?
- 如何动态建立ACCESS的ODBC数据源 建了 一天了也不会 急 谢谢了 有代码吗????最好
- 请问在网吧里,想在服务器电脑上给各个客户机发消息,该添什么IP地址?
- 各位,那有有关dll开发的源码或详细介绍。
- 在Form里如何重新定义一个mousedown事件覆盖TControl的Mousedown
- Modified的问题.
- Delphi6中怎么访问网页并控制里面的文本显示和触发按钮事件
- 谁有delhi5?及资料要处理???
- 请问:那位有多种格式文件的浏览控件,能够提供多种格式文件的浏览控件的下载地址,如PDF、CAD、JPG,BMP等文件的浏览控件。
- [求助]Twsocket.send(data,size)
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
Button1: TButton;
ADOTable1: TADOTable;
procedure DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
blSelect: Boolean;
BookMark: TBookMark;
CurrNo, OldNo: integer;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin //实现 Shift+鼠标左键单击 多选
if Button = mbLeft then
begin
if not blSelect then
begin
BookMark := ADOTable1.GetBookMark;
OldNo := ADOTable1.RecNo;
blSelect := True;
Exit;
end
else
begin
if ssShift in Shift then
begin
CurrNo := ADOTable1.RecNo;
ADOTable1.DisableControls;
ADOTable1.GotoBook(BookMark);
DBGrid1.SelectedRows.CurrentRowSelected := True;
if CurrNo > OldNo then
begin
while CurrNo > ADOTable1.RecNo do
begin
DBGrid1.SelectedRows.CurrentRowSelected := True;
ADOTable1.Next;
end;
end
else
begin
while CurrNo < ADOTable1.RecNo do
begin
DBGrid1.SelectedRows.CurrentRowSelected := True;
ADOTable1.Prior;
end;
end;
ADOTable1.EnableControls;
ADOTable1.FreeBook(BookMark);
blSelect := False;
CurrNo := 0;
OldNo := 0;
end
else
begin
BookMark := ADOTable1.GetBookMark;
OldNo := ADOTable1.RecNo;
blSelect := True;
Exit;
end;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ADOConnection1.Connected := true;
ADOTable1.Close;
ADOTable1.TableName := 'Table_Name'; //表名
ADOTable1.Open;
DBGrid1.Options := DBGrid1.Options + [dgMultiSelect]; //开启多选
end;end.
{DBGrid的设置,按你原来的设置;增加一个按钮,代码如下。使用时,先点一下按钮,就可以只用鼠标多选了;但一定要记得选择完后再点一下按钮。}procedure TForm1.Button1Click(Sender: TObject);
begin
case Button1.Tag of
0: keybd_event(VK_Control,0,Button1.Tag,0);
1: keybd_event(VK_Control,0,Button1.Tag+1,0);
end;
Button1.Tag := Integer(not Boolean(Button1.Tag));
end;{不要觉得按钮多余...因为如果没有按钮,选错了如何纠正啊。当然,可以用别的方式执行按钮里的语句}
begin
keybd_event(VK_Control,0,0,0);
end;procedure TForm1.DBGrid1Exit(Sender: TObject);
begin
keybd_event(VK_Control,0,2,0);
end;楼主自己继续研究一下吧。