偶写的第一个控件,一个用选择代替输入的Edit控件…
FDataSource :=TDataSource.Create(self);
FDBGrid.FreeNotification(self);
FADOQuery.FreeNotification(self);
FDataSource.FreeNotification(self);
FDataSource.DataSet:=FADOQuery;
with FDBGrid do
begin
DataSource:=FDataSource;
Ctl3D:=false;
Visible:=false;
ParentCtl3D:=false;
Options:=[dgColLines,dgRowLines,dgRowSelect,dgAlwaysShowSelection,dgConfirmDelete,dgCancelOnExit];
OnMouseUp:=DoFDBGridMouseUp;
OnKeyDown:=DoFDBGridKeyDown;
end;
with self do
begin
ParentCtl3D:=false;
Ctl3D:=false;
end;
end;
procedure TDBLookUpEdit.CreateWnd;
begin
FCreating := True;
try
inherited CreateWnd;
finally
FCreating := False;
end;
end;
procedure TDBLookUpEdit.CMBidimodechanged(var Message: TMessage);
begin
inherited;
FDBGrid.BiDiMode := BiDiMode;
end;
procedure TDBLookUpEdit.CMEnabledchanged(var Message: TMessage);
begin
inherited;
FDBGrid.Enabled := Enabled;
end;
procedure TDBLookUpEdit.CMVisiblechanged(var Message: TMessage);
begin
inherited;
end;
procedure TDBLookUpEdit.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (AComponent = FDBGrid) and (Operation = opRemove) then FDBGrid:= nil;
if (AComponent = FADOQuery) and (Operation = opRemove) then FADOQuery:= nil;
if (AComponent = FDataSource) and (Operation = opRemove) then FDataSource:= nil;
end;
procedure TDBLookUpEdit.SetParent(AParent: TWinControl);
begin
inherited SetParent(AParent);
if FDBGrid <> nil then FDBGrid.Parent := self.Owner as TForm;
end;
procedure TDBLookUpEdit.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
inherited;
if FDBGrid <> nil then
with FDBGrid do
begin
Top:=-Height;
Left:=-Width;
end;
end;
procedure TDBLookUpEdit.SetRecText(FieldNo: integer);
begin
self.SetFocus;
self.SelectAll;
if (FADOQuery.Connection <>nil) or (FADOQuery.ConnectionString <>'''''''') then
if FADOQuery.Active then
if FADOQuery.RecordCount > then
if FADOQuery.FieldCount>FieldNo then
begin
self.Text:=FDBGrid.Fields[FieldNo].Text;
self.SelectAll;
self.SetFocus;
end;
end;
procedure TDBLookUpEdit.FDoEnter(Sender: TObject);
var
p :TPoint;
begin
P:=self.ClientToParent(point(,self.Height),(self.Owner as TForm));
if (FDBGrid.Height p.y )<=(self.Owner as TForm).Height then
begin
FDBGrid.Top :=p.y ;
end
else begin
FDBGrid.Top :=p.y--self.Height -FDBGrid.Height;
end;
FDBGrid.Left :=p.x ;
FDBGrid.BringToFront;
FDBGrid.Visible:=true;
if self.Text='''''''' then SetRecText();
self.SelectAll;
if (self.Text<>'''''''') and FADOQuery.Active then
FADOQuery.Locate(FKeyField, self.text,[lopartialkey]);
end;
procedure TDBLookUpEdit.FDoExit(Sender: TObject);
begin
if not FDBGrid.Focused then FDBGrid.Visible:=false;
end;
procedure TDBLookUpEdit.DoFDBGridMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SetRecText();
FDBGrid.Visible:=false;
end;
procedure TDBLookUpEdit.DoFDBGridKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key= then
begin
SetRecText();
FDBGrid.Visible:=false;
key:=;
end;
end;
procedure TDBLookUpEdit.CNCommand(var Message: TWMCommand);
begin
case Message.NotifyCode of
EN_CHANGE:
begin
if not FCreating then
if Assigned(FOnChange) then FOnChange(self);
end;
EN_KILLFOCUS:
begin
if Assigned(FOnExit) then FOnExit(self);
FDoExit(self);
end;
EN_SETFOCUS:
begin
if Assigned(FOnEnter) then FOnEnter(self);
FDoEnter(self);
end;
end;
end;
procedure TDBLookUpEdit.DblClick;
begin
inherited;
FDoEnter(self);
end;
function TDBLookUpEdit.GetDataSource: TDataSource;
begin
Result := FDBGrid.DataSource;
end;
procedure TDBLookUpEdit.SetDataSource(Value: TDataSource);
begin
if Value <> FDBGrid.Datasource then FDBGrid.DataSource := Value;
if Value <> nil then Value.FreeNotification(Self);
end;
procedure TDBLookUpEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
if FDBGrid.Visible then
begin
if (key=) or (key=) then
begin
SendMessage(FDBGrid.Handle,WM_KEYDOWN,key,);
key:=;
end;
if key= then
begin
SetRecText();
FDBGrid.Visible:=false;
偶写的第一个控件,一个用选择代替输入的Edit控件…的更多相关文章
- 增加duilib edit控件的提示功能和多种文字颜色
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41786407 duilib的CEditUI控件内部使用了win32的原生 ...
- Delphi在Listview中加入Edit控件
原帖 : http://www.cnblogs.com/hssbsw/archive/2012/06/03/2533092.html Listview是一个非常有用的控件,我们常常将大量的数据(如数据 ...
- ASP.NET自定义控件组件开发 第一章 第一章:从一个简单的控件谈起
第一章:从一个简单的控件谈起 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第三 ...
- QT 创建一个具有复选功能的下拉列表控件
最近研究了好多东西,前两天突然想做一个具有复选功能的下拉列表框.然后在网上"学习"了很久之后,终于发现了一个可以用的,特地发出来记录一下. 一.第一步肯定是先创建一个PROJECT ...
- 【React】开发一个城市选择控件
想到做这个,是因为无意中在github上看到了这一个仓库https://github.com/lunlunshiwo/ChooseCity,做的就是一个城市选择控件,是用vue写的,说的是阿里的一道题 ...
- 一个Demo让你掌握Android所有控件
原文:一个Demo让你掌握Android所有控件 本文是转载收藏,侵删,出处:"安卓巴士" 下面给出实现各个组件的源代码: 1.下拉框实现--Spinner packag ...
- 基于 element-plus 封装一个依赖 json 动态渲染的查询控件
前情回顾 基于 el-form 封装一个依赖 json 动态渲染的表单控件 Vue3 封装第三方组件(一)做一个合格的传声筒 功能 使用 vue3 + element-plus 封装了一个查询控件,专 ...
- C++ 一个程序获取另一个程序Edit控件的内容
//一个程序获取另一个程序Edit控件的内容 //根据指定程序的标题名获取改程序窗口的句柄 HWND hWnd=::FindWindow(NULL,"zhang001"); if( ...
- android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果
主类:IndexAnimationLinearLayout.java package com.yw.sortlistview; import java.util.ArrayList; import j ...
随机推荐
- ado.net的简单数据库操作(三)——简单增删改查的实际应用
果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...
- 使用.NetCore 控制台演示 熔断 降级(polly)
1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...
- [转]Have a query in Blue prism coding stage and collection stage.
本文转自:https://www.rpaforum.net/threads/have-a-query-in-blueprism-coding-stage-and-collection-stage.48 ...
- webpack 单独打包指定JS文件(CopyWebpackPlugin)
背景: 不确定打出的前端包所访问的后端IP,需要对项目中IP配置文件单独拿出来,方便运维部署的时候对IP做修改.因此,需要用webpack单独打包指定文件.npm install --save-dev ...
- cesium 之地图显示坐标、比例尺、海拔高度效果篇(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- Snapde和Excel、PowerPivot、WPS打开超大CSV文件性能比较
Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏. 我们拿四份文件进行测试,对比一下他们打开大文件的性能:loan_theme_ids.c ...
- 都 9012了,该选择 Angular、React,还是Vue?
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 尽管 Web开发的典型应用场景除了将服务器用作平台.浏览器用作客户端之外,几乎很少活跃于其他业务领域,但不可 ...
- PM领导能力成熟度2级
人生如戏,大幕拉开,他走上舞台,饰演PM一角. 从技术岗位迈向管理岗位的第一步,对大多数像他一样的新晋PM来说,并不轻松.技术知识与经验是他曾经的主要才能与成功基础,而从成熟度一级开始,身为管理者的他 ...
- [20190418]exclusive latch spin count.txt
[20190418]exclusive latch spin count.txt--//昨天测试"process allocation" latch,主要这个latch与其它拴锁s ...
- 教你一招 | 用Python实现简易可拓展的规则引擎
做这个规则引擎的初衷是用来实现一个可序列号为json,容易拓展的条件执行引擎,用在类似工作流的场景中,最终实现的效果希望是这样的: 简单整理下需求 执行结果最终返回=true= or false 支持 ...