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 :

Alignement des composants


Sujet :

Delphi

  1. #1
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut Alignement des composants
    Bonjour!

    Je travaille sur un projet qui est déployé sur des postes Win2000, WinXP et WinVista. J'ai mis beaucoup d'énergie à faire s'afficher mes composants correctement sous Windows 2000 (j'aime que les interfaces soient propres) à l'aide des propriétés Align et Anchor.

    Je suis persuadé que beaucoup d'entre vous avez le même problème que moi : quand on place un bouton en bas à droite d'une fiche avec les Anchor à [akRight,akBottom], le thème WinXP, avec ses bordures de fiches plus grandes, fait en sorte que le bouton dépasse la fiche (le composant passe par dessus la bordure). C'est encore plus évident sous Vista.

    En fait, je me doute bien d'où vient le problème. Puisque le composant est aligné par sa position Top-Left, il ne sait pas que la surface parente est soudainement plus petite.

    Pour l'instant, j'ai multiplié l'utilisation des propriétés Align (cette propriété ne semble pas affectée par le problème) et j'ai recodé moi même tout plein de routines qui replacent mes composants sur le OnResize des Panels sur lesquels ils sont placés. Je vous laisse imaginer la charge de travail supplémentaire (et tout le travail d'argumentation à faire quand vient le temps d'assigner cette tâches aux autre programmeurs de l'équipe).

    Est-ce que quelqu'un a truc facile à me proposer ?

    Merci!

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par slimjoe
    Je suis persuadé que beaucoup d'entre vous avez le même problème que moi : quand on place un bouton en bas à droite d'une fiche avec les Anchor à [akRight,akBottom], le thème WinXP, avec ses bordures de fiches plus grandes, fait en sorte que le bouton dépasse la fiche (le composant passe par dessus la bordure).
    +1, c'est d'un pénible !!!
    Citation Envoyé par slimjoe
    C'est encore plus évident sous Vista.
    Ha ? flute
    Citation Envoyé par slimjoe
    En fait, je me doute bien d'où vient le problème. Puisque le composant est aligné par sa position Top-Left, il ne sait pas que la surface parente est soudainement plus petite.
    Et encore, je pense qu'il y a du code pas super bon dans la VCL...
    Il n'y a qu'a voir comment se comporte un composant avec un alignement alclient
    C'est la fête à la scrollbar...
    Citation Envoyé par slimjoe
    Pour l'instant, j'ai multiplié l'utilisation des propriétés Align (cette propriété ne semble pas affectée par le problème) et j'ai recodé moi même tout plein de routines qui replacent mes composants sur le OnResize des Panels sur lesquels ils sont placés. Je vous laisse imaginer la charge de travail supplémentaire (et tout le travail d'argumentation à faire quand vient le temps d'assigner cette tâches aux autre programmeurs de l'équipe).

    Est-ce que quelqu'un a truc facile à me proposer ?

    Merci!
    Moi aussi, je suis preneur

  3. #3
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    amha anchor se base sur les coordonnées du composant en mode design, modulé par les delta deplacements a chaques affectation de Width/height :

    Delta := NewWidth - OldWidth;
    Compo.left := Compo.left +/- Delta.

    Du coup effectivement ca ne tiendrais pas compte des changements de bordure.

    Pour moi, 2 methodes s'offre a toi :
    • Creer des composants derivé surchargeant les methodes adequates pour corriger le tir
    • Basculer en mode dynamique et positiopnnement a l'aide de ClientWidth/ClientHeight


  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Tous les "Anchor" devraient pouvoir être remplacés par des panels imbriqués avec les bons "Align".

  5. #5
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par Graffito
    Bonjour,

    Tous les "Anchor" devraient pouvoir être remplacés par des panels imbriqués avec les bons "Align".
    AH! Si seulement c'était possible .

    Y'a pas de Align sur un TButton. (Je me trompe ?)

    Comme je l'ai expliqué plus tôt, j'ai déjà corrigé la plupart de mes problèmes avec le Align de plusieurs Panels imbriqués mais il me reste toujours celui de mes boutons en bas à droit de mes écrans... Si je pouvais les mettre Align := alRight dans un Panel séparé par des TBevel de style bvSpacer ça serait super!


  6. #6
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par slimjoe
    Y'a pas de Align sur un TButton. (Je me trompe ?)

    Ah ha!

    Ben oui, elle existe la propriété! Elle est juste cachée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    type
       TMyButton = class(TButton)
       public
          property Align;
       end;
     
    procedure TFMain.btn1Click(Sender: TObject);
    begin
       TMyButton(Sender).Align := alRight;
    end;
    Merci pour le truc!

    Me reste à voir comment intégrer ça dans le code...

  7. #7
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    trop fort la propriété align du bouton

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Graffito :Tous les "Anchor" devraient pouvoir être remplacés par des panels imbriqués avec les bons "Align".
    Slimjoe:AH! Si seulement c'était possible
    Indépendamment de la soluce proposée sur le Tbutton, on crée un Panel contenant le Button (sans Align, ni Anchor) et on joue sur la propriété Align de ce Panel.

  9. #9
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par Graffito
    Indépendamment de la soluce proposée sur le Tbutton, on crée un Panel contenant le Button (sans Align, ni Anchor) et on joue sur la propriété Align de ce Panel.
    Salut!

    C'est vrai que c'est plus intelligent comme tu le proposes. Les solutions les plus simples sont les plus efficaces!

    Mais que fais tu des TEdit qui doivent s'étirer en largeur? Présentement, j'utilise les Anchors [akLeft,akTop,akRight] mais j'ai toujours ce problème où ils dépassent ma fiche en XP.

    Merci!

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

Discussions similaires

  1. probleme avec alignement des composants
    Par riadhhwajdii dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 12/10/2009, 10h26
  2. Alignement des composants
    Par jimbolelephan dans le forum C#
    Réponses: 3
    Dernier message: 10/07/2008, 17h39
  3. alignement des composants
    Par naazih dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 22/03/2007, 17h18
  4. Réponses: 2
    Dernier message: 31/10/2006, 08h51
  5. [swing][debutant] alignement des composants
    Par melvar dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 10/03/2006, 13h21

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