Connaitre la position en pixel du curseur dans un richedit [Résolu]

Messages postés
35
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
25 mars 2007
- - Dernière réponse : arnaud_tournier
Messages postés
35
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
25 mars 2007
- 22 sept. 2004 à 21:14
Salut,

yep, j ai une question. J ai besion de connaitre la position en pixel du curseur dans un richEdit soit avec le haut gauche du texte ou soit par rapport à l'écran... J aurais aimé aussi savoir comment on peut récupérerer et modifier la position du scroll d un richedit,

Merci d avance....

DrNo
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
323
Date d'inscription
jeudi 6 juin 2002
Dernière intervention
24 septembre 2008
3
Merci
salut arnaud_tournier,

pour récupérer la position de ta scrollbar horizontal utilise la function getscrollinfo.

exemple :
var 
  info: TScrollInfo; 
begin
  FillChar(info, SizeOf(info), 0);
  with info do
  begin
    cbsize := SizeOf(info);
    fmask  := SIF_ALL;
    GetScrollInfo(RichEdit1.Handle, SB_HORZ, info);
  end;

  ShowMessage(IntToStr(info.nPos));


je te conseil bien entendu d'utiliser la même méthode pour la scrollbar verticale.

Tu peux aussi modifier les positions avec la function setscrollinfo.

Bonne Prog,

Olivier.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Loulibier
Messages postés
323
Date d'inscription
jeudi 6 juin 2002
Dernière intervention
24 septembre 2008
0
Merci
Salut arnaud_tournier,

pour récupérer la position de ton curseur dans ton composant TRichEdit, tu peux utilisés les propriétés :

RichEdit1.CaretPos.X et RichEdit1.CaretPos.Y


Pour se qui est de de la position du scroll, je pensais que la fonction RichEdit1.ScrollBy aurait fait l'affaire mais se n'est pas le cas :-p

Bonne Prog,

Olivier.
Commenter la réponse de Loulibier
Messages postés
35
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
25 mars 2007
0
Merci
Merci pour ta réponse mais je voudrais connaitre la position en pixel et pas en colonne et ligne... En effet je voudrais poser un composant TlistBox pour faire de la completion lors de l'édition et il faut que je le pose proche du curseur... Tu vois... Mais je ne trouve pas...

Et pour le scroll, en effet pas trouvé non plus....

Arnaud
Commenter la réponse de arnaud_tournier
Messages postés
6
Date d'inscription
jeudi 17 juin 2004
Dernière intervention
19 novembre 2006
0
Merci
peut etre (je dis bien peut etre) il t'est possible de calculer la position en utilisant le canvas:
tu connais la ligne et la colonne de ton curseur
donc tu calcul la hauteur t'as un y en pixel des lignes precedentes avec

with canvas.Font do
begin
Name := NomFont;
size := TailleFont;
Style := StylFont;
Result := Printer.canvas.TextHeight(Text);
end;

idem pour le x mais avec textwidth...
jdis pas c la meilleure solution mais ca peut marcher
Commenter la réponse de fantbel
Messages postés
6
Date d'inscription
jeudi 17 juin 2004
Dernière intervention
19 novembre 2006
0
Merci
ah retire le printer!
Commenter la réponse de fantbel
Messages postés
323
Date d'inscription
jeudi 6 juin 2002
Dernière intervention
24 septembre 2008
0
Merci
J'ai sauté des morceaux de ta question ;)
je vois pas vraiment comment tu va récupérer cette information.
La seul méthode qui vient à l'idée, c'est de calculer la position en pixel a l'aide des property RichEdit1.CaretPos.Y et RichEdit1.Font.Size. Si tout ton texte utilise la même taille de police tu peux faire le calcul RichEdit1.CaretPos.Y * RichEdit1.Font.Size ce qui te donnera la position basse de ton curseur. Le problème c'est que si tu utilises une taille de police différente sur tes lignes, il faut que tu puisses en déduire la taille max par ligne et les additionner j'usqu'a la ligne qui contient ton curseur.

C'est une idée comme une autre, mais je ne vois pas comment tu pourrais faire autrement.

Tu te retourveras avec le même problème de Scroll... Il y a surement une solution mais laquelle ?

Bonne Prog,

Olivier. :)
Commenter la réponse de Loulibier
Messages postés
323
Date d'inscription
jeudi 6 juin 2002
Dernière intervention
24 septembre 2008
0
Merci
voici comment récupérer la Position de ton scroll :
RichEdit1.Perform(EM_GETFIRSTVISIBLELINE,0,0)


