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

Lazarus Pascal Discussion :

Modifier les dimensions d'un contrôle le modifie visuellement mais PAS les valeurs des propriétés


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut Modifier les dimensions d'un contrôle le modifie visuellement mais PAS les valeurs des propriétés
    (re-)Bonjour,

    la semaine commence mal :

    Nom : pnlcontainer_wrongheight.png
Affichages : 150
Taille : 30,2 Ko

    à gauche le mode design où l'on voit bien en gris moyen un TPanel classique posé sur le gris clair du fond de fiche (les deux bandes clCream sont des TPanels, respectivement alTop et alBottom, r-à-s) ;
    au milieu en exécution le TPanel est passé Align:=alClient, tel que le montre le code à droite.

    Mais le gag c'est les 2 TEdit en bas qui affichent la hauteur du TPanel avant puis après l'alignement et on voit bien que si le TPanel a bien graphiquement réagi à la demande d'alignement, le second TEdit affiche une valeur fausse, malgré deux demandes de mise à jour.
    Une autre à la place des deux, Form1.Update;, a le même comportement inefficace.

    Que faire pour qu'un code aussi simple daigne tomber en marche ?
    Parce que j'ai besoin de la vraie hauteur du TPanel pour y poser ensuite des choses et les y aligner correctement.

    Question subsidiaire : comment un comportement aussi farfelu est-il possible ?

    Le gag, c'est que si je rajoute ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      Caption:=inttostr(pnlContainer.Height);
    la valeur est bonne !

    Mais ça ne m'arrange pas du tout de passer la création des composants dans FormActivate…
    Une idée ?
    Merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 966
    Points
    6 966
    Par défaut
    Le pb ne serait pas que l'ordre de changement d'alignement prend plus de temps (ou est légèrement différée) ?
    Ce qui fait qu'à la fin de ton FormCreate, le changement n'est pas encore fait, comme le voit Edit2.
    Par contre, après le Show ou Activate, c'est fait. Donc, l'affichage est bon.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par Lung Voir le message
    Le pb ne serait pas que l'ordre de changement d'alignement prend plus de temps (ou est légèrement différée) ?
    Ce qui fait qu'à la fin de ton FormCreate, le changement n'est pas encore fait, comme le voit Edit2.
    Sans doute, mais je pensais, là aussi naïvement, que si on avait besoin de la valeur, par exemple avec la demande d'affichage dans le TEdit, le système se speederait de mettre les data à jour.

    Résultat des courses : un bout de code dupliqué, de FormCreate vers FormResize, pas droit à l'erreur, là !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut,
    j'avais eu un problème similaire. Le truc c'est que le formCreate est appelé lors de la création de la form. Effectivement les valeurs ne sont pas mise a jour lorsque tu définis la propriété align dedans.

    De même que le update et que le application.processmessages ne servent à rien ici car le processus de création de ta form principale n'ai pas finie. L'affichage n'est pas encore effectué.

    Les données sont mises à jour en 1er lors du onResize, puis le OnShow (ou l'inverse, je ne me souviens plus de l'ordre exacte), puis le onActivate si je me souvient bien. Le mieux est de placer ton panel1.align et/ou Edit2.text:=inttostr(pnlContainer.Height); dans le onShow ou onActivate

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Yep !

    (pas au point, le suivi en temps réel des réponses dans le forum : il a dû y a voir une modif qqpart et maintenant ça fonctionne mal, d'où mon retard à répondre…)

    Citation Envoyé par BeanzMaster Voir le message
    Les données sont mises à jour en 1er lors du onResize, puis le OnShow (ou l'inverse, je ne me souviens plus de l'ordre exacte), puis le onActivate si je me souvient bien. Le mieux est de placer ton panel1.align et/ou Edit2.text:=inttostr(pnlContainer.Height); dans le onShow ou onActivate.
    Pour l'ordre :
    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
    procedure TForm1.FormCreate(Sender: TObject);// 1
    begin
      Memo1.Lines.Add('create');
    end;
     
    procedure TForm1.FormResize(Sender: TObject);// 2
    begin
      Memo1.Lines.Add('resize');
    end;
     
    procedure TForm1.FormShow(Sender: TObject);// 3
    begin
      Memo1.Lines.Add('show');
    end;
     
    procedure TForm1.FormActivate(Sender: TObject);// 4
    begin
      Memo1.Lines.Add('activate');
    end;
     
    procedure TForm1.FormPaint(Sender: TObject); // 5
    begin
      Memo1.Lines.Add('paint');
    end;
    et ça a donné ça dans le TMemo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create
    resize
    show
    activate
    paint
    paint
    ...
    avec gtk2.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

Discussions similaires

  1. [PowerShell] déterminer les valeurs des propriétés d'un objet
    Par laurentSc dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 24/04/2017, 17h45
  2. [Débutant] Récupérer les valeurs des propriétés d'une liste d'Object via la Reflexion
    Par zest dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 15/11/2016, 20h49
  3. Modifier les valeurs des propriétés d'un sélecteur
    Par marcel marie dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 02/03/2015, 19h19
  4. rafraichir les valeurs des propriétés inserées
    Par akkeri dans le forum VBA Word
    Réponses: 1
    Dernier message: 14/12/2007, 23h58
  5. Lire un fichier Excel pour modifier les valeurs des cellules
    Par Paloma dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/10/2006, 15h13

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