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

Delphi Discussion :

Redimensionnement TFrame TPanels


Sujet :

Delphi

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut Redimensionnement TFrame TPanels
    Salut,
    Je dois réaliser une application professionnelle (ma première en delphi) et j'ai quelques difficultés avec le redimensionnement. Par exemple, j'ai une frame avec un panel contenant lui-même deux panel (plus un splitter au milieu). Je voudrais que lorsque l'on resize la frame, mes deux panels (panel2 et panel3) ainsi que mon splitter soient redimensionnés de façon à avoir toujours le même rendu visuel. Actuellement ce n'est pas le cas (cf image).

    J'ai vu qu'on pouvait utiliser la fonction ScaleBy. J'ai essayer de l'apliquer sur l'évènement onResize (m=3, d=4) de ma frame principale, mais le problème c'est que j'observe un redimensionnement permanent et pas seulement lors du resize.

    Quelqu'un peut-il m'aider ?
    Merci.
    Nom : scroll.PNG
Affichages : 129
Taille : 17,7 Ko

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 154
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 154
    Par défaut
    Yep !

    redimensionnement permanent
    Kess tu veux dire, là ?

    Sinon, en regardant tes copies d'écran, on voit tout de suite que ton premier panel (container des 2 autres) devrait être "Align := alClient"

    Mes 2 cts,
    --
    jp

  3. #3
    Membre Expert
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Par défaut
    Décidement Krokmitaine se bat avec les panels aujourd'hui...
    Comme le dit Jipété tu doit jouer avec la propriété Align de ton panel qui contient le 2 autres. Et sinon si ce panel est déjà en Align Alcient il faut peut être jouer avec les porpiétés Anchors des tes composants.

  4. #4
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Align et Anchor les 2 propriétés qu'il faut utiliser pour organiser ses composants sur la fiches.

    Par contre, dans ton cas, 2 mémos, il faut choisir celui qui va s'étirer en largeur. Il n'y a pas de anchor "proportionnel" comme en Java

    ou alors gérer toi même l'étirement proportionnel... mais le faire si c'est vraiment indispensable, sinon, c'est pas mal de code et souvent moyennement maintenable.
    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 ;-)

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    bon, ce que j'ai fait c'est que j'ai mis mon panel1 (le container) en alClient et les panel2 et panel3 en alCustom avec toutes les propriétés anchor à true. Le problème c'est que lors du redimensionnement l'espace entre panel2 et panel3 varie lui aussi alors que je désirerai qu'il reste comme je l'ai défini au départ.

    Nom : scroll2.PNG
