Ascenseur sur richedit

Fermé
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008 - 6 avril 2006 à 10:31
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 - 7 avril 2006 à 18:41
bonjour,
j'ai un richedit sur une form. Lorsque le texte dépasse la surface utile du richedit, des scrollbar horizontal ou vertical apparaissent sur le richedit. Y a t-il un code qui me permet de savoir si par exemple la scrollbar vertical du richedit est affiché sur le richedit? Ceci pour savoir si mon texte dépasse la surface utile du richedit.
Un code du style

if richedit.scroll_vertical_visible=true then etc...

Merci

3 réponses

jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
6 avril 2006 à 20:55
Salut,

Je chechais encore, il y a peu de temps de cela, à résoudre ce problème ( peut être fait-on la même chose?).
avec MSDN et de la patience je suis arrivée à ça :

function CountVisibleLines(const Memo: Tmemo): Integer;
var
OldFont: HFont;
DC: THandle;
TextMetric: TTextMetric;
begin
DC := GetDC(Memo.Handle);
try
OldFont := SelectObject(DC, Memo.font.handle);
try
GetTextMetrics(DC, TextMetric);
Result := (Memo.ClientRect.Bottom - Memo.ClientRect.Top) div
(TextMetric.tmHeight + TextMetric.tmExternalLeading);
finally
SelectObject(DC, OldFont);
end;
finally
ReleaseDC(Memo.Handle, DC);
end;
end;

ce code marche très bien sur les memos et je pense qu'avec un peu de travail, te donnera entière satifaction sur les richedits. l'idée est de compter le nombre de ligne visible en fonction de la taille de la police.
Attention car le richedit ne marche pas de la même manière que le memo, et tu dois éviter de passer par le handle de ta fonte du richedit qui ne change jamais, mais par une fonte intermédiaire ou un autre objet pour stocker la valeur réelle de la fonte de ta sélection.Si ta fonte est par contre identique entre la conception et l'execution, la fonction suffira en elle-même

je te conseille par ailleurs de chercher des infos via msdn sur les fonctions utilsées dans CountVisibleLines pour pouvoir l'adapter au richedit.

bon courage
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
7 avril 2006 à 12:32
Salut,
et tu fais quoi si dans ton RichEdit tu as un texte du genre :

Bonjour
,
ceci est un teste

d'affichage avec plusieurs polices

et tailles

c'est bien souvant pour cela que l'on utilise un RichEdit

@+
Cirec
0
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
7 avril 2006 à 18:41
ben la solution est du meme tonneau que pour le memo mais un poil plus compliqué,
En regardant MSDN, il existe une fonction Trichedit.Perform(EM_GETFIRSTVISIBLELINE. Comme
tous développeurs je suis faineant et google travaille à ma place ce qui m'amène à :

http://delphicikk.atw.hu/listaz.php?id=707, excellent site delphi d'ailleurs, bien qu'un fouilli mais bon, on va pas se plaindre.

Perso j'ai essayé sur un richedit sans gestion des fontes, ca marche, donc il n'y a pas de raison que cela ne marche pas avec des fontes plus compliqués.
ca devrait répondre à ton besoin cette fois ci.
0
Rejoignez-nous