تقوم دلفي بإنشاء مثيل للمؤشر الخاص بها في النموذج
نحن نعلم أنه في مكونات مثل مربعات النص التي يمكنها تلقي الإدخال، يمكننا رؤية المؤشر الوامض وإدخال النص، إذا كنا، على سبيل المثال، في نموذج، لأن الإدخال غير مدعوم ولا يمكن عرض المؤشر الوامض، فإننا نقوم بذلك. هل هناك طريقة للقيام بإدخالاتي الخاصة؟ بالطبع يمكنك ذلك. نوضح أدناه كيفية إدخال النص في النموذج.
وظائف API المستخدمة هي كما يلي:
كود دلفي
تستخدم واجهة الوحدة Unit1 نظام التشغيل Windows والرسائل وSysUtils والمتغيرات والفئات والرسومات وعناصر التحكم والنماذج ومربعات الحوار وStdCtrls؛ Char)؛ الإجراء FormPaint(Sender: TObject); } end; var Form1: TForm1; تنفيذ الإجراء {$R *.dfm} TForm1.FormCreate(Sender: TObject); var //TTextMetric يخزن معلومات الخط tm:TTextMetric; Handle,tm); { NoteCreateCaret المعلمة الثانية هي نوع HBITMAP، لذا يمكنك استخدام الرسم الخاص بك كشكل المؤشر، والمعلمتان التاليتان هما العرض والارتفاع الافتراضيان للمؤشر، ويمكن تخصيصهما} CreateCaret(Self.Handle,HBITMAP(nil), tm .tmAveCharWidth div 2,tm.tmHeight); // عرض SetCaretPos(10,10) عند النقطة (10,,10); // حدث مفتاح النموذج، في كل مرة يتم الضغط على مفتاح، تتم إعادة كتابة قيمة s، ويتم تغيير قيمة s في حدث OnPaint. يتم رسم القيمة على إجراء النموذج TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin // إذا كان مفتاح مسافة للخلف، فاحذف الحرف السابق إذا كان Ord(Key) = VK_BACK ثم ابدأ if (s <> '') ثم حذف (s,Length(s),1); end else := s + Key; // 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(); ShowSelfCaret()... } // إضافة وظائف إلى النموذج، تهيئة المؤشر void CTest_MFCDlg::ShowSelfCaret(void) { CClientDC dc(this); dc.GetTextMetrics(&tm); CreateSolidCaret(tm.tmAveCharWidth/2,tm.tmHeight); (MSG * بمسج) { // إذا تم الضغط على المفتاح 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); إلى النافذة void CTest_MFCDlg::OnPaint() { CPaintDC dc(this); GetClientRect(&rect); CSize size = dc.GetTextExtent(s); px = size.cx; }إذا كان لديك أي أسئلة، يرجى ترك رسالة أو الذهاب إلى مجتمع هذا الموقع للتواصل والمناقشة. شكرًا لك على القراءة، وآمل أن تتمكن من مساعدة الجميع. شكرًا لك على دعمك لهذا الموقع.