IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

[Rio][FMX]Comment cliquer sur un item d'une listbox?


Sujet :

Composants FMX Delphi

  1. #1
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 789
    Points : 5 752
    Points
    5 752
    Par défaut [Rio][FMX]Comment cliquer sur un item d'une listbox?
    Bonjour à tous,

    Comme d'hab avec FMX,je butte toujours sur les trucs les plus simples...

    Avec Delphi Rio entièrement patché, j'ai un TListBox dans laquelle j'ajoute des items via du code.

    Je veux pouvoir cliquer sur un item pour y récupérer des valeurs.

    Problème: l'event ne se déclenche pas quand je clique un item du Listbox

    J'ai essayé le "onclick" du ListBox puis le "onItemClick" avec et sans HitTest... Nada!

    Est-ce que quelqu'un a la solution magique? Y aurait-il un paramètre au niveau des Items que je ne dois pas laisser par défaut?

    Merci

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 789
    Points : 5 752
    Points
    5 752
    Par défaut
    Origine du problème trouvé... mais pas la solution!

    Les events onClick et onItemClick ne se déclenchent pas parce que j'utilise des styles personnalisés pour ListBox et ses items.

    Si j'utilise le layout "listboxstyle" fourni par un stylebook "officiel" dowloadé sur GetIt, les events se déclenchent!

    J'ai recopié le "listboxstyle" qui fonctionne et le modifie simplement en y ajoutant un Timage et les events ne se déclenchent plus!

  3. #3
    Rédacteur/Modérateur

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

    plus que certainement,un problème dans ton style. Ma "divination" : le Timage que tu as posé est avec un Hittest à true, si celui-ci est aligné au client ....
    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 expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    j'aurais pas pensé à ça de premier abord, mais effectivement les styles personnalisés peuvent avoir des effets de bord si on intercepte ou supperpose des choses sur celles qui doivent recevoir les actions gérées par le code d'origine

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    En fait, il faudrait "voir" le style utilisé et, tant qu'à faire, le code pour le "remplissage"

    [EDIT]J'avoue que je suis en train de faire un test et si j'ai bien le onItemClick qui fonctionne correctement, je bute lamentablement sur le chargement de l'image
    Nom : Capture.PNG
Affichages : 250
Taille : 81,6 Ko
    ici, c'est mon image "par défaut" dans le style, par contre le OnItemClick fonctionne après le OnListBoxItemClick
    mon code de "remplissage"
    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
    procedure TForm125.Button1Click(Sender: TObject);
    var FileList :  TArray<String>;
        aImage : TImage;
        s : String;
        alistItem : TListBoxItem;
    const dir = 'D:\Glyphesdelphi\GlyFX\Icons\AERO\PNG\64x64';
    begin
      Listbox1.Items.Clear;
      FileList := TDirectory.GetFiles(dir, '*.png');
      for s in FileList do
        begin
          aListItem:=TListBoxItem.Create(Self);
          with aListItem do
            begin
              Height:=80;
              StyleLookup:='itemimage';
              Text:=ExtractFileName(s);
              TagString:=s;
              OnClick:=ListboxItem1Click;  // se déclenchera avant ListBox1ItemClick
              OnApplyStyleLookup:=ListBoxItem1ApplyStyleLookup;
            end;
           ListBox1.AddObject(aListItem);
        end;
    end;
     
    procedure TForm125.ListBox1ItemClick(const Sender: TCustomListBox;
      const Item: TListBoxItem);
    begin
    Showmessage('Onitemclick de la liste '+Item.TagString);
    end;
     
    procedure TForm125.ListBoxItem1ApplyStyleLookup(Sender: TObject);
    var
      aImage: TFMXObject;
      f: string;
    begin
      aImage := TListBoxItem(Sender).FindStyleResource('Image');
      if assigned(aImage) then
      begin
        f := TListBoxItem(Sender).TagString;
        if FileExists(f) then
     
          TImage(aImage).Bitmap.LoadFromFile(f);
      end;
    end;
     
     
    procedure TForm125.ListBoxItem1Click(Sender: TObject);
    begin
    Showmessage('OnListBoxItemClick '+TListBoxItem(Sender).TagString);
    end;
    [EDIT] Code corrigé = chargement des images , ajustements dans le style (image passé en fond, marge gauche de l'image modifiée)
    Nom : Capture_1.PNG
Affichages : 237
Taille : 62,1 Ko
    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

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 789
    Points : 5 752
    Points
    5 752
    Par défaut
    J'étais sûr que c'était un truc simple qui m'avait échappé!

    Et c'était le cas: Le problème vient simplement que les images ajoutées dans les styles personnalisés ont un HitTest=True par défaut...

    Merci à la "divination" de SergioMaster!!!

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Anselme45 Voir le message
    Merci à la "divination" de SergioMaster!!!
    J'ai une bonne boule de cristal (et pas mal d'expérience sur les styles), ça aide
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    j'utilise une astuce qui m'a bien facilité la vie sous FMX

    sur la fiche j'ajoute

    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
     
    procedure TForm1.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
      Y: Single); // en override
    {$IFDEF DEBUG}
    var
      Obj: IControl;
      Ctl: TFmxObject;
    {$ENDIF}
    begin
    {$IFDEF DEBUG}
      Obj := ObjectAtPoint(ClientToScreen(TPointF.Create(X, Y)));
      if Obj <> nil then
      begin
        AllocConsole;
        Ctl := Obj.GetObject;
        WriteLn('click on ', Ctl.Name, ':', Ctl.ClassName, ' from ' + Ctl.UnitName);
      end;
    {$ENDIF}
      inherited;
    end;
    avec ce code, et en mode DEBUG sous Windows (pour le AllocConsole), on a une fenêtre qui affiche le nom de l'objet qui a chopé le clic

    en effet sous FMX c'est la Fiche qui reçoit le clic et le dispatche sur ses enfants (sauf à avoir un contrôle "natif" sur la fiche)...ça m'a permis de retrouver facilement le composant dont le HitTest est resté actif sur des fiches complexes
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Androi Studio : Cliquer sur un Item d'une listView pour ouvrir une autre listViem
    Par souleymanemakan dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 16/03/2017, 15h56
  2. Cliquer sur un item d'une listview pour lancer une nouvelle activité
    Par kopbuc dans le forum Composants graphiques
    Réponses: 14
    Dernier message: 31/01/2016, 12h46
  3. Réponses: 8
    Dernier message: 11/11/2014, 22h17
  4. comment valider/devalider un item dans une listBox?
    Par Mickey.jet dans le forum Delphi
    Réponses: 2
    Dernier message: 30/05/2006, 07h25
  5. Réponses: 7
    Dernier message: 15/05/2006, 16h44

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