全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Delphi 在窗体上创建自己光标的实例

Delphi 在窗体上创建自己光标的实例

我们知道在文本框等可以接收输入的组件中,我们可以看到闪烁的光标,并可以输入文字,如果我们在,比如窗体上时,因为不支持输入,也无法显示闪烁的光标,那我们 有办法做自己的输入吗?当然可以,下面我们演示在Form上来输入文字。

    用到的API函数如下

  • GetTextMetrics:获取程序当前的字体信息,存放到TEXTMETRIC结构中
  • CreateCaret:为系统插入标记创建一个新的形状,并且将插入标记的属主关系指定给特定的窗口。插入标记的形状。可以是线、块或位图
  • ShowCaret:显示光标
  • SetCaretPos:设置光标的位置

Delphi代码

unit Unit1; 
 
interface 
 
uses 
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
 Dialogs, StdCtrls; 
 
type 
 TForm1 = class(TForm) 
 procedure FormCreate(Sender: TObject); 
 procedure FormKeyPress(Sender: TObject; var Key: Char); 
 procedure FormPaint(Sender: TObject); 
 private 
 { Private declarations } 
 s:string; 
 public 
 { Public declarations } 
 end; 
 
var 
 Form1: TForm1; 
 
implementation 
 
{$R *.dfm} 
 
procedure TForm1.FormCreate(Sender: TObject); 
var 
 //TTextMetric存放字体信息 
 tm:TTextMetric; 
begin 
 s := ''; 
 GetTextMetrics(Self.Canvas.Handle,tm); 
 { 
 注意 CreateCaret 的第二个参数是HBITMAP类型,所以你可以使用自己的图形作为光标形状,这里采用默认 
 后面两个参数是光标的宽度和高度,可以自定义 
 } 
 CreateCaret(Self.Handle,HBITMAP(nil),tm.tmAveCharWidth div 2,tm.tmHeight); 
 ShowCaret(Self.Handle); 
 //在(10,,10)这个点上显示 
 SetCaretPos(10,10); 
end; 
 
//窗体按键事件,每次按一个键后,重写s的值,在OnPaint事件中会把s的值 画到窗体上 
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); 
begin 
 //如果是退格键,则删除前一个字符 
 if Ord(Key) = VK_BACK then 
 begin 
 if (s <> '') then 
  Delete(s,Length(s),1); 
 end 
 else 
 s := s + Key; 
 //重绘 
 Self.Invalidate; 
end; 
 
procedure TForm1.FormPaint(Sender: TObject); 
begin 
 Self.Canvas.TextOut(10,10,s); 
 //重新设置光标位置 
 SetCaretPos(Self.Canvas.TextWidth(s)+10,10); 
end; 
 
end. 
 

VC代码

//全局字符串变量 
CString s; 
 
//初始化时,设置光标 
BOOL CTest_MFCDlg::OnInitDialog() 
{ 
 CDialog::OnInitDialog();  
 ShowSelfCaret(); 
   ...... 
} 
 
//为窗体添加函数,初始化光标 
void CTest_MFCDlg::ShowSelfCaret(void) 
{ 
 CClientDC dc(this); 
 TEXTMETRIC tm; 
 dc.GetTextMetrics(&tm); 
 CreateSolidCaret(tm.tmAveCharWidth/2,tm.tmHeight); 
 ShowCaret(); 
 POINT p; 
 p.x = 0; 
 p.y = 0; 
 SetCaretPos(p); 
} 
 
//重载PreTranslateMessage 
BOOL CTest_MFCDlg::PreTranslateMessage(MSG* pMsg) 
{ 
 //如果是按键按下 
 if (pMsg->message == WM_KEYDOWN) 
 { 
  //如果是退格键,删除末尾字符 
  if (pMsg->wParam == VK_BACK) 
  { 
   if (s.GetLength() != 0) 
   { 
    s.Delete(s.GetLength() - 1,1); 
   } 
  } 
  else 
   //追加字符 
   s.Insert(s.GetLength(),(TCHAR)pMsg->wParam); 
  Invalidate(true); 
 } 
 return CDialog::PreTranslateMessage(pMsg); 
} 
 
//自画,将s的内容画到窗体上 
void CTest_MFCDlg::OnPaint() 
{ 
 CPaintDC dc(this); 
 CRect rect; 
 GetClientRect(&rect);  
 CSize size = dc.GetTextExtent(s); 
 POINT p; 
 p.x = size.cx; 
 p.y = 0; 
 SetCaretPos(p); 
 dc.DrawText(s,s.GetLength(),rect,DT_LEFT); 
} 
 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Delphi  # 光标  # 在窗体上创建光标  # Delphi 用DLL实现插件的简单实例  # Delphi 根据字符串找到函数并执行的实例  # Delphi提取PDF文本实例  # Delphi XE5 为Android应用制作签名的方法(图文)  # ListView 百分比进度条(delphi版)  # delphi制作wav文件的方法  # Delphi基本图像处理方法汇总  # Delphi实现截屏存盘的方法  # 自己的  # 输入文字  # 你可以  # 如有  # 希望能  # 第二个  # 可以看到  # 自定义  # 重写  # 不支持  # 按下  # 会把  # 谢谢大家  # 创建一个  # 点上  # 上时  # 文本框  # 疑问请  # 事件中  # StdCtrls 


相关文章: 电商网站制作公司有哪些,1688网是什么意思?  建站之星导航菜单设置与功能模块配置全攻略  网站代码制作软件有哪些,如何生成自己网站的代码?  高防服务器租用首荐平台,企业级优惠套餐快速部署  宿州网站制作公司兴策,安徽省低保查询网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  文字头像制作网站推荐软件,醒图能自动配文字吗?  如何自定义建站之星网站的导航菜单样式?  建站主机如何选?性能与价格怎样平衡?  建站DNS解析失败?如何正确配置域名服务器?  如何零成本快速生成个人自助网站?  已有域名如何免费搭建网站?  如何通过云梦建站系统实现SEO快速优化?  建站之星后台管理系统如何操作?  长沙企业网站制作哪家好,长沙水业集团官方网站?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何用美橙互联一键搭建多站合一网站?  如何快速搭建高效WAP手机网站吸引移动用户?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  建站VPS能否同时实现高效与安全翻墙?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  Swift中循环语句中的转移语句 break 和 continue  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何通过cPanel快速搭建网站?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  用v-html解决Vue.js渲染中html标签不被解析的问题  nginx修改上传文件大小限制的方法  已有域名和空间,如何快速搭建网站?  网站设计制作企业有哪些,抖音官网主页怎么设置?  如何在七牛云存储上搭建网站并设置自定义域名?  北京网站制作的公司有哪些,北京白云观官方网站?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  宝塔建站无法访问?如何排查配置与端口问题?  公司网站设计制作厂家,怎么创建自己的一个网站?  开源网站制作软件,开源网站什么意思?  建站主机选虚拟主机还是云服务器更好?  三星网站视频制作教程下载,三星w23网页如何全屏?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  h5在线制作网站电脑版下载,h5网页制作软件?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  手机网站制作与建设方案,手机网站如何建设?  建站主机系统SEO优化与智能配置核心关键词操作指南  宝塔建站助手安装配置与建站模板使用全流程解析  实现点击下箭头变上箭头来回切换的两种方法【推荐】  购物网站制作公司有哪些,哪个购物网站比较好?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  ,sp开头的版面叫什么?  Swift开发中switch语句值绑定模式 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。