2013-07-04 25 views
5

Nếu bạn làm điều này:Tại sao TEdit chỉ hiển thị văn bản có chiều dài bằng hoặc nhỏ hơn 37440 ký tự?

Edit1.Text := StringOfChar('X', 37440); 

Nó sẽ hiển thị các văn bản, tuy nhiên nếu bạn làm điều này:

Edit1.Text := StringOfChar('X', 37441); 

Các văn bản sẽ không xuất hiện.

Có ai biết tại sao không?
Nếu đây là lỗi, có một cách điều chỉnh khác thay vì thay thế tất cả các thành phần hiện có thành TMemo?
Tại sao 37440 Dù sao?

+0

Nếu chúng tôi đang sử dụng hệ điều hành tương tự, bạn sẽ có thể hiển thị hơn 37440 ký tự nếu bạn sử dụng '.' f.i. thay vì 'X'. Điều này ngụ ý rằng các giới hạn được quy định trong tài liệu MS không có nghĩa gì cả, vì thay vào đó bạn nhấn các giới hạn tùy ý được áp đặt bởi các chi tiết thực hiện. –

+0

Có, trong trường hợp này nó sẽ bị giới hạn trong 43679 dấu chấm – EProgrammerNotFound

+0

Và sau đó nếu bạn sử dụng. , bạn không phải dính vào các phiên bản W của các cuộc gọi api nếu bạn sử dụng chuỗi đó trong một? – Glenn1234

Trả lời

4

Trên khuôn mặt của nó, bạn nên để có thể kiểm soát này sử dụng thông điệp EM_LIMITTEXT:

Thông điệp EM_LIMITTEXT giới hạn chỉ có văn bản người dùng có thể nhập. Nó không ảnh hưởng đến bất kỳ văn bản đã có trong kiểm soát chỉnh sửa khi tin nhắn được gửi, cũng không ảnh hưởng đến độ dài của văn bản được sao chép vào điều khiển chỉnh sửa bằng thông điệp WM_SETTEXT. Nếu một ứng dụng sử dụng thông điệp WM_SETTEXT để đặt nhiều văn bản hơn vào một điều khiển chỉnh sửa hơn được chỉ định trong thông báo EM_LIMITTEXT, người dùng có thể chỉnh sửa toàn bộ nội dung của điều khiển chỉnh sửa.

Trước khi EM_LIMITTEXT được gọi, giới hạn mặc định cho số lượng văn bản mà người dùng có thể nhập trong điều khiển chỉnh sửa là 32,767 ký tự.

Và thông báo này được hiển thị bởi thuộc tính MaxLength của TEdit.

Tuy nhiên, đặt MaxLength thành giá trị lớn không có vẻ hữu ích. Tôi không thể thuyết phục một điều khiển chỉnh sửa dòng để hiển thị một số lượng lớn các ký tự.

Tôi cho rằng tùy chọn khả thi duy nhất cho bạn là sử dụng điều khiển chỉnh sửa nhiều dòng, đó là TMemo.

Tôi chắc chắn MS sẽ cho rằng các điều khiển chỉnh sửa dòng đơn không được thiết kế để chứa hàng nghìn ký tự và do đó họ không có động lực để làm cho kiểm soát đó có khả năng hơn.

FWIW, với phiên bản Unicode của điều khiển, điểm cắt xuất hiện ở 37444 thay vì 37440!

+0

Tuyệt vời, bây giờ tôi phải thay thế tất cả các thành phần trong hệ thống !! Vì vậy, dễ dàng để làm điều này – EProgrammerNotFound

+0

Nếu bạn có CnWizards, ví dụ, bạn có thể sử dụng Component Selector, chọn tất cả các thành phần 'TEdit' theo form và đặt chúng' MaxLength' thành một giá trị giới hạn (khác 0, không may). Nhưng ai sẽ đọc rất nhiều ký tự, từ tò mò? [+1] – TLama

+0

Có một thành phần lựa chọn trả về Giá trị khóa ',' + Giá trị khóa .. [...] của các mục đã chọn cho một TEdit, tôi không thể sử dụng dải ô vì giá trị khóa không phải là một chuỗi tuần tự số – EProgrammerNotFound

Các vấn đề liên quan