Khi chuyển từ Delphi 2006 sang Delphi XE2, một trong những điều chúng ta học được là RichEdit 2.0 thay thế các cặp CRLF
nội bộ với một đơn CR
tính cách. Điều này có tác dụng không may của việc ném ra tất cả các tính toán chỉ mục ký tự dựa trên chuỗi văn bản thực tế ở phía bên VCL.Sử dụng ký tự CR đơn lẻ của RichEdit 2.0 để xóa các tính toán của SelStart (Delphi XE2)
Các hành vi tôi có thể nhìn thấy bằng cách truy tìm thông qua các mã VCL là như sau:
- Gửi nhắn
WM_GETTEXT
(thực hiện trongTControl.GetTextBuf
) sẽ trả về một bộ đệm văn bản có chứaCRLF
cặp. - Gửi thông báo
WM_GETTEXTLENGTH
(được thực hiện trongTControl.GetTextLen
) sẽ trả về một giá trị như thể văn bản vẫn còn chứaCRLF
ký tự. - Ngược lại, việc gửi thông báo
EM_SETSELEX
(tức là thiết lậpSelStart
) sẽ coi giá trị đầu vào như thể văn bản có chứa chỉCR
ký tự.
Điều này làm cho tất cả mọi thứ thất bại (chẳng hạn như làm nổi bật cú pháp) trong ứng dụng của chúng tôi. Như bạn có thể nói, tất cả mọi thứ được tắt bởi chính xác một ký tự cho mỗi dòng mới cho đến thời điểm đó.
Rõ ràng, vì đây là hành vi không nhất quán, chúng ta phải thiếu điều gì đó hoặc làm điều gì đó rất sai.
Có ai khác có bất kỳ trải nghiệm nào với việc chuyển đổi từ RichEdit 1.0 sang kiểm soát RichEdit 2.0 và cách bạn giải quyết vấn đề này? Cuối cùng, có cách nào để buộc RichEdit 2.0 sử dụng các cặp CRLF
giống như RichEdit 1.0 không?
Tôi e rằng bạn sẽ phải tuân thủ điều này vì ['EM_SETSEL'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb761661%28v=vs.85%29 .aspx) là thông báo điều khiển chỉnh sửa chung, không phải là thông điệp chỉnh sửa phong phú. – TLama
Theo như tôi biết, TRichEdit chỉ là một trình bao bọc cho điều khiển chỉnh sửa cửa sổ phong phú. Vì vậy, có thể không có nhiều bạn có thể làm nhưng để tính toán xung quanh này để có được vị trí chính xác. Hoặc bạn sử dụng một điều khiển khác như WPRichText. – Andreas
'TRichEdit' không phù hợp với trình soạn thảo làm nổi bật cú pháp. Hãy xem xét sử dụng một thành phần trình soạn thảo cú pháp tô sáng thực tế, chẳng hạn như SynEdit (http://synedit.sourceforge.net). –