Delphi erstellt eine Instanz seines eigenen Cursors auf einem Formular
Wir wissen, dass wir in Komponenten wie Textfeldern, die Eingaben empfangen können, den blinkenden Cursor sehen und Text eingeben können. Wenn wir uns beispielsweise in einem Formular befinden, weil Eingaben nicht unterstützt werden und der blinkende Cursor nicht angezeigt werden kann, dann können wir Gibt es eine Möglichkeit, meinen eigenen Beitrag zu leisten? Natürlich können Sie das. Nachfolgend zeigen wir Ihnen, wie Sie Text in das Formular eingeben.
Die verwendeten API-Funktionen sind wie folgt:
Delphi-Code
Unit Unit1; Schnittstelle verwendet Windows, Nachrichten, Grafiken, Steuerelemente, Formulare, Dialoge, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormPaint(Sender: TObject); private { Private Deklarationen } s:string; } end; var Form1; Implementierung {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var //TTextMetric speichert Schriftartinformationen tm:TTextMetrics(Self.Canvas. Handle,tm); { NoteCreateCaret Der zweite Parameter ist der HBITMAP-Typ, sodass Sie Ihre eigene Grafik als Cursorform verwenden können. Die folgenden beiden Parameter sind die Standardbreite und -höhe des Cursors, die angepasst werden können.} CreateCaret(Self.Handle,HBITMAP(nil), tm .tmAveCharWidth div 2,tm.tmHeight; ShowCaret(Self.Handle); //SetCaretPos(10,10) am Punkt (10,,10) anzeigen; //Bei jedem Tastendruck wird der Wert von s neu geschrieben und der Wert von s geändert OnPaint-Ereignis. Der Wert wird auf dem Formular gezeichnet procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char begin); //Wenn es die Rücktaste ist, löschen Sie das vorherige Zeichen, wenn Ord(Key) = VK_BACK dann begin if (s <> '') then Delete(s,Length(s),1); else s := s + Key; //Redraw Procedure TForm1.FormPaint(Sender: TObject); Self.Canvas.TextOut(10,10,s); //Cursorposition zurücksetzen SetCaretPos(Self.Canvas.TextWidth(s)+10,10); end.VC-Code
//Globale String-Variable CString s; //Beim Initialisieren den Cursor setzen BOOL CTest_MFCDlg::OnInitDialog() { CDialog::OnInitDialog(); //Funktionen zum Formular hinzufügen, Cursor initialisieren void CTest_MFCDlg::ShowSelfCaret(void) { CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm); CreateSolidCaret(tm.tmAveCharWidth/2,tm.tmHeight); ShowCaret p; (MSG* pMsg) { //Wenn die Taste gedrückt wird if (pMsg->message == WM_KEYDOWN) { //Wenn es die Rücktaste ist, löschen Sie das letzte Zeichen if (pMsg->wParam == VK_BACK) { if (s.GetLength() ! = 0 ) { s.Delete(s.GetLength() - 1,1 } } else //Zeichen anhängen s.Insert(s.GetLength(),(TCHAR)pMsg->wParam); } return CDialog::PreTranslateMessage(pMsg); //Selbst zeichnen, den Inhalt von s zeichnen zum Fenster void CTest_MFCDlg::OnPaint() { CPaintDC dc(this); CRect rect; GetClientRect(&rect); CSize size = dc.GetTextExtent(s); POINT p; }Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht oder gehen Sie zur Community dieser Website, um zu kommunizieren und zu diskutieren. Ich hoffe, dass es allen helfen kann.