DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tino0914
今日帖子: 30
在线用户: 15
导航: 论坛 -> 论坛精华贴 斑竹:liumazi,iamdream  
作者:
男 asen26 (清风) ★☆☆☆☆ -
禁用账号
2003/8/1 10:33:20
标题:
被禁用帐号,仅在管理模式可见! 浏览:7568
加入我的收藏
楼主: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
我爱Delphi,我爱所有爱Delphi的朋友
作者:
男 boy (阿門) ★☆☆☆☆ -
盒子活跃会员
2003/8/1 12:17:09
1楼: 用DbGrid制作edit錄入時的下拉提示框 
   
   河南省煤炭廳信息中心   懷標 

在Delphi語言中提拱了不少數據輸入的方法,如可從數據庫中選擇或人工輸入的控件有:DBListBox、DBComboBox、DBLookupListBox、DBLookupComboBox等。但對於這樣一個例子:數據庫名為dm.db,其中有兩個字段:

代碼:Code

名稱:Name

要求根據用戶輸入的代碼,去獲取該代碼對應的名稱。

一般的用戶並不知道代碼和名稱的對應關繫,如讓用戶輸入代碼,選出對應的名稱,由於上述的控件不能使操作人員看到代碼和名稱的對應關繫,如讓用戶根據代碼用下拉框去查找到對應的該條紀錄的名稱,將很難操作。

根據這種情況,我編制了下面程序,把DBGrid做為Edit的下拉列表框輔助操作,在DBGrid中直觀地顯示出代碼和名稱的對應關繫,並且能夠根據用戶錄入代碼的變化情況,隨時更新DBGrid中的記錄指針,使用戶可以直觀方便地點取所需要的名字,而且DBGrid是依據用戶在Edit中輸入代碼時纔顯現,跳出Edit框即消失。這種方法既為用戶錄入提供了方便,又不影響界面的整體美觀,效果不錯。現把該程序提供給大家,你們可根據自己的需要,對程序進行加工處理,應用於程序開發中,希望起到拋磚引玉的作用。

做這樣一個小程序:讓用戶輸入代碼,然後將名稱顯示在窗體上。

1、首先我們可以建立一個Form,在此Form中增加控件:
Table : Table1,設置其屬性對應代碼庫dm.db,並將Active置為True
DataSource : DataSource1, 設置其屬性DataSet為Table1
Edit : CodeEdit,NameEdit分別對應代碼輸入框和名稱顯示框
DBGrid : DBGrid1, 設置其屬性DataSource為DataSource1
並把CodeEdit的屬性Text的值置空,NameEdit的屬性Text的值置空。  

2、對照以下語句,修改CodeEdit的OnEnter、OnExit、OnKeyDown、OnKeyUp事件:
在CodeEdit的OnEnter事件如下:

procedure TForm1.CodeEditEnter(Sender: TObject);
begin
if CodeEdit.text<>' then
begin
CodeEdit.SelStart:=length(CodeEdit.text);
Table1.locate('code', CodeEdit.text,[lopartialkey]);
End;
end;

CodeEdit的OnExit事件如下:

procedure TForm1.CodeEditExit(Sender: TObject);
begin
if activecontrol<>dbgrid1 then
begin
dbgrid1.Visible:=false;
Table1.Locate('code',codeedit.text,[lopartialkey]);
if Table1.Eof then
begin
dbgrid1.Visible:=true;
exit;
end;
if not Table1.Eof then
begin
codeedit.Text:=Table1.fieldbyname('code').asstring;
NameEdit.Text := Table1.fieldbyname('name').asstring;
end;
end;
end;

CodeEdit的OnKeyDown事件如下:

Procedure Tform1.CodeEditKeyDown(Sender: TObject;var Key: Word;Shift:
TShiftState);
var
i:integer;
begin
if (Table1.RecordCount>0) then
begin
case key of
48..57:
begin
dbgrid1.Visible:=true;
Table1.Locate('code',CodeEdit.text,[lopartialkey]);
end;
vk_next:
if dbgrid1.Visible then
begin
i:=0;
while (not Table1.Eof) and (i<11) do
begin
Table1.Next;
i:=i+1;
end;
CodeEdit.Text:=Table1.fieldbyname('code').asstring;
End;
vk_prior:
if dbgrid1.Visible then
begin
i:=0;
while (not Table1.Bof) and (i<11) do
begin
Table1.prior;
i:=i+1;
end;
CodeEdit.Text:=Table1.fieldbyname('code').asstring;
end;
vk_down:
if dbgrid1.Visible then
begin
if not Table1.Eof then
begin
Table1.Next;
CodeEdit.Text:=Table1.fieldbyname('code').asstring;
end;
end;

