2010-10-28 3 views
0

J'utilise un ensemble d'environ 100 icônes dans mon application, celles-ci sont accessibles en utilisant des numéros de réfrence fixes et ces numéros sont également mis à la disposition de l'utilisateur pour choisir un icône. Les trois résolutions requises sont 16x16, 32x32 et 48x48. Chacune de ces résolutions est conservée dans un TPngImageList et j'ai créé une «bibliothèque d'icônes» en utilisant un TDataModule qui contient ces trois listes d'images (TArtImageLibraryImageLists). Une simple méthode 'créer à la première utilisation' instancie ce TDataModule lorsque l'une de ses listes d'images est requise. La propriété LargeImages ou une propriété de tout contrôle nécessitant un accès à une liste d'images est simplement définie en appelant la fonction de résolution requise.Comment améliorer le temps de chargement de Delphi TPngImageList (ou TImageList)

Le problème est le temps de chargement au démarrage du programme, qui est d'environ 1s sur une machine rapide. Évidemment, le pire coupable est la liste d'images 48x48 mais je me demande s'il existe un meilleur mécanisme de chargement (par exemple en utilisant un fichier de ressources?) Qui accélérera les choses. Ou y a-t-il un moyen de reformater les listes d'images? J'aurai toujours besoin d'un TImageList au moment de l'exécution, par exemple pour mes TreeView, etc.

Merci, Brian.

var 
    FInstance : TArtImageLibraryImageLists; 

function ArtImageLibraryImageLists : TArtImageLibraryImageLists; 
begin 
    If not Assigned(FInstance) then 
    FInstance := TArtImageLibraryImageLists.Create(nil); 
    Result := FInstance; 
end; 


function ArtIconLibraryImageList16 : TImageList; 
begin 
    Result := ArtImageLibraryImageLists.ImageList16; 
end; 

function ArtIconLibraryImageList32 : TImageList; 
begin 
    Result := ArtImageLibraryImageLists.ImageList32; 
end; 

function ArtIconLibraryImageList48 : TImageList; 
begin 
    Result := ArtImageLibraryImageLists.ImageList48Shadow; 
end; 
+0

Vous semblez avoir besoin du datamodule au démarrage mais avez-vous besoin des images 48x48 au démarrage? –

Répondre

0
  1. Vous dites « Une méthode simple « créer de la première utilisation » instancier ce TDataModule », mais dire que le problème est le temps de démarrage. Quand le datamodule est créé réellement?
  2. Avez-vous profilé l'application pour vous assurer que la liste d'images est en train de charger le problème?
  3. Si le problème est en fait la liste d'images, avez-vous besoin de png? S'ils sont stockés en tant que tels, ils doivent être décodés et ajoutés à l'image bitmap. ImageList_LoadImage() peut charger un bitmap en une seule étape.
+0

1 -Oui, il est créé la première fois qu'une référence à une liste d'images est affectée. 2 - Oui. C'est le chargement de la ressource DFM du module de données contenant mes 3 listes d'images qui est lent. 3. PNG - J'utilise pour la transparence mais c'est un bon point, peut-être que je vais regarder d'autres formats. Merci. –

Questions connexes