Reste plus qu'a trouver le moyen de modifier cette valeur ;)
Commenter la réponse de Loulibier
Messages postés
35
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
25 mars 2007
0
Merci
Merci pour vos réponse et je pense que je me débrouillerais avec ça... Du moins je le saurais ce soir quand je ferais mes tests...

LOL, par chance il y aura qu'une taille de police dans un document... donc le calcul sera plus simple.

Je suppose que pour connaitre le Scroll horizontal, c est

myVar := RichEdit1.Perform(EM_GETFIRSTVISIBLECOLOMNE,0,0); ????

Et est ce qu il y a une doc ou on peut trouver les perform à mettre avec leur description ?

Arnaud, qui vous remercie de le dépanner.... :)
Commenter la réponse de arnaud_tournier
Messages postés
6
Date d'inscription
jeudi 17 juin 2004
Dernière intervention
19 novembre 2006
0
Merci
desole g peut etre ete peu explicite

length(RichEdit.Lines.Strings[numero de la ligne]) te fournit le nombre de caractere de la ligne

donc tu connait l'indice de depart pour la ligne et de fin
donc pour chaque ligne
0 a length(RichEdit.Lines.Strings[numero de la ligne]) pour la 1ere
etc...
(.+1 a ... pour la suivante)

tu parcours un a un les carateres avec
RichEdit.SelStart (et RichEdit.SelLength := 1)
de la lignes courante pour recuperer la hauteur maximal de la ligne grace au canvas et textheight dans le text tu place ton caractere RichEdit.SelText,
rem (ta police RichEdit.SelAttributes.Name
la taille de la police RichEdit.SelAttributes.Size
et la hauteur RichEdit.SelAttributes.Height)

etc...
pour le y
tu sauvegarde ta position
tu te positionne au debut de la ligne et tu va jusqu'a ta position mais cette fois avec width c la meme chose

donc avec ca tu peut avoir un truc generique qui utilise toute les polices pour le richedit ;)

jfre bien un copie colle mais bon...
Commenter la réponse de fantbel
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
0
Merci
Pour choisir la valeur de scroll horizontal dans un TRichEdit :

SendMessage(RichEdit.Handle, EM_LINESCROLL, 0, Valeur);


Valeur étant de type entier, et correspondant au nombre de lignes dont tu veux effectuer le scrolling.
Si la valeur est positive, scroll vers le bas, si valeur négative, scroll vers le haut.

Bonne prog' :-p
Commenter la réponse de japee
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
0
Merci
Mes excuses, je voulais dire scroll vertical.
Horizontal, je ne sais pas faire... %-6

japee
Commenter la réponse de japee
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
0
Merci
Heu, j'ai peut-être pas bien compris la question initiale.

Mais pour récupérer la position (en pixels) du curseur dans le TRichEdit, il suffit de récupérer les valeurs X et Y dans l'évènement "OnMouseMove" (par exemple) du RichEdit, non ?

Bonne prog' :-p
Commenter la réponse de japee
Messages postés
35
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
25 mars 2007
0
Merci
LOL, non le mouseMove est pour le mulot, quand je parle du curseur, c est le curseur de saisi.... Mais c est pas grave...

merci quand même

Arnaud
Commenter la réponse de arnaud_tournier
Messages postés
35
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
25 mars 2007
0
Merci
ok, je viens de tester ce qu il me semblait le plus marchable.... LOL

((RichEdit2.CaretPos.Y - RichEdit2.Perform(EM_GETFIRSTVISIBLELINE,0,0)) + 1) * (abs(RichEdit2.Font.Height) + 4)

pour connaitre la position vertical, c est cool ca marche du tonnerre mais pour l'horizontal, ???? je n ai toujours pas de solutions.... flute de flute.... bon ben je trouverais bien

Surtout merci pour votre aide. Je ne connaissais pas ce Forum avant hier et il est trop cool... Faut dire jusqu a maintenant je ne croyais pas trop aux forums... LOL, peut etre que je pose trop de questions difficiles...

Arnaud
Commenter la réponse de arnaud_tournier
Messages postés
35
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
25 mars 2007
0
Merci
Cool, ca marche tres bien, merci...

J aurais une autre question est il possible de changer ou de connaitre la couleur de fond d un texte sélectionné dans une richEdit. Je ne vois vraiment pas comment faire ???

Arnaud
Commenter la réponse de arnaud_tournier

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.