全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1296
推到 Plurk!
推到 Facebook!

如何拦截DbGrids的KeyDown事件?

尚未結案
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-12 23:13:39 IP:211.98.xxx.xxx 未訂閱
各位前辈: 小弟看了论坛里面高手关于拦截DbGrids的MouseDown事件,想类似的拦截它的KeyDown事件,但不成功,根本就不行,也许是我的知识太浅。 各位高手,要想实现拦截,TDbGrid或者TDbGridEh的KeyDown事件,该如何实现呢?
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-12 23:41:32 IP:211.98.xxx.xxx 未訂閱
其实,我的意思是想让用户在DbGrid里面录入数据的时候,按下down键时,数据集不自动Append。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-14 08:31:48 IP:202.39.xxx.xxx 未訂閱
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_DOWN then Abort;
end;
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-14 10:08:34 IP:61.221.xxx.xxx 未訂閱
您好: 再補充一下  
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (ADOQuery1.RecordCount= ADOQuery1.RecNo) or (ADOQuery1.State <> dsbrowse) then
    if Key = VK_DOWN then Abort;
end; 
~~應無所住而生其心~~
daphne_
一般會員


發表:0
回覆:2
積分:0
註冊:2005-04-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-15 17:54:15 IP:60.248.xxx.xxx 未訂閱
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var aDataSet: TDataSet; begin if not (Sender is TDBGrid) then Exit; if not Assigned(TDBGrid(Sender).DataSource) then Exit; aDataSet := TDBGrid(Sender).DataSource.DataSet; if not Assigned(aDataSet) then Exit; if not aDataSet.Active then Exit; if not (aDataSet.State in [dsInsert,dsEdit]) then Exit; if Key = VK_DOWN then Key := VK_CONTROL; end;
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-15 20:17:02 IP:61.31.xxx.xxx 未訂閱
我不懂您的用意為何? 在 KeyDown Event 只有 Key 值是可以改變的。 CTRL 鍵 為複合鍵。    若要當按下 DOWN 鍵,等於 CTRL + DOWN。 可這樣做。
type
  TDBGrid = Class(DBGrids.TDBGrid)
  Protected
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  end;
  TForm1 = class(TForm)
  ....    procedure TDBGrid.KeyDown(var Key: Word; Shift: TShiftState);
begin
  if Key=VK_DOWN then Shift := Shift   [ssCtrl];
  inherited KeyDown(Key,Shift);
end;
~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
jeff377
初階會員


發表:9
回覆:60
積分:33
註冊:2004-08-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-16 01:29:50 IP:211.75.xxx.xxx 未訂閱
你的目的如果是讓DBGrid不能新增資料列的話,有更簡易的撰寫方式,就是在DataSet的BeferInsert事件中下Abort即可,如    
procedure TForm1.ADODataSet1BeforeInsert(DataSet: TDataSet);
begin
  Abort;
end;  
系統時間:2024-07-03 14:17:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!