Affichages : 116
Taille : 26,4 Ko

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    En fait j'ai pensé à mettre panel2 et panel3 en alLeft mais le problème c'est que les bordures disparaissent sur le côté et en bas. Je pourrais régler ça en incluant panel1 dans un autre panel mais là ça commence à faire beaucoup de panels imbriqués pour pas grand chose ... en plus le boss veut que sa tourne vite, évidemment !

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Bah fait du Java alors

    plus sérieusement, ca revient à ce que j'ai cité plus haut.
    Les ancres 'Anchors', changent le dimensionnement dans la même mesure que l'étirement du container.

    La tu cherches à étirer de manière équitable, Panel2 et Panel3
    Par exemple, si l'étirement global est de 50 pixels, tu souhaites étirer Panel2 de 25 et Panel3 de 25... c'est ca ?

    Dans ce cas, ce n'est pas possible directement.
    Ce sera soit Panel 2 qui va s'étirer de 50 et Panel3 de 0 (mais qui pourra suivre à droite avec une ancre gauche à true)
    Soit, Panel2 qui restera fixe et Panel3 qui s'étirera de 50.

    Fais plusieurs tests, avec UN seul panel, et en jouant avec les align et Anchor pour bien comprendre le fonctionnement...

    PS: sinon il faut faire les étirement par code avec des proportions... et définir manuellement (ou semi manuellement en complétant avec des ancres et des align) les largeurs
    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
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 154
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 154
    Par défaut
    Tu vires tes histoires d'anchor et de alCustom, puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    panel_gauche.Align := alLeft;
    panel_droite.Aligne := alClient;
    splitter1.ResizeStyle := rsUpdate;
    et sur l'événement OnMoved du splitter tu vas gérer la largeur du panel_gauche et ça devrait le faire. Moi c'est par là que je chercherais.
    --
    jp

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Je ferais presque pareil

    Sans le splitter, et sur le OnResize de la form (ou du container), changer le width du panelgauche (qui peut être un pourcentage de la largeur du container)
    Dans ce cas precis, cela suffit.
    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 confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    TicTacToe:
    Bah fait du Java alors
    Mais ce serait mon rêve de retourner à java !!! ...

    Jipété, j'ai esayé et ça se rapproche très fortement de ce que je veux faire mais le problème c'est que je perds les bordures bleu clair. Je vais encore chercher un peu et si vraiment je ne trouve pas je m'arrangerai avec ta solution ou alors je bloquerai le resize de l'appli car là je commence à en avoir plein la tête .

  11. #11
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 154
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 154
    Par défaut
    c'est que je perds les bordures bleu clair
    Ah, j'avais pas vu ça.

    Donc, un panel_MainContainer avec un fond bleu clair et alClient, qui va contenir un panel_Container un peu plus petit et qui n'est pas alClient, et qui contient les deux autres.
    Et sur le FormResize tu vas redimensionner ce panel_Container.
    Et voilou !
    --
    jp

  12. #12
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    Je suis devant TForm1.FormResize(...) mais je sais pas du tout quoi mettre. Ensuite panel_gauche et panel_droite sont toujours à alLeft et alClient ? Et le splitter il est bien en alLeft ?

    Je sais ça fait beaucoup de questions .

    Merci pour votre aide

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    Comme quoi l'expérience ça paye : mon cher patron (Laurent Letourmy, l'un des experts Delphi en France) vient d'arriver, il m'a écouté 12 secondes, il a regardé 4 secondes, il a fait un clic et deux double-clic et voilà le problème plié !

    Bon pour ceux qui voudraient connaître la solution :
    J'ai un panel principal paMainContainer pour les bordures bleu en alClient. Dessus je pose un panel container paContainer en alNone, avec toutes ses Anchors à True. Dedans paContainer je mets un panel gauche paLeft en alLeft, un splitter en alLeft, et un panel droite paRight en alClient. Et voilà !!!

    Nom : scroll3.PNG
Affichages : 116
Taille : 18,8 Ko

  14. #14
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 154
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 154
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormResize(Sender: TObject);
    begin
      panel2.Height := panel1.Height - (panel2.top * 2);
      panel2.Width  := panel1.Width - (panel2.top * 2);
      panel3.Width := panel2.Width div 3; // petite proportionnalité rapide
    end;
    panel1 c'est le main_container
    panel2 c'est le container des 2 autres
    panel3 c'est la panel de gauche

    [edit]
    pour ceux qui voudraient connaître la solution
    Ben, cest pas ce que j'ai dit 2 ou 3 posts plus bas ?[/edit]
    --
    jp

  15. #15
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    Jipété, merci mais t'arrives juste quelques secondes trop tard. Quoiqu'il en soit j'ai testé ta méthode et le résultat est le même que celui de ma solution. Je te remercie pour tout le temps que tu as bien voulu m'accorder et les autres aussi.
    Un grand MERCI à vous !!!

    Ben, cest pas ce que j'ai dit 2 ou 3 posts plus bas ?
    +1 pour toi Jipété si en grande partie

  16. #16
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 108
    Par défaut
    Content que tu arrives a des résultats...

    Der§en.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/03/2013, 16h50
  2. Quel composant choisir (TFrame, TPanel, ou autre)
    Par mat1554 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 30/07/2010, 09h13
  3. redimensionnement d'une JWindow
    Par mbp566 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 02/08/2002, 03h41
  4. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40
  5. Redimensionnement d'une surface
    Par Freakazoid dans le forum DirectX
    Réponses: 4
    Dernier message: 01/07/2002, 22h01

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