欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

Delphi

當(dāng)前位置:主頁 > 軟件編程 > Delphi >

Delphi 在窗體上創(chuàng)建自己光標(biāo)的實(shí)例

來源:本站原創(chuàng)|時間:2020-01-10|欄目:Delphi|點(diǎn)擊: 次

Delphi 在窗體上創(chuàng)建自己光標(biāo)的實(shí)例

我們知道在文本框等可以接收輸入的組件中,我們可以看到閃爍的光標(biāo),并可以輸入文字,如果我們在,比如窗體上時,因?yàn)椴恢С州斎?,也無法顯示閃爍的光標(biāo),那我們 有辦法做自己的輸入嗎?當(dāng)然可以,下面我們演示在Form上來輸入文字。

    用到的API函數(shù)如下

  • GetTextMetrics:獲取程序當(dāng)前的字體信息,存放到TEXTMETRIC結(jié)構(gòu)中
  • CreateCaret:為系統(tǒng)插入標(biāo)記創(chuàng)建一個新的形狀,并且將插入標(biāo)記的屬主關(guān)系指定給特定的窗口。插入標(biāo)記的形狀??梢允蔷€、塊或位圖
  • ShowCaret:顯示光標(biāo)
  • SetCaretPos:設(shè)置光標(biāo)的位置

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 的第二個參數(shù)是HBITMAP類型,所以你可以使用自己的圖形作為光標(biāo)形狀,這里采用默認(rèn) 
 后面兩個參數(shù)是光標(biāo)的寬度和高度,可以自定義 
 } 
 CreateCaret(Self.Handle,HBITMAP(nil),tm.tmAveCharWidth div 2,tm.tmHeight); 
 ShowCaret(Self.Handle); 
 //在(10,,10)這個點(diǎn)上顯示 
 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); 
 //重新設(shè)置光標(biāo)位置 
 SetCaretPos(Self.Canvas.TextWidth(s)+10,10); 
end; 
 
end. 
 

VC代碼

//全局字符串變量 
CString s; 
 
//初始化時,設(shè)置光標(biāo) 
BOOL CTest_MFCDlg::OnInitDialog() 
{ 
 CDialog::OnInitDialog();  
 ShowSelfCaret(); 
   ...... 
} 
 
//為窗體添加函數(shù),初始化光標(biāo) 
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的內(nèi)容畫到窗體上 
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); 
} 
 

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

上一篇:Delphi基本圖像處理方法匯總

欄    目:Delphi

下一篇:Delphi實(shí)現(xiàn)截屏存盤的方法

本文標(biāo)題:Delphi 在窗體上創(chuàng)建自己光標(biāo)的實(shí)例

本文地址:http://mengdiqiu.com.cn/a1/Delphi/8601.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有