2016-12-19 29 views
8

Hiện tại tôi đang thử nghiệm các khía cạnh khác nhau của phong cách VCL cho phép ứng dụng.Lỗi hình ảnh trong thanh tiêu đề Windows với VCL Styles kích hoạt ứng dụng và hiển thị tỷ lệ

Tôi nhận thấy rằng với quy mô Windows cao hơn 96 dpi/100%, biểu tượng và văn bản thanh tiêu đề của Biểu mẫu VCL có kích thước quá lớn - và cả hai đều ở gần nhau - vui lòng xem đính kèm ảnh chụp màn hình. Điều này đặc biệt đúng với tỷ lệ lớn hơn như 200% hoặc 250% (ví dụ: được sử dụng trên màn hình 4K và Windows 10), nhưng thậm chí với tỷ lệ 144 dpi/150%, sự cố đã hiển thị.

Điều này đúng cho tất cả các kiểu được phân phối bằng RAD Studio. Nhận thức Dpi cao cho tệp kê khai được bật thông qua cài đặt dự án. Nếu tôi tắt kiểu VCL trong ứng dụng, văn bản trên thanh tiêu đề và biểu tượng có kích thước chính xác.

Tôi có thiếu gì đó ở đây không? Các kiểu được phân phối có hoạt động mà không có lỗi hiển thị như vậy trong hộp có kích thước hiển thị được bật không? Hoặc là có một số thiết lập một nơi nào đó tôi có thể điều chỉnh để sửa lỗi này.

Cảm ơn,

enter image description here enter image description here

+0

Không có nghĩa là hoàn hảo, nhưng chỉ cần thêm hai ký tự khoảng trắng ở phía trước tiêu đề của mọi biểu mẫu là tốt hơn là không có gì và không liên quan đến VCL-hack. – frogb

+0

Đây là nhận xét cho câu hỏi, không phải là câu trả lời. Nó không giải quyết việc sửa lỗi trực quan; nó chỉ đơn giản là một cách giải quyết kludgy. –

+0

Tôi cũng nghĩ về điều đó, nhưng nếu bạn có 15 dạng khác nhau trong ứng dụng, và tải các dll khác với biểu mẫu hoặc thực thi TOpenDialog, vâng, không, đây không phải là giải pháp. –

Trả lời

2

Ok, đây là giải pháp của tôi cho các lỗi hình ảnh, vui lòng xem ảnh chụp màn hình đính kèm. Tôi đã sửa ở 3 vị trí trong Vcl.Forms.pas.

Sửa chữa đầu tiên, nhận xét với // Tiêu đề thanh sửa lỗi 1, giải quyết vấn đề biểu tượng không được vẽ chính xác, thậm chí không có mở rộng, trên Windows 96dpi mặc định với ứng dụng kiểu VCL. Tôi có thể sửa lỗi này dựa trên những phát hiện về WM_GETICON, ICON_SMALL2, từ James Johnston, https://stackoverflow.com/a/35067909 cảm ơn, James, vì điều đó!

Hai bản sửa lỗi khác giải quyết vấn đề biểu tượng được vẽ quá lớn với kích thước hiển thị được bật và khoảng cách giữa biểu tượng và văn bản thanh tiêu đề quá nhỏ. Đây là các bản sửa lỗi được nhận xét với // Tiêu đề thanh sửa lỗi 2 và 3 trong mã. GetDpi chỉ là một getter cho giá trị dpi hiện tại, mà tôi nhận được từ các nguồn C của tôi trong ứng dụng.

Kết quả là không có cách nào hoàn hảo, nhưng nó sẽ làm ngay bây giờ, với ứng dụng kiểu VCL này ít nhất là chấp nhận được trong các trường hợp được chia tỷ lệ.

Cảm ơn tất cả vì mục nhập của bạn.

left original, right 'fixed'

Title bar fix 1

Title bar fix variables

Title bar fix 2

Title bar fix 3

+1

