2011-08-29 24 views
17

Tôi đang làm việc trên một dự án bao gồm một số ứng dụng Delphi được biên dịch (hơn 20 exe ​​và dll) và tôi sẽ cần chia sẻ hơn 60 hình ảnh (16x16, 24x24, 32x32 , ...) giữa tất cả chúng.Cách tốt nhất để chia sẻ hình ảnh giữa một số ứng dụng

Tôi đã mặc dù trên hai cách khác nhau để chia sẻ hình ảnh giữa tất cả các ứng dụng, nhưng tôi không chắc chắn đó là tốt hơn:


Idea 1:

Tạo một thốn chỉ dự án DLL, chứa tham chiếu liên kết tài nguyên tới tệp .res chứa tất cả hình ảnh của tôi. Mỗi ứng dụng sẽ lần lượt tải các dll và đọc những hình ảnh cần thiết nó có thể cần vào một TImageList hoặc TImage tùy thuộc vào nhu cầu của nó.

Ưu điểm: Cho phép giữ hình ảnh trong kho ở định dạng gốc.

Nhược điểm: Tôi sẽ không thể xem hình ảnh tại thời điểm thiết kế vì chúng sẽ chỉ được tải vào thời gian chạy. Tôi cũng sẽ phải tạo cùng một số hằng số vì có hình ảnh hoặc sử dụng tập hợp có cùng số giá trị vì có hình ảnh sao cho mỗi hình ảnh có thể được tham chiếu độc lập với tên của nó trên tệp tài nguyên.


Idea 2:

Tạo một Module Dữ liệu được biên soạn như một bpl và bao gồm như là một gói thời gian chạy trên tất cả các ứng dụng. Tôi sẽ thêm các hình ảnh vào một số TImageList của (tùy thuộc vào kích thước hình ảnh) hoặc vào một TPngImageList (cho phép hình ảnh của một số kích cỡ trên một thành phần duy nhất).

Ưu điểm: Tôi sẽ có thể thêm Mô-đun dữ liệu này vào tất cả các ứng dụng tôi cần và xem tại thời điểm thiết kế tất cả hình ảnh tôi có thể cần sử dụng.

Nhược điểm: Tất cả hình ảnh sẽ được tải vào bộ nhớ ngay cả khi tôi chỉ cần sử dụng một hình ảnh. Tôi cần phải chắc chắn rằng thứ tự của hình ảnh không bao giờ thay đổi khi thêm/sửa đổi hình ảnh vào TImageList/TPngImageList. Tất cả các hình ảnh sẽ được lưu trữ trong một đơn .dfm.


Idea 3: (New)

Sau khi xem xét các ứng dụng khác, những người cũng cần phải chia sẻ hình ảnh giữa biên soạn của exe, tôi đã nêu ra một ý tưởng. Lưu tất cả hình ảnh được chia sẻ dưới dạng các tệp png/ico đơn giản trên thư mục con nơi các tệp được biên dịch là (Dữ liệu ví dụ).

Ưu điểm: Không cần tải tất cả hình ảnh vào bộ nhớ, tôi chỉ có thể tải những hình ảnh cần thiết. Điều này có thể đặc biệt quan trọng nếu tổng số hình ảnh là khá lớn (một ứng dụng sử dụng phương pháp này có 1400 hình ảnh trên một thư mục con Dữ liệu).

Nhược điểm: Hình ảnh sẽ hiển thị/khả dụng cho bất kỳ ai. Có thể sử dụng nhiều không gian đĩa hơn trên máy người dùng.


Tôi muốn hỏi ý kiến ​​về hai ý tưởng này hoặc bất kỳ đề xuất nào khác về cách thực hiện tốt hơn điều này.

Cảm ơn!

+0

Về ý tưởng 2: Bạn có thể giải phóng hình ảnh mà bạn không cần lúc chạy không? – Jeff

+0

Tôi không nghĩ rằng tôi có thể dễ dàng giải phóng hình ảnh mà tôi không cần lúc chạy, chủ yếu là vì nếu tôi xóa những hình ảnh tôi không cần từ TImageList thì nó sẽ không có hình ảnh chính xác được gán cho bất kỳ điều khiển nào người sử dụng TImageList. – smartins

Trả lời

11

Tôi có sở thích mạnh về tùy chọn 1. Thực hiện theo cách này cho phép bạn giữ hình ảnh trong kho kiểm soát bản sửa đổi của bạn ở định dạng gốc. Với tùy chọn 2 bạn lưu trữ hình ảnh trong các tệp .dfm mà tôi thấy cực kỳ không đạt yêu cầu. Nhược điểm là bạn mất thời gian thiết kế xem hình ảnh. Cá nhân tôi thích giao dịch đó.

Trong phần mềm của tôi, tôi có một danh sách hình ảnh toàn cục mà tôi điền vào thời gian chạy bằng cách tải từ các tài nguyên và tất nhiên cũng chỉ định các chỉ mục hình ảnh khi chạy. Lợi ích khác mà điều này mang lại là khả năng chọn kích thước hình ảnh phù hợp với việc mở rộng phông chữ. Nếu không, bạn cần phải có danh sách hình ảnh riêng biệt cho biểu tượng 16px, biểu tượng 20px, biểu tượng 24px, biểu tượng 32px, v.v.

+0

Cảm ơn David vì câu trả lời của bạn. Tôi đã không mặc dù làm thế nào mỗi giải pháp sẽ được lưu trữ trên kho lưu trữ, bạn thực hiện một điểm hợp lệ về vấn đề dfm đó là một con cho ý tưởng 2. Tôi sẽ chỉnh sửa các câu hỏi để bao gồm này là tốt. – smartins

7

Tùy chọn khác là viết thành phần TImage của riêng bạn.

property dllname: string read fdllname write set_dllname; 
property resname: string read fresname write set_resname; 

Trong quy trình thiết lập, bạn sau đó tải hình ảnh từ tài nguyên.
Bằng cách này bạn sẽ vẫn có thể xem hình ảnh trong thời gian thiết kế.

Đảm bảo ghi đè cơ chế lưu hình ảnh trong tệp dfm để exe của bạn không bị cồng kềnh với các hình ảnh đã có trong dll.

Không chắc chắn 100% về cách thực hiện điều đó, nhưng nếu bạn muốn đi theo tuyến đường đó, tôi chắc chắn ai đó có câu trả lời dễ dàng cho câu hỏi đó.

+0

không có chỉ thị 'được lưu trữ' cho các thuộc tính mà bạn cũng có thể chỉ định là sai? –

+0

@Marjan, gọi điện tốt, xem: http://stackoverflow.com/questions/2072096/stored-keyword-in-delphi – Johan

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