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

Delphi Discussion :

afficher les images dans un DBCtrlGrid / TDBMemo


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 441
    Points : 35
    Points
    35
    Par défaut afficher les images dans un DBCtrlGrid / TDBMemo
    Bonjour à tous,

    Je travaille actuellement sur un projet Delphi 7 où je cherche à afficher des images dans un composant DBCtrlGrid. Les images sont stockées dans un répertoire spécifique sur mon disque local (par exemple, "C:\ImagesProduits") et chaque nom de fichier correspond au code d'un produit.

    J'ai réussi à afficher les noms en liant directement la DataSource du TDBMemo, mais je suis bloqué sur la manière d'afficher les images elles-mêmes dans le DBCtrlGrid.

    Est-ce que quelqu'un pourrait me guider sur la meilleure approche pour accomplir cela ? Y a-t-il une manière de charger dynamiquement les images à partir du répertoire spécifique en fonction du code produit ?

    Merci d'avance pour votre aide et vos conseils !

    Cordialement,
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

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

    Dommage que ce ne soit pas une version CE, avec son TControlList

    En D7, je partirai sur l'évènement onPaintPanel (s'il existe).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
      Index: Integer);
    begin
    image1.Picture.LoadFromFile(DataImage.asString);  //  image1 est un TImage pas un TDBImage
    end;
    Pas pu tester
    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
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 441
    Points : 35
    Points
    35
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
      Index: Integer);
    begin
    image1.Picture.LoadFromFile(DataImage.asString);  //  image1 est un TImage pas un TDBImage
    end;
    Pas pu tester[/QUOTE]

    Je vous remerci epour ce code
    cependant, je ne vois pas ou mettre le chemin des images?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 473
    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 473
    Points : 24 930
    Points
    24 930
    Par défaut
    Soit en Blob dans une table
    Soit dans un répertoire, la racine étant dans un fichier config ( ou relatif à l'exe ), et le chemin peut se calculer facilement à partir de la référence
    Soit sur un serveur HTTP pour le Download, accessible en FTP pour le Upload par exemple
    Soit dans une ressource difficilement évolutif
    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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 441
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Soit en Blob dans une table
    Soit dans un répertoire, la racine étant dans un fichier config ( ou relatif à l'exe ), et le chemin peut se calculer facilement à partir de la référence
    Soit sur un serveur HTTP pour le Download, accessible en FTP pour le Upload par exemple
    Soit dans une ressource difficilement évolutif
    Blob dans la base ça ralentie l'exécution si on utilise des image grande
    par contre j'ai le chemin de chaque image stocké dans une colonne sous forme : "C:/....."

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 068
    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 068
    Points : 41 036
    Points
    41 036
    Billets dans le blog
    62
    Par défaut
    Dans votre table, une colonne varchar. Mais il me semblait à vous lire
    J'ai réussi à afficher les noms en liant directement la DataSource du TDBMemo,
    que le chemin de l'image était déjà stocké dans un blob d'où ma suggestion de code
    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 473
    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 473
    Points : 24 930
    Points
    24 930
    Par défaut
    Il suffit donc d'avoir cette colonne dans le DataSet lié au TDBCtrlGrid et cette colonne servira dans le LoadFromFile


    Cependant je pense qu'il faudrait pas faire le LoadFromFile à chaque Paint, cela serait très lent, il faut avoir un cache d'image en parallèle, un TObjectList de TBitmap par exemple

    Je ferais même manuellement le dessin comme dans ce sujet Gérer l'affichage dans TDbCtrlGrid



    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
    procedure TZooVCLControlExperimentForm.DBCtrlGridColorPaintPanel(DBCtrlGrid: TDBCtrlGrid; Index: Integer);
    var
      LRect: TRect;
      Brush: HBrush;
    begin
      if Odd(ClientDataSetCtrlGridVALUE.AsInteger) then
      begin
        Brush := CreateSolidBrush(ColorToRGB(clMoneyGreen));
        try
          LRect := Rect(0, 0, DBCtrlGrid.PanelWidth, DBCtrlGrid.PanelHeight);
          FillRect(DBCtrlGrid.Canvas.Handle, LRect, Brush);
        finally
          DeleteObject(Brush);
        end;
      end;
    end;

    Suffit de remplacer FillRect par un CopyBlt par exemple ou un CopyRect à l'instar de la FAQ Comment lire directement l'image dans la base et l'afficher dans un TDBGrid ?
    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
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 473
    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 473
    Points : 24 930
    Points
    24 930
    Par défaut
    Sinon, approche alternative avec un TClientDataSet

    Tu recopie des données dans un TClientDataSet en lui ajoutant une colonne Image que tu laisses vide.
    Lors du OnPaint, si l'image est NULL, tu la récupère façon LazyLoading, si l'image n'existe pas, crée un bitmap 1x1 factice pour indiquer que c'est déjà chargé.

    Et tu ajoutes directement un TDBImage dans le TDBCtrlGrid


    Tu peux aussi utilise deux DataSet, celui du TDBCtrlGrid et un second TClientDataSet
    Lié par une relation maitre-détail quand tu déplaces dans l'un cela filtre dans l'autre, tu peux aussi les synchroniser manuellement par un Locate (lors du OnPaint), si le Locate echoue c'est que l'image n'existe pas, suffit de l'ajouter à la volée toujours façon lazyload
    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

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 441
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Dans votre table, une colonne varchar. Mais il me semblait à vous lire

    que le chemin de l'image était déjà stocké dans un blob d'où ma suggestion de code


    ce code maffiche l amême image partout

    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
     
    procedure TF_venterapide002.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
      Index: Integer);
     
      var
      CheminImage: string;
    begin
      // Assurez-vous que le dataset est ouvert et positionné sur l'enregistrement contenant le nom de l'image
      if not F_DM.AQ_PR.IsEmpty then
      begin
        // Construire le chemin d'accès complet à partir du répertoire et du nom de l'image
        CheminImage := IncludeTrailingPathDelimiter('C:\MONDOSSIER\IMG') + F_DM.AQ_PR.FieldByName('C_pr').AsString+'.JPG';
     
        // Charger l'image à partir du chemin d'accès complet
        Image2.Picture.LoadFromFile(CheminImage);
      end;
    end;
    Images attachées Images attachées  

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 068
    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 068
    Points : 41 036
    Points
    41 036
    Billets dans le blog
    62
    Par défaut
    C'est ce que je craignais avec des données d'où ma balise
    Le code fonctionne, le problème ce sont les données qui ne "bougent" pas !

    pour preuve avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
      Index: Integer);
    begin
    if Odd(Index) then image1.Picture.LoadFromFile('C:\Users\serge\OneDrive\Images\anniv25.png')
                  else image1.Picture.LoadFromFile('C:\Users\serge\OneDrive\Images\capture.png') ;
    end;
    j'obtiens ce résultat
    Nom : Capture.PNG
