OVH Cloud OVH Cloud

definir coordonnées

2 réponses
Avatar
Flex
Bonsoir tout le monde
Comment peut on définir les points (x,y) sur un usercontrol qui seront
utilisés comme coordonnées de départ pour l'api DrawText?
Je m'explique:
on imagine que j'ai crée plusieurs rectangle et je veux ecrire dans chacun
d'eux, le probleme c'est que ca marche pas.
pour ecrire le texte j'ai fait quelque chose comme ça:

ret = DrawText(UserControl.hDc, sCaption, Len(sCaption), rct,
DT_CALCRECT) '--calcul les coordonnées du rectangle necessaire
'ensuite differents calculs pour gerer l'alignement
'.....
'UserControl.CurrentX = lngLeft
'UserControl.CurrentY = lngTop
'MoveToEx UserControl.hDc, lngLeft, lngTop, tJ

ret = DrawText(UserControl.hDc, sCaption, Len(sCaption), rct,
DT_SINGLELINE)
mais je n'ai pas reussi.

A l'aide.Merci

2 réponses

Avatar
François Picalausa
Hello

Il faut noter que les APIs sont indépendantes des propriétés ScaleMode,
ScaleHeight, ScaleWidth, CurrentX et CurrentY, VB gérant les coordonnées de
traçage de manière indépendante du GDI.

En ce qui concerne DrawText, le 4ème argument est une structure de type
RECT.
Cet argument est définit la position du texte (et la zone dans laquelle il
doit être tracé).

Pour définir la position, tu peux donc faire comme ceci:
'En supposant que lngLeft et lngTop soient définit en pixels:
rct.Left = lngLeft
rct.Top = lngTop

'Calcule le rectangle de destination, les coordonnées Left,Top resteront
inchangées
'Notons qu'il faut combiner les flags utilisés pour effectuer
'un calcul tout à fait correct du rectangle de destination
DrawText UserControl.hDc, sCaption, Len(sCaption), rct,
DT_CALCRECT or DT_SINGLELINE

'Trace le texte a la position Left,Top (inchangées par l'appel précédent
DrawText(UserControl.hDc, sCaption, Len(sCaption), rct,
DT_SINGLELINE

Si lngLeft, lngTop ne sont pas définis en pixels, tu pourra recourir aux
méthodes ScaleX, ScaleY de ton usercontrol.

--
François Picalausa

"Flex" a écrit dans le message de news:

Bonsoir tout le monde
Comment peut on définir les points (x,y) sur un usercontrol qui
seront utilisés comme coordonnées de départ pour l'api DrawText?


Avatar
Flex
Merci François
Tout est tout de suite plus clair.
Après quelques chagements j'ai résolu mon problème. C'etait effectivement
au niveau des flags (dt_calcrect)
Merci man


"François Picalausa" a écrit dans le message de news:

Hello

Il faut noter que les APIs sont indépendantes des propriétés ScaleMode,
ScaleHeight, ScaleWidth, CurrentX et CurrentY, VB gérant les coordonnées
de traçage de manière indépendante du GDI.

En ce qui concerne DrawText, le 4ème argument est une structure de type
RECT.
Cet argument est définit la position du texte (et la zone dans laquelle il
doit être tracé).

Pour définir la position, tu peux donc faire comme ceci:
'En supposant que lngLeft et lngTop soient définit en pixels:
rct.Left = lngLeft
rct.Top = lngTop

'Calcule le rectangle de destination, les coordonnées Left,Top resteront
inchangées
'Notons qu'il faut combiner les flags utilisés pour effectuer
'un calcul tout à fait correct du rectangle de destination
DrawText UserControl.hDc, sCaption, Len(sCaption), rct,
DT_CALCRECT or DT_SINGLELINE

'Trace le texte a la position Left,Top (inchangées par l'appel précédent
DrawText(UserControl.hDc, sCaption, Len(sCaption), rct,
DT_SINGLELINE

Si lngLeft, lngTop ne sont pas définis en pixels, tu pourra recourir aux
méthodes ScaleX, ScaleY de ton usercontrol.

--
François Picalausa

"Flex" a écrit dans le message de news:

Bonsoir tout le monde
Comment peut on définir les points (x,y) sur un usercontrol qui
seront utilisés comme coordonnées de départ pour l'api DrawText?