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

Composants FMX Delphi Discussion :

affecter correctement un timage dans les styles d'un TListBoxItem


Sujet :

Composants FMX Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 98
    Points
    98
    Par défaut affecter correctement un timage dans les styles d'un TListBoxItem
    Bonjour,

    (dev sous tokyo)

    j'affiche des remises avec code barre associé dans un listbox dont le design des TListBoxItem est défini via le concepteur de style. la génération du code barre fonctionne plutôt bien à condition de ne pas trop "jouer" avec le défilement du listbox, sinon, il y a un problème de rafraichissement des images et les codebarres sont "dupliqués".

    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
     
     procedure TForm1.afficherdonnees_btClick(Sender: TObject);
    var item_lis : TListBoxItem;
        codebarreremise_im : TImage;
    begin
         // [...]
         while (not remises2_memtb.Eof) do
          begin
              item_lis := TListBoxItem.Create(remise_lis);
              item_lis.Parent := remise_lis;
              item_lis.StyleLookup := 'designitem_ly';
              // [...]
              item_lis.StylesData['valeur_txt'] := '-' + remises2_memtb.FieldByName('valeur').AsString + '€';
              item_lis.StylesData['salon_txt'] := remises2_memtb.FieldByName('salon').AsString;
              item_lis.StylesData['client_txt'] := 'Pour vous ou pour un proche' + #13 + #10 + 'De la part de Marie Dupond';
     
              codebarreremise_im := TImage.Create(item_lis.FindStyleResource('codebarre_im'));
              affiche_codebarre_remise(remises2_memtb.FieldByName('codebarre').AsString, codebarreremise_im); // item_lis.FindStyleResource('codebarre_im') as TImage);
              item_lis.StylesData['codebarre_im.Bitmap'] := codebarreremise_im.Bitmap; //(item_lis.FindStyleResource('codebarre_im') as TImage).Bitmap.CopyFromBitmap(codebarreremise_im.Bitmap);
     
              item_lis.StylesData['numoffre_txt'] := 'Offre n°' + remises2_memtb.FieldByName('codebarre').AsString;
              item_lis.StylesData['textecompl_txt'] := remises2_memtb.FieldByName('texte_complementaire').AsString;
              // [...]
              item_lis.StylesData['envoyerticket_bt.OnClick'] := TValue.From<TNotifyEvent>(envoyer_ticket_sms);
            end;
            remises2_memtb.Next;
    end;
     
    procedure TForm1.affiche_codebarre_remise(numoffre_st : string; var codebarredessin_im : Timage);
    var R :TRect;
        W :integer;
    const BarSize = 1;
    begin
      try
        //largeur width : Taille totale (Nb cara + StartB + CheckSum +Stop +2x QuietZone)
        W := ((Length(numoffre_st) +3) *11 +10) * (BarSize);
     
        //Rectangle à 0mm des bords de page, hauteur 64mm
        R := Rect((0), (0), (0) +W, (64));
     
        //Espacement entre cadre et code de 2mm
        InflateRect(R, 0, -2);
     
        // initialisation du canvas de l'image bitmap
        codebarredessin_im.Bitmap := TBitmap.Create(W, 64);
        //Code barres avec un trait de 1mm
        codebarredessin_im.Bitmap.Clear($FFFFFF);
        // trait noir
        codebarredessin_im.Bitmap.Canvas.Fill.Kind := TBrushKind.Solid;
        codebarredessin_im.Bitmap.Canvas.Fill.Color := claBlack;
        // appelle codebarre_128.drawbarcode128 pour remplissage du canvas
        DrawBarCode128(numoffre_st, codebarredessin_im.Bitmap.Canvas, BarSize, R, ctB);
      except on E : Exception do
        ShowMessage('Erreur création code barre n° ' + numoffre_st + '(' + E.Message + ').');
      end;
    Pour résoudre ce bug de rafraichissement, il faudrait (je pense) soit :
    - passer en paramètre de la procedure affiche_codebarre_remise() item_lis.FindStyleResource('codebarre_im') as TImage mais un objet constante ne peut être passé comme paramètre Var
    - faire une vraie copie du genre (item_lis.FindStyleResource('codebarre_im') as TImage).Bitmap.CopyFromBitmap(codebarreremise_im.Bitmap); mais violation d'accès.

    je pense avoir trouvé un début de réponse ici :
    vous devez savoir que dans FireMonkey, les composants sont stylés à la demande et que les styles peuvent également être supprimés à la demande. Ceci est fait pour économiser de l’espace mémoire en ne stylisant que les composants réellement visibles. Par exemple, les éléments d'une zone de liste ne peuvent être stylés que lorsqu'ils défilent et leurs styles peuvent être supprimés lorsqu'ils défilent.
    mais impossible de mettre en place une solution...

    voici un exemple compilable sous windows. en réduisant la largeur de la fenêtre et en la ré-augmentant, le 3ème code barre se rafraichit mal (duplication du 2ème). recliquez sur le bouton et il s'affiche de nouveau correctement (même pb sous ios avec l'effet ressort en faisant défiler les slides en butée) :

    10.2 tokyo - smartphone - code barre design item listbox.zip

    un coup de pouce n'est pas de refus

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 035
    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 035
    Points : 40 940
    Points
    40 940
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je retrouve ce même genre de problème de rafraichissement avec un TListView (nombre de lignes à afficher < au nombre de lignes du dataset) et un changement de style au runtime (signalé à Embarcadero mais toujours pas résolu ce me semble) par "souci" d'économie seul une partie des lignes semblent être "rafraichie".

    je vais regarder le zip

    une idée comme ça, avant de me plonger dedans , un ListView.BeginUpdate; ListView.EndUpdate; quelque part pourrait peut être forcer le rafraichissement ? (reste à trouver le quelque part )
    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

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 035
    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 035
    Points : 40 940
    Points
    40 940
    Billets dans le blog
    62
    Par défaut
    Re,

    j'ai fait le test sur mon W10 et ne vois pas le soucis de rafraichissement excepté si je met alternatingRowbackground à true là il y a quelques surprises !

    Sur le fond par contre j'ai plusieurs interrogations
    sur le fdMemTable : que des champs blobs, c'est pas très efficace
    sur le style personnalisé : pour les images j'aurais utilisé comme nom 'Icon' qui aurait permis une simplification Item.ItemData.Bitmap.LoadfromStream(fonction renvoyant un stream de l'image construite)
    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
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par delaio Voir le message
    Pour résoudre ce bug de rafraichissement, il faudrait (je pense) soit :
    - passer en paramètre de la procedure affiche_codebarre_remise() item_lis.FindStyleResource('codebarre_im') as TImage mais un objet constante ne peut être passé comme paramètre Var
    Tu n'as pas besoin de mettre le paramètre en var, l'instance pointée par codebarredessin_im n'est pas modifiée dans ta fonction (il n'y a pas de codebarredessin_im := ...), uniquement son contenu, donc le var ne sert a rien.

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

    il y a quelque question que je me pose

    Petite question je vois que tu vas chercher dans les ressource 'codebarre_im'
    et que tu repointe sur 'codebarre_im.bitmap' est normal ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       codebarreremise_im := TImage.Create(item_lis.FindStyleResource('codebarre_im'));
       affiche_codebarre_remise(remises2_memtb.FieldByName('codebarre').AsString, codebarreremise_im); 
       item_lis.StylesData['codebarre_im.Bitmap'] := codebarreremise_im.Bitmap;
    ne serais ce pas ceci pour affecter plutôt ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    item_lis.StylesData['codebarre_im']  := Image1.Bitmap;
    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

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par anapurna Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     item_lis.StylesData['codebarre_im.Bitmap'] := codebarreremise_im.Bitmap;
    ne serais ce pas ceci pour affecter plutôt ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    item_lis.StylesData['codebarre_im']  := Image1.Bitmap;
    trop bien ! Merci Anapurna... il fallait effectivement enlever le .bitmap. J'aurais d'ailleurs dû percuter plus tôt avec les TText. J'ai naturellement fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    item_lis.StylesData['numoffre_txt'] := 'Offre n°' + remises2_memtb.FieldByName('codebarre').AsString;
    //et non
    item_lis.StylesData['numoffre_txt.text'] := 'Offre n°' + remises2_memtb.FieldByName('codebarre').AsString;
    ben pour le coup, ça me choque maintenant comment affecter les propriétés sans les préciser !?!! genre, si je veux mettre à jour le enabled ou le visible du Ttext... en passant par item_lis.FindStyleResource('numoffre_txt') peut être

    en tout cas, ça marche nickel !

    Citation Envoyé par Guillemouze
    Tu n'as pas besoin de mettre le paramètre en var, l'instance pointée par codebarredessin_im n'est pas modifiée dans ta fonction (il n'y a pas de codebarredessin_im := ...), uniquement son contenu, donc le var ne sert a rien.
    Merci pour ta remarque et ces précisions. Il s'agit d'un stigmate des nombreux tests que j'ai réalisé pour résoudre ce "bug"... j'ai d'ailleurs dans cette appli neutre des variables déclarées non utilisées qui trainent et que je n'ai pas nettoyé...

    Citation Envoyé par SergioMaster
    une idée comme ça, avant de me plonger dedans , un ListView.BeginUpdate; ListView.EndUpdate; quelque part pourrait peut être forcer le rafraichissement ?
    oui, je les ai bien intégré dans le code avant et après la boucle sur le listbox.

    j'ai fait le test sur mon W10 et ne vois pas le soucis de rafraichissement
    Sur le fond par contre j'ai plusieurs interrogations
    sur le fdMemTable : que des champs blobs, c'est pas très efficace
    sur le style personnalisé : pour les images j'aurais utilisé comme nom 'Icon' qui aurait permis une simplification Item.ItemData.Bitmap.LoadfromStream(fonction renvoyant un stream de l'image construite)
    je suis sur windows 7. as tu réduit la largeur de la fenêtre pour masquer les remises puis réagrandit pour revoir les 3 panneaux ? en regardant à la loupe la fin du code barre du dernier panneau, tu verras qu'il est identique au 2ème. en cliquant sur le bouton pour relancer l'affichage des données dans le listbox, le code barre se rafraichit correctement.

    pour les champs blobs, c'est une appli de test. dans mon vrai projet, tout est propre.

    pour le style personnalisé, je n'ai pas trop compris où tu voulais en venir. J'ai effectivement, parmi mes 3 milliards de test, essayer d'affecter le stream mais sans succès.

    Un grand merci à vous 3 pour le coup de main

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 035
    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 035
    Points : 40 940
    Points
    40 940
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par delaio Voir le message
    je suis sur windows 7. as tu réduit la largeur de la fenêtre pour masquer les remises puis réagrandit pour revoir les 3 panneaux ? en regardant à la loupe la fin du code barre du dernier panneau, tu verras qu'il est identique au 2ème.
    bon, j'ai pas les yeux scanner de code mais pour moi, sous w10, je ne vois pas le problème, les 3 cdb sont bien différents

    pour les champs blobs, c'est une appli de test. dans mon vrai projet, tout est propre.
    je m'en doutais un peu

    pour le style personnalisé, je n'ai pas trop compris où tu voulais en venir. J'ai effectivement, parmi mes 3 milliards de test, essayer d'affecter le stream mais sans succès.
    je n'ai pas le temps d'essayer le stream "propre" pour l'instant, par contre pour ce qui est du nom j'en ai plus ou moins parlé lors de mes premiers pas avec les styles dans le code du 3° chapitre tu liras que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Item.ItemData.Bitmap.LoadThumbnailFromFile(Item.TagString,Item.Height,Item.Height);
    pas de quoi fouetter un chat si ce n'est que je n'ai pas besoin de rechercher le bitmap par la fonction StylesData[<nom>] du fait que j'ai utilisé comme nom de mon image 'icon', idem si tu nommes un de tes élements de style 'Text' tu peux y accéder directement i.e : Item.text:='Toto' putôt que Item.StylesData['Text']:='Toto'

    voici mon essai non concluant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
             //  item_lis.StylesData['codebarre_im'] := codebarreremise_im.Bitmap;
              item_lis.ItemData.Bitmap.LoadFromStream(CodeBarre(remises2_memtb.FieldByName('codebarre').AsString,codebarreremise_im));
    Totalement inspiré de ta fonction, logiquement le Timage devrait être supprimé pour être créé à l'intérieur
    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
    function TForm1.CodeBarre(numoffre_st: string;  var codebarredessin_im : Timage): TMemoryStream;
    var R :TRect;
        W :integer;
    const BarSize = 1;
    begin
      try
        Result:=TmemoryStream.Create;
        //largeur width : Taille totale (Nb cara + StartB + CheckSum +Stop +2x QuietZone)
        W := ((Length(numoffre_st) +3) *11 +10) * (BarSize);
     
        //Rectangle à 0mm des bords de page, hauteur 64mm
        R := Rect((0), (0), (0) +W, (64));
     
        //Espacement entre cadre et code de 2mm
        InflateRect(R, 0, -2);
     
        // initialisation du canvas de l'image bitmap
        codebarredessin_im.Bitmap := TBitmap.Create(W, 64);
        //Code barres avec un trait de 1mm
        codebarredessin_im.Bitmap.Clear($FFFFFF);
        // trait noir
        codebarredessin_im.Bitmap.Canvas.Fill.Kind := TBrushKind.Solid;
        codebarredessin_im.Bitmap.Canvas.Fill.Color := claBlack;
        // appelle codebarre_128.drawbarcode128 pour remplissage du canvas
        DrawBarCode128(numoffre_st, codebarredessin_im.Bitmap.Canvas, BarSize, R, ctB);
        codebarredessin_im.Bitmap.SaveToStream(Result);
      except on E : Exception do
        ShowMessage('Erreur création code barre n° ' + numoffre_st + '(' + E.Message + ').');
      end;
    end;
    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

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 035
    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 035
    Points : 40 940
    Points
    40 940
    Billets dans le blog
    62
    Par défaut Après quelques boulettes
    Bonjour,

    avant le boulot j'ai repris cette histoire de stream, dont voici la fonction

    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
    function TForm1.CodeBarre(numoffre_st: string): TMemoryStream;
    var R :TRect;
        W :integer;
        dessin : Timage;
    const BarSize = 1;
    begin
      try
        Result:=TmemoryStream.Create;
        dessin:=TImage.Create(nil);
        try
        //largeur width : Taille totale (Nb cara + StartB + CheckSum +Stop +2x QuietZone)
        W := ((Length(numoffre_st) +3) *11 +10) * (BarSize);
     
        //Rectangle à 0mm des bords de page, hauteur 64mm
        R := Rect((0), (0), (0) +W, (64));
     
        //Espacement entre cadre et code de 2mm
        InflateRect(R, 0, -2);
     
        // initialisation du canvas de l'image bitmap
        dessin.Bitmap := TBitmap.Create(W, 64);
        //Code barres avec un trait de 1mm
        dessin.Bitmap.Clear($FFFFFF);
        // trait noir
        dessin.Bitmap.Canvas.Fill.Kind := TBrushKind.Solid;
        dessin.Bitmap.Canvas.Fill.Color := claBlack;
        // appelle codebarre_128.drawbarcode128 pour remplissage du canvas
        DrawBarCode128(numoffre_st, dessin.Bitmap.Canvas, BarSize, R, ctB);
        dessin.Bitmap.SaveToStream(Result);
        finally
          dessin.free;
        end;
      except on E : Exception do
        ShowMessage('Erreur création code barre n° ' + numoffre_st + '(' + E.Message + ').');
      end;
    end;
    un test avec un Timage en dehors de la liste me confirme que le stream est bien rempli, par contre ma proposition de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    item_lis.ItemData.Bitmap.LoadFromStream(CodeBarre(remises2_memtb.FieldByName('codebarre').AsString));
    ne veux rien savoir pas d'erreur mais pas d'image non plus
    Pourtant, j'ai même fait le test suivant au moment du remplissage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
              atms:=TmemoryStream.Create;
              atms:=CodeBarre(remises2_memtb.FieldByName('codebarre').AsString);
              Image1.Bitmap.LoadFromStream(aTms);  // je vois bien le code barre dans Image1
              showmessage('Alors ?');
              item_lis.ItemData.Bitmap.LoadFromStream(atms);  // pas de code barre dans la liste 
              atms.Free;
    Cela voudrait-il dire que ma vieille astuce (nommer icon l'image dans le style) ne fonctionne plus ou qu'il y a un pb au niveau du loadfromstream du style ?
    Jusqu'à ce que je m’aperçoive que j'ai bêtement mis 'ico' au lieu de "icon" dans le stylename

    Donc, ça fonctionne avec un LoadFromStream, ça ne change pas la face du monde mais rend ma tranquillité d'esprit
    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

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    Citation Envoyé par SergioMaster
    Totalement inspiré de ta fonction, logiquement le Timage devrait être supprimé pour être créé à l'intérieur
    Rendons à César ce qui appartient à César. Cette fonction et l'unité associé pour la génération des codes barres 128 ont été mis à dispo par Andnotor (que je remercie humblement pour une roue que je n'ai pas eue à réinventer )

    https://www.developpez.net/forums/d9...er-code-barre/


    Citation Envoyé par SergioMaster
    Donc, ça fonctionne avec un LoadFromStream, ça ne change pas la face du monde mais rend ma tranquillité d'esprit
    J'adore ta pugnacité ! Un GRAND merci pour ce dev avec le LoadFromStream !

    Très bonne journée.


  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 035
    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 035
    Points : 40 940
    Points
    40 940
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par delaio Voir le message
    Rendons à César ce qui appartient à César. Cette fonction et l'unité associé pour la génération des codes barres 128 ont été mis à dispo par Andnotor (que je remercie humblement pour une roue que je n'ai pas eue à réinventer )
    du coup, moi qui n'osais taper dans l'unité codebarre_18.pas pour directement générer un stream ... mais bon je laisse tomber

    J'adore ta pugnacité !
    comme quoi pas complètement, sauf si demain matin je me sens l'humeur flux de mémoire
    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

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

Discussions similaires

  1. Priorité dans les styles
    Par cd090580 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 02/02/2009, 09h45
  2. Réponses: 9
    Dernier message: 13/03/2008, 10h18
  3. [CKEditor] Integration css de mon site dans les styles
    Par yveslens dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 10/12/2007, 08h42
  4. Conflit dans les styles CSS
    Par Nerva dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/03/2005, 22h56

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