2010-06-25 25 views
13

Delphi 2010, Win32 VCL. Tôi cần tạo một menu chính cho ứng dụng của tôi với giao diện chuẩn nhất. TMainMenu trông đẹp mắt trong tất cả các phiên bản Windows, điều xấu duy nhất là khi nó hiển thị hình ảnh cho các mục có Enabled = False.Xấu xí "bị vô hiệu hóa" của TMainMenu

Delphi có một số phương pháp lạ để xây dựng hình ảnh bị vô hiệu hóa (b/w đùn với bevels, đối với tôi nó trông giống như spew). Tôi muốn thực hiện một bản vá cho thủ tục đó trong các nguồn VCL và cho phép trình đơn để chọn hình ảnh bị vô hiệu hóa từ cùng một TImageList, nhưng tôi không thể tìm thấy nó.

Có tồn tại ở tất cả hoặc đó là một số cuộc gọi API cửa sổ tiêu chuẩn? Bạn có biết thủ tục đó nằm ở đâu không?

Kiểu chủ sở hữu chắc chắnDraw có thể sửa tất cả điều này nhưng tôi muốn có giải pháp nhanh hơn một chút.

Trả lời

22

Có bài đăng tuyệt vời trên Galfar's Lair blog mô tả sự cố và có mã để giải quyết sự cố, ghi đè phương pháp Domraw của TImageList.

Đây là pic (được liên kết) hiển thị 'trước' và 'sau'.

alt text

Tôi nghĩ điều này liên quan đến khá nhiều phiên bản Delphi.

+0

Tuyệt vời! Tôi sẽ ghi đè lên TCustomImageList.DoDraw và hình ảnh bị vô hiệu hóa sẽ được sao chép từ nửa sau của hình ảnh được lưu trữ 32x16. Cảm ơn Roddy và Galfar. – Andrew

+0

Rực rỡ! Tôi cần cái này! –

4

Nếu bạn có thể cung cấp hình ảnh dưới định dạng PNG, bạn có thể sử dụng TPngImageList từ PngComponents. Nó có các tùy chọn khác nhau để tạo ra một hình ảnh bị vô hiệu hóa hoặc hỗn hợp màu xám. Định dạng PNG cho phép bạn sử dụng chữ số.