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 :

Création composant et gestion des hauteur des rows d'un TGridPanelLayout


Sujet :

Composants FMX Delphi

  1. #1
    Membre chevronné 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
    Par défaut Création composant et gestion des hauteur des rows d'un TGridPanelLayout
    Salut,

    J'ai besoin de créer un composant maison, qui hérite d'un layout. Dans celui-ci je place un TGridPanelLayout. Celui-ci n'a qu'une colonne, et 2 lignes.
    J'aimerais que la première ligne ait une hauteur de 30% et la seconde une hauteur de 100%.

    Je ne trouve pas le moyen de forcer ces valeurs de 30 et 70 %.

    Pour le moment j''ai testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      with FGridGenerale.RowCollection.Add do
      Begin
        SizeStyle := TGridPanelLayout.TSizeStyle.Percent;
        Value := 30;
      End;
     
      with FGridGenerale.RowCollection.Add do
      Begin
        SizeStyle := TGridPanelLayout.TSizeStyle.Percent;
        Value := 70;
      End;
    Avec ça le ratio des hauteur est quasiment de 50/50

    Si j'ajoute ces 2 lignes, on se rapproche de l'aspect voulu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     FGridGenerale.RowCollection[0].Value := 30;
     FGridGenerale.RowCollection[1].Value := 70;
    Est-ce que quelqu'un connait le moyen de forcer ces valeurs de hauteur ?

    En mode design, c'est pareil, pas moyen d'avoir les valeurs exactes.
    Pour avoir 30% et 70%, le seul moyen que j'ai trouvé pour le moment, c'est d'éditer le dfm en mode texte, et saisir directement les valeurs. Sauf que là, j'aimerais m'en passer en créant un composant.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    ça fait plaisir de lire que je ne suis pas le seul à tenter de créer des composants FMX.
    Je crois avoir déjà fait ça dans mes essais, il va me falloir faire des recherches dans les sources que j'ai pu récupérer.
    La piste style est-elle envisageable ?

    [Edit] un rapide test

    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
     
    GridPanelLayout1.BeginUpdate;
    with GridPanelLayout1.RowCollection.Add do
      begin
       SizeStyle:=TGridPanelLayout.TSizeStyle.Percent; // inutile
       // value:= 30   ne fonctionne pas
      end;
    with GridPanelLayout1.RowCollection.Add do
      begin
       SizeStyle:=TGridPanelLayout.TSizeStyle.Percent; // inutile
       // value:=70  ne fonctionne pas
     end;
     GridPanelLayout1.RowCollection[0].Value:=30;
     GridPanelLayout1.RowCollection[1].Value:=70;
     
     with TRectangle.Create(Self) do
     begin
       Parent:=GridPanelLayout1;
       Align:=TAlignLayout.Client;
       Fill.Color:=Talphacolors.Red;
     end;
    with TRectangle.Create(Self) do
     begin
       Parent:=GridPanelLayout1;
       Align:=TAlignLayout.Client;
       Fill.Color:=Talphacolors.Blue;
     end;
    GridPanelLayout1.endUpdate;
    étrangement changer value dans la création de la ligne ne fonctionne pas mais si, par la suite les "tailles" sont modifiées ça fonctionne

    autre solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with GridPanelLayout1.RowCollection.Add do SizeStyle:=TGridPanelLayout.TSizeStyle.Absolute;
    with GridPanelLayout1.RowCollection.Add do SizeStyle:=TGridPanelLayout.TSizeStyle.Absolute;
    GridPanelLayout1.RowCollection[0].Value:=GridPanelLayout1.Height*30/100;
    GridPanelLayout1.RowCollection[1].Value:=GridPanelLayout1.Height*70/100;

  3. #3
    Membre chevronné 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
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,
    ça fait plaisir de lire que je ne suis pas le seul à tenter de créer des composants FMX.
    C'est vrai qu'on se sent un peu seul sur ce coup ..

    Citation Envoyé par SergioMaster Voir le message
    Je crois avoir déjà fait ça dans mes essais, il va me falloir faire des recherches dans les sources que j'ai pu récupérer.
    Ah, ce serait top si tu pouvais retrouver ça.

    Citation Envoyé par SergioMaster Voir le message
    La piste style est-elle envisageable ?
    Je ne me suis pas encore attaquée aux styles pour le moment. J'ai tendance à me servir du FMX comme d'un VCL multiplateforme

    Citation Envoyé par SergioMaster Voir le message
    étrangement changer value dans la création de la ligne ne fonctionne pas mais si, par la suite les "tailles" sont modifiées ça fonctionne
    J'avais aussi remarqué


    Citation Envoyé par SergioMaster Voir le message
    autre solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with GridPanelLayout1.RowCollection.Add do SizeStyle:=TGridPanelLayout.TSizeStyle.Absolute;
    with GridPanelLayout1.RowCollection.Add do SizeStyle:=TGridPanelLayout.TSizeStyle.Absolute;
    GridPanelLayout1.RowCollection[0].Value:=GridPanelLayout1.Height*30/100;
    GridPanelLayout1.RowCollection[1].Value:=GridPanelLayout1.Height*70/100;
    J'ai testé ton idée, mais c'est idem, le ratio n'est pas le bon.

    Je vais fouiller dans les sources du composant TGridPanelLayout pour comprendre ce qu'il fait quand on lui assigne une taille. On va bien finir par comprendre

    Et MERCI pour ta réponse !

  4. #4
    Membre chevronné 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
    Par défaut
    Bon, je crois que je suis sur le point de trouver.
    Il doit y avoir un truc du genre "RecalcSize" à désactiver le temps d'assigner les valeurs de taille.

    EDIT : suffit de l'écrire pour trouver la réponse
    FGridGenerale.BeginUpdate;
    FGridGenerale.RowCollection[0].Value := 30;
    FGridGenerale.RowCollection[1].Value := 70;
    FGridGenerale.EndUpdate;
    Quand on ne trouve pas tout de suite la solution, c'est qu'il est temps de faire une pause. Moi, j'ai mon hamac qui m'attend !

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Rôo évidemment dans la solution 2 j'avais oublié de remettre le beginupdate/endupdate mais dans la première c'était le cas (même s'il y avait les déchets du code inutile)
    'ai testé ton idée, mais c'est idem, le ratio n'est pas le bon.
    c'était plus qu'une idée puisque j'avais testé avant de fournir le code d'un autre côté c'était testé sur un TGridPanelLayout existant, je tentais de le faire sur un composant dérivé mais sans résultat probant

    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
    unit UnitCompoGridLayout;
     
    interface
    uses  System.Classes, System.Types, FMX.Controls, FMX.Layouts;
    type
     TMyGridPanelLayout = Class(TGridPanelLayout)
      private
        FPercentLigne2: Integer;
        FPercentLigne1: Integer;
     
        procedure SetPercentLigne1(const Value: Integer);
        procedure SetPercentLigne2(const Value: Integer);
      public
        constructor Create(AOwner: TComponent); override;
        procedure Resize(Sender : TObject);
        property PercentLigne1 : Integer read FPercentLigne1 write SetPercentLigne1;
        property PercentLigne2 : Integer read FPercentLigne2 write SetPercentLigne2;
     End;
     
    implementation
     
    { TMyGridPanelLayout }
     
    constructor TMyGridPanelLayout.Create(AOwner: TComponent);
    begin
       FPercentLigne1:=30;
       FPercentLigne2:=70;
       inherited;
       BeginUpdate;
        ControlCollection.Clear;
        RowCollection.Clear;
        ColumnCollection.Clear;
        ColumnCollection.Create(Self);
        with RowCollection.Add do SizeStyle:=TGridPanelLayout.TSizeStyle.Absolute;
        with RowCollection.Add do SizeStyle:=TGridPanelLayout.TSizeStyle.Absolute;
        RowCollection[0].Value:=Height*FPercentLigne1/100;
        RowCollection[1].Value:=Height*FPercentLigne2/100;
        OnResize:=Resize;
       EndUpdate;
    end;
     
    procedure TMyGridPanelLayout.Resize(Sender : TObject);
    begin
      Self.RowCollection[0].Value:=Self.Height*FPercentLigne1/100;
      Self.RowCollection[1].Value:=Self.Height*FPercentLigne2/100;
    end;
     
    procedure TMyGridPanelLayout.SetPercentLigne1(const Value: Integer);
    begin
     if Value<>FPercentLigne1 then
      begin
       FPercentLigne1 := Value;
       FPercentLigne2 := 100-Value;
      end;
    end;
     
    procedure TMyGridPanelLayout.SetPercentLigne2(const Value: Integer);
    begin
      if FPercentLigne2<>Value then
       begin
         FPercentLigne1:=100-Value;
         FPercentLigne2:=Value;
       end;
    end;
     
    end.
    Edit : l'erreur se trouve ligne 33 ColumnCollection.Create(Self); ColumnCollection.Add;

  6. #6
    Membre chevronné 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
    Par défaut
    Ah oui, je n'avais pas fait attention ! J'étais restée concentrée sur l'affectation.
    Merci pour ton aide

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/12/2011, 16h35
  2. [Joomla!] Cherche composant de gestion des accès des utilisateurs
    Par Alcius dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 20/07/2009, 10h45
  3. Réponses: 0
    Dernier message: 15/03/2008, 19h47
  4. Composant de Gestion des TabBar<=>Form
    Par saidus dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/08/2007, 19h36
  5. un composant de gestion des utilisateur pour joomla 1.0.12
    Par metrax dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 20/06/2007, 11h48

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