Delphi crea una instancia de su propio cursor en un formulario
Sabemos que en componentes como cuadros de texto que pueden recibir entradas, podemos ver el cursor parpadeante e ingresar texto. Si estamos, por ejemplo, en un formulario, porque la entrada no es compatible y el cursor parpadeante no se puede mostrar, entonces. ¿Hay alguna manera de hacer mi propia aportación? Por supuesto que puedes. A continuación te mostramos cómo ingresar texto en el formulario.
Las funciones API utilizadas son las siguientes:
código delphi
unidad Unidad1; la interfaz utiliza Windows, Mensajes, SysUtils, Variantes, Clases, Gráficos, Controles, Formularios, Diálogos, StdCtrls; escriba TForm1 = procedimiento de clase (TForm) FormCreate (Remitente: TObject procedimiento FormKeyPress (Remitente: TObject; var Clave): Char); procedimiento FormPaint (Remitente: TObject); privado { Declaraciones privadas } s: public { Declaraciones públicas; } end; var Form1: TForm1; implementación {$R *.dfm} procedimiento TForm1.FormCreate(Sender: TObject); var //TTextMetric almacena información de fuente tm:TTextMetric; Identificador, tm); El segundo parámetro es el tipo HBITMAP, por lo que puede usar su propio gráfico como forma del cursor. Los dos parámetros siguientes son el ancho y alto predeterminados del cursor, que se pueden personalizar} CreateCaret(Self.Handle,HBITMAP(nil), tm .tmAveCharWidth div 2,tm.tmHeight ShowCaret(Self.Handle); //Muestra SetCaretPos(10,10) en el punto (10,,10); //Forma evento de clave, cada vez que se presiona una tecla, el valor de s se reescribe y el valor de s se cambia en el Evento OnPaint El valor se dibuja en el procedimiento de formulario TForm1.FormKeyPress(Sender: TObject; var Key: Char start //Si es la tecla de retroceso, elimine el carácter anterior si Ord(Key) = VK_BACK luego comience. si (s <> '') entonces Eliminar (s, Longitud (s), 1); fin de lo contrario s: = s + Clave; // Redibujar Self.Invalidate fin; Self.Canvas.TextOut(10,10,s); //Restablecer la posición del cursor SetCaretPos(Self.Canvas.TextWidth(s)+10,10);código VC
//Variable de cadena global CString s; //Al inicializar, establece el cursor BOOL CTest_MFCDlg::OnInitDialog() { CDialog::OnInitDialog() ShowSelfCaret() ... } //Agrega funciones al formulario, inicializa el cursor void; CTest_MFCDlg::ShowSelfCaret(void) { CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm); CreateSolidCaret(tm.tmAveCharWidth/2,tm.tmHeight); PUNTO p px = 0; SetCaretPos(p); (MSG* pMsj) { //Si se presiona la tecla if (pMsg->message == WM_KEYDOWN) { //Si es la tecla de retroceso, elimina el último carácter if (pMsg->wParam == VK_BACK) { if (s.GetLength() ! = 0 ) { s.Delete(s.GetLength() - 1,1 } } más); //Agregar caracteres s.Insert(s.GetLength(),(TCHAR)pMsg->wParam); Invalidate(true); } return CDialog::PreTranslateMessage(pMsg); a la ventana void CTest_MFCDlg::OnPaint() { CPaintDC dc(this); GetClientRect(&rect); CSize tamaño = dc.GetTextExtent(s); PUNTO p;rect,DT_LEFT; }Si tiene alguna pregunta, deje un mensaje o vaya a la comunidad de este sitio para comunicarse y discutir. Gracias por leer. Espero que pueda ayudar a todos. ¡Gracias por su apoyo a este sitio!