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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2017
    Messages : 21
    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
    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
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2017
    Messages : 21
    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 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 166
    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.

  5. #5
    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
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2017
    Messages : 21
    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 489
    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 489
    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à :

+ 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