Tôi quản lý cuối cùng để tái tạo sự cố trong Delphi XE (Cập nhật 1) trên Win7 64 với Aero được bật. Dường như kích thước được đặt sai trong tệp .DFM và do Ribbon
không hỗ trợ thay đổi kích thước thủ công, bạn không thể chỉnh sửa trực quan trong IDE
(mặc dù nó xuất hiện chính xác khi chạy)
hoặc trong Object Inspector
. Đôi khi nó xuất hiện chính xác trong thời gian chạy, nhưng có vẻ như đó là lẻ tẻ là tốt.
Đó là một lỗi khó chịu, bởi vì nó không thể thiết kế Ribbon
. Bạn có thể thêm RibbonGroup
mục và chỉ định ActionManager
và thử và thiết kế hoàn toàn bằng cách sử dụng Structure Pane
, nhưng tất nhiên đó không phải là giải pháp thiết thực.
May mắn thay, có một giải pháp khá dễ dàng, mặc dù thật khó chịu khi phải làm. :)
Tôi đã quản lý hai lần để giải quyết vấn đề sau, nhưng bắt đầu lại không hoạt động nhiều lần, vì vậy có thể xung quanh nó (không hứa hẹn - đã làm việc trong XE, liên tục thất bại trong XE2 Update 2) :
- Nhấp chuột phải vào
Ribbon
và thêm ít nhất một tab.
- Nhấp chuột phải vào biểu mẫu trong IDE và chọn
View as Text
từ menu ngữ cảnh (bật lên).
- Tìm điều khiển
Ribbon
trong văn bản .dfm
và thay đổi Height
từ 26
mà IDE được gán cho 200
. (Bước tiếp theo sẽ điều chỉnh nó, nhưng không sao - 200
khắc phục sự cố ngay lập tức.)
- Nhấp chuột phải một lần nữa và chọn
View as Form
và Ribbon
sẽ hiển thị chính xác.
(Tôi đã báo cáo nó trong QC chống XE2 Cập nhật 2, như vấn đề còn tồn tại ở đó - QC#101642)
tôi truy tìm nó để TCustomRibbon.GetCaptionHeight
, cụ thể
FCaptionHeight := Max(GetSystemMetrics(SM_CYCAPTION), 26);
Nó có vẻ như các GetSystemMetrics
cuộc gọi đang trả về cái gì đó ít hơn 26
trên một số cấu hình Win7 nhất định (mặc dù tôi không thể tìm ra lý do tại sao). Có một vài dòng nhận xét trong phương pháp đó dường như thay đổi kết quả, nhưng như tôi đã nói họ đã được nhận xét.
Phần lạ là trong TCustomRibbon.Create
, các Height
được thiết lập bởi một cuộc gọi đến GetRibbonMetric(rmFullHeight)
, thiết lập Result := cRibbonHeight + GetCaptionHeight;
, và cRibbonHeight
là một hằng số định nghĩa là cRibbonHeight = 117;
.
Cuối cùng nghĩ rằng tôi đã theo dõi điều này. Trong tuyên bố của TRibbon
, có một tuyên bố published
tài sản:
published
...
property Height default TCustomRibbon.cRibbonHeight;
Bởi vì đây là mặc định, dường như bất kỳ giá trị khác có nghĩa là các cuộc gọi đến GetRibbonMetric
nêu trên không xảy ra (xem TCustomRibbon.Create
đề cập ở trên) và kết quả lạ từ cuộc gọi đến GetSystemMetric
làm cho giá trị sai số 26
được lưu thành 'giá trị khác`. Wierd; sẽ cập nhật QC trong AM.
Phụ lục: Báo cáo QC được cập nhật với các chi tiết bổ sung.
Phụ lục: Báo cáo QC opened vào tháng 5 năm 2012, nhưng dường như chưa được giải quyết là XE5 Update 1 (đã kiểm tra tháng 1 năm 2014).
Âm thanh lạ. Tôi đã làm chính xác những gì bạn mô tả và nó cư xử hoàn hảo. –
Ya, tôi đã nghĩ rằng đó sẽ là trường hợp đối với hầu hết mọi người, vì tôi thấy nó trong tác phẩm trình diễn! Tuy nhiên, nó không làm việc cho tôi. Nó gần giống như tôi có một phiên bản thiếu sót của Delphi 2010. Tôi đã gỡ bỏ hoàn toàn và cài đặt lại Delphi 2010 và nó vẫn hoạt động theo cùng một cách – IElite
Tôi chưa bao giờ thấy điều này xảy ra trước đây, nó không nên làm điều đó. –