Affichages : 161
Taille : 11,7 Ko


    Une solution "propre" en gardant ce même composant est d'inclure les images dans la BDD, donc un blob graphique
    Blob dans la base, ralenti l'exécution si on utilise des grandes images
    rien ne vous oblige à conserver de grandes images, créer des vignettes du bon format, c'est possible (d'ailleurs vous ne nous avez pas indiqué laquelle ?).
    Cette solution peut aussi passer par un chargement d'un champ calculé.


    Une solution "sale" utilisant les recordnumbers et un autre ensemble de données est envisageable, mais, à mon avis, c'est plutôt le type de composant (si vous restez D7) qu'il faut envisager de changer. L'utilisation d'un TVerticalScrollBox et d'un TFrame (contenant le dessin d'un élément) est une approche, plus "programmatique" bien qu'un peu plus ardue.

    C'est là où les dernières versions Community (ou plus) apporte des solutions faciles.(voir ce dépôt pour les possibilités du TControlList)
    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

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 441
    Points : 35
    Points
    35
    Par défaut
    Je vous remercie infiniment, Monsieur SergioMaster, ainsi que Monsieur ShaiLeTroll, pour toute l'aide que vous m'avez apportée. Je suis très reconnaissant envers vous deux.
    Cependant, je suis toujours bloqué depuis presque une semaine. Pourriez-vous s'il vous plaît m'indiquer les étapes à suivre ou me fournir le code associé pour résoudre mon problème ?

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 068
    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 068
    Points : 41 036
    Points
    41 036
    Billets dans le blog
    62
    Par défaut
    Non, cela ne se passe pas comme ça.
    Il est hors de question de fournir un code complet quant aux démarches à suivre, on vous a déjà indiqué quelles étaient les pistes à suivre. Remettez votre conception en cause, l'exemple le plus flagrant : votre réflexion sur les blobs contenant des images, c'est à votre logiciel de faire en sorte de n'avoir que des vignettes (et vous trouverez une vieille discussion à ce sujet dans le forum )

    Je serais curieux de voir la structure de la BDD si c'est à l'aune de vos questions
    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

  13. #13
    Membre du Club
    Homme Profil pro
    libre
    Inscrit en
    Mai 2024
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Mai 2024
    Messages : 23
    Points : 45
    Points
    45

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 068
    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 068
    Points : 41 036
    Points
    41 036
    Billets dans le blog
    62
    Par défaut
    Bien trouvé @Volid, mais LandGreen souhaite utiliser un DBCtrlGrid pas une DBGrid
    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

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 441
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bien trouvé @Volid, mais LandGreen souhaite utiliser un DBCtrlGrid pas une DBGrid
    et je suis toujours bloqué même chatGPT est bloqué

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 068
    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 068
    Points : 41 036
    Points
    41 036
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par LandGreen Voir le message
    même chatGPT est bloqué
    Qu'est-ce que chatgpt si ce n'est un pilleur de ressource sur internet ?

    De toute façon, avez-vous envisagé la possibilité du TScrollbox+Tframe ou l'utilisation d'une version récente ?
    Pour tout vous dire, j'ai collaboré/aidé quelqu'un qui dans son GUI affichait lui aussi des articles avec Image/prix/description etc... Il m'avait demandé de l'aide après avoir vu mes interventions sur les contrôles TControlList récents. Finalement nous sommes partis sur une version FMX (objectif Linux) et ses énormes possibilités.

    Je vous ai aussi conseillé de faire des recherches sur ces thèmes dans le forum
    exemple : https://www.developpez.net/forums/d6...el-tscrollbox/

    des vidéos se trouvent moyennant de bonnes connaissances en langue : anglais, portuguais. des mots clés comme "points de ventes" devraient aussi apporter son lot de réponses
    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

  17. #17
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 410
    Points : 3 038
    Points
    3 038
    Par défaut
    La solution consiste à avoir un champ de type blob et à charger les données à l'ouverture de la table.
    Et votre code utilise un TImage. Il faut utiliser un TDBImage et le lier au champ qui contiendra l'image.
    Après, ça se fait tout seul.

    Exemple avec un clientDataset (mais avec un TTable c'est pareil) :

    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
     
      ClientDataSet1.DisableControls;
      ClientDataSet1.open;
     
      ClientDataSet1.Append;
      ClientDataSet1cdsnom.AsString := 'F:\Embarcadero\Studio\15.0\Images\Buttons\abort.bmp';
      TBlobField(ClientDataSet1cdsimage).LoadFromFile(ClientDataSet1cdsnom.AsString);
      ClientDataSet1.Post;
     
      ClientDataSet1.Append;
      ClientDataSet1cdsnom.AsString := 'F:\Embarcadero\Studio\15.0\Images\Buttons\alarm.bmp';
      TBlobField(ClientDataSet1cdsimage).LoadFromFile(ClientDataSet1cdsnom.AsString);
      ClientDataSet1.Post;
     
      ClientDataSet1.Append;
      ClientDataSet1cdsnom.AsString := 'F:\Embarcadero\Studio\15.0\Images\Buttons\ALARMRNG.bmp';
      TBlobField(ClientDataSet1cdsimage).LoadFromFile(ClientDataSet1cdsnom.AsString);
      ClientDataSet1.Post;
     
      ClientDataSet1.EnableControls;
    Je l'ai fait avec 3 record d'où le copier-coller mais dans votre cas, il faut boucler sur les toutes les lignes pour faire le pré-chargement des images.

    Nom : grille.jpg
Affichages : 117
Taille : 37,3 Ko

  18. #18
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 715
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 715
    Points : 13 183
    Points
    13 183
    Par défaut
    Pas applicable dans le cas de D7 évidemment mais pour les autres, depuis 10.4, un TDBImage peut être chargé à la volée dans son événement OnLoadPicture.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.DBImage1LoadPicture(Sender: TObject; Picture: TPicture; var Loaded: Boolean);
    begin
      Picture.LoadFromFile(ClientDataSet1.FieldByName('ImageName').AsString);
      Loaded := TRUE;
    end;

  19. #19
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 410
    Points : 3 038
    Points
    3 038
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Pas applicable dans le cas de D7 évidemment mais pour les autres, depuis 10.4, un TDBImage peut être chargé à la volée dans son événement OnLoadPicture.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.DBImage1LoadPicture(Sender: TObject; Picture: TPicture; var Loaded: Boolean);
    begin
      Picture.LoadFromFile(ClientDataSet1.FieldByName('ImageName').AsString);
      Loaded := TRUE;
    end;
    Plutôt pratique cette chose-là

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 068
    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 068
    Points : 41 036
    Points
    41 036
    Billets dans le blog
    62
    Par défaut
    Oui, mais non, on "tombera" sur le problème du #9, je rappelle que LandGreen reste campé sur un TDBCtrlGrid, et qu'apparemment il ne veut pas utiliser des blobs images d'où ses soucis de conception. Quand il changera enfin d'avis ...
    J'avais aussi indiqué qu'il serait possible de passer par un champ calculé justement pour "charger" l'image en blob au runtime et donc permettre la possibilité de l'utilisation d'un DBImage dans le TDBCtrlGrid même si c'est une solution farfelue (autant enregistrer directement l'image dans la table avec comme avantage que ce ne sera plus lié à un emplacement)
    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. Afficher les images dans Thnunderbird
    Par mllejeanne dans le forum Thunderbird
    Réponses: 2
    Dernier message: 13/12/2009, 12h44
  2. [PHP 4] Afficher les images dans e-mail en html
    Par kaayna dans le forum Langage
    Réponses: 1
    Dernier message: 21/10/2009, 11h08
  3. [AC-2003] Afficher les images dans un etat
    Par sbouchaibi dans le forum IHM
    Réponses: 3
    Dernier message: 06/10/2009, 13h27
  4. Ne pas afficher les images dans le dvi
    Par gregory2526 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 09/06/2008, 13h39
  5. Réponses: 1
    Dernier message: 02/05/2007, 14h28

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