当前位置:主页>销售管理软件> 列表

關于在DBGridEh中焦點的問題

仓库管理软件版1楼: 1. 如何用Enter在DBGridEh中進行焦點的移動?
例如:當目前光標在第1行1列時,按下Enter會移動到第1行2列,依次移動到第1行3列,第1行4列......;當移動到第1行的結尾時,會自動轉到第2行第1列,然後重復上面的步驟.
2.如何在DBGridEh中某一規定的單元格中加入另一個控件?
例如:每次當光標移動到某行第1單元格時,該控件(按鈕)就顯示,一旦光標离開就消失.(象在憑證中每次輸入科目代碼一樣,光標移到科目這單元時,就顯示調用科目代碼的按鈕,一旦光標离開按鈕就消失)

2楼: 1 enterastab 为 true
2if DataCol = 9 then
begin
if gdFocused in State then
begin
DateTimePicker2.SetBounds(
DBGrid1.left + Rect.Left + 1,
DBGrid1.top + rect.top + 2,
column.Width + 2,
rect.bottom - rect.top + 1);
DateTimePicker2.Show;
end;
end
else
DateTimePicker2.Hide;
end; 如破解进销存软件

3楼: 我们在录入数据时习惯于按下回车(Enter)键就将输入光标移到下一单元格,要实现这一功能,只需在DBGrid1的OnKeyPress事件过程中添加如下代码:



procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);

begin

if Key=#13 then //如果按键为ENTER键

if DBGrid1.selectedindex <(DBGrid1.fieldcount -1)then //如果当前活动焦点小于当前数据网格的字段数

DBGrid1.selectedindex:= DBGrid1.selectedindex +1 //转入该数据的下一个字段

else

begin

if not ADOtable1.Eof then //如果不是ADOTABLE1的最后一条记录

begin //指向下一条记录

ADOtable1.Next;

DBGrid1.SelectedIndex:=0; //将当前的活动焦点定位在该记录的第一个字段中

end;

end;

end;

4楼: 学习

5楼: 属性中
EnterAsTab=True

6楼: liubin44966:

2.如何在DBGridEh中某一規定的單元格中加入另一個控件?
例如:每次當光標移動到某行第1單元格時,該控件(按鈕)就顯示,一旦光標离開就消失.(象在憑證中每次輸入科目代碼一樣,光標移到科目這單元時,就顯示調用科目代碼的按鈕,一旦光標离開按鈕就消失)
主要是想知道如何加按鈕控件在網格中,當獲得焦點就顯示,當失去焦點就消失.

仓库管理软件版7楼: 難道沒人懂這個問題?還是分不夠!
急!!!!!!!!!!

8楼: procedure TForm1.DBGridEh1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var index:integer;
begin
index:=DBGrideh1.SelectedIndex;
if key=$D then
begin
if Index=DBGrideh1.FieldCount-1 then
begin
TestDateSet.Last;
TestDateSet.Append;
TestDateSet.Edit;
DBGrideh1.SelectedField:=DBGrideh1.Fields[0];
end else
DBGrideh1.SelectedField:=DBGrideh1.Fields[index+1];
end;
end;

這方法我已試可以實現換行的功能

9楼: to Supermay:
你的方法無法實現在行的方向移動,只能在DBGridEh列的方向上下移動!

"如何在DBGridEh中某一規定的單元格中加入另一個控件?
例如:每次當光標移動到某行第1單元格時,該控件(按鈕)就顯示,一旦光標离開就消失.(象在憑證中每次輸入科目代碼一樣,光標移到科目這單元時,就顯示調用科目代碼的按鈕,一旦光標离開按鈕就消失)
主要是想知道如何加按鈕控件在網格中,當獲得焦點就顯示,當失去焦點就消失. "這個問題沒人知道?

10楼: to baobao2601:
你的方法我也試過不行啊!
是不是還有其它選項沒設置?

11楼: to baobao2601:
sorry,是我搞錯了,你方法是可行的,TKS!
沒有人知道第二個問題?

12楼: 楼主下载我的控件,http://kinneng.icpcn.com 看看是否合要求,回车键不但可以移到
下一行,还可以跳过不可编辑的列,到了表格底部还会自动新建一行,TAB键还可以跳出
表格外,是用了百多行的代码来实现的。 如服装管理软件

13楼: to kinneng:
谢谢,那个问题已解决!
"如何在DBGridEh中某一規定的單元格中加入另一個控件?
例如:每次當光標移動到某行第1單元格時,該控件(按鈕)就顯示,一旦光標离開就消失.(象在憑證中每次輸入科目代碼一樣,光標移到科目這單元時,就顯示調用科目代碼的按鈕,一旦光標离開按鈕就消失)
主要是想知道如何加按鈕控件在網格中,當獲得焦點就顯示,當失去焦點就消失. "這個問題沒人知道?

