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 :

créer un album photo


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 946
    Points : 123
    Points
    123
    Par défaut créer un album photo
    Bonjour à tous,

    Je voudrais créer un album photo souvenir style photoshop, j'ai enregistré les photos dans une base de données, et l'appel de la procédure d'exécution dans un thread. Jus-qu' à la tout va, par contre ou il ya problème c'est le temps de passage des images, pour cela j'ai utilisé TTimer un temps d'attente de 3 seconds mais le temps réellement passé est aléatoire.
    toute aide sera la bien venu.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 877
    Points : 11 369
    Points
    11 369
    Billets dans le blog
    6
    Par défaut
    Temps de passage : c'est un diaporama, donc ?

    Dans ce cas, pour améliorer la régularité, il faut sûrement avoir un objet (avec un TQueue) qui précharge les photos (threads) pendant qu'il séquence l'affichage (TTimer sur un intervalle court et déclenchement dès que Now - PrecTime > intervalle).

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 946
    Points : 123
    Points
    123
    Par défaut
    @tourlourou Franchement, j'ai pas compris votre méthode.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 877
    Points : 11 369
    Points
    11 369
    Billets dans le blog
    6
    Par défaut
    Le problème est-il de faire défiler régulièrement des photos à l'écran (diaporama) ?

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 946
    Points : 123
    Points
    123
    Par défaut
    @tourlourou,
    Le problème est-il de faire défiler régulièrement des photos à l'écran (diaporama) ?
    EXACT.

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 877
    Points : 11 369
    Points
    11 369
    Billets dans le blog
    6
    Par défaut
    Il faut donc à mon avis :
    - précharger les images à partir de la base, grâce à un ou plusieurs thread qui les ajouteront à une queue (TQueue) ;
    - un Timer sur un petit intervalle de temps, qui vérifiera si :
    . on a dépassé le délai d'affichage de la photo en cours ;
    . la photo suivante est prête (Queue non vide) et l'affichera.

    Bien sûr, un problème se posera si le temps de chargements à partir de la BD excède l'intervalle souhaité...

    Sinon, ce type de méthode devrait homogénéiser les intervalles en supprimant l'aléa sur la durée de récupération (seul l'affichage sera à faire au bon moment), et sur la durée d'un timer long.

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 356
    Points
    15 356
    Par défaut
    Bonjour, Yves,

    et ne pas perdre de vue (c'est dit à chaque fois...) que stocker les images dans la BdD est une très mauvaise idée en termes de performances et de sauvegarde.

    Ce qu'il faut, c'est stocker les fichiers des images quelque part sur le disque dur et stocker dans la BdD les chemins vers les images.
    Ça ira beaucoup plus vite.

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 175
    Points : 41 367
    Points
    41 367
    Billets dans le blog
    63
    Par défaut
    Bonjour,
    Citation Envoyé par Jipété Voir le message
    et ne pas perdre de vue (c'est dit à chaque fois...) que stocker les images dans la BdD est une très mauvaise idée en termes de performances et de sauvegarde.

    Ce qu'il faut, c'est stocker les fichiers des images quelque part sur le disque dur et stocker dans la BdD les chemins vers les images.
    Ça ira beaucoup plus vite.
    même si je suis plutôt d'accord avec cette affirmation il faut mitiger cette réponse, par exemple, j'ai lu que dans le cas où il s'agissait de SQLite (et donc d'un accès local) l'accès aux images était plus rapide si les images étaient stockées plutôt que de faire au chargement via un loadfromfile je ne retrouve plus l'article (benchmark à l'appui) mais c'était plus que surprenant

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 356
    Points
    15 356
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    je ne retrouve plus l'article (benchmark à l'appui) mais c'était plus que surprenant
    Dommage.
    Hypothèse : le bench a été fait avec 10 images dans la base sur une machine avec beaucoup de mémoire, si tout est chargé d'un coup et qu'on lance le bench après, alors oui, ça peut aller plus vite.

    Cependant, ça ne change rien au fait que question sauvegarde, ça devrait faire une sacrée différence : selon le nombre de photos, ou bien une fois le dossier sauvegardé les fois suivantes ça va bombarder, ou bien ça sera à chaque fois qu'il faudra sauvegarder un fichier énorme avec un temps conséquent.

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 175
    Points : 41 367
    Points
    41 367
    Billets dans le blog
    63
    Par défaut
    Pour le benchmark, je le retrouverai je pense mais non, je suis absolument sûr qu'il s'agissait d'un nombre bien supérieur à 10
    Mais, je reste d'accord, bonjour les problèmes de sauvegarde/maintenance de la base de données, toutefois, une sauvegarde des images (copie classique de fichiers) serait elle aussi compliquée surtout s'il n'y a aucun répertoire racine

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 356
    Points
    15 356
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    toutefois, une sauvegarde des images (copie classique de fichiers) serait elle aussi compliquée surtout s'il n'y a aucun répertoire racine
    Oui mais ça, c'est du bon sens et de l'organisation : les couteaux ici les fourchettes là, et les images pour le diaporama dans le dossier diaporama avec même des sous-dossiers Nature, People, etc.
    Par-dessus, une fonction de piochage aléatoire et roule ma poule,

    Quant aux outils de sauvegarde, ils sont suffisamment intelligents pour ne sauvegarder que ce qui a changé depuis le dernier backup, donc si juste 3 fichiers ont été ajoutés et 2 déplacés dans la dizaine de milliers de l'arbo, juste ces 5-là seront backupés.
    No problèmo.

    Bon dimanche,

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 946
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Le nombre d'image dépasse les 100, alors je l'ai mis dans une base de données. Pour le TTimer, j'ai fait plusieurs teste et il est pas du tout fiable .Je voudrais m'inspirer de photoshop qui créer des un seule fichier pour tout les images.

  13. #13
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par chekkal Voir le message
    Bonjour,

    Le nombre d'image dépasse les 100, alors je l'ai mis dans une base de données. Pour le TTimer, j'ai fait plusieurs teste et il est pas du tout fiable .Je voudrais m'inspirer de photoshop qui créer des un seule fichier pour tout les images.
    Aurais-tu un bout de code que l'on puisse tester de notre côté ?

  14. #14
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 946
    Points : 123
    Points
    123
    Par défaut
    Voila ,
    Unit1:
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls, ComCtrls, ExtDlgs, JPEG, Buttons, Clipbrd, Vcl.FileCtrl,
      math,Vcl.DBCtrls, Vcl.Grids, Vcl.DBGrids,unit1, Vcl.MPlayer;
    type
      TEform1 = class(TForm)
        SavePictureDialog1: TSavePictureDialog;
        IBPHO: TIBDatabase;
        TPHO: TIBTransaction;
        PHO: TIBQuery;
        UPHO: TIBUpdateSQL;
        PHOORD: TIntegerField;
        PHODAT: TDateField;
        PHOOBS: TIBStringField;
        PHOIMG: TBlobField;
        bdemare: TBitBtn;
        opend: TOpenDialog;
        DataSource1: TDataSource;
        image1: TDBImage;
        DBGrid1: TDBGrid;
        Label1: TLabel;
        REDUIRE: TSpeedButton;
        Label2: TLabel;
        Label82: TLabel;
        quit1: TShape;
        QUIT: TImage;
        BitBtn3: TBitBtn;
        Shape1: TShape;
        BitBtn4: TBitBtn;
        Panel1: TPanel;
        Label107: TLabel;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        fich: TFileListBox;
        music: TMediaPlayer;
        Image2: TImage;
        procedure invert(s:byte);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormResize(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure bdemareClick(Sender: TObject);
        procedure QUITClick(Sender: TObject);
     
      public
     
      private
      end;
    var
      Eform1: TEForm1;
      MThrd:Tpersothread;
      bmp0 : Tbitmap;     // Bitmap read by Ulecture unit
      Curdir : string;    // current directorty
      var1:byte;
      tok:boolean;
    implementation
     
     
    {$R *.DFM}
     
     
     
    Var
      zoom : integer;      // 1 or 2
     
    //---------------------------------------------------------------------------
     
     
     
    procedure TEform1.FormCreate(Sender: TObject);
    var
     i:integer;
     s:string;
    begin
     
      bmp0 := tbitmap.create; bmp0.width  := 8;  Bmp0.height := 8;
     
    end;
    procedure TEform1.FormDestroy(Sender: TObject);
    begin
      bmp0.free;
    end;
    procedure TEform1.FormResize(Sender: TObject);
    begin
        image2.canvas.stretchdraw(rect(0,0,image2.Width,image2.Height),bmp0);
    end;
    procedure TEform1.FormShow(Sender: TObject);
    begin
                mthrd:=TPersoThread.Create(true);
           mthrd.FreeOnTerminate:=True;//on veut une destruction automatique après exécution.
     
               music.FileName:='music.mp3';
         music.open;
     
    end;
    procedure TEform1.bdemareClick(Sender: TObject);
    begin
          var1:=1;
           mthrd.paused:=false;
           mthrd.resume;
           music.Play;
     
     
    end;
     
     
     
     
     
    procedure TEform1.QUITClick(Sender: TObject);
    begin
    close;
    end;
    procedure Teform1.invert(s:byte);
    var
       i,j,col,gray:integer;
       rowout:prgbArray;
    rowrgb,rowgray : pRGBArray;
    begin
    for j:=bmp0.Height-1 downto 0 do
    begin
           rowrgb := bmp0.ScanLine[j];
           rowgray := bmp0.ScanLine[j];
           for i:=bmp0.Width-1 downto 0 do
           begin
                with rowrgb[i] do
                    gray:=(rgbtRed + rgbtGreen+ rgbtBlue ) div s;
                with rowgray[i] do
                begin
                    rgbtRed:=gray;
                    rgbtGreen:=gray;
                    rgbtBlue:=gray;
                end;
           end;
    end;
     
    end;
     
     
     
    procedure TEform1.BitBtn3Click(Sender: TObject);
    begin
          if Assigned(mthrd) then
          begin
                MThrd.paused:=true;
                music.Pause;
          end;
     
    end;
     
     
    end.
    unit2
    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
     
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls, ComCtrls, ExtDlgs, JPEG, Buttons, Clipbrd, Vcl.FileCtrl,
      Data.DB, IBCustomDataSet, IBUpdateSQL, IBQuery, IBDatabase,inifiles,math,
      Vcl.DBCtrls, Vcl.Grids, Vcl.DBGrids,SyncObjs;
      type
      TPersoThread = class(TThread)
      private
               fEvent:TEvent;
               fpaused:Boolean;
               procedure setpaused(const value:boolean);
      public
           constructor create(const apaused: Boolean=false);
           property paused:Boolean read fPaused write setpaused;
      protected
        procedure Execute; override;
            procedure CentralControl;
      end;
     
     
    implementation
    uses uestamp1;
    constructor  TPersoThread.create(const apaused:boolean=false);
    begin
            fpaused:=apaused;
            fevent:=Tevent.Create(nil,true,not fpaused,' ');
            inherited create(false);
    end;
    procedure TPersoThread.setpaused(const value:boolean);
    begin
          if (not terminated)and(fpaused<>value) then
          begin
                 fpaused:=value;
                 if fpaused  then
                      fevent.ResetEvent
                 else fevent.SetEvent;
          end;
     
    end;
    procedure TPersoThread.Execute;
      var
       l:integer;
    begin
         while not terminated do
         begin
                fevent.WaitFor(infinite);
                with eform1 do
                begin
                      pho.Open;
                      Bmp0.free;
                      Bmp0 := Tbitmap.create;
                      bmp0.width  := Image1.picture.graphic.width;
                      bmp0.height := Image1.picture.graphic.height;
                      bmp0.pixelformat := pf24bit;
                      bmp0.canvas.draw(0,0,Image1.picture.graphic);
                      image2.canvas.stretchdraw(rect(0,0,image2.Width,image2.Height),bmp0);
                      sleep(2000);
                          try
                                  invert(3);image2.canvas.stretchdraw(rect(0,0,image2.Width,image2.Height),bmp0);sleep(500);
                          except
                          end;
                          if var1=9 then
                              var1:=1
                          else var1:=var1+1;
                      pho.Next;
                end;
     
     
         end;
    end;
     
    end.
    fiche:Nom : es.jpg
Affichages : 262
Taille : 32,3 Ko

  15. #15
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Je ne suis pas sûre, mais je ne vois pas l'utilisation du timer ? C'est surtout ça qui m’intéresse, c'est de voir comment tu utilises le TTImer.

  16. #16
    Rédacteur/Modérateur

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

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

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

    c'est moi ou ? Je ne vois nulle part d'utilisation des images ou du moins des blobs contenant les images. Je m'attendais à voir quelque part une instruction TBlobField(Datas.Query1.FieldByName('Image')).xxxxx suivi d'un traitement et dans le code je ne vois qu'une réduction pour vignette

  17. #17
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 356
    Points
    15 356
    Par défaut
    Et il faut 2 "r" à Démarre !

    Nom : demare.png
Affichages : 259
Taille : 10,5 Ko

  18. #18
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 634
    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 634
    Points : 25 352
    Points
    25 352
    Par défaut
    eform1.image2.canvas utiliser dans un Thread, c'est un risque de gros n'importe quoi !

    Pourquoi ne pas utiliser le TEvent avec WaitFor réglé sur le délai souhaité ?

    Le thread devrait charger un Bitmap comme propriété private puis envoyer un message (PostMessage) à la Form pour la notifier de changer d'image
    La forme dans un gestionnaire de message invoque une méthode PaintTo du thread qui copie son Bitmap dans le Timage, le tout protégé au besoin par une section critique

    Si l'on veut un temps exact, le thread devrait charger l'image suivante dans un autre Bitmap
    Lorsque le délai est arrivé via le TEvent, permute Bitmap en cours (B1) et avec le Bitmap suivant (B2)
    le thread envoie la notification, la forme utilise PaintTo (B2)
    le thread charge l'image suivant dans B1
    le thread attend via TEvent en ayant imputé au délai, le temps de traitement de l'itération (Temps écoulé entre le TimeOut et juste avant l'appel de WaitFor), quelques ms à bout de quelques itérations et la fréquence de rotation n'est plus exact (il faudrait même mesurer le temps du WaitFor, il peut varier d'une centaine de µs)
    le délai est arrivé via le TEvent, permute Bitmap en cours (B2) et avec le Bitmap suivant (B1)
    Et ça tourne en boucle entre les deux tampons B1/B2

  19. #19
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 175
    Points : 41 367
    Points
    41 367
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    utiliser dans un Thread, c'est un risque de gros n'importe quoi !
    on ne touche jamais directement à l'IHM dans un Thread je ne peux que suggérer de visionner les videos de Olaf Monien sur le sujet (voir le bootcamp 2018 sur Embarcadero Academy)

  20. #20
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 666
    Points : 3 660
    Points
    3 660
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Juste en passant, il y a une application de démonstration fournie avec Delphi ou récupérable ici : https://github.com/Embarcadero/RADSt...rface/FireFlow

    Cette démo liste les images d'un répertoire et permet de basculer d'une image à l'autre avec un petit effet graphique.

Discussions similaires

  1. Impossible créer album photo dans mon pptx
    Par MauveHippocampe dans le forum Powerpoint
    Réponses: 2
    Dernier message: 22/04/2019, 16h00
  2. Créer des albums photos par un script
    Par nezdeboeuf62 dans le forum Facebook
    Réponses: 0
    Dernier message: 11/12/2012, 11h12
  3. Créer un album photo
    Par dark_geek dans le forum Imagerie
    Réponses: 1
    Dernier message: 23/11/2009, 13h46
  4. Album photos
    Par mael94420 dans le forum ASP
    Réponses: 1
    Dernier message: 06/05/2006, 17h30

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