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 :

Mettre une image dans une collection


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 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut Mettre une image dans une collection
    Bonjour,

    pour une démonstration , voilà comment je rempli ma collection. Le but ? Remplacer les données du TProtypeBindSource au démarrage de l'application

    Nom : Capture.PNG
Affichages : 243
Taille : 20,0 Ko

    de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm14.ContactsCreateAdapter(Sender: TObject;
      var ABindSourceAdapter: TBindSourceAdapter);
    begin
    {$IFDEF DATA}
     P_DonneesInternes;
     ABindSourceAdapter:=TListBindSourceAdapter<TContact>.Create(self,MesContacts, True);
     ControlList1.ItemCount:=MesContacts.Count;
    {$ENDIF}
    end;
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    unit UCtrlListContacts;
     
     
    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
         ,System.DateUtils  // nécessaire pour EncodeDate
         ,VCL.graphics,VCL.Imaging.pngimage // ajout autres formats si besoin VCL.imaging.jpeg .... 
         ,System.UITypes;
     
    type
      TContact = Class
      strict private
        FNom : String;
        FDate : String;
        FPhoto : TPicture;
      private
        procedure SetNom(const Value : String);
        procedure SetDate(const Value: String);
        procedure SetPhoto(const Value: TPicture);
      public
        constructor Create(); overload;
        constructor Create(Nom: String; UneDate: String; Photo: TPicture); overload;
        property ContactNom : String read FNom write SetNom;
        property ContactDate : String read FDate write SetDate;
        property ContactPhoto : TPicture read FPhoto write SetPhoto;
      end;
     
     procedure P_DonneesInternes;
     
     var MesContacts : TObjectList<TContact>;
     
     
    implementation
     
    { TEvenement }
     
    constructor TContact.Create;
    // création par défaut
    begin
    FNom:='<A faire>';
    FDate:=FormatDateTime('dd/mm/yyyy',date);
    FPhoto:=nil;
    end;
     
    constructor TContact.Create(Nom: String; UneDate: String; Photo : TPicture);
    // création objet
    begin
    FNom:=Nom;
    FDate:=UneDate;
    FPhoto:=Photo;
    end;
     
    procedure TContact.SetDate(const Value: String);
    begin
      FDate := Value;
    end;
     
    procedure TContact.SetNom(const Value: String);
    begin
    FNom:=Value;
    end;
     
    procedure TContact.SetPhoto(const Value: TPicture);
    begin
      FPhoto := Value;
    end;
     
     
    procedure P_DonneesInternes;
    // Chargement de valeurs internes
    begin
      MesContacts.Add(TContact.Create('Enfant 1','01/01/2021',TPicture.Create));
      MesContacts[0].ContactPhoto.loadFromFile('..\..\Child_1.png');
      MesContacts.Add(TContact.Create('Enfant 2','02/01/2021',TPicture.Create));
      MesContacts[1].ContactPhoto.loadFromFile('..\..\Child_2.png');
      MesContacts.Add(TContact.Create('Enfant 3','03/01/2021',TPicture.Create));
      MesContacts[2].ContactPhoto.loadFromFile('..\..\Child_3.png');
      MesContacts.Add(TContact.Create('Enfant 4','04/01/2021',TPicture.Create));
      MesContacts[3].ContactPhoto.loadFromFile('..\..\Child_4.png');
      MesContacts.Add(TContact.Create('Enfant 5','05/01/2021',TPicture.Create));
      MesContacts[4].ContactPhoto.loadFromFile('..\..\Child_5.png');
      MesContacts.Add(TContact.Create('Japonaise','06/01/2021',TPicture.Create));
      MesContacts[5].ContactPhoto.loadFromFile('..\..\Japan_2.png');
      MesContacts.Add(TContact.Create('Enfant 7','07/01/2021',TPicture.Create));
      MesContacts[6].ContactPhoto.loadFromFile('..\..\Child_7.png');
    end;
     
     
    initialization
     MesContacts:=TObjectList<TContact>.Create;
    finalization
    // MesContacts.Free;
    // inutile car MesEvenements est libéré à la destruction du TProtypeBindSource
    // si OwnsObject est égal à True au moment de la création de l'adaptateur
    end.
    Nom : Capture_1.PNG