vk_up:
if dbgrid1.Visible then
begin
if not Table1.Bof then
begin
Table1.Prior;
CodeEdit.Text:=Table1.fieldbyname('code').asstring;
end;
end;
end;
end
else
dbgrid1.Visible:=false;
CodeEdit.SelStart:=length(CodeEdit.text);
end;

CodeEdit的OnKeyUp事件如下:

procedure Tform1.CodeEditKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Table1.RecordCount>0) then
begin
if ((key>=48) and (key<=57)) then

Table1.Locate('code',codeedit.text,[lopartialkey]);
if (key=VK_back) and (codeedit.text<>') then
Table1.Locate('code',codeedit.text,[lopartialkey]);
if (key=VK_BACK) and (codeedit.text=') then
Table1.First;
if (key=vk_down) or (key=vk_up) or (key=vk_prior) or (key=vk_next) then
if dbgrid1.Visible then
codeedit.Text:=Table1.fieldbyname('code').asstring;
end
else
dbgrid1.Visible:=false;
codeedit.SelStart:=length(codeedit.text);
end;

本程序在Windows98+Delphi4.0、5.0下均調試通過。 
 
 


----------------------------------------------
Delphi開發◆伺服器架設◆免安裝APACHE,PHP,CGI Perl, MYSQL ★
作者:
男 a_vin (笑我笨:)) ★☆☆☆☆ -
普通会员
2003/8/1 13:02:06
2楼: 如果你习惯用第三方控件,问题会变得非常简单!哈哈.
文字
----------------------------------------------
-
作者:
男 asen26 (清风) ★☆☆☆☆ -
禁用账号
2003/8/1 15:45:57
3楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
我爱Delphi,我爱所有爱Delphi的朋友
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2003/8/1 18:34:56
4楼: 最简单的用数学符号 √ 不就可以了?
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 30896186 (缘来一家人) ★☆☆☆☆ -
盒子活跃会员
2003/8/2 11:37:53
5楼: www.playicq.com
dxdbgrid
----------------------------------------------
-
作者:
男 jierenwu (love_delphi) ★☆☆☆☆ -
盒子活跃会员
2003/8/2 21:51:27
6楼: 能不能发控件dxdbgrid给我

jierenwu@yeah.net

 谢谢!!!!
----------------------------------------------
按此在新窗口浏览图片
http://www.jiesky.com
共同学习,共同努力!
作者:
男 minlanzi (123456) ▲▲▲▲▲ -
普通会员
2012/9/22 20:22:17
7楼:  春水堂
----------------------------------------------
春水堂
作者:
男 herui (hi) ★☆☆☆☆ -
普通会员
2012/9/22 21:15:39
8楼: ls把03年的贴子翻出来,什么也没有,厉害。
----------------------------------------------
delphier
作者:
男 hrzbq (红日子) ▲▲▲▲△ -
普通会员
2013/7/11 9:53:10
9楼: 好日子深圳搬家公司成立2006年提供:深圳搬家,深圳搬厂,深圳吊装,深圳搬钢琴,深圳搬写字楼等,深圳好日子搬家公司是工商注册的一家深圳正规搬家公司。电话25425182 http://www.sz-hrzbj.cn
深圳搬家公司
深圳搬厂公司
深圳福田搬家公司
深圳罗湖搬家公司
深圳南山搬家公司
深圳宝安搬家公司
深圳龙华搬家公司
深圳龙岗搬家公司
深圳布吉搬家公司
深圳盐田搬家公司
深圳吊车公司  
深圳长途搬家公司


深圳空调维修
深圳海尔空调维修
深圳LG空调维修
深圳新科空调维修
深圳志高空调维修
深圳三菱空调维修
深圳格力空调维修
深圳松下空调维修
深圳奥克斯空调维修
深圳美的空调维修
深圳空调清洗
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行1156.25毫秒 RSS