DBGrid使用Crtl+鼠标可以实现多行选择,如果只用鼠标可以实现多行选择吗?
解决方案 »
- 在delphi中如何把groupbox改成圆角矩形
- listview与edit内容互调问题!谢谢各位高手大侠!
- 结婚散分咯~(之六)
- ClientDataSet最大字段长度不能超过31位,ADO不会有此问题,请问哪位高手能帮忙解决?
- 大家请进,为什么加一个控件进去exe文件大了1M多?不懂!
- 求助:AvtiveForm中的自定义事件处理问题
- 一个有关rave报表的问题.
- 我的delphi程序调用了一个c程序,运行了一会就出现ntvdm.exe应用程序错误
- ehlib中PrintDBGridEh的把字串变量赋给BeforeGridText,能不能设置字体啊?
- 请教一个database desktop中paradox表的问题。谢谢
- 请问:那位有多种格式文件的浏览控件,能够提供多种格式文件的浏览控件的下载地址,如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;楼主自己继续研究一下吧。