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 VCL Delphi Discussion :

Maximalisation d'une fiche+agrandissement des composants


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut Maximalisation d'une fiche+agrandissement des composants
    bonjour à tous,

    Dans une Form, j'ai plusieurs panels côte à côte. Quand je maximalise la Form, je voudrais que les panels se "dilatent" proportionnellement à la taille de la Form. J'ai essayé de jouer avec les paramètres Anchors et Align des TPanels, sans résultat satisfaisant.

    Comment fait-on ?


    Merci de votre coup de main.

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    normalement les propriétés Anchors et Align devraient suffire...
    C'est quoi qui ne te satisfait pas exactement?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    la propriété anchor permet de lier la composant à un endroit précis mais pas proportionnel.

    je pense qu'il faut mémoriser la taille de la form avant de maximaliser, calculer le ratio et l'appliquer aux propriétés left, top , width et Height de chaque composant.

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Oui pour ça, tu as l'évènement OnResize de la TForm dans lequel tu pourra retailler tous tes composants à ta guise
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut
    Salut bjl, salut Pedro204,

    Merci pour vos réponses rapides. Je pense que c'est la solution. J'essaie et je passe en résolu.

    A+

  6. #6
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    pour un panel sur une form:

    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
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    width:=screen.Width div 2;
    height:=screen.Height div 2;
    position:=poscreencenter;
    end;
     
     
     
    procedure TForm1.FormResize(Sender: TObject);
    begin
    with panel1 do begin
    Width:=Form1.clientwidth div 2 ;
    height:=form1.clientwidth div 2;
    top:=(form1.ClientHeight-width) div 2;
    left:=(form1.Clientwidth-width) div 2;
    end;
    end;
    onresize, ça suffit

  7. #7
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    amha
    Si tu veux faire une fonction générique de redimensionnement auto. de panels, il faut

    1. que tu répertories les panels ayant la proriétés align <> de alClient grace à la propriété Components et ComponentCount (et éventuellement Parent si tu veux faire ca uniquement pour un certain conteneur)

    2. Que tu stockes dans cette liste, la derniere dim. de ces composants

    3. qu'a chaque resize du conteneur, tu fasses le ratio entre nouvelle dim et ancienne dim, et que tu combine ce ratio au dim. de ta liste pour les affecters aux panels, PUIS mettre à jour la liste an so on...

    Je pense que c'est la bonne méthode, et qu'il ne faut pas stocker
    - ni les coords de positionnements
    - ni les dim. des panels en alClient
    Pour la bonne raison que le reste se repositionne tout seul rien qu'en changeant la dim de tes panels non alClient...
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  8. #8
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut Re: Maximalisation d'une fiche+agrandissement des composants
    en mettant 5 panels sur ta form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.FormResize(Sender: TObject);
    var i:integer;
    begin
    for i:=1 to 5 do begin
    with (FindComponent('panel'+Inttostr(i)) as TPanel) do begin
    width:=Form1.ClientWidth div 6;
    height:=Form1.ClientHeight div 2;
    top:=(Form1.ClientHeight-height) div 2;
    left:=(Form1.clientwidth-5*width) div 2+(i-1)*width;
    end;
    end;
    end;
    il n'y pas de quoi sortir l'artillerie lourde...

  9. #9
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    1. on ne sait pas s'il y a seulement 5 panels

    2. on a jamais dit que tous les panels avaient la même taille, on a juste dit 'redimensionnement proportionnel', c'est pas la même chose

    3. on ne sait pas s'il s'agit que de panels horizontaux

    4. en effectuant des calculs de ce style, on tombe forcément sur des panels pas bien 'collés' les uns aux autres, la dimensions finale n'étant pas forcément un multiple du nombre de panel

    5. on ne profite absulument pas des propriétés alClient, ce qui simplifie la vie pour bien coller les panels

    Donc entre Générique et (spécifique totalement figé), effectivement, il faut voir si le jeu en vaut la chandelle !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  10. #10
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    il est certain qu'il faudrait avoir davantage d'information...
    Pour 5 panels pas problème de décalage...
    c'est rare quand tu en mets 40 sur une largueur ou sur une hauteur !
    même avec des dimensions différentes, on peut arriver à faire un code condensé.
    En plus la form est liée à la screen dans le oncreate, sympa lors d'un changement de résolution.
    ceci dit, tu as raison, il est intéressant de mettre en oeuvre les propriétés alclient...c'est bien d'avoir plusieurs pistes à exploiter.

    Entre le Générique et (spécifique totalement figé) à voir.

  11. #11
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut
    Salut,

    Je vous livre le code que je viens de réaliser grâce à vos conseils. J'ai testé et ça semble convenir.

    Note: les variables Hauteur, Gauche, Sommet, Largeur sont des tableaux que j'ai dimensionnés à 10. C'est pas trés fin, on peut améliorer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     FormL := Form1.Width;
     FormH := Form1.Height;
    end;
    La procédure suivante est appelée dans le Activate
    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.CalculRatio;
    var i,j : integer;
    begin
     j:=0;
     for i:= 0 to ComponentCount-1 do
     begin
      if Components[i] is TPanel then
      begin
        j:= j+1;
        with (FindComponent('panel'+Inttostr(j)) as TPanel) do
        begin
          Hauteur[j]  := Height;
          Gauche[j]   := Left;
          Sommet[j]   := Top;
          Largeur[j]  := Width;
        end;
      end;
     end;
    end;
    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
     
    procedure TForm1.FormResize(Sender: TObject);
    var i,j  : integer;
    begin
     j:=0;
     RatioL := Form1.Width / FormL;
    //ShowMessage('Form1.W : '+inttostr(Form1.width)+' FormL : '+ inttostr(FormL)+' RatioL : '+ inttostr(RatioL));
     RatioH := Form1.Height / FormH;
     for i:= 0 to ComponentCount-1 do
     begin
      if Components[i] is TPanel then
      begin
        j:= j+1;
        with (FindComponent('panel'+Inttostr(j)) as TPanel) do
        begin
          Height := Round(Hauteur[j]*RatioH);
          Left     := Round(Gauche[j]*RatioL);
          Width  := Round(Largeur[j]*RatioL);
          Top     := Round(Sommet[j]*RatioH)
        end;
      end;
     end;
    end;
    Merci encore.
    A+

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

Discussions similaires

  1. Déploiement d'une application utilisant des composants BDE
    Par ZenZiTone dans le forum Bases de données
    Réponses: 0
    Dernier message: 15/09/2014, 13h51
  2. Réponses: 3
    Dernier message: 21/07/2009, 12h00
  3. Créer une fiche avec des procédures et fonctions
    Par ibrahim26 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/12/2008, 01h54
  4. [POO] recherche d'une fiche via des objets select
    Par 3psilOn dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/03/2008, 13h38
  5. Réponses: 4
    Dernier message: 09/10/2007, 09h00

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