分享 : 修正 TDBNavigator 控件導航標的錯位

星際訪客 2014-12-14 09:12:14
VCL 自帶的數據庫導航 TDBNavigator 控件短小精幹算實用...但是...打從 Delphi 與 C++Builder 問世以來就存在著操作上的不協調......

在使用鼠標或鍵盤操作表格控件時...當移動位置至首筆(第一行)時...First 與 Prior 導航按鈕不應該處在 Enable 可按的情形...而移動位置至末筆(最後一行)時...Next 與 Last 導航按鈕也不應該處在 Enable 可按的情形...這在別的數據庫之表格或導覽控件並未見過 :



實際上 Bof 與 Eof 的邏輯位置在隔線上而非框格上...所以 Vcl.DBCtrls.pas 之 TDBNavigator 原代碼...將 Bof 與 Eof 當作物理位置來識別並不正確...必須做修正以符合實際上的操作 :
  { TODO -oxuware -c導航按鈕列 : 001 校正首筆末筆按鈕邏輯 }
//UpEnable := Enabled and FDataLink.Active and not FDataLink.DataSet.BOF;
UpEnable := Enabled and FDataLink.Active and (FDataLink.DataSet.RecNo <> 1);

//DnEnable := Enabled and FDataLink.Active and not FDataLink.DataSet.EOF;
DnEnable := Enabled and FDataLink.Active and
(FDataLink.DataSet.RecNo <> FDataLink.DataSet.RecordCount);


經修正後導航標的位置正確 :

...全文
122 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
星際訪客 2014-12-15
  • 打赏
  • 举报
回复
引用 1 楼 lyhoo163 的回复:
支持1楼修改代码。 本人压根不用TDBNavigator,而是自己编写一个。
嘿嘿~ 1樓? 有現成的可用何必多此一舉哩~
lyhoo163 2014-12-14
  • 打赏
  • 举报
回复
支持1楼修改代码。 本人压根不用TDBNavigator,而是自己编写一个。
第一章 DeIPhi面向对象编程技术 1.1 Delphi的Object Pascal参考 1.1.1 Delphi的数据类型、变量和常量 1.1.2 DeIPhi的自定义数据类型 1.1.3 Object Pascal的语句结构 1.1.4 过程和函数 1.1.5 Object Pascal的库单元 1.1.6 程序模块 1.2 DeIphi的对象 1.2.1 Delphi对象的特性 1.2.2 对象的范围 1.2.3 对象的域 1.2.4 对象变量的赋值 1.2.5 建立非可视化对象 第二章 Delphi基本vcL类库剖析 2.1 VCL类结构 2.1.1 VCL类特征及其作用 2.1.2 VCL类结构 2.2 TObject类剖析 2.2.1 TObject类概述 2.2.2 TObject方法 2.3 TPersistent类方法 2.3.1 TPersistent类概述 2.3.2 TPersstent类方法及其功能描述 2.4 TComponent类属性和方法 2.4.1 TComponent概述 2.4.2 TCOmponent属性 2.4.3 TComponent方法 2.5 TControl类属性、方法及事件 2.5.1 TControl类概述 2.5.2 TContTol类属性 2.5.3 TControl类方法 2.5.4 TControl类事件 2.6 TGraphicControl类属性、方法 2.6.1 TGraphicControl概述 2.6.2 TGraphiControl类属徽 2.6.3 TGraphicControl美万法 2.7 TWinControl类属性、方法及事件 2.7.1 TWinConttol类概述 2.7.2 TWinControl类属性 2.7.3 TWinConttol类方法 2.7.4 TWinControl类事件及其功能描大 第三章 Delphi部件开发基本方法 3.1 Delphi部件开发编程概述 3.1.1 部件的定义及特征 3.1.2 创建部件的途径 3.1.3 测试求安装的部件 3.2 创建属性、方法和事件 3.2.1 创建属性 3.2.2 创建方法 3.2.3 创建事件 3.2.4 消息处理 3.3 使部件在设计时可见 3.3.1 注册部件 3.3.2 添加部件面板上的位图 3.3.3 提供部件帮助 3.3.4 添加属性编辑器 3.3.5 添加部件编辑器 3.3.6 编译部件成为包 第四章 Delphi标准控件扩展开发 4.1 非窗口控件抽象类剖析 4.1.1 TCustolmLabel类属性 4.1.2 TCustolnLabel类方法 4.2 非窗口控件扩展开发实例分析 4.2.1 TDigitsPanel控件 4.2.2 TDigitSPanel控件应用程序分析 4.3 窗口控件抽象类剖析 4.3.1 TCustomComboBox抽象类 4.3.2 TCustomHotKey抽象类 4.3.3 TCustomListBox抽象类 4.3.4 TCustomLIistView抽象类 4.3.5 TCustomTabControl抽象奖 4.3.6 TCustomTreeView抽象类 4.3.7 TCustomUpDown抽象类 4.3.8 TScrofingWinControl抽象类 4.3.9 TCustomEdit抽象类 4.3.10 TButtonControl抽象类 4.3.1 TCustomControl抽象类 4.4 窗口控件扩展开发实例分析 4.4.1 TCustomPanel抽象类 4.4.2 TAIPanel控件开发 第五章 开发属性编辑器 5.1 TPyopertyEdtor类剖析 5.1.1 TPropertyEdtor类属性 5.1.2 TPropertyEdtor类方法 5.2 属性编辑器开发编程实例 5.2.1 TClassProperty类剖析 5.2.2 图像对家属性编辑器 第六章 开发数据库相关部件 6.1 数据库编程概述 6.1.1 数据库管理系统 6.1. 2数据库应用程序 6.2 Delphi数据库编程基础 6.2.1 Delphi的数据库部件 6.2.2 DelPhi可以访问的数据源 6.3 数据访问部件剖析 6.3.1 TDatabase部件 6.3.2 TDataSet类 6.4 数据控制控件剖析 6.4.1 TDBGrid控件 6.4.2 TDBNavigator控件 6.4.3 TDBComboBox控件 6.5 数据库部件开发实例分析 6.5.1 开发TKbmMemTable部件 6.5.2 KblnMemTable部件应用 第七章 开发图像处理部件 7.1 图像处理部件开发概述 7.2 TFastBMP类的开发 7.3 TFastlmage部件的开发 第八章 开发数值计算部件 8.1 数值计算部件开发概述 8.2 矩阵部件开发编程 8.2.1 TMatrix类属性 8.2.2 TMatrix类方法 8.2.3 TMatrix的全局函数 8.3 矩阵浏览器控件开发编程 8.3.1 TMatrixViewer类属性 8.3.2 TMatrixViewer类方法 8.3.3 TMatrixViewer类事件 8.4 矩阵及矩阵浏览器部件应用程序开发编程 第9章 开发工控界面部件 9.1 工控界面概述 9.2 数码管部件的开发 9.2.1 编码 9.2.2 TDisply部件的属性 9.2.3 TDisply部件的方法 9.3 旋钮部件的开发
第1章 制作一个简单的计算器  1.1 基础知识  1.1.1 C++ Builder的集成开发环境   1.1.2 C++ Builder控件的使用方法  1.1.3 有关计算器制作中用到控件的介绍  1.2 编程思路  1.3 操作步骤  1.4 创意与超越  1,5 本章小结 第2章 单窗口文本编辑器  2.1 基础知识  2.1.1 TOpenDialog控件和TsaveDialog控件的属性   2.1.2 控件的方法和事件  2.2 编程思路  2.3 操作步骤 2.4 创意与超越 2.5 本章小结 第3章 MDI窗体应用程序 3.1 基础知识 3.1.1 主窗体和子窗体间的通讯 3.1.2 主菜单和子菜单的融合 3.1.3 Dialog控件系列介绍 3.2 编程思路 3.3 操作步骤 3.4 创意与超越 3.5 本章小结 第4章 剪贴板查看器 4.1 基础知识 4.1.1 控件的属性设置 4.1.2 事件处理 4.2 编程思路 4.3 操作步骤 4.4 创意与超越 4.5 本章小结 第5章 我的资源管理器 5.1 基础知识 5.1.1 TreeView控件 5.1.2 ListView控件 5.2 编程思路 5.3 操作步骤 5.4 创意与超越 5.5 本章小结 第6章 系统文件浏览器 6.1 基础知识 6.1.1 注册表和 INI文件简介 6.1.2 TRegistryIniFile的属性和方法 6.2 编程思路 6.3 操作步骤 6.4 创意与超越 6.5 本章小结 第7章 绘制一个简单的图表 7.1 基础知识 7.2 编程思路 7.3 操作步骤 7.4 创意与超越 7.5 本章小结 第8章 图像编辑器 8.1 基础知识 8.2 编程思路 8.3 操作步骤 8.4 创意与超越 8.5 本章小结 第9章 制作一个简单的播放器 9.1 基础知识 9.1.1 AutoEnable属性 9.1.2 Display属性 9.1.3 Fileplayer属性 9.1.4 FileName属性 9.1.5 DeviceType属性 9.1.6 EnabledButton属性 9.2 编程思路 9.3 操作步骤 9.4 创意与超越 9.5 本章小结 第10章 二维图像处理器 10.1 基础知识 10.1.1 OpenGL的工作顺序 10.1.2 程序的基本结构 10.2 编程思路 10.2.1 OpenGL应用程序库 10.2.2 OpenGL对windows系统的扩展库函数 10.2.3 OpenGL辅助函数库 10.3 操作步骤 10.4 创意与超越 10.5 本章小结 第11章 二人对战五子棋 11.1 基础知识 11.1.1 游戏界面设计 11.1.2 游戏所使用的数据结构和算法 11.1.3 TDrawGrid组件的介绍 11.1.4 TTimer组件的使用 11.2 编程思路 11.2.1 TDrawGrid的应用 11.2.2 计时功能 11.3 操作步骤 11.4 创意与超越 11.4.1 数据结构 11.4.2 程序流程 11.5 本章小结 第12章 学生资料管理程序 12.1 基础知识 12.1.1 数据库基本知识 12.1.2 访问数据库的基本途径 12.2 编程思路 12.3 操作步骤 12.4 创意与超越 12.4.1 中文数据库的字段名 12.4.2 中文输入法的自动切换 12.4.3 对TDBNavigator组件的修改 12.5 本章小节 第13章 高级学生资料管理程序 13.1 基础知识 13.1.1 TQuery组件与TTable的比较 13.1.2 SQL语言简介 13.1.3 TDBChart组件的使用 13.2 编程思路 13.3 操作步骤 13.4 创意与超越 13.5 本章小结 第14章 多媒体数据库的开发 14.1 基础知识 14.1.1 多媒体数据的特点及处理方法 14.1.2 以文件方式保存和播放多媒体数据 14.1.3 以数据方式保存和播放多媒体数据 14.1.4 TOleContainer组件的简单介绍 14.1.5 利用QuickReport组件制作中文数据报表 14.2 编程思路 14.3 操作步骤 14.4 创意与超越 14.5 本章小结 第15章 简单的CGI程序 15.1 基础知识 15.1.1 TWebModule控件 15.1.2 TPageProducer、TQueryTableProducer和TDataSetTableProducer控件 15.1.3 超文本标识语言 15.1.4 CGI的工作原理 15.2 编程思路 15.3 操作步骤 15.4 创意与超越 15.5 本章小结 第16章 网页浏览 16.1 基础知识 16.1.1 什么是WWW 16.1.2 什么是URL 16.1.3 打开URL和连接 16.1.4 在页面之间跳转 16.1.5 获得浏览器的状态信息 16.2 编程思路 16.3 操作步骤 16.4 创意与超越 16.5 本章小结 第17章 电子邮件客户端程序 17.1 基础知识 17.1.1 POP3协议 17.1.2 SMTP协议 17.2 编程思路 17.3 操作步骤 17.4 创意与超越 17.5 本章小结 第18章 网上聊天程序 18.1 基础知识 18.1.1 TServerSocket控件的属性、方法和事件 18.1.2 TClientSocket控件的属性、方法和事件 18.1.3 处理异常 18.2 编程思路 18.3 操作步骤 18.4 创意与超越 18.5 本章小结 第19章 FTP客户端 19.1 基础知识 19.2 编程思路 19.3 操作步骤 19.4 创意与超越 19.5 本章小结 附录A C++语法基础 A.1 C++的基本数据类型及常量、变量 A.1.1 常用的基本数据类型 A.1.2 变量的定义 A.1.3 常量的定义 A.2 操作符、表达式及语句 A.2.1 操作符 A.2.2 表达式 A.2.3 语句 A.3 数组 A.3.1 数组的定义 A.3.2 初始化数组 A.3.3 数组元素的访问 A.3.4 二维数组 A.4 指针 A.4.1 指针的定义 A.4.2 指针运算 A.4.3 指针与数组

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