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 :

Ajout d'une liste items à un composant


Sujet :

Composants FMX Delphi

  1. #1
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut Ajout d'une liste items à un composant
    Bonjour à tous

    J'ai créer quelques composant d'affichage FMX (voir ce billet dans mon blog) et je suis en train de créer des composants de choix (boutons, interrupteur...). Parmi eux il y en a un que j'ai baptisé TSelecteur et qui agit comme une TListbox sauf qu'il aura un aspect de ce genre
    Nom : Selecteur.png
Affichages : 120
Taille : 1,4 Ko
    Naïvement j'ai fait descendre mon composant Selecteur d'un TListBox et surcharger la méthode Paint pour dessiner comme je le veux mon composant. Sauf que ça ne marche pas je passe bien dans ma méthode Paint mais il doit y avoir un appel à une autre car j’obtiens toujours à l'écran le dessin classique d'une TListbox.

    Donc je suis reparti d'un ancêtre TRectangle auquel je pensais ajouter une propriété items comme elle existe pour les listbox
    Nom : Selecteur2.png
Affichages : 108
Taille : 24,7 Ko
    Pour cela j'ai fouillé dans les sources de TListBox et je suis malheureusement tombé sur une suite d'héritage très complexe et j'avoue être perdu.
    Au départ j'avais fait ça
    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
     
    unit Selecteur;
     
    interface
     
    uses
      System.SysUtils, Couleurs, System.Classes, System.Types, System.UIConsts, FMX.Types, FMX.Controls, FMX.Objects,
      FMX.Graphics, FMX.ListBox;
     
    type
      TGenre = (Circulaire, Horizontal, Vertical);
     
      TSelecteur = class(TRectangle)
      private
        FGenre: TGenre;
        FChoix:TStrings;
        procedure setChoix(valeur:TStrings);
      protected
        { Déclarations protégées }
      public
        constructor Create(AOwner: TComponent); override;
        procedure Paint; override;
      published
        property Genre: TGenre read FGenre write FGenre;
        property Choix: TStrings read FChoix write setChoix;
     
     
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('VisuLabo', [TSelecteur]);
    end;
     
    constructor TSelecteur.Create(AOwner: TComponent);
    begin
      inherited;
      FGenre := Horizontal;
      FChoix:=TStrings.Create;
    end;
     
    procedure TSelecteur.Paint;
    var
      rect: TRectF;
    begin
      Canvas.BeginScene;
      if FGenre = Horizontal then
      begin
        Canvas.DrawLine(TPointF.Create(0, Height / 2), TPointF.Create(Width, Height / 2), 1);
      end;
      Canvas.EndScene;
    end;
     
     
    procedure TSelecteur.setChoix(valeur: TStrings);
    begin
      FChoix.Assign(valeur);
    end;
     
    end.
    Mais dès que je pose mon composant sur une fiche et que je clique sur Choix, j'ai cette erreur
    Nom : Selecteur3.png
Affichages : 137
Taille : 63,8 Ko

    Si quelqu'un a une idée pour réaliser ça relativement simplement je suis preneur
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  2. #2
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    A ma grande honte je n'ai pas bien cherché. En fait il ne faut pas utiliser TStrings directement car c'est une classe abstraite.
    En remplaçant TStrings par TStringList ça va tout de suite beaucoup mieux.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  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,

    pour ce qui est de ce composant je n'ai, pour l'instant, pas d'idée précise.
    Pour ce qui est des Items par contre j'ai déjà réalisé ça pour mon composant radiogroupbox (non publié car le LiveBindings ne fonctionne toujours pas même si je sais quelle piste je dois suivre je n'ai pas eu le courage de m'y remettre).
    Je peux donc te fournir mon code (impliquant groupbox, gridlayout etc...) par mp
    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 expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,
    Je peux donc te fournir mon code (impliquant groupbox, gridlayout etc...) par mp
    Je suis preneur ça peux me donner des idées
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  5. #5
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut ListBox avec FMX
    Pour info il existe deux types de listes pour TListBox sous FMX. Ces deux types sont exclusifs et ne peuvent cohabiter.
    Ci joint exemple avec sérialisation de l'objet TListBox et génération dans les deux modes

    Nom : Capture d’écran 2021-04-07 092608.jpg
Affichages : 84
Taille : 27,2 Ko

    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
    procedure TForm2.Button1Click(Sender: TObject);
    var
      LItem: TListBoxItem;
      I: Integer;
    begin
      ListBox1.Items.Clear ;
      for I := 1 to 10 do
      begin
        LItem := TListBoxItem.Create(ListBox1);
        LItem.Text := 'Item '+IntToStr(I);
        LItem.parent := ListBox1 ;
     end;
    end;
     
    procedure TForm2.Button3Click(Sender: TObject);
    var
      I: Integer;
      sl1 : TStringList ;
    begin
      sl1 := TStringList.Create ;
      for I := 1 to 10 do
        sl1.Add ('Item '+IntToStr(I)) ;
      ListBox1.Items.Clear ;
      ListBox1.Items.SetStrings(sl1);
      sl1.Free
    end;
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [WD9] Non remplissage d'une liste dans un composant
    Par Romanops dans le forum WinDev
    Réponses: 3
    Dernier message: 06/04/2006, 17h05
  2. Ajout dans une liste déroulante
    Par auriolbeach dans le forum Access
    Réponses: 5
    Dernier message: 16/02/2006, 05h37
  3. Ajout dans une liste avec un bouton
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 07/12/2005, 08h27
  4. Ajout dans une liste/vérification
    Par illight dans le forum Access
    Réponses: 1
    Dernier message: 11/10/2005, 17h12
  5. [LG]probleme d'ajout dans une liste chainée...
    Par misteryann dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2004, 20h28

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