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

Langage Delphi Discussion :

Collection d'objets avec image


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 166
    Points : 41 348
    Points
    41 348
    Billets dans le blog
    63
    Par défaut Collection d'objets avec image
    Bonjour,

    C'est la première fois que je tente de mettre dans un objet une image et
    Je précise même si ça ne doit presque rien changer je pense il s'agit d'un programme VCL avec Tokyo 10.2.3

    voilà l'objet en question,
    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
     
    unit ObjetTrombinoscope;
     
    interface
    uses System.SysUtils // nécessaire pour obtenir la date système, le type TFileName
         ,System.Generics.Collections  // nécessaire pour la déclaration de liste d'objets
         ,System.Generics.Defaults
         ,System.Classes
         ,VCl.Graphics;
     
    type
      TTronche = Class
      strict private
        FContactName1 : String;
        FDateField1 : TDate;
        FContactBitmap1 : TBitmap;
      private
      public
        constructor Create(); overload;
        constructor Create(Nom : String; UneDate : TDate; Image : TFileName); overload;
        property ContactName1 : String read FContactName1 write FContactName1;
        property DateField1 : TDate read FDateField1;
        property ContactBitmap1 : TBitmap read FContactBitmap1;
      end;
     
      procedure easteregg;
     
      var MesTronches : TObjectList<TTronche>;
     
    implementation
     
    { TEvenement }
     
    constructor TTronche.Create;
    // création par défaut
    begin
    FContactName1 :='<Nom>';
    FDateField1 := now;
    // FContactBitmap1 := TBitmap.Create; ?
    end;
     
    constructor TTronche.Create(Nom: String; UneDate: TDate; Image: TFileName);
    begin
    FContactName1 :=Nom;
    FDateField1 := UneDate;
    // ici ------------------------------
    FContactBitmap1 := TBitmap.Create;
    FContactBitmap1.LoadFromFile(Image);
    end;
     
     
    procedure easteregg;
    // Chargement de valeurs internes
    begin
      MesTronches.Add(TTronche.Create('Serge Girard',EncodeDate(1956,6,29),'g:\moi.jpg'));
    //  MesTronches.Add(TTronche.Create('Sergio Master',EncodeDate(2007,01,22),'g:\einstein.bmp'));
    //  MesTronches.Add(TTronche.Create('Avatar Druide',Date,'g:\druide.png'));
    //  MesTronches.Add(TTronche.Create('Ours',Date,'g:\ours.png'));
    //  MesTronches.Add(TTronche.Create('Lion de Mer',Date,'g:\lion.png'));
    end;
     
    initialization
    MesTronches:=TObjectList<TTronche>.Create();
    end.
    j'oublie certainement quelque chose ou bien ce n'est carrément pas le bon type ?
    [Edit] j'ai essayé TPicture il y a un mieux mais seulement s'il s'agit de .bmp

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur (aussi appelé "programmateur" ou "magicien")
    Inscrit en
    Octobre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur (aussi appelé "programmateur" ou "magicien")
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 101
    Points : 102
    Points
    102
    Par défaut
    Hello,

    Comme ça le code me semble juste, par contre comment sais-tu que ça ne fonctionne pas ? Le bitmap est chargé et affiché dans une fenêtre ?

    Il faudrait plus de précision

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 166
    Points : 41 348
    Points
    41 348
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    j'ai effectivement corrigé le code lors de ma modification (j'avais oublié la partie initialization mais aussi tout simplement le FContactBitmap1 := TBitmap.Create;Sans vouloir tout dévoiler du programme (qui fera l'objet d'une présentation dans quelques semaines) il s'agit d'une application simplifiée dérivée de mon tutoriel
    https://serge-girard.developpez.com/...ndings/Part_3/
    où j'utilise un TPrototypeBindSource pour afficher des données.
    La partie objet est écrite pour comme le nom de la procédure l'indique faire une sorte de "easteregg", le petit plus drôle
    Je me trouve donc avec une liste d'objets créés au runtime en lieu et place des lignes générées par le prototypebindsource, grâce à cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm21.PrototypeBindSource1CreateAdapter(Sender: TObject;
      var ABindSourceAdapter: TBindSourceAdapter);
    begin
     EasterEgg; // données "internes"
     ABindSourceAdapter:=TListBindSourceAdapter<TTronche>.Create(self,MesTronches, True);
    end;
    Ce qui ne fonctionne pas c'est l'affichage d'images autres que bmp mais c'est certainement du au type bitmap du protypebindsource qu'autre chose
    j'ai donc squizzé le problème en ne mettant que des bitmaps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure easteregg;
    // Chargement de valeurs internes
    begin
      MesTronches.Add(TTronche.Create('Serge Girard',EncodeDate(1956,6,29),'g:\moi.bmp'));
      MesTronches.Add(TTronche.Create('Sergio Master',EncodeDate(2007,01,22),'g:\einstein.bmp'));
      MesTronches.Add(TTronche.Create('Avatar Druide',Date,'g:\druide.bmp'));
      MesTronches.Add(TTronche.Create('Ours',Date,'g:\ours.bmp'));
      MesTronches.Add(TTronche.Create('Lion de Mer',Date,'g:\lion.bmp'));
    end;
    bien que je sois un peu honteux de ce détour, je ne voulais pas m'éterniser
    La question qui reste : qu'est-ce qu'il faut utiliser TBitmap, TPicture, autre .. pour pouvoir charger même des png ou jpg tout en étant compatible avec le type du TProtypeBindSource ? à moins que ce soit au niveau du chargement de l'image qu'il faille un peut fouiller

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321
    Par défaut
    TBitmap ne peut pas charger de JPG, à l'époque sous D7 c'était via TJPEGImage ou TPNGImage que l'on faisait la conversion
    Depuis c'est intégré au TPicture (j'ai donc aussi changé le TBitmap en TPicture)

    TPicture + JPEG + XE2 - OK
    TPicture + PNG + XE2 - OK
    TPicture + GIF + XE2 - OK
    TPicture + BMP + XE2 - OK

    Cela affiche sans soucis avec la bonne vieille VCL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TZooThomVCLMainForm.Image1DblClick(Sender: TObject);
    begin
    easteregg;
    Image1.Picture.Assign(MesTronches.Items[0].ContactBitmap1);
    end;

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 166
    Points : 41 348
    Points
    41 348
    Billets dans le blog
    63
    Par défaut
    Ce serait donc bien un problème lié au type du TProtypeBindSource (il va falloir que je fouille dans les sources)
    la solution serait peut-être, si c'est le cas, de faire un truc "à la D7"

    @Shailetroll je n'avais pas pensé à vérifier comme tu l'as fait Image1.Picture.Assign(MesTronches.Items[0].ContactBitmap1);obsédé par mes LiveBindings

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur (aussi appelé "programmateur" ou "magicien")
    Inscrit en
    Octobre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur (aussi appelé "programmateur" ou "magicien")
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 101
    Points : 102
    Points
    102
    Par défaut
    Peut-être pourrais-tu charger ton image dans un TPicture, et la convertir en Bitmap :https://www.developpez.net/forums/d1...ge-png-bitmap/

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 166
    Points : 41 348
    Points
    41 348
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par mistercactus Voir le message
    Peut-être pourrais-tu charger ton image dans un TPicture
    c'est déjà fait je l'ai indiqué dès le début
    [Edit] j'ai essayé TPicture il y a un mieux mais seulement s'il s'agit de .bmp
    Pourtant, à contrario de ShaiLeTroll j'ai toujours le soucis

    j'ai essayé plusieurs choses
    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
     
    constructor TTronche.Create(Nom: String; UneDate: TDate; Image: TFileName);
    begin
    FContactName1 :=Nom;
    FDateField1 := UneDate;
    FContactBitmap1:=TPicture.Create;
    try FContactBitmap1.LoadFromFile(Image); except FContactBitmap1.LoadFromFile('g:\index.bmp'); end;
    end;
     
     
    procedure easteregg;
    // Chargement de valeurs internes
    begin
      MesTronches.Add(TTronche.Create('Serge Girard',EncodeDate(1956,6,29),'g:\moi.bmp'));
      MesTronches.Add(TTronche.Create('Sergio Master',EncodeDate(2007,01,22),'g:\einstein.bmp'));
      MesTronches.Add(TTronche.Create('Avatar Druide',Date,'g:\druide.png'));
      MesTronches.Add(TTronche.Create('Ours',Date,'g:\ours.bmp'));
      MesTronches.Add(TTronche.Create('Lion de Mer',Date,'g:\lion.bmp'));
    end;
    Celle-ci m'a mis en quelque sorte sur une piste : j'ai une erreur au chargement mon druide.png est remplacé par index.bmp
    j'ai piégé l'erreur :
    Extension de fichier image inconnue png
    il doit me manquer une unité à déclarer ou un truc tout bête mais j'arrive pas à mettre le doigt dessus

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur (aussi appelé "programmateur" ou "magicien")
    Inscrit en
    Octobre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur (aussi appelé "programmateur" ou "magicien")
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 101
    Points : 102
    Points
    102
    Par défaut
    Peut-être les unités énoncées ici : https://stackoverflow.com/questions/...vert-to-bitmap

    C'est pour Delphi 2009, mais c'est je pense une bonne piste, si c'est bien juste quelque chose qui manque.

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 166
    Points : 41 348
    Points
    41 348
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    @mistercactus Cela mérite plus qu'un mais c'est tout ce que je peux faire


    Je commence peut-être à trop utiliser FMX
    Je croyais que les unités VCL.Imaging.Jpeg, pngimage, GIFImg étaient intégrées quelque part (dans VCL.Graphics pour tout dire) mais non ,
    une fois celles-ci incluses dans mon unité tout baigne.

    Cette fois c'est un vrai

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321
    Par défaut
    En VCL, je crois que c'est la TImageList posée sur TForm qui provoque l'ajout des formats alternatifs sans même mettre les uses explitement pour qu'il fasse leur TPicture.RegisterFileFormat(extension, classe);
    Car dans le projet de test, je n'ai pas inclus PNG ni GIF

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

Discussions similaires

  1. Création d'une collection d'objets avec un ordre de stockage particulier
    Par ahmadou_20 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 29/08/2014, 15h42
  2. Réponses: 4
    Dernier message: 11/05/2009, 15h59
  3. Utiliser OLE Objet avec plusieurs images?
    Par solaar dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/11/2008, 00h43
  4. Detection d'objets avec une ombre sur une image
    Par djsid dans le forum Traitement d'images
    Réponses: 19
    Dernier message: 18/06/2007, 16h26
  5. Dataset interfacé avec une Collection d'objets
    Par boulo dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 16/03/2007, 10h55

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