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 :

Tedit et AutoSize


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut Tedit et AutoSize
    Bonjour,

    Je cherche à déterminer "automatiquement" (et dynamiquement) la largeur nécessaire d'un TEdit contenant le texte 00:00:00 AM. (Le AM ne sert à rien... mais l'ensemble des caractères choisis me donne la largeur max. du TEdit). Evidemment la largeur dépend de la police utilisée, de l'OS...

    La propriété Autosize ne sert pas à cela...

    Citation Envoyé par Lazrus bug tracker
    AutoSize:
    http://wiki.lazarus.freepascal.org/A...ayout#AutoSize [^]
    Only the Height of a TEdit is autosized. You can freely resize the Width.
    Recently there was a bug for a few days in the svn version that prevented resizing the Width. Maybe you were unlucky and tested that version?

    Réf: http://bugs.freepascal.org/view.php?id=16839]About
    Pour l'instant, j'essaie d'utiliser un Tlabel en Autosize que je voudrais configurer dans la même police que le TEdit (Label1.Font := Edit1.Font)... Ensuite, il faut gérer les espaces des bords latéraux... et c'est là qu'est le problème. par défaut les BorderSpacing dans l'inspecteur des TEdits sont tous nuls... Or évidemment, ils ne le sont pas... Il s'agit donc des BorderSpacing supplémetntaires... mais supplémentaires de quels intervalles initiaux et définis où ?

    A moins qu'il n'y ait plus simple ?

    Cordialement. Gilles
    Dernière modification par Invité ; 11/09/2010 à 12h41.

  2. #2
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit.ClientWidth := Edit.Canvas.TextWidth ('00:00:00 AM')
    devrait le faire...

    Mais pourquoi veux-tu refaire un composant qui existe déjà ?
    Ce n'est pas le boulot qui manque ailleurs !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est vrai que depuis la rentrée, j'ai moins de temps... De quel composant parlez-vous ?

    Pour votre proposition, je ne vois pas comment utiliser la propriété canvas dans ce cas [ie dans le TEdit]. Edit.canvas ? J'arrive bien à placer le texte dans un TControlCanvas, cela me donne le même résultat [écart de 1 (62/63)] que la largeur du TLabel mais ce sera insuffisant pour l'afficher intégralement dans le TEdit à cause de ses marges internes par défaut... Evidemment, on peut rajouter une lettre (PMA au lieu de PM) ou même directement un intervalle (+10 sous Windows dans mon cas)... Pourquoi 10 ???
    Cela semble fonctionner que je sois en affichage 00:00 AM ou 00:00:00 AM.

    Sinon ce n'est pas la première fois que je butte sur ce type de composants...
    Un jour il faudra bien que j'arrive à en faire un... Le codage "spaghetti" dans les Form... pfff... Par exemple : J'initialise classiquement mes variables dans la FormCreate sauf qu'un code comme ceci ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TFormMain.FormCreate(Sender: TObject);
    begin
     [...]
     Label2.Font := edHeureAPARTIR.Font;
     if bSec = True then Label2.Caption := '00:00:00 AM' else Label2.Caption := '00:00 AM';
     Label2.AutoSize := True;
     Label2.Refresh;
     Showmessage(IntToStr(Label2.Width));
     edHeureAPARTIR.Width:=label2.Width+10;
    end;
    La valeur renvoyée est la Width relative au Caption de l'Inspecteur d'objet... même si par code vous la réactualisez... Le Form.Show n'a pas eu lieu... Et donc, il faut continuer l'initialisation dans le FormShow... à moins d'utiliser dans le create un LabelShort et un LabelLong dont les Captions sont initialement déclarés dans l'inspecteur d'objet (comme 00:00 AM et 00:00:00 AM) . Avec un composant visuel, ce genre de 'circonvolution' n'est pas nécessaire...

    Merci pour votre aide.
    Cordialement. Gilles
    Dernière modification par Invité ; 11/09/2010 à 14h26.

  4. #4
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    De quel composant parlez-vous ?
    Je pense au paquet ZVDateTimeControls

    Ce qui me serait utile serait la possibilité de spécifier des dates relatives, genre Jour J, premier et dernier jour du mois ou de l'année, courante, ou précédent(e)...

    je ne vois pas comment utiliser la propriété canvas
    Je ne saisis pas. Ce que je propose ne nécessite ni TLabel, ni TControlCanvas...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Désolé,

    j'étais encore en train de bricoler la réponse du dessus.

    Oui je disais "edit.canvas", cela ne passe pas... ou je pratique mal...

    Pour le composant, je l'ai installé... C'est probablement une bonne solution.

    Mais comme présentement, je ne suis pas en production, j'ai le temps d'apprendre et de bricoler...

    Je pars du principe que "coder" un composant que ce soit dans la Form et dans son propre code pour l'adapter à ses besoins doit nécessiter un temps équivalent... à condition d'avoir les capacités équivalentes dans les 2 approches. Ce qui n'est pas mon cas actuellement. Mais déjà, pour ce que j'en connais et ai appris, je suis convaincu que la réutilisation d'une part et surtout le "codage dans sa propre enveloppe" d'autre part du composant sont supérieures... Tout autant que l'utilisation de librairies dynamiques.

    Cordialement.
    Gilles
    Dernière modification par Invité ; 11/09/2010 à 14h39.

  6. #6
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Eh bien, avec ton code ce serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    edHeureAPARTIR.Width := edHeureAPARTIR.Canvas.TextWidth('xxx');
    Pour le reste, c'est vrai qu'on apprend en refaisant, c'est comme tu veux !

Discussions similaires

  1. TEdit - Popup par défaut
    Par dugenou dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/06/2004, 11h18
  2. Curseur d'un TEdit
    Par Guile dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/05/2003, 18h33
  3. TEdit (encore)
    Par dj.motte dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/12/2002, 19h02
  4. [TEdit][TListBox]Recherche instantanée
    Par SamDaKap dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/11/2002, 21h31
  5. TEdit : selection du texte et autre fonction
    Par Odulo dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/08/2002, 14h27

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