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 :

Détecter le clic sur la vignette créée en D6


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut Détecter le clic sur la vignette créée en D6
    Bonjour à toutes et à tous,

    J'essaye de faire une petite application afin de créer des vignettes des photos au format .jpg contenues dans un dossier.

    J'utilise ce code qui affiche bien les vignettes depuis mon dossier, mais je n'ai pas trouvé comment lors d'un clic obtenir une autre information soit agrandir cette image soit un message.

    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
     
    begin
    foundlist:=tstringlist.create;
     
    try
     
    //Voir les fichiers jpg
    if FindFirst(directorylistbox1.Directory +'\*.jpg', faAnyFile, sr) = 0 then
      begin
           foundlist.add(sr.name);
           while FindNext(sr) = 0 do
                 foundlist.add(sr.name);
           FindClose(sr);
      end;
     
    x:=0;
    y:=0;
     
    //création des vignettes
    for i:=0 to FoundList.count-1 do
            begin
                 anewthumb:=tbi_thumb.create(self);
                 buffer_jpeg.loadfromfile(foundlist[i]);
                 with anewthumb do begin
                  pic:=buffer_jpeg;
                  parent:=scrollbox1;
                  left:=x;
                  top:=y;
                  width:=120;
                  height:=90;
                  visible:=true;
                  inc(x,122);
                  if x>244 then
                            begin x:=0; inc(y,100); end;
                  application.processmessages;
                 end;
    end;
     
    finally 
    foundlist.free; 
    end;
     
    end;
    Merci d'avance pour toute aide.

    @+,

    cincap

  2. #2
    Rédacteur/Modérateur

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

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

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

    je ne connais pas ce composant tbi_thumb donc la première question est : accepte t'il un évènement onClick ?
    Si oui, il faut créer une procédure "générale" (le nom exact m'échappe) par exemple procedure vignetteclick(Sender : TObject);
    et ensuite affecter cette procédure lors de la création de l'objet
    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
                with anewthumb do begin
                  pic:=buffer_jpeg;
                  parent:=scrollbox1;
                  left:=x;
                  top:=y;
                  width:=120;
                  height:=90;
                  visible:=true;
                  inc(x,122);
                  if x>244 then
                            begin x:=0; inc(y,100); end;
                  onClick:=vignetteclick;
                  application.processmessages;
                 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

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut plus
    Bon, j'ai eu la curiosité de chercher sur le net ce tbi_thumb et je suis tomber sur http://www.delphipages.com/articles/...r___-9199.html
    votre code y ressemblant à s'y méprendre je présume que c'est de cette page que vous vous êtes inspiré. Donc, pas de bol, il n'y a pas d'évènement OnClick

    au fait je me suis remémoré de nom exact il s'agit d'un TNotifyEvent

    Pour info la bibliothèque JVCL (il y a surement une vieille version D6) fourni un composant jvthumbImage
    attention, il faudra peut-être charger une version ancienne pour être sûr d'avoir les paquets pour D6
    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 éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    si tu ajoutes au code du " tbi_thumb"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      tbi_thumb=class(tcustomcontrol)
        fmypic : tjpegimage;
      private
        procedure getpic(value:tjpegimage);
      public
        procedure paint; override;
        constructor create(aowner:tcomponent); override;
        destructor destroy; override;
      published
        property pic:tjpegimage write getpic;
        property OnClick;  // ceci  <-----------------------------
      end;

    tu devrais pouvoir utiliser le OnClick comme le propose SergioMaster

    Cordialement,

    @+

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Cirec et SergioMaster, merci pour vos suggestions, c'est bien le code de Boern Ischo (d'Allemagne)et les images s'affichent dans un TScrollBox qui lui a la propriété du onclick.

    Ma demande consiste à pouvoir différencier les vignettes en cliquant dessus soit par la propriété tag ou index car chaque image créée n'a pas de propriété.

    Pour le moment elles s'affichent sur 3 colonnes en tenant compte du nombre de photos dans le dossier.

    Je vais aussi vérifier avec la Jvcl.

    @+,

    cincap

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par cincap Voir le message
    Ma demande consiste à pouvoir différencier les vignettes en cliquant dessus soit par la propriété tag ou index car chaque image créée n'a pas de propriété.
    à ajouter aussi par exemple property tag : string;
    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
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Ma demande consiste à pouvoir différencier les vignettes en cliquant dessus soit par la propriété tag ou index car chaque image créée n'a pas de propriété.
    justement et tu peux y arriver sans grande modifications
    ci-joint un zip pour illustrer le tout :Tbi_Thumb.zip

    ps: testé avec D7

    Cordialement,

    @+

    [EDIT]
    ne sachant pas si on peut modifier un zip déposé !?
    je poste ici une petite modifications de dernière minute
    pour faciliter le choix de la taille, la marge et le nombre de Thumb par ligne :
    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
    procedure TForm1.DirectoryListBox1Change(Sender: TObject);
    const
      ThumbWidth    = 120;
      ThumbHeight   =  90;
      ThumbMarge    =   8;
      ThumbsPerLine =   5;
    var
      i, x, y      : Integer;
      aNewThumb    : Tbi_Thumb;
      FoundList    : TStringList;
      sr           : TSearchRec;
     
    begin
      FoundList := TStringList.Create;
      try
        // Ajouté
        // suppression des images
        while ScrollBox1.ControlCount > 0 do
          ScrollBox1.Controls[0].Free;
        //look for jpg files
        if FindFirst(Directorylistbox1.Directory + '\*.jpg', faAnyFile, sr) = 0 then
        begin
          FoundList.add(Directorylistbox1.Directory + '\' + sr.name);
          while FindNext(sr) = 0 do
            FoundList.add(Directorylistbox1.Directory + '\' + sr.name);
          FindClose(sr);
        end;
     
        x := ThumbMarge;
        y := ThumbMarge;
     
        //create the thumbnails
        for i := 0 to FoundList.count - 1 do
        begin
          aNewThumb := Tbi_Thumb.create(self);
          Buffer_JPEG.loadfromfile(FoundList[I]);
          with aNewThumb do begin
            Pic := buffer_jpeg;
            Parent := scrollbox1;
            // Ajouté
            FileName := FoundList[I];
            OnClick := ThumbClick;
            //
            Left := x;
            Top := y;
            Width := ThumbWidth;
            Height := ThumbHeight;
            Visible := true;
            Inc(x, ThumbWidth + ThumbMarge);
            if x > (ThumbWidth * ThumbsPerLine) then
            begin
              x := ThumbMarge;
              Inc(y, ThumbHeight + ThumbMarge);
            end;
            Application.Processmessages;
          end;
        end;
      finally
        FoundList.free;
      end;
    end;
    [/EDIT]

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Cirec, quel professionnalisme, tout fonctionne correctement sous D6 après la modification naturellement.

    Encore merci Cirec et aussi à ceux qui ont pris un peu sur leur temps pour aider les autres.

    Que des cracks sur ce site !

    Je ferme le topic car amplement résolu.


    @+,

    cincap

  9. #9
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    j'ai complété le programme de Cirec, en affichant les vignettes sans déformer les images originales et en affichant l'image originale par simple Clic (avec zoom à la molette). J'ai aussi ajouté la propriété Tag qui peut servir comme dans cet exemple à stocker le numéro de l'image. Voici le projet modifié :

    Thumb.zip

    A noter aussi l'excellent logiciel pReorg d'affichage de vignettes de Jean Yves Queinec que l'on peut trouver ici

    A+
    Charly

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Charly910,

    Merci pour cette modification surtout le zoom avec la roulette de la souris.

    Pour ma part, j'avais ajouté la propriété du doubleclick pour afficher la photo avec l'aperçu de Windows qui permet aussi plusieurs options.

    J'ai aussi prévu le défilement des vignettes avec la roulette de la souris.

    Comme quoi a partir d'un code de base de l'auteur Monsieur
    Bjoern Ischo tout est permis !

    http://www.delphipages.com/articles/...r___-9199.html

    @+,

    cincap

  11. #11
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Ton lien est brisé

    A+
    Charly

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Tous, désolé pour le lien c'est du au copy/coller :

    http://www.delphipages.com/articles/...r___-9199.html

    @ Charly910, après test, le focus n'est pas donné sur le TScrollBox afin de faire défiler les vignettes, je l'ai remédié !

    @+,

    cincap

  13. #13
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Merci, je pensais pourtant avoir mis des Scrollbox1.setFocus ?

    A+
    Charly

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    @ Charly910,

    J'avais remarqué que suivant le système un simple "Scrollbox1.setFocus" ne fonctionnait pas à 100%.

    Avec ton projet voici ce que je te propose :

    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
     
    procedure TForm1.ScrollBox1MouseWheelDown(Sender: TObject;
      Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    begin
     
      SendMessage(ScrollBox1.handle,WM_VSCROLL,SB_LINEDOWN,0);
    end;
    { ======================================================================== }
    procedure TForm1.ScrollBox1MouseWheelUp(Sender: TObject;
      Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    begin
     
      SendMessage(ScrollBox1.Handle, WM_VSCROLL, SB_LINEUP, 0);
    end;
    { ======================================================================== }
    Et dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.DirectoryListBox1Change(Sender: TObject);
    ---
    --
    finally
        FoundList.free;
        form1.ActiveControl := Scrollbox1; //Donne le focus
    end;
    Dans mes projets ou j'utilise un TScrollBox et ou se trouve d'autres composants comme un TButton, un TSpinEdit, TRadioButton et autres, je dois chaque fois remettre " form1.ActiveControl := Scrollbox1;"

    Je ne sais pas si c'est faisable de le déclarer une seule fois et qu'il fonctionne avec tous les Tcontrols, à creuser ?

    @+,

    cincap

  15. #15
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Ok, merci Cincap je vais tester. Chez moi les SetFocus fonctionnaient bien

    A+
    Charly

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2010, 08h44
  2. [DOM] [debutant] comment détecter un click sur un div
    Par junior68 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 07/06/2009, 15h26
  3. Détecter le click sur une combobox d'une datagridview
    Par Delphi-ne dans le forum Windows Forms
    Réponses: 11
    Dernier message: 21/04/2009, 11h22
  4. détecter un click sur un polygone
    Par adrien954 dans le forum C++Builder
    Réponses: 6
    Dernier message: 13/11/2007, 08h12
  5. Réponses: 2
    Dernier message: 09/09/2005, 10h45

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