2011-11-11 29 views
10

Tôi đang làm việc trên một chương trình Delphi sẽ hiển thị một biểu tượng trên "khay". Tôi đang làm nó "một cách khó khăn" (bằng cách sử dụng Shell_NotifyIcon api, vv và không phải là một thành phần, vì lý do bên ngoài điểm ở đây). Nó hoạt động tốt nhưng đôi khi nó có vẻ như biểu tượng là một chút "mờ" trong một số hệ thống. Bây giờ, tôi đã thử nghiệm bằng cách sử dụng 16x16 bmp, 32x32, v.v. Có vẻ như hệ thống sẽ giảm kích thước cần thiết, nhưng kết quả khác nhau tùy thuộc vào phiên bản hệ điều hành (hoặc có thể là một cái gì đó khác) ....Kích thước biểu tượng tốt nhất để hiển thị trong khay

Bạn có bất kỳ kinh nghiệm nào về kích thước và độ sâu màu tốt nhất của BMP được trích xuất và hiển thị trên khay bằng Shell_NotifyIcon từ một ListImage không?

Trả lời

12

Bạn nên sử dụng các biểu tượng 32bpp với tính minh bạch một phần cho hiệu quả tốt nhất.

Biểu tượng sử dụng kích thước hệ thống nhỏ. Nhận điều này bằng cách gọi số GetSystemMetrics qua số SM_CXSMICON. Nếu bạn sử dụng tỷ lệ phông chữ, điều này có thể là 20px thay vì 16px phổ biến hơn. Tôi đã không bao giờ tìm thấy tài liệu MS cho thực tế này, nhưng bạn có thể dễ dàng xác minh nó cho chính mình bằng thử và sai. Không thực sự là một tình trạng hạnh phúc của công việc, nhưng nó là những gì nó được.

Cập nhật: TOndrej chỉ ra rằng các tài liệu dành cho LoadIconMetric cho phép phê duyệt biểu tượng khu vực thông báo là kích thước biểu tượng nhỏ. Tôi không hiểu tại sao thông tin này không được bao gồm trong đó cho các biểu tượng thông báo.

+0

Hmm ... GetSystemMetrics (SM_CXICON) đang cấp cho tôi 32 trên hệ thống của tôi ... Bật Mặt khác GetSystemMetrics (SM_CXSMICON) cho tôi 16 ...Tệp trợ giúp cho biết SM_CXSMICON là chiều rộng được khuyến nghị của một biểu tượng nhỏ (chắc chắn nó không nói gì về "khay" hoặc "Thanh thông báo" cho vấn đề đó. – Lobuno

+0

Liên kết tôi đã đăng giải thích rằng 'LIM_SMALL' tương ứng với' SM_CXSMICON'. Ví dụ sử dụng 'LIM_SMALL'. –

+0

Bạn là đúng! – Lobuno

7

Bạn có lẽ nên bao gồm cả 32x32 và 16x16 biểu tượng và nạp một thích hợp trong thời gian chạy: biểu tượng

Thông báo khu vực nên cao DPI biết. Ứng dụng phải cung cấp cả biểu tượng 16x16 pixel và biểu tượng 32x32 trong tệp tài nguyên và sau đó sử dụng LoadIconMetric để đảm bảo rằng biểu tượng chính xác được tải và thu nhỏ một cách thích hợp.

(nguồn: MSDN)

+0

Đáng buồn là tài liệu không thực hiện công việc tại đây. Nếu bạn không đặt vào một biểu tượng có kích thước biểu tượng nhỏ, thì bạn sẽ có bí danh và các jaggies đáng sợ. Điều này tôi biết từ kinh nghiệm cay đắng. –

+1

Bạn có lẽ nên bao gồm một lưu ý rằng điều này chỉ hoạt động trên Vista và cao hơn, hoặc Windows Server 2008 và cao hơn ('LoadIconMetric' không có sẵn trên nền tảng Windows trước đó). Vẫn còn rất nhiều hệ thống WinXP và Server 2003. :) –

+5

Nếu có ai quan tâm tôi có mã tuyệt vời sẽ tạo ra các biểu tượng có kích thước bất kỳ với tên tài nguyên và nó hoạt động trên XP và lên nhưng tận dụng các chức năng mới mà chúng tồn tại. Tôi có thể gửi một q và trả lời nó với mã của riêng tôi nếu có sự quan tâm. –

0

Một tệp *.ico được đề xuất cho các biểu tượng ứng dụng. *.ico tệp có thể lưu trữ các kích thước biểu tượng khác nhau như 16, 32, 256 v.v. Bạn có thể chuyển đổi các tệp hình ảnh khác nhau sang định dạng ico trực tuyến here.

Đối với biểu tượng khay 16x16 hoặc 32x32 ico sẽ vừa.

Hướng dẫn msdn chính thức cho các biểu tượng: icons in Windows

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