你可以通过API实现。
elphiDBGrid中实现下拉列表字段编程的一种方法
用delphi开发数据库软件,经常使用DBGrid控件实现数据的输入与显示,像大家熟悉
的Excel97、VFP中的BROWS就是采用了这种数据网格的形式。很多情况下,在进行数
据输入时,有些字段只允许某几个固定的条目,像学生档案管理中学生的所在系别,只有
学校固定好的几个系,还有像学生的政治面貌等等,可否从一个下拉列表中进行选择,从
而方便输入和避免输入错误呢?,Delphi的数据网格控件DBGrid支持的下拉列表编程可
以实现此功能,但有明显的缺陷,就是使用不方便,为显示某字段的下拉框需按两次回车
键,然后用鼠标点击下拉列表的下拉按钮,下拉列表才能出现,输入数据时总是按动鼠标
非常别扭。下面介绍的下拉列表的实现方法可以在不修改DBGrid控件或利用钩子函数的
基础上实现下拉列表方便的开合,操作时不再需要按动鼠标,最大限度的方便了数据输入人员。
----基本思路
----利用一个浮动式菜单PopupMenu,浮动式菜单的各菜单条是用于选择的相应条目。以此
来实现下拉列表的功能。为了实现浮动式菜单与相应字段的结合,还需要做以下的工作:
----(1)在DBGrid控件属性中有PoppupMenu一栏,添入浮动式菜单名,此时,程序运行
时,按鼠标右键即可打开PoppupMenu进行选择。
----(2)为使键盘控制PoppupMenu的开合还需将装载DBGrid的窗体的Keypreview属性
设为true,在DBGrid的KeyDown事件中写入一事件,来控制PoppupMenu的开合的位置
与显示条件。
----下面以一个学生信息库中的学生的系别为例(字符串类型)为例,给出一个具体的例子:
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Classes,
Graphics,Controls,Forms,Dialogs,
Db,Menus,DBTables,Grids,DBGrids;
type
TForm1=class(TForm)
DBGrid1:TDBGrid;
DataSource1:TDataSource;
Table1:TTable;
PopupMenu1:TPopupMenu;
N1:TMenuItem;
N2:TMenuItem;
N3:TMenuItem;
Table1XH:TStringField;
Table1XM:TStringField;
Table1XB:TStringField;
N4:TMenuItem;
procedureDBGrid1KeyDown
(Sender:TObject;varKey:Word;
Shift:TShiftState);
procedureN1Click(Sender:TObject);
procedureN2Click(Sender:TObject);
procedureN3Click(Sender:TObject);
procedureN4Click(Sender:TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
{$R*.DFM}
procedureTForm1.DBGrid1KeyDown
(Sender:TObject;varKey:Word;
Shift:TShiftState);
var
LastEditCol:integer;
begin
LastEditCol:=DbGrid1.SelectedIndex;
ifLastEditCol<>2thenexit;//让浮动式菜单只对第二列起作用
if(Key=VK_RETURN)//VK_***是您的热键的虚键值
then
PopupMenu1.Popup(336,222);//336,222浮动式菜单显示的位置
end;
procedureTForm1.N1Click(Sender:TObject);
begin
table1.Edit;
table1.FieldValues['XB']:='物理系';
table1.post;
end;
procedureTForm1.N2Click(Sender:TObject);
begin
table1.Edit;
table1.FieldValues['XB']:='数学系';
table1.post;
end;
procedureTForm1.N3Click(Sender:TObject);
begin
table1.Edit;
table1.FieldValues['XB']:='计算机系';
table1.post;
end;
procedureTForm1.N4Click(Sender:TObject);
begin
table1.Edit;
table1.FieldValues['XB']:='中文系';
table1.post;
end;
end.