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 créer une liste d'images [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 créer une liste d'images
    Bonjour.
    Pour profiter de ma période de confinement, j'ai entrepris de transcrire une Réussite «FreeCell» que j'avais écrite en Delphi7 (qui fonctionne très bien), en Lazarus.
    Pour cela j'utilise des listes d'images, des listes de « Records » et des listes de listes. Avec toutes ces listes, le compilateur ne trouve pas d'erreurs sauf quelques conseils, mais le programme se termine par une « Classe d'exception:External SIGSEGV »
    Pour déboguer la création de la liste d'images j'ai écrit un petit programme test dont voici l'unité principale :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    unit ListeTest_P;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Image1: TImage;
        Image10: TImage;
        Image11: TImage;
        Image12: TImage;
        Image13: TImage;
        Image14: TImage;
        Image15: TImage;
        Image16: TImage;
        Image0: TImage;
        Image2: TImage;
        Image3: TImage;
        Image4: TImage;
        Image5: TImage;
        Image6: TImage;
        Image7: TImage;
        Image8: TImage;
        Image9: TImage;
        Panel1: TPanel;
        Panel2: TPanel;
        procedure FormCreate(Sender: TObject);
        procedure CreerListIm(Sender:TObject);
      private
     
      public
     
      end;
     
    var
      Form1: TForm1;
      Image0,Image1,Image2,Image3,Image4,Image5,Image6,Image7,Image8,Image9,
      Image10,Image11,Image12,Image13,Image14,Image15,Image16:TImage;
      ListIm:TList;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ListIm.Create;
      CreerListIm(Sender);
    end;
    procedure TForm1.CreerListIm(Sender:TObject);
    var
      n:integer;
      s:string;
    begin
     
      ListIm.Add(Image0);//Sert à afficher la pioche (centre haut, index 0)
      ListIm.Add(Image1);//Première colonne bas(index 1)
      ListIm.Add(Image3);
      ListIm.Add(Image4);
      ListIm.Add(Image5);
      ListIm.Add(Image6);
      ListIm.Add(Image7);
      ListIm.Add(Image8);//Dernière colonne bas(index 8)
      ListIm.Add(Image9);//Première colonne haut(index 9)
      ListIm.Add(Image10);
      ListIm.Add(Image11);
      ListIm.Add(Image12);//Dernière colonne haut(index 12)
      ListIm.Add(Image13);//Première colonne de dépôt
      ListIm.Add(Image14);
      ListIm.Add(Image15);
      ListIm.Add(Image16);//Dernière colonne de dépôt
      n:=ListIm.Count;
      str(n,s);
      Panel2.Caption:=s;
    end;
     
    end.
    La fonction ListIm.Add() nécessite pour attribut un pointeur, est-ce que l'erreur viendrait de là ? Dans ce cas, comment créer un pointeur sur chaque image ?
    Ensuite comment accéder à une image de la liste pour par exemple modifier sa taille ?

    Un grand merci à ceux qui voudront 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

    Pour le code dans tes messages utilises la balise c'est plus lisible. stp

    Pour ta liste d'image tu peux simplement utiliser le composant TImageList.

    Sinon dans ton exemple c'est que tu assignes un composant visuel TImage ce qui n'est pas la bonne solution.
    De plus TList ne s'utilise pas de cette façon.
    Si tu veux stocker des Objets il faut utiliser TObjectList au lieux de TList. Si non tu peux utiliser une TStringList avec la methode AddObject(monObject, 'LeNomdeMonObject');

    Dans tous les cas pour ta liste, le mieux c'est TImageList et l'utilisation de TBitmap et d'un SEUL TImage qui lui sert à l'affichage

    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 éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Il y a aussi un autre problème : vous définissez deux fois les variables 'Image_xx' ?

    Cordialement.

    Pierre.

  4. #4
    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 créer une liste d'images sou Lazarus
    Bonjour
    Merci pour ta réponse mais je n'ai pas été assez clair dans ma question.
    La réussite FreeCell est constitué de 16 emplacements sur lesquels sont déposés des cartes. Il y a 8 emplacements dont la taille est fixe (une seule carte visible) et 8 dont la hauteur est variable. Ce sont ces emplacements sur le tapis qui sont des images. Les cartes déposés sur lmage1 forment une liste de cartes et les 16 listes de cartes forment une liste de listes.
    Sous Delphi7 toutes ces listes sont facilement constituées avec :
    ListIm.Add(Image1) où Image1 est un TImage
    List1.Add(P) où P est un pointeur sur une carte
    Liste.Add(List1) où List1 est la liste des cartes déposées sur l'Image1.
    La taille de l'Image doit être ajustée en fonction du nombre de cartes déposées.
    List1.Count est le nombre de cartes déposées sur Image1.
    Liste est la liste des 16 listes contenant les cartes.
    Je cherche donc l'équivalent avec Lazarus
    TimageList et TobjectList ne conviennent pas pour ce que je cherche.
    A+
    JC

  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

    Essaye en ajoutant @ devant tes objets List1.Add(@P)Pour ce qui est du change de taille de tes TImage tu as les propriétés "Stretch" et "Proportionnal" qui feront que l'image s'adaptera aux dimension de ton contrôle

    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 créer une liste d'images
    Citation Envoyé par ChPr Voir le message
    Il y a aussi un autre problème : vous définissez deux fois les variables 'Image_xx' ?

    Cordialement.

    Pierre.
    Bonjour

    Si je ne déclare pas les Imagexx comme variables le compilateur affiche "Succès" mais le programme s'arrête quand même avec l'erreur "SIGSEGV".
    La déclaration des Imagexx comme variables n'est donc pas nécessaire.

    Cordialement
    JC

  7. #7
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Ce qui fait que ton programme plante est dû à la création de la Liste. Tu écris :

    Je ne sais pas pourquoi, mais cette forme d'écriture ne fonctionne pas, il faut écrire :

    Cordialement.

    Pierre.

  8. #8
    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 créer une liste d'images
    Bonjour Pierre

    Effectivement je viens de tester
    et ça fonctionne ! Merci
    C'était une erreur impardonnable de ma part.
    Pour ce qui concerne la modification de la taille de l'image, c'était un exemple. J'aurais aussi bien pu demander comment changer le curseur sur cette image.
    Lorsque je veux intervenir sur une image de ma liste, il faut que je l'extraie de la liste, je modifie la propriété de l'image, puis je la réintègre dans la liste.
    Sous Delphi je procède de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      Imagea:TImage;
      i:integer;
    Imagea:=ListIm[i];//pour modifier l'image d'index i
    Imagea.Height:=120;
    ListIm[i]:=Imagea
    Or Lazarus n'accepte pas
    il veut un pointeur! Quel est ce pointeur?

    Cordialement
    JC

  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 créer une liste d'images
    Citation Envoyé par BeanzMaster Voir le message
    Bonjour

    Essayes en ajoute @ devant tes objets List1.Add(@P)Pour ce qui est du change de taille de tes TImage tu as les propriétés "Stretch" et "Proportionnal" qui feront que l'image s'adaptera aux dimension de ton contrôle

    A+

    Jérôme
    Bonjour Jérôme

    Merci pour ta réponse.
    Je ne pense pas que les propriétés "Stretch" et "Proportionnal" soient adaptées à mon cas, il me semble qu'ils adaptent la taille du bitmap (en le déformant) à la taille du conteneur Image.
    Je cherche une méthode plus générale pour modifier une propriété d'une image de la liste, par exemple modifier le curseur.
    Pour modifier la hauteur de l'image d'index 2 j'ai écrit la procédure suivante qui passe sans message du compilateur mais qui se termine par une erreur "SIGSEGV".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.ModifImage(Sender:TObject);
    var
      P:^TImage;
    begin
      P:=ListIm[2];
      Image0:=P^; //Image0 n'est pas utile dans mon programme
      Image0.Height:=120;
      ListIm[2]:=P;
    end;
    Je pense que l'erreur provient de la définition du pointeur.
    Comment modifier cette procédure pour que ça fonctionne?

    Cordialement
    JC

  10. #10
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Quand vous avez enregistré vos images dans la liste, Pour chacune, vous n'avez fait qu'y enregistrer un pointeur sur cette image. Donc, quand vous faites Imagea:=ListIm[i];, vous ne faites que récupérer son pointeur. Mais comme un pointeur ne dit rien de la structure de l'objet qui a été enregistré, vous ne pouvez rien en récupérer. Pour cela, il faut que vous fassiez un transtypage, c'est-à-dire : Imagea:=TImage(ListIm[i]);.

    Mais avant tout, vous avez enregistré des images inexistantes puisque vous ne les avez pas créées. Le fait de les avoir déclarées en tant que TImage n'a fait qu'installer une variable pointant sur 'nil'.

    Donc, avant toutes choses, vous devez créer ces images par Image_xx:= TImage.Create(Self); ; vous pourrez avoir accès ensuite à leurs propriétés.

    Par ailleurs, une fois que vous avez changé les paramètres d'une image, ce n'est pas la peine de réenregistrer son pointeur (ListIm[i]:=Imagea;) ; il n'a pas changé.

    Cordialement.

    Pierre.

  11. #11
    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
    Salut JC

    Citation Envoyé par vieuxprof1 Voir le message
    Bonjour Jérôme

    Merci pour ta réponse.
    Je ne pense pas que les propriétés "Stretch" et "Proportionnal" soient adaptées à mon cas, il me semble qu'ils adaptent la taille du bitmap (en le déformant) à la taille du conteneur Image.
    Avec "proportionnal" le ratio largeur/hauteur est conservé, donc pas de déformation

    Citation Envoyé par vieuxprof1 Voir le message
    Je cherche une méthode plus générale pour modifier une propriété d'une image de la liste, par exemple modifier le curseur.
    Que veux tu dire par curseur ? le curseurr de la souris lorsque tu survolles une carte ?

    Citation Envoyé par vieuxprof1 Voir le message
    Pour modifier la hauteur de l'image d'index 2 j'ai écrit la procédure suivante qui passe sans message du compilateur mais qui se termine par une erreur "SIGSEGV".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.ModifImage(Sender:TObject);
    var
      P:^TImage;
    begin
      P:=ListIm[2];
      Image0:=P^; //Image0 n'est pas utile dans mon programme
      Image0.Height:=120;
      ListIm[2]:=P;
    end;
    Je pense que l'erreur provient de la définition du pointeur.
    Comment modifier cette procédure pour que ça fonctionne?

    Cordialement
    JC
    Ici tu ne récupères pas correctement ton objet, essayes comme ceci (mais comme je te le disais à mon avis TObjectList serait plus approprié, mais je me trompe peut-être )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.ModifImage(Sender:TObject);
    var
      P: TImage;
    // avec P : ^TImage il faut que tu alloues la mémoire d'ou le SIGSEGV
    begin
       //P:=ListIm[2]; J'aime pas cette façon de faire
     
      p := TImage(ListIm.Items[2]^);
      P.height := 120;
     
      //Image0:=P; 
      //Image0.Height:=120;
      //ListIm.Items[2]:= P;
    end;
    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

  12. #12
    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 créer une liste d'images
    Citation Envoyé par ChPr Voir le message
    Quand vous avez enregistré vos images dans la liste, Pour chacune, vous n'avez fait qu'y enregistrer un pointeur sur cette image. Donc, quand vous faites Imagea:=ListIm[i];, vous ne faites que récupérer son pointeur. Mais comme un pointeur ne dit rien de la structure de l'objet qui a été enregistré, vous ne pouvez rien en récupérer. Pour cela, il faut que vous fassiez un transtypage, c'est-à-dire : Imagea:=TImage(ListIm[i]);.

    Mais avant tout, vous avez enregistré des images inexistantes puisque vous ne les avez pas créées. Le fait de les avoir déclarées en tant que TImage n'a fait qu'installer une variable pointant sur 'nil'.

    Donc, avant toutes choses, vous devez créer ces images par Image_xx:= TImage.Create(Self); ; vous pourrez avoir accès ensuite à leurs propriétés.

    Par ailleurs, une fois que vous avez changé les paramètres d'une image, ce n'est pas la peine de réenregistrer son pointeur (ListIm[i]:=Imagea;) ; il n'a pas changé.

    Cordialement.

    Pierre.
    Bonjour Pierre

    Je vous ai répondu hier pour vous dire que vos conseils fonctionnent parfaitement en créant les images avec Image_xx:=TImage.Create(Self) ;Le message n'a pas du passer parce que trop long, j'avais ajouté le code de l'unité principale.

    Pour compléter mon programme ListeTest, j'ai voulu vérifier que l'affichage des cartes se faisait bien sur les images.
    Après avoir :
    ajouté dans uses : LResources et LCLType
    dans public :
    procedure LoadBitmapFromResource(Const ResName : String; Bmp : Tbitmap);la directive {$R Cartes.res} contenant les cartes

    J'ai ajouté la procédure suivante simplement destinée à afficher l'as de cœur sur l'Image1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Afficher(Sender:TObject);
    var
      Imagea:TImage;
      Bmp:TBitmap;
    begin
      Bmp:=TBitmap.Create;
      Imagea:=TImage(ListIm[1]);
      Bmp.LoadFromResourceName(HInstance,'C011');
      Imagea.Canvas.Draw(0,0,Bmp);
    end;
    Le compilateur affiche bien le message « Succès » mais l'as de cœur ne s'affiche pas ! Où est l'erreur ?

  13. #13
    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
    Citation Envoyé par BeanzMaster Voir le message
    Salut JC



    Avec "proportionnal" le ratio largeur/hauteur est conservé, donc pas de déformation



    Que veux tu dire par curseur ? le curseurr de la souris lorsque tu survolles une carte ?



    Ici tu ne récupères pas correctement ton objet, essayes comme ceci (mais comme je te le disais à mon avis TObjectList serait plus approprié, mais je me trompe peut-être )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.ModifImage(Sender:TObject);
    var
      P: TImage;
    // avec P : ^TImage il faut que tu alloues la mémoire d'ou le SIGSEGV
    begin
       //P:=ListIm[2]; J'aime pas cette façon de faire
     
      p := TImage(ListIm.Items[2]^);
      P.height := 120;
     
      //Image0:=P; 
      //Image0.Height:=120;
      //ListIm.Items[2]:= P;
    end;
    A+

    Jérôme
    Bonjour Jérôme

    Merci pour ta réponse, j'ai testé la suggestion de Pierre qui semble fonctionner en créant les images.
    Il y a quand même un problème pour l'affichage!

    A+
    JC

  14. #14
    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
    Salut,
    QUOTE=vieuxprof1;11523277]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Afficher(Sender:TObject);
    var
      Imagea:TImage;
      Bmp:TBitmap;
    begin
      Bmp:=TBitmap.Create;
      Imagea:=TImage(ListIm[1]);
      Bmp.LoadFromResourceName(HInstance,'C011');
      Imagea.Canvas.Draw(0,0,Bmp);
    end;
    Le compilateur affiche bien le message « Succès » mais l'as de cœur ne s'affiche pas ! Où est l'erreur ?[/QUOTE]


    Salut attention les TImage sont des CONTROLES comme le TBUTTON

    Imagea.Canvas.Draw(0,0,Bmp); ne fonctionnera pas car les dimensions de TPICTURE.BITMAP à la création sont 0x0
    Pour charger ton image, justement tu as la propriété PICTURE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.CHARGER_AS_DE_COEUR(Sender:TObject); // Et oui charger car ta méthode n'affiche pas directement ;)
    var
      Imagea:TImage;
    begin
     
      Imagea:=TImage(ListIm[1]);
      imagea.picture.LoadFromResourceName(HInstance,'C011');
      imagea.Invalidate;
    end;
    A+
    • "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

  15. #15
    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
    Citation Envoyé par BeanzMaster Voir le message
    Salut,
    QUOTE=vieuxprof1;11523277]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Afficher(Sender:TObject);
    var
      Imagea:TImage;
      Bmp:TBitmap;
    begin
      Bmp:=TBitmap.Create;
      Imagea:=TImage(ListIm[1]);
      Bmp.LoadFromResourceName(HInstance,'C011');
      Imagea.Canvas.Draw(0,0,Bmp);
    end;
    Le compilateur affiche bien le message « Succès » mais l'as de cœur ne s'affiche pas ! Où est l'erreur ?

    Salut attention les TImage sont des CONTROLES comme le TBUTTON

    Imagea.Canvas.Draw(0,0,Bmp); ne fonctionnera pas car les dimensions de TPICTURE.BITMAP à la création sont 0x0
    Pour charger ton image, justement tu as la propriété PICTURE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.CHARGER_AS_DE_COEUR(Sender:TObject); // Et oui charger car ta méthode n'affiche pas directement ;)
    var
      Imagea:TImage;
    begin
     
      Imagea:=TImage(ListIm[1]);
      imagea.picture.LoadFromResourceName(HInstance,'C011');
      imagea.Invalidate;
    end;
    A+[/QUOTE]

    Resalut Jérôme

    Je viens de modifier mon programme selon tes indications, le résultat est toujours le même: aucun affichage, mais si je modifie mon programme de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.Afficher(Sender:TObject);
    begin
      Image1.Picture.LoadFromResourceName(HInstance,'C011');
    end;
    il n'y a toujours pas d'affichage de la carte, sauf si je supprime dans l'exécution la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TForm1.CreerListIm(Sender:TObject);
    alors l'as de cœur s'affiche normalement dans l'Image1.
    Je pense que l'erreur ne peut provenir que de la liste image: ListIm

    A+
    JC

  16. #16
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par vieuxprof1 Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TForm1.CreerListIm(Sender:TObject);
    ...
    Qu'y a-t-il exactement maintenant dans cette procédure que vous avez dû modifier.

    Cordialement.

    Pierre

  17. #17
    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
    Bonsoir,

    J'ai du mal à comprendre ta logique avec tous ces TImages et cette liste basée dessus. Pourrais-tu nous faire un petit zip des sources de ton projet avec le fichier "card.res" pour que l'on puisse y jeter un oeil, tester et t'aider du mieux possible ?
    J'ai l'impression que ton approche n'est pas la plus facile à mettre en place, j'ai l'impression que tu te compliques la vie.

    Une petit plus serait également de nous décrire les règles du jeu de ton solitaire.

    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

  18. #18
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    Salut,
    si quelqu'un veut s'amuser à faire un jeu de cartes de réussite sous Lazarus, je lui conseille de partir du projet delphi cardtable dont les sources sont disponibles ici : Cardtable
    On faisant une conversion projet delphi -> lazarus, en mettant des bouts de code en commentaire et sous linux en remplaçant les \ par des / dans les chemins j'ai réussi à compiler et à lancer le programme sous windows et Linux. Bien sur il n'est pas complètement opérationnel et optimisé mais cela montre que c'est faisable.

    Nom : CardTable.PNG
