Pracuję nad projektem, który składa się z kilku skompilowanych aplikacji Delphi (ponad 20 plików exe i dll) i będę potrzebować udostępnić ponad 60 obrazów (16x16, 24x24, 32x32 , ...) między wszystkimi.Najlepszy sposób udostępniania obrazów między kilkoma aplikacjami
mam chociaż na dwa różne sposoby udostępniania zdjęć między wszystkimi aplikacjami, ale nie jestem pewien, co jest lepsze:
Pomysł 1:
Tworzenie z zasobów tylko projekt DLL, który zawiera odsyłacz do odnośnika do pliku .res, który zawiera wszystkie moje obrazy. Każda aplikacja będzie z kolei ładować bibliotekę dll i odczytać niezbędne obrazy, które mogą być potrzebne do TImageList lub TImage w zależności od potrzeb.
Plusy: Umożliwia przechowywanie obrazów w repozytorium w ich macierzystym formacie.
Minusy: Nie będę mógł oglądać zdjęć w czasie projektowania, ponieważ będą one ładowane tylko w czasie wykonywania. Będę również musiał utworzyć taką samą liczbę stałych, jak są obrazy, lub użyć zestawu o takiej samej liczbie wartości, jak w przypadku obrazów, aby można było odwoływać się do każdego obrazu niezależnie od jego nazwy w pliku zasobów.
Pomysł 2:
utworzyć moduł danych, które są skompilowane jako BPL i zawarte w pakiecie run-time na wszystkich zastosowań. Dodałbym obrazy do kilku bibliotek TImageList (w zależności od rozmiaru obrazu) lub do TPngImageList (która pozwala na obrazy o różnych rozmiarach na jednym komponencie).
Plusy: Będę w stanie dodać ten moduł danych do wszystkich potrzebnych aplikacji i zobaczyć w czasie projektowania wszystkie obrazy, które mogą być potrzebne.
Minusy: Wszystkie obrazy zostaną załadowane do pamięci, nawet jeśli będę potrzebować tylko jednego. Muszę się upewnić, że kolejność obrazów nigdy się nie zmieni podczas dodawania/modyfikowania obrazów do TImageList/TPngImageList. Wszystkie obrazy będą przechowywane w jednym pliku .dfm.
Pomysł 3: (Nowe)
Po patrząc na inne aplikacje, które również muszą udostępniać zdjęcia między skompilowanych exe, miałem jeszcze inny pomysł. Zapisz wszystkie udostępnione obrazy jako zwykłe pliki png/ico w podfolderze, w którym znajdują się skompilowane pliki (na przykład dane).
Plusy: Nie ma potrzeby wczytywania wszystkich obrazów do pamięci, mogę tylko uzyskać potrzebne. Może to być szczególnie ważne, jeśli całkowita liczba obrazów jest dość duża (jedna aplikacja korzystająca z tej metody ma 1400 obrazów w podfolderze Dane).
Przeciw: Obrazy będą widoczne dla każdego. Może zużywać nieco więcej miejsca na dysku na komputerze użytkownika.
Chciałbym poprosić o komentarze na temat tych dwóch pomysłów lub innych sugestii, jak lepiej to osiągnąć.
Dzięki!
Odnośnie pomysłu 2: Czy byłbyś w stanie uwolnić obrazy, których nie potrzebujesz w czasie wykonywania? – Jeff
Nie sądzę, mogę łatwo zwolnić obrazy, których nie potrzebuję w czasie wykonywania, głównie dlatego, że jeśli usunę te, których nie potrzebuję z TImageList, to nie będą miały poprawnego imageindex przypisanego do żadnej kontroli kto używa TImageList. – smartins