仓库管理软件版14楼: 我的控件本来就是格子获得焦点就出现一个按钮,点击按钮才弹出下拉框的,但发现
格子小的时候,按钮占用的空间。

15楼: "如何在DBGridEh中某一規定的單元格中加入另一個控件?
例如:每次當光標移動到某行第1單元格時,該控件(按鈕)就顯示,一旦光標离開就消失.(象在憑證中每次輸入科目代碼一樣,光標移到科目這單元時,就顯示調用科目代碼的按鈕,一旦光標离開按鈕就消失)


主要是想知道如何加按鈕控件在網格中,當獲得焦點就顯示,當失去焦點就消失. "這個問題沒人知道?
不好处理?我跟你一样啊

16楼: 不是有在DBGridEh上可增加其它的控件的說法?難道真的沒人知道?

17楼: 不知你是否是要这种:
在Delphi的DBGrid中插入其他可视组件
中国地质大学
张兵兵
---- Delphi提供了功能强大的 DBGrid组件,以方便进行数据库应用程序设计。但是如果我们仅仅利用DBGrid组件,每一个获得焦点(Grid)只是一个简单的文本编辑框,不方便用户输入数据。Delphi也提供了一些其他数据组件来方便用户输入,比如DBComboBox,DBCheckBox等组件,但这些组件却没有DBGrid功能强大。Delphi能不能象Visual Foxpro那样让DBGrid中获得焦点网格可以是其它可视数据组件以方便用户呢?其实我们可以通过在DBGrid中插入其他可视组件来实现这一点。

---- Delphi对DBGrid处理的内部机制,就是在网格上浮动一个组件——DBEdit组件。你输入数据的网格其实是浮动DBEdit组件,其他未获得焦点地方不过是图像罢了。所以,在DBGrid中插入其他可视组件就是在网格上浮动一个可视组件。因此任何组件,包括从简单的DbCheckBox到复杂的对话框,都可以在DBGrid中插入。下面就是一个如何在DBGrid中插入DBComboBox组件的步骤,采用同样的办法可以插入其他组件。



DrawDataCell事件是绘制单元格,当获得焦点网格所对应的字段与组合框所对应的字段一致时,移动组合框到获得焦点的网格上,并且使组合框可视,从而达到在DBGrid指定列上显示DBComboBox的功能。设置DBGrid1的OnDrawDataCell事件如下:

procedure TForm1.DBGrid1DrawDataCell
(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
if (Field.FieldName = DBComboBox1.DataField ) then
begin
DBComboBox1.Left := Rect.Left + DBGrid1.Left;
DBComboBox1.Top := Rect.Top + DBGrid1.top;
DBComboBox1.Width := Rect.Right - Rect.Left;
DBComboBox1.Height := Rect.Bottom - Rect.Top;
DBComboBox1.Visible := True;
end;
end;
end;

---- DBGrid指定单元格未获得焦点时不显示DBComboBox,设置DBGrid1的OnColExit事件如下:

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
If DBGrid1.SelectedField.FieldName
= DBComboBox1.DataField then
begin
DBComboBox1.Visible := false;

end;
end;

---- 当DBGrid指定列获得焦点时DrawDataCell事件只是绘制单元格,并显示DBComboBox,但是DBComboBox并没有获得焦点,数据的输入还是在单元格上进行。在DBGrid1的KeyPress事件中调用SendMessage这个 Windows API函数将数据输入传输到DBComboBox上,从而达到在DBComboBox上进行数据输入。因此还要设置KeyPress事件如下:

procedure TForm1.DBGrid1KeyPress
(Sender: TObject; var Key: Char);
begin
if (key < > chr(9)) then
begin
if (DBGrid1.SelectedField.FieldName
=DBComboBox1.DataField) then
begin
DBComboBox1.SetFocus;
SendMessage(DBComboBox1.Handle,
WM_Char, word(Key), 0);
end;
end;
end;

18楼: 這個情況我也用過,DBGridEh不知是否可行?
有其它更好的方法?有其它可视组件的相關例子?

19楼: 可行的,我用过。

20楼: to zhangyun781011:
在DBGridEh中你用過這個功能嗎?那在DBGrid的事件DBGrid1DrawDataCell
中 Field: TField對應DBGridEh中那個參數?
好象不行吧?

仓库管理软件版21楼: 謝謝大家,問題已經解決!