Affichages : 594
Taille : 48,0 Ko

    Nullosse

  19. #19
    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 créer une liste d'images
    Citation Envoyé par ChPr Voir le message
    Qu'y a-t-il exactement maintenant dans cette procédure que vous avez dû modifier.

    Cordialement.

    Pierre
    Bonjour Pierre,

    La procédure que j'ai supprimée du programme est justement celle qui crée la liste des images,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.CreerListIm(Sender:TObject);
    begin
      Image0:=TImage.Create(Self);
      Image1:=TImage.Create(Self);
      //.......
      Image16:=TImage.Create(Self);
      ListIm.Add(Image0);//Sert à afficher la pioche (centre haut, index 0)
      ListIm.Add(Image1);//Première colonne bas(index 1)
     //.....
      ListIm.Add(Image16);//Dernière colonne de dépôt 
    end;
    Cordialement
    JC

  20. #20
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Je pense, bien que ne l'ayant jamais employée, que cette instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.LoadFromResourceName(HInstance,'C011');
    crée l'image Image1.

    Comme par ailleurs, vous l'avez déjà créée dans votre procédure "CreerListIm", je ne pense pas que cela fasse bon ménage.

    Dans cette procédure, remplacer la création d'images par les "LoadFromResourceName" ; tout du moins pour les images concernées.

    Cordialement.

    Pierre

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Comment créer une liste de liste en Pascal ?
    Par sarah7 dans le forum Langage
    Réponses: 1
    Dernier message: 27/04/2008, 15h54
  2. Comment créer une liste ou une instance de classe dans une fonction ?
    Par Neolander dans le forum Général Python
    Réponses: 9
    Dernier message: 05/03/2008, 19h22
  3. [C#] Comment créer une liste d'image dynamiquement ?
    Par gwenhael dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/09/2006, 11h30
  4. Comment faire une liste d'image de choix ?
    Par poussinphp dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/10/2005, 00h34
  5. Réponses: 5
    Dernier message: 29/09/2005, 14h37

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