Affichages : 243
Taille : 26,3 Ko

    Cela fonctionne très bien mais, je me posai la question de savoir s'il n'y avait pas un moyen de mettre les images directement sans avoir à faire un loadfromfile ?
    Autre question du même acabit comment faire une sauvegarde (csv, xml ou autre) de cette collection d'objet ?
    En fait je pense que le TPicture n'est pas le mieux adapté à remplacer par quoi ?

    En Nota Bene, je n'ai jamais réussi à affichier correctement des images générées dans le protypebindsource avec les générateurs ContactBitmaps ou ContactBitmapsL (tous mes éléments ont la même tronche ! A priori un bogue ) et mes tentatives d'accès aux données générées avec ces générateurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       try
         avar:=Contacts.DataGenerator.FindField('ContactPhoto').GetTValue.AsType<TBitmap>;
        if assigned( avar) then
         begin
          avar.savetostream(astream);
          aStream.Position:=0;
          Photo.Picture.LoadFromStream(aStream);
         end;
        except
         on e:Exception do
          Showmessage(e.Message)
       end;
    sont inefficaces (alors que cela fonctionne pour le générateur Bitmaps)

    Nom : Capture_3.PNG
Affichages : 223
Taille : 17,7 Ko
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    je n'ai pas tout compris mais

    1) tu peux mettre les images en ressources

    2) tu fais GetTValue.AsType<TBitmap>; alors que c'est un TPicture...c'est logique que ça coince non ?

    avec GDIP tu peux facilement lire un PNG dans un TBitmap
    https://github.com/tothpaul/Delphi/t...ter/GDIPBitmap
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour Paul,

    1) tu peux mettre les images en ressources
    oui, mais le but du jeu est plutôt de mettre le contenu du png dans la collection directement.
    un peu à la manière de ce que j'ai vu dans le source FMX.Bind.GenData
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const
      man_1_150 =
    {$REGION 'man_1_150.png'}
    '{'#13#10 +
    '89504E470D0A1A0A0000000D49484452000000960000009608060000003C0171'#13#10 +
    'E2000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000'#13#10 +
    '19C549444154785EED5D696C5CD7753EE4EC0B6738DCF74D944849A46459F2A2'#13#10 +
    'C5766C3846E2A2F913346D7F340D5014A891367FDAA2409B22ED9FB640FBA340'#13#10 +
    '8A36309A1F718BA228EA145D82D6698A3A8662C74E62C78AEA4D5E285192494A'#13#10 +
    .....
    sauf que je n'ai aucune idée du comment cela a été obtenu quand cela à été saisi

    2) tu fais GetTValue.AsType<TBitmap>; alors que c'est un TPicture...c'est logique que ça coince non ?
    non, cela passe par un stream
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         avar:=Contacts.DataGenerator.FindField('ContactPhoto').GetTValue.AsType<TBitmap>;
        if assigned( avar) then
         begin
          avar.savetostream(astream);
          aStream.Position:=0;
          Photo.Picture.LoadFromStream(aStream);
         end;
    où cela coince c'est que avar, dans le cas d'un générateur ContactBitmaps ou ContactBitmapsL est vide !
    d'un autre côté, j'ai trouvé dans le point 1, les images dans le source mais dans Data.Bind.gendata il n'y a rien concernant ces générateurs je me demande encore comment ces images sont obtenus en VCL
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour Paul,


    oui, mais le but du jeu est plutôt de mettre le contenu du png dans la collection directement.
    un peu à la manière de ce que j'ai vu dans le source FMX.Bind.GenData
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const
      man_1_150 =
    {$REGION 'man_1_150.png'}
    '{'#13#10 +
    '89504E470D0A1A0A0000000D49484452000000960000009608060000003C0171'#13#10 +
    'E2000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000'#13#10 +
    '19C549444154785EED5D696C5CD7753EE4EC0B6738DCF74D944849A46459F2A2'#13#10 +
    'C5766C3846E2A2F913346D7F340D5014A891367FDAA2409B22ED9FB640FBA340'#13#10 +
    '8A36309A1F718BA228EA145D82D6698A3A8662C74E62C78AEA4D5E285192494A'#13#10 +
    .....
    sauf que je n'ai aucune idée du comment cela a été obtenu quand cela à été saisi
    il vaux mieux ne pas savoir (enfin je sais mais c'est très moche)

    crée un fichier texte Resources.RC avec
    NOM RCDATA NomFichier.PNG
    compile le avec BRCC32
    ajoute un {$R Resources.RES}

    et tu peux lire tes PNG par TResourceStream.Create(hInstance, 'NOM', RT_RCDATA);

    Citation Envoyé par SergioMaster Voir le message
    non, cela passe par un stream
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         avar:=Contacts.DataGenerator.FindField('ContactPhoto').GetTValue.AsType<TBitmap>;
        if assigned( avar) then
         begin
          avar.savetostream(astream);
          aStream.Position:=0;
          Photo.Picture.LoadFromStream(aStream);
         end;
    où cela coince c'est que avar, dans le cas d'un générateur ContactBitmaps ou ContactBitmapsL est vide !
    d'un autre côté, j'ai trouvé dans le point 1, les images dans le source mais dans Data.Bind.gendata il n'y a rien concernant ces générateurs je me demande encore comment ces images sont obtenus en VCL
    ben non ça passe pas puisque avar est vide

    si j'ai bien compris tu déclares un ContractPhoto: TPicture et tu veux l'avoir comme un TBitmap, ça peut pas marcher

    d'où mon message indiquant que si tu déclares ContractPhoto: TBitmap tu peux utiliser GDIP pour charger un PNG dans un TBimap
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    si j'ai bien compris tu déclares un ContractPhoto: TPicture et tu veux l'avoir comme un TBitmap, ça peut pas marcher
    Ah, je comprends la confusion. en fait il y a deux contactphoto, l'un qui est dans le PrototypeBindSource et l'autre dans ma collection (ou liste d'objets) de contacts. Pourquoi les mêmes noms c'est en rapport avec le BindSourceAdapter, il faut que les noms soient identiques.

    L'objet du point 1, est bien de ne pas utiliser ni LoadFromFile ni ressource au cas, histoire de pouvoir faire des ajouts.
    Bien sûr je peux coder avec des ressources
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      MesContacts.Add(TContact.Create('Enfant 1','01/01/2021',TPicture.Create));
      MesContacts[0].ContactPhoto.loadFromStream(TResourceStream.Create(hInstance, 'child1', RT_RCDATA));
      MesContacts.Add(TContact.Create('Enfant 2','02/01/2021',TPicture.Create));
      MesContacts[1].ContactPhoto.loadFromStream(TResourceStream.Create(hInstance, 'child2', RT_RCDATA));
      MesContacts.Add(TContact.Create('Enfant 3','03/01/2021',TPicture.Create));
      MesContacts[2].ContactPhoto.loadFromStream(TResourceStream.Create(hInstance, 'child3', RT_RCDATA));
      MesContacts.Add(TContact.Create('Enfant 4','04/01/2021',TPicture.Create));
      MesContacts[3].ContactPhoto.loadFromStream(TResourceStream.Create(hInstance, 'child4', RT_RCDATA));
      MesContacts.Add(TContact.Create('Enfant 5','05/01/2021',TPicture.Create));
      MesContacts[4].ContactPhoto.loadFromStream(TResourceStream.Create(hInstance, 'child5', RT_RCDATA));
      MesContacts.Add(TContact.Create('Japonaise','06/01/2021',TPicture.Create));
      MesContacts[5].ContactPhoto.loadFromStream(TResourceStream.Create(hInstance, 'japan2', RT_RCDATA));
      MesContacts.Add(TContact.Create('Enfant 7','07/01/2021',TPicture.Create));
      MesContacts[6].ContactPhoto.loadFromStream(TResourceStream.Create(hInstance, 'child6', RT_RCDATA)););
    mais comment, en ajouter au runtime et sauvegarder l'ensemble (sorte de Contacts.SaveToTextFile ou Contacts.SaveToXmlFile ou ...)


    le point 2, est différent, c'est la où le bitmap intervient, n'a rien à voir ou seulement par ricochet. Un ProtypeBindSource te permet d'avoir des bitmaps via les générateurs Bitmap, contactbitmaps, ou contactbitmapsL. En FMX aucun souçi, en VCL seul Bitmap (des carrés de couleurs avec un numero) fonctionne (et là ma récupération fonctionne), pour les générations des contactBitmaps c'est là que c'est étrange, au design il y a une image aléatoire (qui vient de je ne sais où) mais elle est identique quelque soit le nombre demandé (c'est ça l'anormal).
    Je voulais donc vérifier par accès direct via Contacts.DataGenerator.FindField('ContactPhoto').GetTValue.AsType<TBitmap>; ce qu'il en était mais, ce qui fonctionne pour le génerateur Bitmaps ne fonctionne pas pour les ContactBitmaps
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Partie 1,
    pour info j'ai mis ma liste de contacts dans un fichier .txt
    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
     
    procedure SauvegarderTexte(const destination: TFileName);
    // Sauvegarde des données au format Texte
    var
      F: TextFile;
      unContact: TContact;
    begin
      AssignFile(F, destination);
      ReWrite(F);
      for unContact in MesContacts do
        WriteLn(F, unContact.EnCSV);
      CloseFile(F);
    end;
     
    procedure ChargerTexte(const source: TFileName);
    // Chargement du fichier au format texte
    var
      F: TextFile;
      Data: String;
      unContact: TContact;
    begin
      MesContacts.Clear;
      AssignFile(F, source);
      Reset(F);
      while not EOF(F) do
      begin
        Readln(F, Data);
        unContact := TContact.Create;
        unContact.CSVversObjet(Data);
        MesContacts.Add(unContact);
      end;
      CloseFile(F);
    end;
    Il a fallu que je fouille un peu ma mémoire et le net pour encoder les images. Encoder est le maître mot

    en voici un extrait (images réduites par des …)
    "Enfant 1",01/01/2021,"iVBORw0KGgoAAAANSUh…JRU5ErkJggg=="
    "Enfant 2",02/01/2021,"iVBORw0KGgoAA…JfQAAAAAElFTkSuQmCC"
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Pour ton encodage, j'ignore ce que tu as trouvé sur le Net mais normalement ça doit être très court

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ContactPhoto.SaveToStream(BytesStream); // A priori PNG
    BytesStream.Seek(0, soBeginning);
    with TBase64Encoding.Create(0) do
    try
      Encode(BytesStream, StringStream);
    finally
      Free();
    end;
    LineCSV := Format('"%s",%s,"%s"', [ContactNom, ContactDate, StringStream.DataString]);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Sur le net, c'était le : "il faut encoder" qui m'était nécessaire.
    Pour le code, à quelques noms de variables près et le fait que j'ai écrit une fonction on tombe pile-poil.

    De cette discussion il reste juste la partie : Où est-ce que VCL.PrototypeBindSource va chercher l'image (non aléatoire et unique) ?
    Je n'ai pas encore dit mon dernier mot, je trouve dommage que ce type de générateur (contactbitmaps, contacbitmapsL) soit proposé alors qu'ils sont inefficace en VCL
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. [Struts-Layout] mettre une collection dans une div
    Par john_wili dans le forum Struts 1
    Réponses: 9
    Dernier message: 22/04/2009, 08h42
  2. Mettre des images dans une base de donnée
    Par hugo7 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/01/2009, 18h46
  3. Mettre des images dans une liste déroulante
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 01/12/2006, 15h35
  4. Mettre des images dans une base
    Par ecarbill dans le forum Access
    Réponses: 4
    Dernier message: 22/08/2006, 15h59
  5. [Debutant] Mettre des images dans une Toolbar
    Par Beleim dans le forum Windows
    Réponses: 11
    Dernier message: 02/03/2006, 23h31

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