Connaitre la position en pixel du curseur dans un richedit

Résolu
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007 - 16 sept. 2004 à 21:50
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre 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

15 réponses

Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
20 sept. 2004 à 21:54
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.
3
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
17 sept. 2004 à 00:13
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.
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
17 sept. 2004 à 00:21
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
0
fantbel Messages postés 6 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 19 novembre 2006
17 sept. 2004 à 13:49
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fantbel Messages postés 6 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 19 novembre 2006
17 sept. 2004 à 13:50
ah retire le printer!
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
17 sept. 2004 à 13:54
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. :)
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
17 sept. 2004 à 13:56
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 ;)
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
17 sept. 2004 à 14:29
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.... :)
0
fantbel Messages postés 6 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 19 novembre 2006
17 sept. 2004 à 15:05
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...
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 sept. 2004 à 15:06
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
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 sept. 2004 à 15:08
Mes excuses, je voulais dire scroll vertical.
Horizontal, je ne sais pas faire... %-6

japee
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 sept. 2004 à 15:32
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
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
17 sept. 2004 à 17:05
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
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
17 sept. 2004 à 20:11
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
0
arnaud_tournier Messages postés 34 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 25 mars 2007
22 sept. 2004 à 21:14
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
0
Rejoignez-nous