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 :

Retailler mon GridLayout selon la taille de la fenêtre


Sujet :

Composants FMX Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut Retailler mon GridLayout selon la taille de la fenêtre
    Bonjour,

    j'ai horreur du gaspillage et donc lorsque je propose d'éditer des étiquettes je demande à l'utilisateur d'indiquer les étiquettes déjà utilisée sur la première feuille
    Nom : Capture.PNG
Affichages : 220
Taille : 17,0 Ko

    avec VCL il n'y avait pas trop le choix de taille mais mon portage de cette unité vers FMX rend la chose plus "sympathique"
    Voilà le source à peine censuré et ce sera encore plus sympathique quand des propriétés s'y ajouteront
    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
    unit FeuilleEtiquettes;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      System.Math,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
      FMX.Edit, FMX.EditBox, FMX.SpinBox, FMX.MultiView, FMX.Layouts,
      FMX.Controls.Presentation, FMX.Objects;
     
    type
      TForm1stPage = class(TForm)
        Feuille: TGridPanelLayout;
        Header: TLayout;
        btnMenu: TButton;
        MultiView1: TMultiView;
        Colonnes: TSpinBox;
        Lignes: TSpinBox;
        btnRedraw: TButton;
        lblColonnes: TLabel;
        lblLignes: TLabel;
        Hauteur: TSpinBox;
        Largeur: TSpinBox;
        lblLargeur: TLabel;
        lblHauteur: TLabel;
        GroupEtiquettes: TGroupBox;
        GroupFeuille: TGroupBox;
        Footer: TLayout;
        btnOk: TButton;
        procedure MultiView1Shown(Sender: TObject);
        procedure btnRedrawClick(Sender: TObject);
        procedure MultiView1Hidden(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormResize(Sender: TObject);
        procedure btnOkClick(Sender: TObject);
      private
        { Déclarations privées }
        procedure Drawlabels(Cols, Lines : word);
        procedure Zoom;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1stPage: TForm1stPage;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm1stPage.btnOkClick(Sender: TObject);
    begin
    ModalResult:=mrOk;
    end;
     
    procedure TForm1stPage.btnRedrawClick(Sender: TObject);
    begin
     MultiView1.HideMaster;
    end;
     
    procedure TForm1stPage.Drawlabels(Cols, Lines: word);
    var c,l,n : word;
        APanel : TPanel;
    begin
     Feuille.BeginUpdate;
     Feuille.Height:=Trunc(Hauteur.Value);
     Feuille.Width:=Trunc(Largeur.Value);
     Zoom;
     Feuille.ControlCollection.Clear;
     Feuille.RowCollection.Clear;
     Feuille.ColumnCollection.Clear;
     for l := 1 to cols do
       begin
        With Feuille.ColumnCollection.Add do
         begin
           SizeStyle:=TGridPanelLayout.TSizeStyle.Percent;
           Value:=100 / Cols
         end;
       end;
     for  c:= 1 to Lines do
       begin
        With Feuille.RowCollection.Add do
         begin
           SizeStyle:=TGridPanelLayout.TSizeStyle.Percent;
           Value:=100 / Lines;
         end;
       end;
     
     for n := 1 to cols*lines  do
      begin
        APanel:=TPanel.Create(Self);
        Apanel.StyleLookup:='Etiquette';
        Apanel.Parent:=Feuille;
        Apanel.Align:=TALignLayout.Client;
        Feuille.ControlCollection.AddControl(Apanel,-1,-1);
      end;
     
     Feuille.EndUpdate;
     
    end;
     
    procedure TForm1stPage.FormCreate(Sender: TObject);
    begin
    Hauteur.Value:=297;
    Largeur.Value:=210;
    Lignes.Value:=7;
    Colonnes.Value:=3;
    DrawLabels(3,7);
    end;
     
    procedure TForm1stPage.FormResize(Sender: TObject);
    begin
    Zoom;
    end;
     
    procedure TForm1stPage.MultiView1Hidden(Sender: TObject);
    begin
     DrawLabels(Trunc(Colonnes.Value),Trunc(Lignes.Value));
    end;
     
    procedure TForm1stPage.MultiView1Shown(Sender: TObject);
    begin
    Feuille.BeginUpdate;
    Feuille.ControlCollection.Clear;
    Feuille.RowCollection.Clear;
    Feuille.ColumnCollection.Clear;
    Feuille.EndUpdate;
    end;
     
    procedure TForm1stPage.Zoom;
    var factor : Single;
    begin
    Factor:= (ClientHeight-Header.Height-Footer.Height-20)/Hauteur.Value; // Hauteur
    Factor:=Min((ClientWidth-20)/Largeur.Value,factor); // largeur
    Feuille.Scale.x:=Factor;
    Feuille.Scale.y:=Factor;
    end;
     
    end.
    Ma question : Pour l'instant, je garde les proportions d'une page A4 (modifiable) grâce à la procédure zoom mais n'y aurait-il pas un moyen de garder les proportions autrement (à grand renfort de Align, et Layouts) ?
    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

  2. #2
    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
    Je ne peux que te suggérer d'empiler ta grille dans un layout qui serait en alignement client dans lequel tu aurais ta grille en center.

    Par contre à toi de gérer la taille de la grille et ses proportions. Ensuite, ton zoom en X+Y peut déborder ou rester dans la zone, peu importe.

    Et comme c'est FMX, pas besoin d'avoir des cases à cocher dans les cellules de la grille, tu peux directement dessiner l'une de tes étiquettes, en faire un screenshot et dupliquer ce bitmap dans des glyph mis sur les cases de ta grilles, avec un style qui ajoute une croix sur la case quand tu ne veux pas imprimer celle-ci par exemple.

    Gros avantage de FMX par rapport à VCL c'est qu'on n'a pas que Tag en Integer, on en a d'autres.

    Mais j'suis pas certain de pas répondre à côté de ta question.

Discussions similaires

  1. [XL-2007] redemensionner mon image selon la taille de l'ecran
    Par vincent59139 dans le forum Excel
    Réponses: 1
    Dernier message: 19/10/2013, 04h29
  2. Réponses: 3
    Dernier message: 01/02/2007, 21h05
  3. Réponses: 6
    Dernier message: 12/01/2007, 20h10
  4. Taille d'une cellule qui varie selon la taille d'un mot
    Par shadeoner dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/08/2006, 22h42
  5. Afficher un element selon sa taille en centimetre
    Par dacid dans le forum Delphi
    Réponses: 8
    Dernier message: 24/07/2006, 14h51

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