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 :

Hauteur de la zone de saisie effective


Sujet :

Composants VCL Delphi

  1. #1
    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 Hauteur de la zone de saisie effective
    Salut à tous

    Voila, je cherche à récupérer, dans un TEdit, la hauteur de la zone de saisie. Je m'explique:
    Si vous mettez un TEdit sur une fiche, exécutez et écrivez du texte. Sélectionnez ensuite la totalité ou quelques caractères, vous remarquerez que cette "bande" de sélection a une hauteur différente de celle de la police quelque soit ce qu'il y a d'écrit.
    Je cherche à trouver cette hauteur à l'exécution!
    En d'autres termes, trouver la hauteur du caret!

    Merci d'avance
    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

  2. #2
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Si ton problème est d'obtenir la hauteur de la sélection courante, je ne crois pas que ce soit possible. Windows ajuste cette hauteur en fonction de la police de caractères courante, et je n'ai pas vu de fonction pour ça non plus.

    http://msdn.microsoft.com/en-us/libr...68(VS.85).aspx

    Tu peux toujours essayer de modifier la hauteur du caret en rusant avec CreateCaret, mais tu ne pourras que changer l'apparence du curseur, je ne crois pas que ça changera quelque chose à la hauteur de la sélection... enfin, pas testé... à voir.

  3. #3
    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
    Justement, je ne cherche pas à le modifier mais bien à récupérer sa hauteur.
    Bon bah va encore falloir ruser A moins que quelqu'un ait une solution?
    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

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut Pedro

    En examinant la procédure AdjustHeight de TCustomEdit, je pense qu'on peut s'en sortir comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function GetCaretHeight(AEdit: TEdit): Integer;
    var
      I: Integer;
    begin
      if AEdit.Ctl3D then
        I := 8
      else
        I := 6;
      I := GetSystemMetrics(SM_CYBORDER) * I;
      Result := AEdit.Height - I;
    end;
    @+ Claudius

  5. #5
    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 Cl@udius

    Merci pour ta réponse

    Ton code ne fonctionne (la hauteur renvoyée n'est pas bonne) pas en revanche, cela me donne une sérieuse piste à suivre!
    Je vais essayer de fouiller dans ce sens-là!
    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

  6. #6
    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
    J'ai trouvé
    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
     
    function GetCaretHeight(aEdit: TCustomEdit): integer;
    var
      DC: HDC;
      SaveFont: HFONT;
      aFont: HFONT;
      Metrics: TTextMetric;
    begin
      DC := GetDC(0);
      try
        aFont := SendMessage(aEdit.Handle, WM_GETFONT, 0, 0);
        SaveFont := SelectObject(DC, aFont);
        GetTextMetrics(DC, Metrics);
        SelectObject(DC, SaveFont);
      finally
        ReleaseDC(0, DC);
      end;
      Result := Metrics.tmHeight;
    end;
    Voila
    Merci Cl@udius de m'avoir mis sur la voie
    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

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Cela ramène la hauteur de la Font, ou bien est-ce plus subtil ?

  8. #8
    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
    J'ai bien l'impression que c'est plus subtil: Dans mon exemple, j'ai une Font Arial à 12 et il me renvoie... 18 Ce qui correspond exactement à la hauteur de la zone de sélection et du caret.
    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

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Pedro Voir le message
    J'ai bien l'impression que c'est plus subtil
    Exact cela tient compte du talus interne.
    A noter que ta fonction renvoie la valeur de la propriété Font.Height si celle-ci est positive car dans ce cas Height contient le talus.

    @+

  10. #10
    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
    Citation Envoyé par Cl@udius Voir le message
    Exact cela tient compte du talus interne.
    A noter que ta fonction renvoie la valeur de la propriété Font.Height si celle-ci est positive car dans ce cas Height contient le talus.
    Tu en es sûr? J'ai pourtant essayé avec un Edit Flat (BevelInner à bvNone, BevelKind à bkFlat et BorderStyle à bsNone en laissant BevelWidth à 0), on a encore la bonne valeur
    De toutes, façons, je n'ai jamais utilisé de Font.Height positive. A vrai dire, je ne savais même pas que c'était possible J'utilise systématiquement Font.Size.
    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

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Font.Size est la dimension de la fonte en point.
    Font.Height est celle exprimée en pixel.

    Ces 2 propriétés sont toujours de signe opposé.

    Si Height est positif, ce fameux talus est pris en compte. (visiblement de 2 pixels).

    Quant à BevelInner, BevelKind, etc..., ceux-ci n'ont pas d'impact sur la taille de la police (et donc du caret) mais uniquement sur la hauteur du contrôle.

  12. #12
    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
    Citation Envoyé par Cl@udius Voir le message
    Font.Size est la dimension de la fonte en point.
    Font.Height est celle exprimée en pixel.

    Ces 2 propriétés sont toujours de signe opposé.

    Si Height est positif, ce fameux talus est pris en compte. (visiblement de 2 pixels).
    Merci pour ces infos
    Citation Envoyé par Cl@udius Voir le message
    Quant à BevelInner, BevelKind, etc..., ceux-ci n'ont pas d'impact sur la taille de la police (et donc du caret) mais uniquement sur la hauteur du contrôle.
    Je dirais plutôt sur la taille de la zone cliente
    Enfin, quoi qu'il en soit, ma méthode fonctionne pour ce que je veux en faire
    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

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Pedro Voir le message
    Je dirais plutôt sur la taille de la zone cliente
    Exact, l'impact en premier lieu sur la zone cliente.

    Citation Envoyé par Pedro Voir le message
    Enfin, quoi qu'il en soit, ma méthode fonctionne pour ce que je veux en faire
    Re-exact, elle marche nickel, quelque soit le signe de Size et Height.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/01/2006, 00h08
  2. Réponses: 4
    Dernier message: 22/12/2005, 16h46
  3. Réponses: 4
    Dernier message: 31/10/2005, 18h37
  4. [FLASH MX2004] Zone de saisie avec scrollbar
    Par carlito dans le forum Flash
    Réponses: 3
    Dernier message: 29/11/2004, 14h30
  5. explo de BD : zone de saisie SQL invisible dans
    Par sebitor dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/03/2004, 17h39

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