2010-10-20 37 views
1

J'ai ce morceau de code:charge GIF à partir de ressources à la forme dynamique

SELDR_WH := FindControl(FindWindow(nil,'PhoneDB Filtering')) as TForm; 
if seldr_wh <> nil then 
    begin 
    SELDR_WH.ClientHeight := SELDR_WH.ClientHeight + 20; 
    gif := TGIFImage.Create; 
    with gif do begin 
     Parent := SELDR_WH; 
     Top := SELDR_WH.ClientHeight - 20; 
     Left := 30; 
     try 
     rs := TResourceStream.Create(hInstance, 'ajax-loader', RT_RCDATA); 
     gif.LoadFromStream(rs); 
     except on Exception do begin 
      rs.free; 
      gif.free; 
     end; 
     end 
    end; 
    end; 
code

est assez évident, je pense. Aucune explication ...

Mais - problème est que je ne suis pas en mesure de charger cette ressource GIF au composant gif -> EResNotFound ...

Le problème est dans le paramètre hInstance comme indiqué ici: http://www.codeproject.com/Messages/931171/Re-The-difference-between-HWND-and-HINSTANCE.aspx

Mais - Comment le charger? L'effet du chargement échoué est que le formulaire principal est défini en tant que formulaire enfant de SELDR (SELDR_WH).

Toute aide appréciée. Merci!

+0

Peut-être que vous avez fait une faute de frappe soit le nom de la ressource ou le type de ressource, êtes-vous sûr? – Vantomex

+0

Ouais. Je suis sûr! ;) –

+0

Vraiment rien d'autre que vous pourriez suggérer comme typo ...? –

Répondre

3

essayer de vérifier si votre image gif a été correctement réglé. Je pense que vous devez ajouter l'ajax-loader.gif à votre ressource. puis nommez-le avec ajax-loader avec le type RT_RCDATA. comment faire, goto Projet> Ressources> ajouter le fichier, identifiant de ressource = ajax-loader Type = RT_RCDATA. ça marche sûrement. je l'ai testé. Votre code fonctionne bien. Si c'est externe, assurez-vous d'avoir d'abord le fichier resource.dll. ou peut-être le problème is'nt vraiment là ..

que le chargement des images, il fonctionne très bien

+0

peut-être il y a un problème sur nommer l'image, ou la bibliothèque est encore chargée. ou quelque chose manque comme {$ R ERes.res} –

+0

Vous êtes le patron! Tu m'as aidé! J'avais tellement de temps à chercher ce processus ... merci !! – KryNaC

0

1) Où se trouve votre code?

hInstance récupère la ressource du fichier .exe de processus en cours. En bref, hInstance est commun à l'ensemble de l'exe, quelle que soit la forme que vous utilisez. Par conséquent, la ressource 'ajax-loader' doit être dans le fichier .exe qui contient ce code.

2) Votre ressource est-elle bien créée? Utilisez un explorateur de ressources pour lister les ressources à l'intérieur de votre exe.

Vous devez correspondre au nom de la ressource (par exemple « ajax-loader ») et le type de ressource, qui doit être réglé sur la valeur 10. Par exemple, votre fichier .rc devrait ressembler à ceci:

ajax-loader 10 "ajax-loader.gif" 

Je suis pas sûr que le caractère '-' est autorisé dans le nom de la ressource, mais je suppose que c'est OK.

+0

Avez-vous essayé de charger la ressource dans un petit exe? Liez le même fichier .res, puis chargez la ressource. –

0

Vous voudrez changer la façon dont vous référencez RT_RCDATA. Cette méthode fonctionne pour moi:

rs := tResourceStream.Create(hInstance,'imgname', MakeIntResource(RT_RCDATA)); 
+0

C'est exactement la même chose que tResourceStream.Create (hInstance, 'imgname', RT_RCDATA); –

+0

Nop. Ne change rien ... –

+0

Rien d'autre à offrir comme solution? –