الحفاظ على الكاريت في نهاية النص في تحرير غني

StackOverflow https://stackoverflow.com/questions/3679645

  •  02-10-2019
  •  | 
  •  

سؤال

أنا أكتب محررًا في 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top