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 VCL Delphi Discussion :

Afficher une image complète dans un DBimage


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Points : 61
    Points
    61
    Par défaut Afficher une image complète dans un DBimage
    Bonsoir
    j'ai utilisé une table paradox pour sauvegarder des photos dans un champs de type blob

    tout marche bien, et pour l'affichage j'utilise un DBimage, qui m'affiche l'image de chaque enregistrement

    Mon problème est que des fois l'image est grand et donc je ne vois qu'une partie d'elle dans ce DBimage, n'y a-t-il pas un moyen de mettre un scroll dans le DBimage ou bien redimensionner l'image avant sa sauvegarde ou avant son affichage?

    merci

  2. #2
    rbh
    rbh est déconnecté
    Membre confirmé Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 381
    Points : 471
    Points
    471
    Par défaut
    Salut
    le composant DBImage, n'a-t-il pas une propriété Stretch comme le TImage normal?

    Si tu veux modifier la taille de l'image avant son insertion dans la base de données, je pense que c'est à toi de faire le traitement. Le web regorge de fonctions qui redimensionne des Images.

    Autrement, tu peux mettre ton DBImage dans un conteneur (Panel, Frame, ...) et gérer toi même les ScrollBar sur ce composant (je crois que TFrame le fait tout seul, Pour TPanel je crois que c'est à toi de les gérer "à la main").

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    EDIT : lol, j'ai quitté quelques minutes mon ordi, et RBH, a posté exactement la même réponse ^_^, le temps que je vienne finir et valider

    soit tu active le Strech, soit tu force la Taille du TDBImage en fonction de la taille son TDBImage.Picture et te le met dans un scrollbox, ...

    un problème du TDBImage, c'est que tu lis le blob quoi qu'il arrive, alors qu'une lecture explicite via un TImage serait plus judicieux et permettrait la compression du fichier stream image ...

    tient un sujet qui devrait t'interresser, sa suite

    sinon stocker des images dans une table Paradox, quel courage, dans les bases de données client server, où le server n'est pas accessible en tant que server de fichier, cela est justifié (d'ailleurs autant zip le document avant l'insertion dans le blob), et puis Oracle, SQL Server, MySQL ... c'est assez robuste malgré le volume

    mais en paradox, j'avais toujours eu comme avis que c'était peu recommandé, le répertoire de la base de données, est connue via l'Alias du BDE, ce que je faisais, quand j'ai du géré des documents (word, jpeg ...), j'ajoutais un répertoire Doc dans le Répertoire Data, et je ne stockais que le nom du fichier (un numéro de la forme ID_OBJET-TYPE_OBJET-COMPTEUR), en fait la table ne stockait que le nom d'origine du fichier, quelques dates, et accélérait la recherche (FindFirst/FindNext sur un dossier de 100000 fichiers, ouch ... une table paradox de 1Go, je ne préfère pas y penser), j'ai d'ailleurs, un jour, fait une migration transformant le nom de fichier en série de sous répertoire ... l'avantage, la table est morte, tu as tous les fichiers, le nommage te conserve tes liens vers tes objets ...
    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

  4. #4
    Membre du Club Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Points : 61
    Points
    61
    Par défaut
    salut et merci pour vos réponses

    tu ne peux pas me passer le code de ta sauvegarde dans répertoire, et surtout l'affichage des images à partir de ton répertoire

    la solution du blob est momentanée.

    merci

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    je ne l'ai plus, c'est vieux, ...

    bon, ta table actuelle, ne change pas bcp, c'est juste le blob qui devient une string de 255, pour stocker le nom du fichier, ensuite, la première chose, c'est comment connaitre le chemin de la DB, soit tu le gère en direct donc tu le connais, soit tu utilise un alias BDE

    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
    function GetPathAlias(const AliasName: string): string;
    var
       AliasList, ParamList :TStringList;
       i, j : Integer;
    begin
         Result := '';
         AliasList:= TStringList.Create();
         try
            try
               Session.Open();
               Session.GetAliasNames(AliasList);
               for i := 0 to AliasList.Count - 1 do begin
                   if AliasList[i] = AliasName then begin
                      ParamList:= TStringList.Create();
                      try
                         Session.GetAliasParams(AliasList[i], ParamList);
                         for j := 0 to ParamList.Count - 1 do begin
                             if ParamList.Names[j] = 'PATH' then begin
                                if DirectoryExists(ParamList.Values['PATH']) then begin
                                   Result := ParamList.Values['PATH'];
                                   Break;
                                end;
                             end;
                         end;
                      finally
                             ParamList.Free();
                      end;
                      Break;
                   end;
               end;
               Session.Close();
            except
                  Result :=  '';
            end;
         finally
                AliasList.Free();
         end;
    end;
    bon, tu as maintenant, le dossier de ta base de données, ... moi, j'avais soit la base en local, soit le chemin était un simple disque réseau partagé qui pointait sur le serveur (windows 98 ou NT4 ^_^, j'avais dit que c'était vieux)

    ensuite, pour la sauvegarde fichier, rien de plus simple, ...

    tu fais un CopyFile du fichier local vers le stockage central, à toi de voir le nommage, de voir comment tu veux organisé tes fichiers (c'est de la GED) ... et dans la table, tu stocke dans le champ FileName, le nom de la copie, en fait c'est le nom de la copie qui est le plus dur à trouver ... le plus simple, c'est de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DestFileName := FormatDateTime('YYYYDDMMHHNNSSZZZ', Now() + ExtractFileName(SourceFileName)
    CopyFile(PChar(SourceFileName), PChar(DestFileName), False);
    ensuite, pour la lecture, facile, je te tape un pseudo code, à toi de corriger les fautes

    Image est un simple TImage , placé dans un ScrollBox ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Image.Picture.LoadFromFile(IncludeTrailingPathDelimiter(GetPathAlias(TableImage.Database.AliasName)) +  TableImage.FieldByName('FileName').AsString)
    Image.Width := Image.Picture.Bitmap.Width;
    Image.Height := Image.Picture.Bitmap.Height;
    rien de compliquer ...
    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

  6. #6
    Membre du Club Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Points : 61
    Points
    61
    Par défaut


    merci c'est très gentil de ta part
    je l'essaierai demain et je te donnerais la réponse ou d 'autres questions

    ciao et à +

  7. #7
    Membre du Club Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Points : 61
    Points
    61
    Par défaut
    çA MARCHE PAS, car il me dit
    error: identificateur non déclaré DirectoryExists


  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par smail21 Voir le message
    error: identificateur non déclaré DirectoryExists
    DirectoryExists est défini dans l'unité SysUtils. Vérifies qu'elle fait parti des tes Uses.

    @+ Claudius

  9. #9
    Membre du Club Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Points : 61
    Points
    61
    Par défaut


    elle fait partie de mes uses, et le problème persiste toujours !

  10. #10
    Membre du Club Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Points : 61
    Points
    61
    Par défaut
    j'ai trouvé la solution à ce petit problème: c'est l'unité Filectrl et non SysUtils

  11. #11
    Membre du Club Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Points : 61
    Points
    61
    Par défaut
    bon là que tout est réglé, la copie des photos et leur renommage.
    le problème initial persiste, c'est à dire, l'affichage des grand image dans un petit espace, j'ai mis la propriété d'autosize de l'image à true, ça a défiguré certaine photo. et le scrollBox qui contient le Timage ne veut pas afficher de Scorll !

    que dois-je faire ?

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tu dois retirer l'autoSize, retirer Strech, et met Align à Client, tu met ton TImage dans un Panel et tu redimensionne le panel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Image.Picture.LoadFromFile('...');
    Panel.Width := Image.Picture.Bitmap.Width;
    Panel.Height := Image.Picture.Bitmap.Height;
    le panel va forcer le Scrollbox a prendre sa taille, ce que ne fait pas le TImage (surement lié au TWinControl)
    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

  13. #13
    Membre du Club Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Points : 61
    Points
    61
    Par défaut
    ça ne march epas
    en plus d'un coté tu me dis de mettre le Timage sur un panel et d'un autre coté tu me parle d'un ScrollBox!

    j'ai essayé même un Timage sur un Tpanel sur un TscrollBox

    ça marche pas
    stp vas-y doucement et dis moi ce que je dois mettre 1 pour 1

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tu pose un TSrollBox
    Tu pose dedans un Panel, tu le positionne en (0, 0), tu ne change rien d'autre
    Tu pose une TImage dans ce Panel, tu le mets en Align "alClient"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Image.Picture.LoadFromFile('...');
    Panel.Width := Image.Picture.Bitmap.Width;
    Panel.Height := Image.Picture.Bitmap.Height;
    Je viens de tester, cela fonctionne parfaitement !
    Tu as ton ScrollBox avec une Taille fixe de 400 x 400 par exemple, et tu peux bouger dans ton Image comme dans MsPaint avec des barres de défilement ...
    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

  15. #15
    Membre du Club Avatar de smail21
    Profil pro
    Inscrit en
    Février 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2005
    Messages : 152
    Points : 61
    Points
    61
    Par défaut
    salut

    j'ai réglé le problème tard dans la nuit et j'ai oublié de te dire que c'est réglé!

    merci infiniment.

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

Discussions similaires

  1. [MySQL] Afficher une image stockée dans une base de données
    Par LuckySoft dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/04/2006, 12h57
  2. [.NET][CR] Comment afficher une image blob dans un état ?
    Par moucrack dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/06/2005, 13h49
  3. Réponses: 6
    Dernier message: 22/12/2004, 11h00
  4. Afficher une image stockée dans interbase
    Par NicolasR dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/06/2004, 10h00
  5. [VB.NET] afficher une image stockée dans une table
    Par matonfire dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/03/2004, 11h21

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