Tôi đã thực hiện một sự tự phát triển TMemo như một ví dụ tốt đẹp của LiveBindings (một trong số ít các ví dụ hữu ích tôi có thể đưa ra cho LiveBindings trong VCL).
một trích dẫn từ chương trình học của nhãn hiệu Delphi XE2 Phát triển Essentials của tôi:.
"Xây dựng ví dụ này, đặt một thành phần TMemo trên một hình thức VCL, mở LiveBindings bất động sản, và chọn‘LiveBinding mới’tùy chọn Chọn Mở BindExpressionMemo11 trong Thanh tra đối tượng và đặt SourceComponent thành Memo1 và SourceExpression thành Lines.Count * 22. Để có kết quả tốt hơn khi chạy, hãy đặt SourceExpression thành biểu thức chính xác hơn
Font.Size - 4 + (Lines.Count + 1) * -1 * (Font.Height - 3)
Cuối cùng, trong trình xử lý sự kiện OnChange của TMemo, hãy viết một dòng mã:
BindingsList1.Notify (Sender, '');
Chính là vậy. Biên dịch và chạy để xem bản ghi nhớ đang hoạt động.cao
[ảnh chụp màn hình]
Ban đầu, sự kiểm soát TMemo sẽ có hai dòng (dòng với những nội dung, và một dòng tiếp theo), và bất cứ khi nào chúng ta nhấn Enter hoặc từ gói ứng trước chúng ta đến dòng tiếp theo, các TMemo điều khiển sẽ phát triển chiều cao (tăng trưởng xuống trên thực tế, do đó hãy chắc chắn để lại đủ không gian trên dưới hình thức cho TMemo để mở rộng bản thân) "
Groetjes, Bob Swart
Nguồn
2011-11-04 14:49:35
Tôi nên nghĩ về điều đó. Tôi đã quá quen với việc làm việc với TStringLists, điều này làm cho dòng sản phẩm bị hỏng ở CRLF, rằng nó không bao giờ xảy ra với tôi rằng thuộc tính WordWrap sẽ thực sự đặt các dòng bọc trên các chuỗi .Lines khác nhau. Cảm ơn! –
Font.Height giữ một số âm đếm số lượng pixel trong một dòng văn bản. Ngoài ra, bạn có thể gọi Canvas.TextExtent để có chiều cao văn bản được tính toán. –