TDBGridEh的 搜索面板 TDBGridSearchPanel
TCustomDBGridEh.Create
FSearchPanelControl := TDBGridSearchPanelControlEh.Create(Self); //这里,创建的构造函数是 另外一个类
with FSearchPanelControl do
begin
Parent := Self;
Name := 'FSearchPanelControl';
Visible := False;
SetBounds(,,,);
{$IFDEF FPC}
{$ELSE}
ParentBackground := False;
{$ENDIF}
Text := '';
end; constructor TDBGridSearchPanelControlEh.Create(AGrid: TCustomGridEh);
begin
inherited Create(AGrid); //这里 继承的
ControlStyle := ControlStyle - [csSetCaption];
FGrid := AGrid;
InitItems;
DoubleBuffered := True;
Caption := '';
end; procedure TDBGridSearchPanelControlEh.InitItems;
var
FI: TDBGridEhNavigatorFindBtn;
FindBtn: TNavFindButtonEh;
X: Integer;
// ResName: string;
begin
MinBtnSize := Point(, );
X := ; FFindEditor := TNavFindEditEh.Create(Self); //这里 其实叫 FFindEditor,构造函数是 另外一个类
FFindEditor.Flat := True;
FFindEditor.SetBounds(X, , , MinBtnSize.Y-);
{$IFDEF FPC}
{$ELSE}
FFindEditor.BevelEdges := [beLeft, beTop, beRight, beBottom];
FFindEditor.BevelInner := bvNone;
FFindEditor.BevelKind := bkFlat;
FFindEditor.BorderStyle := bsNone;
FFindEditor.Ctl3D := True;
{$ENDIF}
FFindEditor.TabStop := False;
// FFindEditor.SpecInternalSetText('Search');
FFindEditor.EmptyDataInfo.Text := SSearchPanelEditorPromptText;
FFindEditor.Parent := Self;
FFindEditor.AutoSize := False;
FFindEditor.IsEmptyState := True;
FFindEditor.Font.Color := clGrayText;
FFindEditor.Grid := FGrid;
FFindEditor.OnUpdateModified := FindEditorUpdateModified;
FFindEditor.EditButton.Visible := False;
// FFindEditor.EditButton.Style := ebsAltDropDownEh; X := X + ; for FI := Low(FindButtons) to High(FindButtons) do
begin
FindBtn := TNavFindButtonEh.Create(Self);
FindBtn.Flat := True;
FindBtn.Index := FI;
FindBtn.ImageIndex := Ord(FI)+;
FindBtn.Enabled := True;
FindBtn.SetBounds (X, , MinBtnSize.X, MinBtnSize.Y);
FindBtn.Enabled := False;
FindBtn.Enabled := True;
FindBtn.OnClick := ClickHandler;
FindBtn.OnMouseDown := BtnMouseDown;
FindBtn.Parent := Self;
FindButtons[FI] := FindBtn;
X := X + MinBtnSize.X;
end; FindButtons[gnfbCancelSearchFilterEh].Hint := SSearchPanelApplyFilterEh;
FindButtons[gnfbFindNextEh].Hint := SSearchPanelFindNextEh;
FindButtons[gnfbFindPrevEh].Hint := SSearchPanelFindPrevEh;
FindButtons[gnfbOptionsEh].Hint := SSearchPanelOptionsEh; ResetVisibleControls;
end; constructor TCustomDBComboBoxEh.Create(AOwner: TComponent); 这里
begin
inherited Create(AOwner); //这里
FItems := TStringList.Create;
TStringList(FItems).OnChange := ItemsChanged;
FKeyItems := TStringListEh.Create;
TStringListEh(FKeyItems).CaseSensitive := True;
TStringList(FKeyItems).OnChange := KeyItemsChanged;
FVarValue := Null;
FDropDownBox := CreateDropDownBox;
FDropDownBox.Rows := ;
FItemIndex := -;
FCaseInsensitiveTextSearch := True;
TStringList(FItems).CaseSensitive := not FCaseInsensitiveTextSearch;
end; constructor TCustomDBEditEh.Create(AOwner: TComponent);
begin inherited Create(AOwner); 这里
ControlStyle := ControlStyle + [csReplicatable, csCaptureMouse];
FDataLink := CreateDataLink;
FDataLink.Control := Self;
FDataLink.OnDataChange := DataChange;
FDataLink.OnEditingChange := EditingChange;
FDataLink.OnUpdateData := InternalUpdateData;
FDataLink.OnActiveChange := ActiveChange; FEditButton := CreateEditButton;
FEditButton.OnChanged := EditButtonChanged;
FEditButton.OnRefComponentChanged := EditButtonImagesRefComponentNotifyEvent;
FEditButtons := CreateEditButtons;
FEditButtons.OnChanged := EditButtonChanged;
FEditButtons.OnRefComponentChanged := EditButtonImagesRefComponentNotifyEvent;
FEditImage := CreateEditImage; FMRUList := TMRUListEh.Create(Self);
FMRUList.OnSetDropDown := MRUListDropDown;
FMRUList.OnSetCloseUp := MRUListCloseUp; FDynProps := TDynVarsEh.Create(Self);
FEmptyDataInfo := TControlEmptyDataInfoEh.Create(Self);
UpdateControlReadOnly;
UpdateImageIndex; FButtonsBox := TEditButtonsBoxEh.Create(Self);
FButtonsBox.SetBounds(,,,);
FButtonsBox.Visible := False;
FButtonsBox.Parent := Self;
FButtonsBox.OnDown := EditButtonDown;
FButtonsBox.OnClick := EditButtonClick;
FButtonsBox.OnMouseMove := EditButtonMouseMove;
FButtonsBox.OnMouseUp := EditButtonMouseUp;
FButtonsBox.OnCreateEditButtonControl := CreateEditButtonControl; FControlLabel := TControlLabelEh.Create(Self);
FControlLabel.FreeNotification(Self);
FControlLabel.FocusControl := Self;
FControlLabelLocation := TControlLabelLocationEh.Create(Self);
end; constructor TCustomMaskEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);这里
FMaskState := [];
FMaskBlank := DefaultBlank;
end; constructor TCustomEdit.Create(AOwner: TComponent);
const
EditStyle = [csClickEvents, csSetCaption, csDoubleClicks, csFixedHeight, csPannable];
begin
inherited Create(AOwner); 这里
if NewStyleControls then
ControlStyle := EditStyle else
ControlStyle := EditStyle + [csFramed];
Width := ;
Height := ;
TabStop := True;
ParentColor := False;
FBorderStyle := bsSingle;
FAutoSize := True;
FAutoSelect := True;
FHideSelection := True;
AdjustHeight;
FOldSelLength := -;
FOldSelStart := -;
end; ======================================================================== procedure TCustomDBEditEh.WMChar(var Message: TWMChar);
var
CharMsg: Windows.TMsg;
DBC: Boolean;
begin
FCompleteKeyPress := Char(Message.CharCode);
try
DBC := False;
if (CharInSetEh(Char(Message.CharCode), LeadBytes)) then
if PeekMessage(CharMsg, Handle, WM_CHAR, WM_CHAR, PM_NOREMOVE) then
if CharMsg.Message <> WM_Quit then
begin
{$IFDEF CIL}
// FCompleteKeyPress := FCompleteKeyPress + Char(CharMsg.wParam);
{$ELSE}
FCompleteKeyPress := FCompleteKeyPress + Char(CharMsg.wParam);
{$ENDIF}
DBC := True;
end; inherited; if DBC and (Char(Message.CharCode) = #) then
PeekMessage(CharMsg, Handle, WM_CHAR, WM_CHAR, PM_REMOVE);
finally
FCompleteKeyPress := '';
end;
end; function TWinControl.DoKeyPress(var Message: TWMKey): Boolean;
var
Form: TCustomForm;
Ch: Char;
begin
Result := True;
Form := GetParentForm(Self);
if (Form <> nil) and (Form <> Self) and Form.KeyPreview and
TWinControl(Form).DoKeyPress(Message) then Exit;
if not (csNoStdEvents in ControlStyle) then
with Message do
begin
Ch := Char(CharCode);
KeyPress(Ch);
CharCode := Word(Ch);
if Char(CharCode) = # then Exit;
end;
Result := False;
end; procedure TNavFindEditEh.KeyPress(var Key: Char); 这里 输入
begin
if (Key = #) and not ListVisible then //ESC
begin
{ if CanUndo then
begin
Undo;
ClearUndo;
Modified := False;
UpdateModified;
end else}
CancelSearchEditorMode;
Key := #;
end else if (Key = #) and not ListVisible then
begin
if TCustomDBGridEhCrack(Grid).SearchPanel.FilterEnabled then
ApplySearchFilter
else
begin
if GetKeyState(VK_SHIFT) <
then TDBGridSearchPanelControlEh(Parent).FindPrev
else TDBGridSearchPanelControlEh(Parent).FindNext;
end;
Key := #;
end;
inherited KeyPress(Key);
end; procedure TDBGridSearchPanelControlEh.FindBtnClick(Index: TDBGridEhNavigatorFindBtn);右边3个按钮
var
Grid: TCustomDBGridEhCrack;
begin
Grid := TCustomDBGridEhCrack(FGrid);
if (Grid.DataSource <> nil) and (Grid.DataSource.State <> dsInactive) then
begin
if Grid.SearchEditorMode = False then
Grid.SearchEditorMode := True;
case Index of
gnfbCancelSearchFilterEh:
if not FFindEditor.TextAppliedAsFilter
then FFindEditor.ApplySearchFilter
else FFindEditor.CancelSearchEditorMode;
gnfbFindNextEh:
FindNext;
gnfbFindPrevEh:
FindPrev;
gnfbOptionsEh: ;
end;
end;
end; procedure TNavFindEditEh.CancelSearchEditorMode;
begin
SpecInternalSetText('');
TDBGridSearchPanelEhCrack(TCustomDBGridEhCrack(Grid).SearchPanel).InterSetSearchingText(Text);
TCustomDBGridEhCrack(Grid).SearchEditorMode := False;
TCustomDBGridEhCrack(Grid).ClearSearchFilter;
Modified := False;
TextAppliedAsFilter := True;
UpdateModified;
end;
TDBGridEh的 搜索面板 TDBGridSearchPanel的更多相关文章
- myeclipse的ctrl+f搜索面板功能详解
1.查找/替换方向:Direction Forward:向前 Backward:向后 2.范围:Scope All:全部(当前文件) Selected lines:选中的几行 3.选项:Options ...
- 如何定义搜索面板的过滤器?DevExpress WPF超easy
DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...
- 搜索框focus 搜索面板显示 点击别处消失 从浏览器别的页面回来消失
开始是设置了回到页面使display:none(离开页面操作失效),但是发现回到页面,面板显示,dom获取却为null,于是做了个延时的处理 currentPage: function() { var ...
- Spring Data Solr的分组查询 for 搜索面板的商品分类
private List searchCategoryList(Map searchMap) { SimpleQuery query = new SimpleQuery(new Criteria(&q ...
- 【extjs】 extjs5 Ext.grid.Panel 搜索示例
先看效果图: 页面js: <script type="text/javascript"> /** * 日志类型 store * */ var logTypeStore ...
- 【extjs】 ext5 Ext.grid.Panel 分页,搜索
带有分页,搜索的grid. <%@page language="java" contentType="text/html; charset=UTF-8" ...
- chrome浏览器 开发者工具简介
Chrome浏览器得益于其优秀的V8解释器,javascript执行速度和内存占有率表现非常优秀. 掌握了Chrome工具可提高学习效率和开发效率. 有如下功能面板,可以使用Ctrl+[和Ctrl+] ...
- [No00009B]win10快捷键大全
微软为Win10命令行(Command Prompt)加入了Ctrl + V的支持 Win10新增功能快捷键大全: 贴靠窗口:Win + 左/右 > Win + 上/下 > 窗口可以变为 ...
- 漫谈可视化Prefuse(二)---一分钟学会Prefuse
前篇<漫谈可视化Prefuse(一)---从SQL Server数据库读取数据>主要介绍了prefuse如何连接数据库sql server并读取数据进行可视化展现. 回头想想还是应该好好捋 ...
随机推荐
- Jquery的普通事件和on的委托事件小案例
以click的事件为例: 普通的绑定事件:$('.btn').click(function(){})绑定 on绑定事件:$(document).on('click','.btn2',function( ...
- svn提交代码的原则
[1]先更新在提交 [2]多提交 [3]不要提交不能通过编译的代码 [4]每次提交必须书写明晰的标注 [5]提交时注意不要提交本地自动生成的文件 [6]不要提交自己不明白的代码 [7]慎用锁定功能
- cpu缓存与多线程
一.cpu缓存结构 CPU速度远高于内存(即如果只考虑CPU和内存因素,程序的性能常常受到内存访问速度的限制,内存访问和运行),为了协调CPU和内存在速度上的差异,在CPU中增加了高速缓存.和计算机存 ...
- linux 相关学习记录
(一)概念① 物理CPU实际Server中插槽上的CPU个数物理cpu数量,可以数不重复的 physical id 有几个② 逻辑CPU /proc/cpuinfo 用来存储cpu硬件信息的信息内容分 ...
- Lecture Notes: Macros
原论文链接失效,特在这里保存一份 http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html Lisp functions take Lisp values ...
- 【BZOJ 2818】Gcd - 筛法求素数&phi()
题目描述 给定整数,求且为素数的数对有多少对. 分析 首先筛出所有的素数. 我们考虑枚举素数p,统计满足的个数,等价于统计的个数,即统计以内满足互质的有序数对个数. 不难发现,也就是说,我们只要预处理 ...
- C#中的ManagementClass类
C# 提供了ManagementClass类来获取本机的一些基本信息,比如CPU的个数,CPU的频率,网卡的MAC,内存的大小,硬盘的大小等. 获取本机MAC地址: /// <summary&g ...
- 【转】10.4新特性-ArcGIS 10.4矢量切片介绍
原文地址:http://zhihu.esrichina.com.cn/article/567 1.矢量切片简介GIS的底图一直使用金字塔技术进行切图,使用户能够快速访问指定级别的地图或者影像.但是切图 ...
- 《Java程序设计》第四周学习总结
20145224-陈颢文 <Java程序设计>第四周学习总结 教材学习内容总结 第六章 继承与多态 ·继承就是面向对象中,子类继承父类,避免重复的行为定义.重复再程序设计上是非常不好的信号 ...
- OC 实例方法和类方法区别
Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method).工 ...