DBGrid中Shift多选
[dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgMultiSelect] 相关代码 procedure TFamEditPeople.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin FKeyShift := ssShift in Shift; end; procedure TFamEditPeople.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin FKeyShift := False; end; procedure TFamEditPeople.DataSource1StateChange(Sender: TObject); begin FOldNo := FRecNo; if TDataSource(Sender).DataSet.Active then FRecNo := TDataSource(Sender).DataSet.RecNo; FKeyShift := False; end; procedure TFamEditPeople.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var I: Integer; begin if Button <> mbLeft then Exit; if not TDBGrid(Sender).DataSource.DataSet.Active then Exit; if FKeyShift then begin FRecNo := TDBGrid(Sender).DataSource.DataSet.RecNo; if FKeyShift then DBGrid1.SelectedRows.CurrentRowSelected := True; if FOldNo = -1 then FOldNo := 1; if FRecNo > FOldNo then for I := FRecNo downto FOldNo do begin TDBGrid(Sender).DataSource.DataSet.RecNo := I; TDBGrid(Sender).SelectedRows.CurrentRowSelected := True; end else for I := FRecNo to FOldNo do begin TDBGrid(Sender).DataSource.DataSet.RecNo := I; TDBGrid(Sender).SelectedRows.CurrentRowSelected := True; end; end else//Shift not pressed FOldNo := TDBGrid(Sender).DataSource.DataSet.RecNo end; 实现DBGrid Shift+鼠标左键单击 多选 关键字: DBGrid Shift 多选 分类 : 个人专区 密级 : 公开 (评分: , 回复: 0, 阅读: 96) »» unit Unit1; interface uses 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.GotoBookmark(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.FreeBookmark(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. //另外,Shift+小键盘UP/DOWN 也可以实现多选
好的代码像粥一样,都是用时间熬出来的
分类:
Delphi
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2019-02-25 继承Tcalendar控件,让当天日期醒目显示
2019-02-25 TLabel的FocusControl属性什麽意思
2019-02-25 Delphi Try Except 实例
2019-02-25 如何有效地让一个“ParentFont = False”子控件使用与父母相同的字体名称?
2019-02-25 窗体的构造函数和OnCreate事件