Delphi membuat instance kursornya sendiri pada suatu formulir
Kita tahu bahwa pada komponen seperti kotak teks yang dapat menerima input, kita dapat melihat kursor yang berkedip dan memasukkan teks. Jika kita berada di formulir, misalnya, karena input tidak didukung dan kursor yang berkedip tidak dapat ditampilkan, maka kita Apakah ada cara untuk melakukan masukan saya sendiri? Tentu saja bisa. Di bawah ini kami tunjukkan cara memasukkan teks pada Formulir.
Fungsi API yang digunakan adalah sebagai berikut:
kode Delphi
unit Unit1; antarmuka menggunakan Windows, Pesan, SysUtils, Varian, Kelas, Grafik, Kontrol, Formulir, Dialog, StdCtrls; ketik TForm1 = class(TForm) procedure FormCreate(Sender: TObject); Char); procedure FormPaint(Pengirim: TObject); private { Deklarasi pribadi } s:string public { Deklarasi publik } end; var Form1: TForm1; implementasi prosedur {$R *.dfm} TForm1.FormCreate(Pengirim: TObject); var //TTextMetric menyimpan informasi font tm:TTextMetric; Menangani,tm); { CatatanCreateCaret Parameter kedua adalah tipe HBITMAP, sehingga Anda dapat menggunakan grafik Anda sendiri sebagai bentuk kursor. Dua parameter berikut adalah lebar dan tinggi default kursor, yang dapat disesuaikan} CreateCaret(Self.Handle,HBITMAP(nil), tm .tmAveCharWidth div 2,tm.tmHeight); //Menampilkan SetCaretPos(10,10) pada titik (10,,10); //Bentuk kejadian kunci, setiap kali tombol ditekan, nilai s ditulis ulang, dan nilai s diubah di dalam Acara OnPaint Nilai diambil pada prosedur formulir TForm1.FormKeyPress(Pengirim: TObject; var Key: Char mulai //Jika itu adalah kunci spasi mundur, hapus karakter sebelumnya jika Ord(Key) = VK_BACK lalu mulai). if (s <> '') lalu Delete(s,Length(s),1); end else s := s + Key; //Gambar Ulang Self.Invalidate end; Self.Canvas.TextOut(10,10,s); //Setel ulang posisi kursor SetCaretPos(Self.Canvas.TextWidth(s)+10,10 end;kode VC
//Variabel string global CString s; //Saat menginisialisasi, atur kursor BOOL CTest_MFCDlg::OnInitDialog() { CDialog::OnInitDialog(); ShowSelfCaret(); CTest_MFCDlg::ShowSelfCaret(void) { CClientDC dc(ini); dc.GetTextMetrics(&tm); CreateSolidCaret(tm.tmAveCharWidth/2,tm.tmHeight); (MSG* pSg) { //Jika tombol ditekan if (pMsg->message == WM_KEYDOWN) { //Jika tombol backspace, hapus karakter terakhir if (pMsg->wParam == VK_BACK) { if (s.GetLength() ! = 0 ) { s.Hapus(s.GetLength() - 1,1 } } lain //Tambahkan karakter s.Insert(s.GetLength(),(TCHAR)pMsg->wParam); Invalidate(true } return CDialog::PreTranslateMessage(pMsg); ke jendela void CTest_MFCDlg::OnPaint() { CPaintDC dc(ini); GetClientRect(&rect); Ukuran CS = dc.GetTextExtent(s); }Jika Anda memiliki pertanyaan, silakan tinggalkan pesan atau kunjungi komunitas situs ini untuk berkomunikasi dan berdiskusi. Terima kasih telah membaca. Saya harap ini dapat membantu semua orang.