Delphi はフォーム上に独自のカーソルのインスタンスを作成します
入力を受け取ることができるテキスト ボックスなどのコンポーネントでは、たとえばフォーム上では、入力がサポートされておらず、点滅するカーソルが表示されないため、点滅するカーソルが表示されてテキストを入力できることがわかっています。自分で入力する方法はありますか?もちろん、それは可能です。以下では、フォームにテキストを入力する方法を示します。
使用する API 関数は次のとおりです。
Delphi コード
ユニット Unit1; インターフェイスは Windows、メッセージ、SysUtils、バリアント、クラス、グラフィックス、コントロール、フォーム、ダイアログ、StdCtrls を使用します。タイプ TForm1 = class(TForm) プロシージャ FormCreate(Sender: TObject; var Key:) Char); プロシージャ FormPaint(Sender: TObject); private { プライベート宣言 } s:string; var Form1: TForm1; 実装 {$R *.dfm} プロシージャ TForm1.FormCreate(Sender: TObject); var //TTextMetric はフォント情報を格納します s := '';ハンドル,tm); { NoteCreateCaret 2 番目のパラメータは HBITMAP タイプなので、独自のグラフィックをカーソルの形状として使用できます。次の 2 つのパラメータは、カスタマイズ可能なカーソルのデフォルトの幅と高さです。 tm .tmAveCharWidth div 2,tm.tmHeight); //(10,,10) の時点で SetCaretPos(10,10) を表示します。 //キーが押されるたびに s の値が書き換えられ、s の値が変更されます。 OnPaint イベントは、フォーム プロシージャ TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin // バックスペース キーの場合、前の文字を削除します if Ord(Key) = VK_BACK then begin if (s <> '') then Delete(s,Length(s),1); //Redraw Self.Invalidate end; Self.Canvas.TextOut(10,10,s); // カーソル位置をリセット SetCaretPos(Self.Canvas.TextWidth(s)+10,10) end;VCコード
//グローバル文字列変数 CString s; //初期化時にカーソルを設定します BOOL CTest_MFCDlg::OnInitDialog() { CDialog::OnInitDialog() ... } //フォームに関数を追加し、カーソルを初期化します。 CTest_MFCDlg::ShowSelfCaret(void) { CClientDC dc(this); dc.GetTextMetrics(&tm); CreateSolidCaret(tm.tmAveCharWidth/2,tm.tmHeight); px = 0; SetCaretPos(p); } //PreTranslateMessage BOOL CTest_MFCDlg (MSG* pMsg) { //キーが押された場合 if (pMsg->message == WM_KEYDOWN) { //バックスペースキーの場合、最後の文字を削除 if (pMsg->wParam == VK_BACK) { if (s.GetLength() ! = 0 ) { s.Delete(s.GetLength() - 1,1) } } //文字を追加 s.Insert(s.GetLength(),(TCHAR)pMsg->wParam); Invalidate(true); } return CDialog::PreTranslateMessage(pMsg); // s の内容を描画しますウィンドウに void CTest_MFCDlg::OnPaint() { CPaintDC dc(this); GetClientRect(&rect); CSize = dc.GetTextExtent(s); px = size.cx(p); }ご質問がございましたら、メッセージを残すか、このサイトのコミュニティにアクセスしてご連絡ください。お読みいただきありがとうございます。このサイトをご支援いただきありがとうございます。