الحفاظ على الكاريت في نهاية النص في تحرير غني
سؤال
أنا أكتب محررًا في Delphi (2009) باستخدام مكون Trichedit. يتم إلحاق المحرر فقط ، بمعنى أنه يجب أن تكون القاعدة في النهاية في جميع الأوقات ، مع الحفاظ على القدرة على النسخ باستخدام الماوس من مكان آخر في المكون.
الطريقة التي تعمل بها في الوقت الحالي هي تحريك الكاريت إلى النهاية كلما تم كتابة شيء ما ، ولكن هل من الممكن جعل القائمة الإلكترونية لا تتبع الماوس عند النقر على أجزاء أخرى من النص؟
المحلول
لا، لم يكن ممكنا. يجب عليك تحريك الكاريت إلى النهاية عندما يكتب المستخدم شيئًا ما.
نصائح أخرى
لا. يجب أن تتحرك سيارة الإقحام حتى يقوم المستخدم بإجراء اختيارات مع الماوس أو لوحة المفاتيح. سيتعين عليك تحريك الكاريت إلى النهاية في كل مرة تقوم فيها بإدراج نص جديد. ربما يجب عليك الاحتفاظ واستعادة موضع المؤتمر الحالي للمستخدم أثناء كل إدخال أيضًا ، على سبيل المثال:
procedure TForm.AppendText(const S: String);
var
OldCharRange, NewCharRange: TCharRange;
begin
SendMessage(RichEdit1.Handle, EM_EXGETSEL, 0, LParam(@OldCharRange));
try
NewCharRange.cpMin := RichEdit1.GetTextLen;
NewCharRange.cpMax := NewCharRange.cpMin;
SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LParam(@NewCharRange));
RichEdit1.SelText := S;
finally
SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LParam(@OldCharRange));
end;
end;