偶写的第一个控件,一个用选择代替输入的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 ...
随机推荐
- 【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容
.NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新. 下面是该预览版的更新列表: Razor组件改进: 单项目模板 新的Razer扩展 E ...
- 权限管理系统之SpringBoot集成LayUI实现后台管理首页
万事开头难,昨天一直在构思用户权限管理系统怎么实现,实现哪些需求,采用什么技术等,也在网上百度了好多,计划使用SpringBoot + Mybatis + thymeleaf + LayUI + S ...
- KVO讲解
最近一直在写swift项目,没有时间更新自己的技术博客,以前在博客里面写过KVO的底层原理,今天我们来看一下KVO的整个使用过程和使用场景(附有demo),大约花大家10-15分钟时间,希望大家看完博 ...
- [转]Node.js 应用:Koa2 使用 JWT 进行鉴权
本文转自:https://www.cnblogs.com/linxin/p/9491342.html 前言 在前后端分离的开发中,通过 Restful API 进行数据交互时,如果没有对 API 进行 ...
- FeignClient注解及参数
一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 1 2 3 4 5 @FeignC ...
- 调用链监控 CAT 之 URL埋点实践
URL监控埋点作用 一个http请求来了之后,会自动打点,能够记录每个url的访问情况,并将以此请求后续的调用链路串起来,可以在cat上查看logview 可以在cat Transaction及Eve ...
- 硬杠后端(后端坑系列)——Django前期工作
Django是一个开放源代码的Web应用框架,由Python写成,采用了MVC的框架模式. MVC MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件 ...
- iOS----------Xcode 无线调试
环境要求: 至少Mac OSX 10.12.6 iOS 11 Xcode 9 1. ”自己的工程“ -> windows -> Device and Simulators ,打开设备和模拟 ...
- vue的表单编辑删除,保存取消功能
过年回来第一篇博客,可能说的不是很清楚,而且心情可能也不是特别的high,虽然今天是元宵,我还在办公室11.30在加班,但就是想把写过的代码记下来,怕以后可能真的忘了.(心将塞未塞,欲塞未满) VUE ...
- js 倒计时跳转
用js实现简单的倒计时结束页面跳转效果,主要用到setInterval()和clearInterval()方法,页面跳转使用window.location.href = " ".倒 ...