Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Existe-t-il une option, un moyen simple de limiter le nombre de lignes saisies dans un multiline edit ?
Pour ma part je fais un contrôle a posteriori du type :
Integer i, li_count = 0 i = Pos(mle_saisie.Text, Char(10)) Do If i = 0 Then Exit li_count ++ i = Pos(mle_saisie.Text, Char(10), i + 1) Loop Until i = 0 If li_count > 6 Then // DO SOMETHING End If
Je récupère la valeur de mon contrôle pour l'intégrer à une édition et je dois limiter à 6 lignes le texte saisi.
L'idéal étant le blocage à la saisie du 6-ième saut de ligne. Evidemment, une ligne trop longue passerait à la ligne, je devrais donc aussi contrôler le nombre moyen de caractères par ligne, etc.
Dernière modification par sbouvetJD (22-04-2014 14:59:26)
Hors ligne
Salut,
tu peux utiliser le code suivant pour connaitre le nombre de ligne d'un multiline edit
Declare la fonction externe suivante :
FUNCTION long SendMessage (long hwnd , long wMsg, long wParam, long lParam) Library "user32.dll" Alias for "SendMessageA"
Met le code suivant :
Constant long EM_GETLINECOUNT = 186 integer li_count li_count = SendMessage (handle (mle_1), EM_GETLINECOUNT, 0, 0) // tu obtiens le nbre de ligne qu'il y ait des retour à la ligne ou non le calcul est auomatiquement fait en cas de wrapping à la ligne
Cdt
yanis
Hors ligne
Merci pour ce bout de code !
Mais le wrapping dépend de la largeur du MLE, de la police employée, etc.
Et dans mon édition, ma zone d'impression fait une autre taille et emploie une autre police. Je sais donc que je peux supporter approximativement 35 signes pour 6 lignes. Je teste donc si j'ai moins de 6 retour à la ligne, si tel est le cas je teste le nombre de car.
Hors ligne
Salut,
Moi je mettrais un mle invisible avec la fonte destinée à l'impression et à chaque caractère je ferais une copie dans le mle invisible et je testerai à l'aide de l'api le nbre de ligne.
Le calcul sera plus sur.
Cdt
Yanis
Hors ligne
Merci Cdt ! (Il y a des gradés ici ? ah ah ah)
J'attends validation finale de la maquette mais cette solution me va bien !
Hors ligne