Gambas France BETA


Pas de compte ? Incription

TextAera, curseur et position

Ce sujet est résolu.

1
AuteurMessages
jibi#1 Posté le 7/8/2012 à 23:06:29
codergambas.jimdofree.comBonjour à vous
Question simple mais pourtant je trouve pas la soluce

Pour définir la position du curseur dans une textAera j'ai jusqu'à présent fait : TextAera.pos = textAera.lenght

Sur ma textAera qui est en ReadOnly = false, je voudrais que mon curseur se place en décalé sur la droite avec un espace quand on entre du texte au clavier aussi j'ai écris :
1
2
3
PUBLIC SUB textAera_KeyPress()
IF hTextAera.length = longTextArea THEN hTextAera.pos = longTextArea + 1
'Avec longTextAera prédéfini avant


Hors, j'ai beau faire avec ou sans ce bout de code, même en mettant partout hTextAera.pos = longTextArea + 10 ou 20

DE plus, je n'arrive pas à changer la couleur du curseur clignotant de la textaera, j'ai une textArea noire et le curseur ne se voit pas!

Jibi
Debian GNU/Linux 11 64-bit

Prokopy#2 Posté le 7/8/2012 à 23:38:08
Kinder PinguiSalut jibi,

Sur ma textAera qui est en ReadOnly = false, je voudrais que mon curseur se place en décalé sur la droite avec un espace quand on entre du texte au clavier


Si j'ai bien compris, tu veux que le curseur qui définit là où va se situer le texte ne soit plus là où va se situer le texte ? :shock:
Personnellement je ne vois pas comment faire (ni vraiment ce que tu veux faire d'ailleurs).

De plus, je n'arrive pas à changer la couleur du curseur clignotant de la textaera, j'ai une textArea noire et le curseur ne se voit pas!


Ça à mon avis, c'est sans doute un bug dans ton thème Qt/GTK (je ne sais pas quel environnement tu utilises).
Ou alors si tu veux dire que tu as modifié la propriété ForeGround (pour la couleur de texte) de ton Textarea et que ça n'a eu aucun effet sur le curseur, à mon avis c'est un bug.

(Mais fais quand même attention quand tu modifies les couleurs de ton programme, ça risque de ne pas plaire à tout le monde. ;) )
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
jibi#3 Posté le 7/8/2012 à 23:49:14
codergambas.jimdofree.comMerci prokopy

je n'ai pas été clair c'est vrai

j'ai un process qui ecrit sur la textAera,
mais je veux que lorsque on entre au clavier du texte, on ne puisse pas effacer le texte précédemment écrit par le process : cela c'est ok
Lorsque l'utilisateur entre du texte, le texte entre juste à la suite de celui du process : c'est cela que je veux modifier afin que le texte entré par l'utilisateur soit placé un ou deux caractère apres automatiquement sans avoir à taper sur espace

voilà
Debian GNU/Linux 11 64-bit

Prokopy#4 Posté le 8/8/2012 à 00:13:07
Kinder PinguiAh ok je vois un peu mieux.

Si tu sais quand ton processus a fini d'écrire son texte dans ton textArea (lorsqu'il est terminé par exemple), tu peux tout simplement ajouter une ou deux espaces à la fin de ton textarea :

1
textArea1.Insert(" ")


(Je sais plus si cette méthode ajoute le texte avant ou après le curseur, donc il faudra peut-être repositionner le curseur ensuite au besoin).

Si tu ne sais pas vraiment quand ton process a fini d'écrire, tu peux mémoriser via une variable globale si le dernier caractère a été écrit par le processus ou par l'utilisateur, et vérifier cette variable dans ton évènement keypress. Exemple :

1
2
3
4
5
6
7
8
9
10
11
12
13
PRIVATE $derniereEcritureParProcess AS BOOLEAN
PUBLIC SUB process1_read()

'tu insères ici le contenu du processus dans ton textarea comme bon te semble
$derniereEcritureParProcess = TRUE 'Ici, je mémorise le fait que le process est le dernier à avoir écrit dans le textArea
END

PUBLIC SUB textArea1_keypress()
IF $derniereEcritureParProcess = TRUE THEN
textArea1.Insert(" ") 'L'utilisateur a entré son premier caractère depuis que le processus a terminé, on ajoute donc un espace
$derniereEcritureParProcess = FALSE
ENDIF
END
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
jibi#5 Posté le 8/8/2012 à 09:55:49
codergambas.jimdofree.comMerci prokopy

effectivement TextAera.insert(" ") fonctionne bien

Mais pourquoi textAera.pos = (textaera.lenght +1) ne marche pas puisque si je comprend bien .pos sert à définir l'emplacement du curseur, donc là ou le texte sera entré?

Quant à la couleur du curseur de la textAera mon environnement pour cet ordi est Kubuntu 11.10 et KDE 4.7.4 et GB3 svn #5004 : bug peut être!?
Debian GNU/Linux 11 64-bit

GarulfoUnix#6 Posté le 8/8/2012 à 09:56:07
By the way
1
TextArea1.Text = TextArea1.Text & " "


J'aurais fais tout simplement ainsi.
Ensuite en fonction de la position du curseur, là je jouerai avec la méthode .Insert() comme Prokopy a expliqué.
Prokopy#7 Posté le 8/8/2012 à 11:24:46
Kinder Pingui
effectivement TextAera.insert(" ") fonctionne bien

Mais pourquoi textAera.pos = (textaera.lenght +1) ne marche pas puisque si je comprend bien .pos sert à définir l'emplacement du curseur, donc là ou le texte sera entré?


C'est simple : la propriété Pos du textarea définit où sera situé ton curseur dans le texte. Si tu dépasses la longueur du texte, le curseur va se ramener à la fin du texte.


Quant à la couleur du curseur de la textAera mon environnement pour cet ordi est Kubuntu 11.10 et KDE 4.7.4 et GB3 svn #5004 : bug peut être!?


En principe si tu changes la couleur de ton texte, le curseur devrait avoir la même couleur.
Je vais faire des tests de mon côté et si il s'avère que c'est un bug dans gb.qt4, alors je vais faire un rapport de bug à Benoît. :)

1
TextArea1.Text = TextArea1.Text & " "


J'aurais fais tout simplement ainsi.


Bon là j'ai fait un peu au pif j'avoue, mais depuis que je bosse sur gb.xml je traque la moins ligne de code qui pourrait peut-être éventuellement être plus lente de 50 µs. :roll:

Bon en principe pour savoir lequel est le plus lent tu mets ça dans une boucle For i = 0 to 500 et tu regardes les temps d'exécution avec le nouveau profileur de Gambas. ;)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
jibi#8 Posté le 8/8/2012 à 11:35:43
codergambas.jimdofree.comMerci à vous tous de votre disponibilité

j'ai pu terminer mon bout de code avec ce petit souci de placement de curseur résolu

Pour les couleurs, à ce que l'on m'a dis :
le curseur de la TextAera est bleu marine
la couleur du texte est vert
la couleur de la textaera grise

je cherche toujours à changer les couleurs car moi je ne les voit pas comme la majorité !! :roll: désolé mais j'ai un bug dans mon code ADN :lol!:

donc a priori le curseur n'a pas la même couleur que le texte
A plus
Jibi
Debian GNU/Linux 11 64-bit

gambix#9 Posté le 8/8/2012 à 15:31:05
Faire simple !
1
TextArea1.Text &= " "


C'est plus élégant
Moins de texte dans une signature c'est agrandir son espace.
1