Vì lợi ích của Pete! Đừng ** bao giờ ** đăng hình ảnh mã. Hình ảnh mã hoàn toàn vô dụng; bạn có thể ' Sao chép/dán, nó không thể tiếp cận với những người khiếm thị, họ không có sẵn phía sau nhiều proxy công ty, họ hoàn toàn bốc mùi cho những người sử dụng thiết bị di động, nó không phải là một phần của tìm kiếm .... và nhiều hơn nữa. dán/định dạng văn bản hơn là để làm cho màn hình chụp, lưu vào tập tin, tạo ra các liên kết và tải lên chúng.Trong khi tôi khen mong muốn của bạn để chia sẻ giải pháp của bạn, xin vui lòng làm điều đó một cách chính xác –

+0

@KenWhite Tôi hiểu quan điểm của bạn và tôi biết đăng ảnh chụp màn hình Thing là, tôi thực sự có ý định chỉ ra các địa điểm cụ thể trong 16k dòng .pas tập tin mà tôi thay đổi mọi thứ, và tôi muốn điều này như một số loại khác biệt xem, vì vậy tôi tập trung vào vị trí và vào ngày e khác biệt. –

+0

Các địa điểm đó trong mã không có trong ** quy trình ** và không có ** số dòng ** cho phép bạn tham khảo vị trí của chúng? –

10

VCL Styles không hỗ trợ đúng DPI cao rộng.

Nếu bạn sử dụng kiểu VCL, thì bạn nên xóa nhận thức DPI cao khỏi tệp kê khai ứng dụng của mình.


báo cáo QP yêu cầu hỗ trợ DPI cao chung của VCL Styles: VCL styles don't scale properly under high DPI configurations

liên quan QC Báo cáo cho NC diện tích: Styled form's non-client area incorrectly scaled under High DPI

+0

@Dalija Prasnikar, cảm ơn thông tin và QC của bạn, nhưng điều này sẽ không giúp tôi ngay bây giờ và tôi không quan tâm đến Embarca. bashing một trong hai, tôi đã có chia sẻ của tôi với lỗi của họ trong những năm qua. Tôi cần sử dụng nhận thức của DPI trong tệp kê khai và tôi đang tìm kiếm giải pháp sẽ hoạt động với bản phát hành 10.1 hiện tại. –

+0

- Trong Trình thiết kế kiểu, có các đối tượng \ Mẫu \ Hình ảnh \ Tiêu đề \ Chú thích với nhiều tiểu mục, có bất kỳ thuộc tính nào sẽ giúp ích không? Tôi đã cố gắng thay đổi một số trong số đó, như Left hoặc MarginLeft, nhưng có vẻ như không tạo ra sự khác biệt nào. - Hoặc, một người nào đó có thể gợi ý tôi đến nơi trong các phong cách VCL .pas nguồn có văn bản phụ đề được định vị không? Tôi cũng sẽ xem xét việc thay đổi nguồn .pas và liên kết nó với dự án của tôi nếu điều này có thể sửa lỗi. Cảm ơn –

+0

Bạn có thể xem lớp Vcl.Forms TFormStyleHook, rất có thể là phương thức PaintNC. –

0

Đây là một đơn vị cho phép phong cách VCL trong các ứng dụng DPI-aware.

VCL.Styles.DPIAware.pas

Để sử dụng các đơn vị chỉ cần thêm nó vào thực hiện sử dụng tuyên bố của form chính và thêm đoạn mã sau để xử lý FormCreate.

procedure TFrmMain.FormCreate(Sender: TObject); 
Var 
    StyleDPIAwareness : TStyleDPIAwareness; 
begin 
    StyleDPIAwareness := TStyleDPIAwareness.Create(Self); 
    StyleDPIAwareness.Parent := Self; 

Theo mặc định, thành phần này chia tỷ lệ theo bội số của 100%. Bạn có thể thay đổi điều đó bằng cách thêm dòng:

StyleDPIAwareness.RoundScalingFactor := False; 

Với kiểu câu lệnh này được chia tỷ lệ bất kỳ kết quả nhân rộng nào cho Screen.PixelsPerInch. Hầu hết các kiểu đều hoạt động tốt, nhưng một số có thể hiển thị một số khiếm khuyết trực quan.

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