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

关于DBgrid录入数据的问题

尚未結案
railgunman
初階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-11 09:56:40 IP:218.88.xxx.xxx 未訂閱
Dbgrid录入数据时能不能按回车键自动的跳到Dbgrid中下一个字段的数据输入? 怎样实现? 还有在录入数据时,若操作员打开的是中文输入法,当数据录入完毕之后,并保存之后,能否让程序自动打开刚才操作员使用的输入法呢? 怎样实现?
hagar
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-11 10:30:16 IP:202.39.xxx.xxx 未訂閱
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); 
begin 
  if Key = #13 then 
  begin 
    if DBGrid1.Columns.Grid.SelectedIndex < DBGrid1.Columns.Count - 1 then 
      DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex   1].Field.FocusControl 
    else 
    begin 
      Table1.Next; 
      DBGrid1.Columns[0].field.FocusControl; 
    end; 
  end; 
end;
--- 歡迎光臨 KTop 研究院--<-<-<@
xiaoning79627
初階會員


發表:46
回覆:60
積分:26
註冊:2002-11-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-11 10:30:33 IP:218.16.xxx.xxx 未訂閱
1)先将FORM1的KEYPREVIEW的属性设为TRUE。 procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then begin if ActiveControl is TDBGrid then begin with TDBGrid(ActiveControl) do if SelectedIndex<(fieldCount-1) then SelectedIndex:=DBGrid1.SelectedIndex 1 else SelectedIndex:=0; end else key:=#0; end; end; 2)不太明白,能说清楚点吗?是在哪录数据? 努力,相信会做的更好!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-11 10:58:58 IP:63.84.xxx.xxx 未訂閱
您好﹗    
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then
  begin
    if DBGrid1.SelectedIndex < (ADOTable1.FieldCount-1) then
    //也可寫成if DBGrid1.SelectedIndex < (DBGrid1.FieldCount-1) then
      begin
        DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex 1;
      end
    else
      begin
        ADOTable1.Next;
        DBGrid1.SelectedIndex := 0;
      end
  end;
end; 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
railgunman
初階會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-12 10:06:38 IP:218.88.xxx.xxx 未訂閱
各位的意思是争对小弟的第一个问题吗? 第二个怎么解决呢?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-12 11:00:42 IP:63.84.xxx.xxx 未訂閱
您好﹗    不太明白您的第二个问题﹐猜猜看﹐請參考如下連結看看: ><>===================== 努力,相信會獲得美麗! 忻晟 發表人 -
------
忻晟
railgunman
初階會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-16 13:05:36 IP:218.88.xxx.xxx 未訂閱
我的意思是:用户在保存时,让程式自动记录用户输入法的状态,保存以后,如果用户在录入数据,那么程序自动的把保存的输入法状态打开! 而不是,在设计程序时就指定好输入法! 要实现我说的功能,该怎么做呢?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-16 14:16:01 IP:61.155.xxx.xxx 未訂閱
var   Form1: TForm1;   str:string; implementation    {$R *.dfm}    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin //按键自动转换 if key=#13 then postmessage((sender as tdbgrid).Handle,WM_KEYDOWN,$09,$09); //输入法类型自动保存及设置 if (sender as tdbgrid).ImeName<>str then str:=(sender as tdbgrid).ImeName; (sender as tdbgrid).ImeName:=str; end;    您的2各要求上面都可以实现哦!
railgunman
初階會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-16 18:03:11 IP:218.88.xxx.xxx 未訂閱
谢谢sos_admin,不过我想问一下,你下面的代码是什么意思呢?能具体讲解一下吗?谢谢! if (sender as tdbgrid).ImeName<>str then str:=(sender as tdbgrid).ImeName; (sender as tdbgrid).ImeName:=str; end;
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-16 19:41:11 IP:61.155.xxx.xxx 未訂閱
定义一个模块级变量STR,用于保存输入法名称;这样就可以动态取得和设置取得了! //如果当前与原始的输入法不一致,保存当前输入法;如果一样就跳过这一布 if (sender as tdbgrid).ImeName<>str then str:=(sender as tdbgrid).ImeName; //设置输入法 (sender as tdbgrid).ImeName:=str; end
railgunman
初階會員


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-17 12:58:07 IP:218.88.xxx.xxx 未訂閱
谢谢sos_admin,我按你说的做了,但是没有实现我要的功能,我觉得很奇怪,我的程序是这样的:一个DBgrid,四个按钮,分别是:保存,增加,删除,退出。 操作员录入数据时先点《增加》按钮,然后在DBgrid里面录入数据,录完以后点《保存》,我的意思是想:当操作员再点《增加》按钮时,程序自动的把输入法的状态调整到上一次在DBgrid里面输入数据的输入法! 这样做的话,该怎么做呢? 还有,我觉得STR应该初始化才好!
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-17 14:18:58 IP:61.155.xxx.xxx 未訂閱
用一个timer,启用, timer1.Interval大约200吧! 这样她就不需要您做其它的设置,自动帮您保存dbgrid的输入法哦! var Form1: TForm1; str:string; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; myime : HKL; begin myime:=GetKeyBoardLayOut(0); for i := 0 to Screen.Imes.Count-1 do if HKL(Screen.Imes.Objects[i]) = myime then str:=Screen.Imes.Strings[i]; if dbgrid1.Focused then if trim(str)<>'' then dbgrid1.Columns[dbgrid1.Columns.Grid.SelectedIndex].ImeName:=str; end;
系統時間:2024-05-18 13:27:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!