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 :

Comment récupérer un bitmap enregistré dans un fichier .res [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2017
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Comment récupérer un bitmap enregistré dans un fichier .res
    Bonjour
    Je suis un programmeur amateur qui essaye de faire travailler les quelques neurones qui lui restent, pendant sa retraite.
    J'ai créé plusieurs 'Réussites' en Delphi 7 que j'aimerais transcrire en Lazarus.
    Pour intégrer les 52 cartes au format 'bitmap' dans le fichier .res j'ai utilisé 'ResourceHacker' et c'est en essayant de les afficher dans une image que j'ai des problèmes.
    Sous Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	Bmp.Handle:=LoadBitmap(HInstance,PChar(Nom));
    	Image1.Canvas.Draw(x,y,Bmp);
    me dessine le bitmap enregistré sous le nom de'Nom' dans le fichier .res, dans l'image Image1 en x,y.
    Est-ce que quelqu'un pourrait me donner la méthode permettant de faire la même chose sous Lazarus ?
    Je remercie d'avance celui (ou celle) qui voudra bien se pencher sur mon problème.

  2. #2
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue,

    voilà ce que tu recherches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    uses
      Lresources;
     
    {$I monfichier.res}
     
    Procedure LoadBitmapFromResource(Const ResName : String; Bmp : TBitmap);
    Var
      Stream: TLazarusResourceStream;
    Begin
      Stream      := TLazarusResourceStream.Create(ResName, nil);
      Try
        Bmp.LoadFromStream(Stream);
      Finally
        FreeAndNil(Stream);
      End;
    End;
    Par contre je te conseille de créer ton fichier Res avec Lazres disponible dans ton dossier /lazarus/tools/lazres.lpi. Il te suffit de compiler le projet.
    Ensuite il te suffit de créer un fichier texte (avec l'extension .rc). Ce fichier est très simple, il liste simplement le nom de tes images qui correspondra sans l'extension au nom dans le fichier "res" :

    ex :
    cartes/coeur_as.png
    cartes/coeur_roi.png
    cartes/coeur_dame.png
    etc...
    cartes/coeur_dix.png
    cartes/coeur_neuf.png
    Il te suffira ensuite de lancer Lazres dans un terminal avec la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lazres.exe monfichier.res monfichier.rc
    Et enfin dans ton programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LoadBitmapFromResource('coeur_as', BmpCoeurAs);
    A+

    Jérôme
    • "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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2017
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Comment récupérer un bitmap enregistré dans un fichier .res sous Lazarus
    Bonjour,
    Un grand merci pour tes réponses aux difficultés d'un débutant en Lazarus.
    J'ai déjà un problème pour créer le fichier .res,
    Je veux que mon fichier ait pour nom: Cartes.res
    Les cartes (pour un programme d'essai) ont pour nom*: A001, A002, A003, A004.
    Les fichiers qui contiennent ces cartes sont les bitmap*: A001.bmp, A002.bmp, A003.bmp, A004.bmp.
    Voilà comment j'ai procédé... où est l'erreur*?
    avec le Bloc-Notes j'ai créé le fichier 'Cartes.rc' contenant quatre lignes*:
    A001
    A002
    A003
    A004
    dans un même dossier j'ai copié les 4 fichiers .bmp le fichier Cartes.rc et le fichier lazres.exe
    Avec 'Invite de commande' j'ai exécuté la ligne: lazres.exe Cartes.res Cartes.rc
    Je trouve bien dans le dossier un fichier: Cartes.res de 1 ko mais vide quand je l'ouvre avec ResourcesHacker.
    - A quel moment les fichiers .bmp sont-ils intégrés dans le fichier .res*? Est-ce que c'est lazres.exe qui se charge de cette compilation ou le programme d'essai au moment de sa compilation.
    - Dans la commande*: LoadBitmapFromResource('coeur_as', BmpCoeurAs);
    Comment dois-je la traduire dans mon programme d'essai*:LoadBitmapFromResource('A001', bmp1); où bmp1 serait le destinataire de la carte?

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Si j'ai bien compris la méthode proposée par Jérôme, dans le fichier *.rc il faut mettre le nom complet des fichiers : A001.bmp, etc.

    Pour votre deuxième question, je ne suis pas sûr de la comprendre. Je pense que le deuxième argument de la procédure LoadBitmapFromResource(), c'est le Bmp de l'exemple que vous avez donné au début.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Citation Envoyé par vieuxprof1 Voir le message
    Bonjour,
    Un grand merci pour tes réponses aux difficultés d'un débutant en Lazarus.
    J'ai déjà un problème pour créer le fichier .res,
    Je veux que mon fichier ait pour nom: Cartes.res
    Les cartes (pour un programme d'essai) ont pour nom*: A001, A002, A003, A004.
    Les fichiers qui contiennent ces cartes sont les bitmap*: A001.bmp, A002.bmp, A003.bmp, A004.bmp.
    Voilà comment j'ai procédé... où est l'erreur*?
    avec le Bloc-Notes j'ai créé le fichier 'Cartes.rc' contenant quatre lignes*:
    A001
    A002
    A003
    A004
    dans un même dossier j'ai copié les 4 fichiers .bmp le fichier Cartes.rc et le fichier lazres.exe
    Avec 'Invite de commande' j'ai exécuté la ligne: lazres.exe Cartes.res Cartes.rc
    Je trouve bien dans le dossier un fichier: Cartes.res de 1 ko mais vide quand je l'ouvre avec ResourcesHacker.
    - A quel moment les fichiers .bmp sont-ils intégrés dans le fichier .res*? Est-ce que c'est lazres.exe qui se charge de cette compilation ou le programme d'essai au moment de sa compilation.
    Citation Envoyé par Roland Chastain Voir le message
    Bonjour !

    Si j'ai bien compris la méthode proposée par Jérôme, dans le fichier *.rc il faut mettre le nom complet des fichiers : A001.bmp, etc.

    Pour votre deuxième question, je ne suis pas sûr de la comprendre. Je pense que le deuxième argument de la procédure LoadBitmapFromResource(), c'est le Bmp de l'exemple que vous avez donné au début.
    C'est tout à fait ça . Il ne faut pas oublié l'extension du fichier bmp, png, jpg etc.... dans le fichier rc, comme dans mon exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A001.bmp
    A002.bmp
    A003.bmp
    A004.bmp
    Citation Envoyé par vieuxprof1 Voir le message
    - Dans la commande*: LoadBitmapFromResource('coeur_as', BmpCoeurAs);
    Comment dois-je la traduire dans mon programme d'essai*:LoadBitmapFromResource('A001', bmp1); où bmp1 serait le destinataire de la carte?
    Citation Envoyé par Roland Chastain Voir le message
    Pour votre deuxième question, je ne suis pas sûr de la comprendre. Je pense que le deuxième argument de la procédure LoadBitmapFromResource(), c'est le Bmp de l'exemple que vous avez donné au début.
    Tu as encore tout bon Roland Et ou, "bmp1" est bien le destinataire de la carte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      bmp1 := TBitmap.Create;
      LoadBitmapFromResource('A001', bmp1);
    A+

    Jérôme
    • "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

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2017
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Comment récupérer un bitmap enregistré dans un fichier .res sous Lazarus
    Rebonjour,

    Je viens de recréer le fichier .res en ajoutant dans le fichier .rc l'extension bmp aux noms des cartes (A001.bmp...) mais ça ne change rien.
    Lorsque je lance le programme d'essai j'ai un message:
    Le fichier C:\lazarus\MesProjets\Cartes.res n'a pas l'air d'un fichier texte
    Voulez-vous l'ouvrir quand-même
    OK Arrêter Ignorer
    Quand je choisis OK j'ai le message suivant du compilateur:
    Cartes.rs(1,9) Fatal:Illegal characters "ÿ" ($FF)
    Il y apparaît effectivement ces caractères dans la première ligne puis en deuxième ligne: Cartes suivi de A001.bmp...

    Quant à la ligne : LoadBitmapFromResource('A001', bmp1);
    je pensais qu'elle servait à récupérer la carte dans bmp1 pour pouvoir l'afficher ensuite avec:
    image1:=bmp1.canvas.draw(x,y); ( par exemple mais non testé)
    A+

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    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 421
    Points : 5 820
    Points
    5 820
    Par défaut
    Salut,

    On récapitule :

    1°) Tu crées ton fichier ressources cartes.res

    Pour ce faire dans ton fichier rc (fichier texte) tu doit écrire :
    DRAW1 BITMAP "A001.bmp"
    DRAW2 BITMAP "A002.bmp"
    DRAW3 BITMAP "A003.bmp"
    DRAW4 BITMAP "A004.bmp"
    DRAW5 BITMAP "A005.bmp"
    et tu compiles ton fichier ressources comme ceci :

    lazres.exe cartes.res cartes.rc

    2°) Dans ton programme tu dois avoir ce code-là :
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bon ok je récapitule avec la version 2.06 de Lazarus. Lazres produit des fichers binaires et non des fichiers texte (c'était le cas dans les anciennes version) donc

    - 1) GENERATION DU FICHIER RESOURCE :

    MyBmpRes.rc =
    - 2) EXECUTION DE LAZRES
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lazres MyBmpRes.res @MyBmpRes.rc
    - 3) INCLUSION DU FICHIER RESOURCE DANS LE CODE
    {$R MyBmpRes.res} // $R car la derniere version de Lazres génère des fichiers binaires

    - 4) CHARGEMENT DU FICHIER BITMAP DEPUIS LA RESOURCE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Bmp.LoadFromResourceName(HInstance, 'BeanzLogo');
    Je joins une application de test : loadres.zip

    Lancez le fichier make_res_files.bat pour générer le fichier RES

    A+

    Jérôme
    • "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

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2017
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Comment récupérer un bitmap enregistré dans un fichier .res sous Lazarus
    Bonjour à tous,
    J'ai le plaisir de vous annoncer que mon problème est résolu. Champagne....
    Je voudrais remercier chaudement tous ceux qui ont participé à sa solution*: BeanzMaster, Roland Chastain, et Anapurna.
    C'est très réconfortant de trouver une oreille attentive pour venir au secours d'un petit amateur.
    J'avais épluché toute la littérature sur Lazarus sans trouver une méthode simple pour créer un fichier ressource.res.
    Je pense qu'il serait utile pour d'autres amateurs comme moi de créer un tutoriel qu'on pourrait intituler*:*«*Créer un fichier.res contenant des Bitmaps et les afficher dans une application*».
    Je suis prêt à le rédiger mais je ne sais pas comment m'y prendre et je n'ai pas de site internet.
    Si quelqu'un est intéressé, j'autorise Le modérateur à lui communiquer mon adresse mail.

    A+

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par vieuxprof1 Voir le message
    Je pense qu'il serait utile pour d'autres amateurs comme moi de créer un tutoriel qu'on pourrait intituler*:*«*Créer un fichier.res contenant des Bitmaps et les afficher dans une application*».
    Je suis prêt à le rédiger mais je ne sais pas comment m'y prendre et je n'ai pas de site internet.
    Excellente idée. Cela pourrait peut-être faire l'objet d'une nouvelle entrée dans la FAQ Lazarus ? N'hésitez pas à vous lancer.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Août 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Août 2022
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Excellente idée. Cela pourrait peut-être faire l'objet d'une nouvelle entrée dans la FAQ Lazarus ? N'hésitez pas à vous lancer.

    Bonjour à tous,


    J'ai suivi les explications des différents messages de cette conversation, mais impossible pour moi d'ajouter des ressources à mon projet correctement.
    Y'a-t-il un moyen simple (vraiment type glisser déposer) d'ajouter des fichiers à un projet pour qu'ils soient directement utilisables.

    J'ai beau chercher, il n'y a pas de moyen évident de faire ces opérations.

    Pour moi j'ai toujours une erreur au chargement d'image qu'il ne trouve pas dans les ressources alors que j'ai bien suivi les explications. C'est comme si l'enregistrement du res n'était pas pris en compte à la compilation...

  12. #12
    Membre actif
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 287
    Points : 276
    Points
    276
    Par défaut
    Bonjour à tous
    pour les fichiers ressources, j'utilise "LRS explorer", très bien.
    Ne pas oublier d'initialiser le fichier ressource:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    initialization
      // charge fichier ressources
    {$I ressources.lrs}
    Mettre LResources dans uses.
    Fichiers attachés Fichiers attachés

  13. #13
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Tevirc Voir le message
    Bonjour à tous,


    J'ai suivi les explications des différents messages de cette conversation, mais impossible pour moi d'ajouter des ressources à mon projet correctement.
    Y'a-t-il un moyen simple (vraiment type glisser déposer) d'ajouter des fichiers à un projet pour qu'ils soient directement utilisables.

    J'ai beau chercher, il n'y a pas de moyen évident de faire ces opérations.

    Pour moi j'ai toujours une erreur au chargement d'image qu'il ne trouve pas dans les ressources alors que j'ai bien suivi les explications. C'est comme si l'enregistrement du res n'était pas pris en compte à la compilation...
    Bonjour tu as essayé le projet test ici : https://www.developpez.net/forums/d2.../#post11386701 ?

    Quel est ton message d'erreur ?
    • "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. Réponses: 3
    Dernier message: 14/05/2014, 13h56
  2. Réponses: 0
    Dernier message: 13/05/2014, 17h15
  3. Réponses: 1
    Dernier message: 20/06/2013, 13h55
  4. Réponses: 1
    Dernier message: 28/01/2006, 12h36
  5. comment ne pas enregistrer dans le fichier log?
    Par trotters213 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 21/03/2005, 14h56

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