知识大全 显示鼠标指示地方的全部文本
Posted 函数
篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 显示鼠标指示地方的全部文本相关的知识,希望对你有一定的参考价值。
最近 在用Delphi编写程序时发现 当ListBox(列表框)中的文本超过显示范围时就看不到文本的完整内容 这很不方便 于是决定动手解决这个问题 让鼠标指到哪里就显示哪里的全部文本内容
一 分析问题
我们知道ListBox的Items对象中有一个Strings函数 通过指定索引可获取该索引所对应的文本 那么我们只要在OnMouseMove事件中获取当前鼠标所指的索引即可获取该索引的文本并使用Hint显示出来 因此 重点就在获取鼠标所指的索引 通过查看帮助文件 发现ListBox控件中有一个ItemAtPos函数可返回鼠标所指向的索引 找到了这个函数解决问题就容易多了
二 解决问题
在窗体中 加入一个ListBox控件 将ShowHint属性设置为True 再添加一个CommandButton控件 Caption属性设置为 填充ListBox
双击Button 控件 写入下面的代码
procedure TForm Button Click(Sender TObject)
//用显示System目录中的文件来填充ListBox
var
SearchRec TSearchRec
nResult Integer
const
szFilePath = d \\\\windows\\\\system \\\\* *
begin
//填充ListBox
ListBox Clear
nResult =FindFirst(szFilePath faAnyFile SearchRec) //查找第一个文件
while nResult = do //如果返回值为 表示找到文件
begin
//将找到的文件添加到ListBox中 ExtractFilepath函数用于提取文件路径
ListBox Items Add(ExtractFilePath(szFilePath) + SearchRec Name)
nResult =FindNext(SearchRec) //继续查找下一个文件 至到返回值不为 时
end
end
下面编写关键的部分代码 在ListBox的OnMouseMove事件中 加入下面的代码
procedure TForm ListBox MouseMove(Sender TObject Shift TShiftState X Y Integer)
var
nPos TPoint //将nPos声明为TPoint类型
nIndex Integer
begin
//填充nPos结构
//由于ItemAtPos是利用鼠标在ListBox中的坐标计算出所指位置的 因此我们需要获取鼠标在ListBox中的坐标 在OnMouseMove事件中已经为我们提供了鼠标在ListBox中的坐标 X Y 只需将X Y赋给nPos的x y即可
nPos x =X
nPos y =Y
//使用ItemAtPos函数返回鼠标所在ListBox中的位置
nIndex =ListBox ItemAtPos(nPos True)
if nIndex > then
ListBox Hint =ListBox Items Strings[nIndex] //显示当前位置的文本
end
将上面的代码完成后 就可以实现将鼠标指向ListBox中任何一个Item时就显示出内容来 但是程序还有一个Bug 每次鼠标移动到ListBox中时只能显示一次 这个问题与显示Hint有关 程序默认重复显示Hint的时间为 毫秒 因此只能显示一次Hint 只要我们修改重复显示Hint的时间即可解决这个问题 在窗体中加入一个ApplicationEvents控件 在OnShowHint事件中加入下面的代码
procedure TForm ApplicationEvents ShowHint(var HintStr String
var CanShow Boolean var HintInfo THintInfo)
begin
HintInfo ReshowTimeout = //设置重显时间 这里设为 毫秒比较合适
end
修改Hint的重显时间后这个功能就非常的完美了 可以看出 真正实现这个功能的代码是很少很简单的 用一个ItemAtPos函数就可以轻松搞定 这就是Delphi可爱的地方 不过作为程序员 不应该就此满足的 如果你有兴趣了解ItemAtPos是怎样获取鼠标所指范围在ListBox中索引的 那么请继续向下看
三 深入了解
要查看ItemAtPos函数在Delphi中是怎样编写的很简单 只要按下Ctrl键不放 再用鼠标点击ItemAtPos函数 就会自动定位到这个函数的所在位置(用这样的方法 我们可以查看Delphi中大多数函数及过程的源代码 分析一下这些源代码对我们编写程序是很有帮助的 而且也可以很好地了解这些函数是如何工作的)
源码如下
function TCustomListBox ItemAtPos(Pos TPoint Existing Boolean) Integer
var
Count Integer //记录ListBox中Item的个数
ItemRect TRect //记录Item的范围
begin
if PtInRect(ClientRect Pos) then //PtInRect是一个API函数 用于检测Pos所指的范围是否在ListBox当中 ClientRect这里是begin ListBox的范围
Result = TopIndex //将返回值设为ListBox第一个Item的索引值 TopIndex为
Count = Items Count //计算总数
while Result < Count do //如果当前索引值小于总数则开始循环
begin
Perform(LB_GETITEMRECT Result Longint(@ItemRect)) //向ListBox控件发送LB_GETITEMRECT消息 获取当前Item的范围
if PtInRect(ItemRect Pos) then Exit //如果刚好Pos所指的范围在当前Item的范围内则退出整个函数
Inc(Result) //将Result加 相当于Result =Result +
end
if not Existing then Exit
end
Result = //如果Pos所指的范围不在ListBox范围内 则返回
end
cha138/Article/program/Delphi/201311/24668相关参考
本文为大家介绍下利用js来验证文本框的值当鼠标焦点离开文本框时进行验证示例代码如下感兴趣的朋友可以参考下哈希望对大家有所帮助 利用js来验证文本框的值复制代码代码如下:lishixinz
Asp读取文本文件并显示 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <> &
使用ASP读出文本文件并显示 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!(注:textStrea
鼠标移动到名(waitgif)上显示图片鼠标移开则不显示图片 复制代码代码如下:<!DOCTYPEHTMLPUBLIC"//WC//DTDHTMLTransitional//EN"
电脑开机后黑屏只显示鼠标指针是怎么回事?此时系统并非真的黑屏,只是显示黑色而已,鼠标指针显示是正常的,说明显示器与电脑主机均无异常,是操作系统出现故障了,可以通过以下方法解决:1)尝试在系统下按“ct
使用PHP读取文本(TXT)文件并分页显示 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!views
Div显示在鼠标的位置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <div
知识大全 无线鼠标接收器usb插入后,系统显示不能识别的设备
无线鼠标接收器usb插入后,系统显示不能识别的设备1:鼠标本身出问题了,可能里面的零件坏了,建议换个鼠标试试,如果换个解决问题,就是鼠标的问题。2:是否USB接口松动或者USB接口出问题,接触不良,换
电脑开机后不显示桌面只有鼠标箭头,怎么回事电脑开机后不显示桌面只有鼠标箭头,可能的原因及解决办法如下:重启电脑:在当前状态,或按主机重启键重启电脑,或先长按电源键强制关机再重新开机。如果不再出现错误提
知识大全 电脑系统启动了就是不显示桌面.鼠标能动.显示黑屏是怎么了
电脑系统启动了就是不显示桌面.鼠标能动.显示黑屏是怎么了电脑开机黑屏解决方法:1.检查电脑部件是否安插入牢靠首先请检查显示器电缆是否牢固可靠地插入到主机接口中,然后再检查显卡与主板I/O插槽之间的接触