IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Problème d'utilisation de ressources après création d'un .res [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 129
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 129
    Par défaut Problème d'utilisation de ressources après création d'un .res
    Bonjour,

    j'ai voulu me mettre en conformité avec la nouvelle direction de Lazarus (tout pour Windows ?), suite à la lecture inquiétante de ces quelques lignes de Gilles :
    Citation Envoyé par gvasseur58 Voir le message
    Précision : bien qu'étant à l'origine des fichiers Windows, les fichiers RES sont à présent utilisables par les versions Linux. Il est même fortement recommandé d'abandonner l'ancien format (bis repetitat).
    J'ai donc scrupuleusement suivi les instructions de cette page,
    1- créer un .rc avec Leafpad (le "bloc-notes" de Linux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MONVISEUR	RT_GROUP_CURSOR	"grayviseur64.png"
    types

    2- créer le .res avec windres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    windres -i viseur.rc -o viseur.res
    3- l'inclure dans le .pas du projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    initialization
      {$R viseur.res}
    end.
    et à la fin, quand je lance le magnifique programme qui fonctionne tip-top avec un .lrs, voilà ce que je gagne :
    Nom : resource_pb.png
Affichages : 431
Taille : 80,2 Ko

    De haut en bas :
    - le message d'erreur au lancement du prog ;
    - la fenêtre de ResExplorer qui montre bien qu'une ressource nommée MONVISEUR existe ;
    - le fichier viseur.rc que windres a utilisé pour générer le .res.

    À partir de là, que faire ?
    Et qu'on ne me dise pas d'utiliser des outils windows, d'une part je suis sous Linux, et d'autre part c'est ce que j'ai fait hier soir dans une machine virtuelle, avec les mêmes résultats...

    La seule différence avec la page d'exemple que j'ai citée et mon code, c'est que tout en bas de l'exemple c'est un TImage qui est utilisé, quand moi j'ai besoin d'un TCursorImage, que j'essaye de charger ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      crPointeur: TCursorImage;
    begin
      crPointeur := TCursorImage.Create;
      crPointeur.LoadFromResourceName(HInstance, 'MONVISEUR');
      Screen.Cursors[34] := crPointeur.ReleaseHandle;
      crPointeur.Free;
      imgRainbow.Cursor := 34; // TImage qui va utiliser le curseur perso.
    Ces 5 lignes ont fonctionné dans un vieux projet de test, pour lequel le .res avait été créé à partir d'un .cur généré avec le .png et un outil Windows, mais c'est tellement vieux que je ne me souviens pas comment j'ai fait.
    Et surtout, la page d'exemples Lazarus ne parlant pas de .cur, il n'y a donc aucune raison pour que je continue à (essayer de) l'utiliser.

    EDIT :
    PS : si je génère un viseur2.res avec lazres (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lazres /path/viseur2.res /path/grayviseur64.png 
    ResourceName='grayviseur64' Type=RT_RCDATA
    [la ligne 2 est une sortie de Lazres]), le message d'erreur est le même...

    Mais vu la ligne de sortie de compil de lazres, je tente un remplacement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //  crPointeur.LoadFromResourceName(HInstance, 'MONVISEUR');
      crPointeur.LoadFromResourceName(HInstance, 'grayviseur64');
    et cette fois le message d'erreur me dit qu'il ne trouve pas grayviseur64.

    Je vous laisse imaginer ma satisfaction et mon enthousiasme.
    En plus il pleut...

    EDIT2 :
    Et même en forçant le nom de la ressource, comme expliqué là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lazres /path/viseur2.res /path/grayviseur64.png=MONVISEUR
    /path/grayviseur64.png ResourceName='MONVISEUR' Type=RT_RCDATA
    la ressource "MONVISEUR" est introuvable...

    Et si, fort de cette information renvoyée par lazres (Type=RT_RCDATA) je génère un nouveau .rc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MONVISEUR	RT_RCDATA	"grayviseur64.png"
    et ensuite un nouveau .res avec windres, ben restez assis, le programme ne trouve toujours pas la ressource.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut


    la commande pour le fichier RC est


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MONVISEUR RCDATA "grayviseur64.png"
    pourquoi ajoute tu RT_ ?

  3. #3
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 129
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 129
    Par défaut
    Yop !

    Citation Envoyé par anapurna Voir le message
    pourquoi ajoutes-tu RT_ ?
    Parce que c'est ce qu'on trouve sur le site de Microsoft dont le lien est dans le wiki de FreePascal :
    Citation Envoyé par Jipété Voir le message
    1- créer un .rc avec Leafpad (le "bloc-notes" de Linux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MONVISEUR	RT_GROUP_CURSOR	"grayviseur64.png"
    types
    et c'est aussi dans la sortie de Lazres :
    Citation Envoyé par Jipété Voir le message
    PS : si je génère un viseur2.res avec lazres (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lazres /path/viseur2.res /path/grayviseur64.png 
    ResourceName='grayviseur64' Type=RT_RCDATA
    [la ligne 2 est une sortie de Lazres]),
    [...]
    Et même en forçant le nom de la ressource, comme expliqué là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lazres /path/viseur2.res /path/grayviseur64.png=MONVISEUR
    /path/grayviseur64.png ResourceName='MONVISEUR' Type=RT_RCDATA
    De toute façon, si j'essaye ta méthode sans RT_ j'ai le même message d'erreur.

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 129
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 129
    Par défaut
    Bon,

    il doit y avoir autre chose, autre chose de bien planqué et bien vicieux car, quand j'utilise le vieux .res créé pour mes premiers essais et son prog de test, tout va bien.

    Et le même .res avec les mêmes instructions de lecture dans le gros programme à base de frames = paf !

    Au cours de mes pérégrinations sur le web, j'avais lu que quelqu'un avait eu des messages d'erreurs pas clairs du tout et hors sujet si son fichier n'avait pas d'extension ! C'est fabuleux, Lazarus sous Linux...

    Je vais donc rester avec le .lrs qui fonctionne très bien et puis voilà.

  5. #5
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Salut JP.

    Pour créer un fichier res, tu pourrais utiliser un éditeur (j'ai testé ResourceHacker conseillé par Gilles: no problem).

    Sinon, avec Lazres :
    très simple (du moins sous Windows) : je crée un fichier .bat avec une seule ligne :

    path de lazres\lazres mesressources.res test.png=INFO cursor_pen.cur=CURPEN

    Pour récupérer le png :
    Image1.Picture.LoadFromResourceName(Hinstance, 'INFO');

    Pour récupérer le curseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
        Cur: TCursorImage;
    begin
        Cur := TCursorImage.Create;
        Cur.LoadFromResourceName(HInstance, 'CURPEN');
        Screen.Cursors[1] := Cur.ReleaseHandle;
        Cur.Free;
    end;
    Et ne pas oublier de faire "Créer" et non "Compiler".

    Amicalement
    Thierry

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 129
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 129
    Par défaut
    Salut les copains (tiens, on se croirait sur Europe1 y a plus d'un demi-siècle, et oui...)

    Gilles, tu sais que j'aime prendre mon temps, et si tu n'avais pas précisé "obsolete" dans ta réponse de l'autre fil, probable que je serais resté avec les .lrs.
    Pi de toute façon, va bien falloir que j'y reste, lire ci-après...

    Thierry, tout ce que tu m'as dit, je le sais, j'ai déjà joué avec...
    Juste un point de détail (qui n'a rien à voir avec ce qui va suivre) :
    Citation Envoyé par ThWilliam Voir le message
    path de lazres\lazres mesressources.res test.png=INFO cursor_pen.cur=CURPEN
    Comment génères-tu ton .cur ?

    Bon, ayant attentivement regardé ton post, et partant de mon vieux code de test qui fonctionne, j'ai démarré un nouveau projet complètement vide et j'ai vérifié cet ancien code : il fonctionne toujours.
    J'ai rajouté un TPageControl et 2 pages, une TFrame sur chaque page avec un TImage sur chacune, et ça fonctionne toujours.
    Je suis même passé en mode "création dynamique" d'une TFrame et ça continue à fonctionner.

    Alors pourquoi, lorsque je prends le même .res et le même code pour charger la ressource, dans le gros projet j'ai le message d'erreur ? Je ne sais pas...

    Laissez tomber, on ne va pas y passer le week-end, là j'en ai un peu marre, car si ça se trouve le message d'erreur que je reçois ne correspond pas à la réalité ; à partir de là, tout est possible...

  7. #7
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Jipété Voir le message
    j'ai voulu me mettre en conformité avec la nouvelle direction de Lazarus (tout pour Windows ?), suite à la lecture inquiétante de ces quelques lignes de Gilles
    Bonjour,

    Euh, l'inquiétude commence à dater, car le virage a été pris avec la version 1.4 de Lazarus. Voir l'annonce ici.
    Le choix final n'a fait que reprendre celui des concepteurs de Free Pascal puisque le compilateur a introduit les fichiers res depuis sa version 2.4, ce qui ne date pas d'hier non plus .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 129
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 129
    Par défaut
    Bon,

    cette erreur n'énervait, j'ai fouillé creusé testé essayé des trucs et des machins, et il y avait bien anguille sous roche...
    Pour faire court et simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      //imgPointeur.LoadFromLazarusResource('grayviseur64'); // --> mess d'erreur Resource "grayviseur64" not found.
      imgPointeur.LoadFromResourceName(HInstance, 'grayviseur64'); // tout va bien
    Et bien sûr rien dans l'aide ni dans les wiki pour nous dire d'utiliser "LoadFromResourceName" avec un .res plutôt que "LoadFromLazarusResource", enfin, c'est ce que je traduis du comportement du code que je montre (une ligne à la fois, bien sûr, mais ça ne coûte rien de le préciser).

    Voilà, j'ai basculé sur un .res. Alors, Gilles, heureux ?

  9. #9
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Et bien sûr rien dans l'aide ni dans les wiki pour nous dire d'utiliser "LoadFromResourceName" avec un .res plutôt que "LoadFromLazarusResource", enfin, c'est ce que je traduis du comportement du code que je montre (une ligne à la fois, bien sûr, mais ça ne coûte rien de le préciser).

    Voilà, j'ai basculé sur un .res. Alors, Gilles, heureux ?
    Bien sûr que je suis heureux .

    Pour récupérer des glyphes pour un TBitBtn par exemple, tu aurais eu besoin (c'est une des possibilités) de la méthode LoadGlyphFromResourceName avec les mêmes paramètres. Là encore, pas de documentation autre que des allusions ici ou là. Mais nous avons le droit, sinon le devoir (), d'expliquer nos trouvailles. Pour les glyphes, voir mon blog ici.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  10. #10
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 129
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 129
    Par défaut
    Citation Envoyé par gvasseur58 Voir le message
    Mais nous avons le droit, sinon le devoir (), d'expliquer nos trouvailles. Pour les glyphes, voir mon blog ici.
    Dont acte, à la suite de ton tuto.

    Bon week-end,

  11. #11
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonsoir j'ai eu un problème similaire lors de la conversion d'un code Delphi pour charger des curseurs pour la souris. En cherchant je suis tombé la dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {$R CURSORS.RES}
     
    function LoadCursorFromRes(CursorName:String):THandle;
    var
       Cur: TCursorImage;
    begin
       Cur := TCursorImage.Create;
       Cur.LoadFromResourceName(HInstance,CursorName);
       result := Cur.ReleaseHandle;
       Cur.Free;
    end;
    Si cela peux aider.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'accès aux ressources après export de mon application
    Par stevenfoox dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 05/09/2014, 13h23
  2. [XL-2010] Problème d'utilisation liste déroulante après protection feuille
    Par jessy2010 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/07/2012, 20h10
  3. Problème d'utilisation des ressources
    Par Claude_Azoulai dans le forum Visual Studio
    Réponses: 1
    Dernier message: 26/09/2011, 16h56
  4. Réponses: 0
    Dernier message: 13/04/2011, 10h40
  5. Réponses: 14
    Dernier message: 03/12/2009, 12h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo