OVH Cloud OVH Cloud

ScaleMode pour un label

8 réponses
Avatar
Patrice Henrio
Dans l'aide de MSDN, on peut lire
MouseMove, événement
La syntaxe de l'événement MouseMove comprend les éléments suivants :

Élément Description
object correspond à un objet figurant dans la rubrique "Application".
index Entier qui désigne le contrôle si celui-ci appartient à un
groupe de controles.
button Entier qui correspond à l'état des boutons de la souris
représenté par un bit si le bouton est enfoncé. Cet argument est un champ
binaire dont le bit 0 correspond au bouton gauche de la souris, le bit 1 au
bouton droit et le bit 2 au bouton du milieu. Ces bits sont associés
respectivement aux valeurs 1, 2 et 4. Ils indiquent l'état des boutons de la
souris. Chaque bit défini signale que le bouton correspondant est enfoncé.
shift Entier qui correspond à l'état des touches MAJ, CTRL et ALT. Un
bit est défini si la touche est enfoncée. Cet argument est un champ binaire
dont les bits de poids faible correspondent aux touches MAJ (bit 0), CTRL
(bit 1) et ALT (bit 2). À ces bits sont associées respectivement les valeurs
1, 2 et 4. L'argument shift indique l'état de ces touches, un bit défini
signalant que la touche correspondante est enfoncée. Par exemple, si les
touches CTRL et ALT sont toutes deux enfoncées, la valeur de l'argument
shift sera égale à 6.
x, y Nombre qui spécifie la position en cours du pointeur de la
souris. Les valeurs x et y sont toujours exprimées en fonction du système de
coordonnées défini par les propriétés ScaleHeight, ScaleWidth, ScaleLeft et
ScaleTop de l'objet.



Pour cette dernière remarque qu'en est-il d'un contrôle label qui n'a pas de
propriété scalemode ni les suivantes.
Est-ce que le label récupère le scalemode de son contenant ?

8 réponses

Avatar
Guy DETIENNE
Salut ;O)

Le Label n'ayant pas de propriété ScaleMode, il semble que le Twips reste de
mise même en ayant établi la propriété ScaleMode à Pixel du formulaire.

Vu que je travail habituellement en Twips et Pixels, je n'ai jamais remarqué
que le label n'avait pas cette prorpiété, la conversion de Twips vers
pixels étant très simple :


xPixels = X Screen.TwipsPerPixelX
yPixels = Y Screen.TwipsPerPixelY

Guy



"Patrice Henrio" a écrit dans le message de
news:%
Dans l'aide de MSDN, on peut lire
MouseMove, événement
La syntaxe de l'événement MouseMove comprend les éléments suivants :

Élément Description
object correspond à un objet figurant dans la rubrique


"Application".
index Entier qui désigne le contrôle si celui-ci appartient à un
groupe de controles.
button Entier qui correspond à l'état des boutons de la souris
représenté par un bit si le bouton est enfoncé. Cet argument est un champ
binaire dont le bit 0 correspond au bouton gauche de la souris, le bit 1


au
bouton droit et le bit 2 au bouton du milieu. Ces bits sont associés
respectivement aux valeurs 1, 2 et 4. Ils indiquent l'état des boutons de


la
souris. Chaque bit défini signale que le bouton correspondant est enfoncé.
shift Entier qui correspond à l'état des touches MAJ, CTRL et ALT.


Un
bit est défini si la touche est enfoncée. Cet argument est un champ


binaire
dont les bits de poids faible correspondent aux touches MAJ (bit 0), CTRL
(bit 1) et ALT (bit 2). À ces bits sont associées respectivement les


valeurs
1, 2 et 4. L'argument shift indique l'état de ces touches, un bit défini
signalant que la touche correspondante est enfoncée. Par exemple, si les
touches CTRL et ALT sont toutes deux enfoncées, la valeur de l'argument
shift sera égale à 6.
x, y Nombre qui spécifie la position en cours du pointeur de la
souris. Les valeurs x et y sont toujours exprimées en fonction du système


de
coordonnées défini par les propriétés ScaleHeight, ScaleWidth, ScaleLeft


et
ScaleTop de l'objet.



Pour cette dernière remarque qu'en est-il d'un contrôle label qui n'a pas


de
propriété scalemode ni les suivantes.
Est-ce que le label récupère le scalemode de son contenant ?




Avatar
Patrice Henrio
Comment peut-on s'assurer que l'on est en twips et pas en pixel ?

Je connais les formules et j'utilise même plutôt ScaleX et ScaleY
X=ScaleX(X, vbTwips, vbPixels)
Y= ScaleY(Y, vbTwips, vbPixels)
Qui transforme directement des mesure en twips en pixel.

"Guy DETIENNE" a écrit dans le message de news:

Salut ;O)

Le Label n'ayant pas de propriété ScaleMode, il semble que le Twips reste
de
mise même en ayant établi la propriété ScaleMode à Pixel du formulaire.

Vu que je travail habituellement en Twips et Pixels, je n'ai jamais
remarqué
que le label n'avait pas cette prorpiété, la conversion de Twips vers
pixels étant très simple :


xPixels = X Screen.TwipsPerPixelX
yPixels = Y Screen.TwipsPerPixelY

Guy



"Patrice Henrio" a écrit dans le message de
news:%
Dans l'aide de MSDN, on peut lire
MouseMove, événement
La syntaxe de l'événement MouseMove comprend les éléments suivants :

Élément Description
object correspond à un objet figurant dans la rubrique


"Application".
index Entier qui désigne le contrôle si celui-ci appartient à un
groupe de controles.
button Entier qui correspond à l'état des boutons de la souris
représenté par un bit si le bouton est enfoncé. Cet argument est un champ
binaire dont le bit 0 correspond au bouton gauche de la souris, le bit 1


au
bouton droit et le bit 2 au bouton du milieu. Ces bits sont associés
respectivement aux valeurs 1, 2 et 4. Ils indiquent l'état des boutons de


la
souris. Chaque bit défini signale que le bouton correspondant est
enfoncé.
shift Entier qui correspond à l'état des touches MAJ, CTRL et ALT.


Un
bit est défini si la touche est enfoncée. Cet argument est un champ


binaire
dont les bits de poids faible correspondent aux touches MAJ (bit 0), CTRL
(bit 1) et ALT (bit 2). À ces bits sont associées respectivement les


valeurs
1, 2 et 4. L'argument shift indique l'état de ces touches, un bit défini
signalant que la touche correspondante est enfoncée. Par exemple, si les
touches CTRL et ALT sont toutes deux enfoncées, la valeur de l'argument
shift sera égale à 6.
x, y Nombre qui spécifie la position en cours du pointeur de la
souris. Les valeurs x et y sont toujours exprimées en fonction du système


de
coordonnées défini par les propriétés ScaleHeight, ScaleWidth, ScaleLeft


et
ScaleTop de l'objet.



Pour cette dernière remarque qu'en est-il d'un contrôle label qui n'a pas


de
propriété scalemode ni les suivantes.
Est-ce que le label récupère le scalemode de son contenant ?








Avatar
Patrice Henrio
Je viens de vérifier, pour un label posé sur une pictureBox en pixel, le
scalemode correspond à pixel.
Je vais continuer à voir avec plusieurs mode.

"Patrice Henrio" a écrit dans le message de
news:
Comment peut-on s'assurer que l'on est en twips et pas en pixel ?

Je connais les formules et j'utilise même plutôt ScaleX et ScaleY
X=ScaleX(X, vbTwips, vbPixels)
Y= ScaleY(Y, vbTwips, vbPixels)
Qui transforme directement des mesure en twips en pixel.

"Guy DETIENNE" a écrit dans le message de news:

Salut ;O)

Le Label n'ayant pas de propriété ScaleMode, il semble que le Twips reste
de
mise même en ayant établi la propriété ScaleMode à Pixel du formulaire.

Vu que je travail habituellement en Twips et Pixels, je n'ai jamais
remarqué
que le label n'avait pas cette prorpiété, la conversion de Twips vers
pixels étant très simple :


xPixels = X Screen.TwipsPerPixelX
yPixels = Y Screen.TwipsPerPixelY

Guy



"Patrice Henrio" a écrit dans le message de
news:%
Dans l'aide de MSDN, on peut lire
MouseMove, événement
La syntaxe de l'événement MouseMove comprend les éléments suivants :

Élément Description
object correspond à un objet figurant dans la rubrique


"Application".
index Entier qui désigne le contrôle si celui-ci appartient à un
groupe de controles.
button Entier qui correspond à l'état des boutons de la souris
représenté par un bit si le bouton est enfoncé. Cet argument est un
champ
binaire dont le bit 0 correspond au bouton gauche de la souris, le bit 1


au
bouton droit et le bit 2 au bouton du milieu. Ces bits sont associés
respectivement aux valeurs 1, 2 et 4. Ils indiquent l'état des boutons
de


la
souris. Chaque bit défini signale que le bouton correspondant est
enfoncé.
shift Entier qui correspond à l'état des touches MAJ, CTRL et ALT.


Un
bit est défini si la touche est enfoncée. Cet argument est un champ


binaire
dont les bits de poids faible correspondent aux touches MAJ (bit 0),
CTRL
(bit 1) et ALT (bit 2). À ces bits sont associées respectivement les


valeurs
1, 2 et 4. L'argument shift indique l'état de ces touches, un bit défini
signalant que la touche correspondante est enfoncée. Par exemple, si les
touches CTRL et ALT sont toutes deux enfoncées, la valeur de l'argument
shift sera égale à 6.
x, y Nombre qui spécifie la position en cours du pointeur de la
souris. Les valeurs x et y sont toujours exprimées en fonction du
système


de
coordonnées défini par les propriétés ScaleHeight, ScaleWidth, ScaleLeft


et
ScaleTop de l'objet.



Pour cette dernière remarque qu'en est-il d'un contrôle label qui n'a
pas


de
propriété scalemode ni les suivantes.
Est-ce que le label récupère le scalemode de son contenant ?












Avatar
Patrice Henrio
En fait le label a le même scale mode que son "container"
"Patrice Henrio" a écrit dans le message de
news:
Je viens de vérifier, pour un label posé sur une pictureBox en pixel, le
scalemode correspond à pixel.
Je vais continuer à voir avec plusieurs mode.

"Patrice Henrio" a écrit dans le message de
news:
Comment peut-on s'assurer que l'on est en twips et pas en pixel ?

Je connais les formules et j'utilise même plutôt ScaleX et ScaleY
X=ScaleX(X, vbTwips, vbPixels)
Y= ScaleY(Y, vbTwips, vbPixels)
Qui transforme directement des mesure en twips en pixel.

"Guy DETIENNE" a écrit dans le message de news:

Salut ;O)

Le Label n'ayant pas de propriété ScaleMode, il semble que le Twips
reste de
mise même en ayant établi la propriété ScaleMode à Pixel du formulaire.

Vu que je travail habituellement en Twips et Pixels, je n'ai jamais
remarqué
que le label n'avait pas cette prorpiété, la conversion de Twips vers
pixels étant très simple :


xPixels = X Screen.TwipsPerPixelX
yPixels = Y Screen.TwipsPerPixelY

Guy



"Patrice Henrio" a écrit dans le message de
news:%
Dans l'aide de MSDN, on peut lire
MouseMove, événement
La syntaxe de l'événement MouseMove comprend les éléments suivants :

Élément Description
object correspond à un objet figurant dans la rubrique


"Application".
index Entier qui désigne le contrôle si celui-ci appartient à un
groupe de controles.
button Entier qui correspond à l'état des boutons de la souris
représenté par un bit si le bouton est enfoncé. Cet argument est un
champ
binaire dont le bit 0 correspond au bouton gauche de la souris, le bit
1


au
bouton droit et le bit 2 au bouton du milieu. Ces bits sont associés
respectivement aux valeurs 1, 2 et 4. Ils indiquent l'état des boutons
de


la
souris. Chaque bit défini signale que le bouton correspondant est
enfoncé.
shift Entier qui correspond à l'état des touches MAJ, CTRL et
ALT.


Un
bit est défini si la touche est enfoncée. Cet argument est un champ


binaire
dont les bits de poids faible correspondent aux touches MAJ (bit 0),
CTRL
(bit 1) et ALT (bit 2). À ces bits sont associées respectivement les


valeurs
1, 2 et 4. L'argument shift indique l'état de ces touches, un bit
défini
signalant que la touche correspondante est enfoncée. Par exemple, si
les
touches CTRL et ALT sont toutes deux enfoncées, la valeur de l'argument
shift sera égale à 6.
x, y Nombre qui spécifie la position en cours du pointeur de la
souris. Les valeurs x et y sont toujours exprimées en fonction du
système


de
coordonnées défini par les propriétés ScaleHeight, ScaleWidth,
ScaleLeft


et
ScaleTop de l'objet.



Pour cette dernière remarque qu'en est-il d'un contrôle label qui n'a
pas


de
propriété scalemode ni les suivantes.
Est-ce que le label récupère le scalemode de son contenant ?
















Avatar
Patrice Henrio
On oublie, il semble que cela ne soit même pas ça.
Si quelqu'un a une idée.


"Patrice Henrio" a écrit dans le message de
news:
En fait le label a le même scale mode que son "container"
"Patrice Henrio" a écrit dans le message de
news:
Je viens de vérifier, pour un label posé sur une pictureBox en pixel, le
scalemode correspond à pixel.
Je vais continuer à voir avec plusieurs mode.

"Patrice Henrio" a écrit dans le message de
news:
Comment peut-on s'assurer que l'on est en twips et pas en pixel ?

Je connais les formules et j'utilise même plutôt ScaleX et ScaleY
X=ScaleX(X, vbTwips, vbPixels)
Y= ScaleY(Y, vbTwips, vbPixels)
Qui transforme directement des mesure en twips en pixel.

"Guy DETIENNE" a écrit dans le message de news:

Salut ;O)

Le Label n'ayant pas de propriété ScaleMode, il semble que le Twips
reste de
mise même en ayant établi la propriété ScaleMode à Pixel du formulaire.

Vu que je travail habituellement en Twips et Pixels, je n'ai jamais
remarqué
que le label n'avait pas cette prorpiété, la conversion de Twips vers
pixels étant très simple :


xPixels = X Screen.TwipsPerPixelX
yPixels = Y Screen.TwipsPerPixelY

Guy



"Patrice Henrio" a écrit dans le message
de
news:%
Dans l'aide de MSDN, on peut lire
MouseMove, événement
La syntaxe de l'événement MouseMove comprend les éléments suivants :

Élément Description
object correspond à un objet figurant dans la rubrique


"Application".
index Entier qui désigne le contrôle si celui-ci appartient à un
groupe de controles.
button Entier qui correspond à l'état des boutons de la souris
représenté par un bit si le bouton est enfoncé. Cet argument est un
champ
binaire dont le bit 0 correspond au bouton gauche de la souris, le bit
1


au
bouton droit et le bit 2 au bouton du milieu. Ces bits sont associés
respectivement aux valeurs 1, 2 et 4. Ils indiquent l'état des boutons
de


la
souris. Chaque bit défini signale que le bouton correspondant est
enfoncé.
shift Entier qui correspond à l'état des touches MAJ, CTRL et
ALT.


Un
bit est défini si la touche est enfoncée. Cet argument est un champ


binaire
dont les bits de poids faible correspondent aux touches MAJ (bit 0),
CTRL
(bit 1) et ALT (bit 2). À ces bits sont associées respectivement les


valeurs
1, 2 et 4. L'argument shift indique l'état de ces touches, un bit
défini
signalant que la touche correspondante est enfoncée. Par exemple, si
les
touches CTRL et ALT sont toutes deux enfoncées, la valeur de
l'argument
shift sera égale à 6.
x, y Nombre qui spécifie la position en cours du pointeur de la
souris. Les valeurs x et y sont toujours exprimées en fonction du
système


de
coordonnées défini par les propriétés ScaleHeight, ScaleWidth,
ScaleLeft


et
ScaleTop de l'objet.



Pour cette dernière remarque qu'en est-il d'un contrôle label qui n'a
pas


de
propriété scalemode ni les suivantes.
Est-ce que le label récupère le scalemode de son contenant ?




















Avatar
Patrice Henrio a écrit :
On oublie, il semble que cela ne soit même pas ça.
Si quelqu'un a une idée.




Bonjour, le contrôle label n'ayant pas de propriété HDc, scalemode
n'existe pas.
Je suppose que le label est une simple région d'un contrôle et qu'il
appartient au DC du conteneur donc qu'il est mappé comme lui.
Mais tu nous dis que non, pourquoi ?

A+

Christophe
Avatar
Patrice Henrio
Parce que je m'étais trompé dans mon dernier post.
Pour expliquer le comment du pourquoi, voilà la situation

Je repositionne un label sur une picture à partir de l'évènement MouseMove
de la souris avec les coordonnées X,Y
Le positionnement Top, Left du label est un calcul à partir de X et Y. A
partir de là je définissais un nouveau point calculé par une fonction de
conversion avec pour paramètre Top et Left du label. Lorsque je calculais la
fonction réciproque le label bougeait légèrement en hauteur. Je voulais
comprendre pourquoi. Donc j'ai essayé de voir en quelles unités sont les
dimensions du label.
Après trois heures de recherches et pas mal d'énervement je me suis mis à
douter de mes positions initiales. J'avais mal estimé la distance du label
au bord de mon PictureBox (de beaucoup puisque je le croyais au bord du
picture alors qu'il était au centre, d'où mon dernier post). En fait mon
avant dernier post est donc bien vrai. Le scaleMode du label c'est celui de
son conteneur.
Finalement vers 2 h du matin j'en viens à soupçonner ma fonction de
conversion qui jusque là fonctionnait bien. Je m'aperçois que le calcul par
cette fonction puis de sa réciproque transforme le point (100,100) en
(97,74). Là était le problème. Je pense à un problème d'arrondi puisque je
pars de single pour arriver en Long et revenir en single.
Je supprime le passage par les long et calcule tout en single. Rien n'y
fait. Et tout d'un coup la lumière se fait, le problème n'est apparu que
depuis que j'ai transféré une partie des calculs dans une dll en C. Encore
une petite demie-heure de tâtonnement et je trouve enfin le bug, dans ma
dll, lors d'un calcul matriciel un Y s'est malencontreusement transformé en
X rendant la fonction erronée (mais malheureusement seulement légèrement
erronée).
Tout est est rentré dans l'ordre.
Si j'avais analysé plus en profondeur le problème je me serai rendu plus
vite compte que le problème ne pouvait venir que de la dll.


"<pasdespam> @wanadoo.fr>" <"<pasdespam> a écrit dans le message de news:
43044ed1$0$1229$
Patrice Henrio a écrit :
On oublie, il semble que cela ne soit même pas ça.
Si quelqu'un a une idée.




Bonjour, le contrôle label n'ayant pas de propriété HDc, scalemode
n'existe pas.
Je suppose que le label est une simple région d'un contrôle et qu'il
appartient au DC du conteneur donc qu'il est mappé comme lui.
Mais tu nous dis que non, pourquoi ?

A+

Christophe





Avatar
Merci pour ces explications plus que détaillées

A+

Christophe



Patrice Henrio a écrit :

Parce que je m'étais trompé dans mon dernier post.
Pour expliquer le comment du pourquoi, voilà la situation

Je repositionne un label sur une picture à partir de l'évènement MouseMove
de la souris avec les coordonnées X,Y
Le positionnement Top, Left du label est un calcul à partir de X et Y. A
partir de là je définissais un nouveau point calculé par une fonction de
conversion avec pour paramètre Top et Left du label. Lorsque je calculais la
fonction réciproque le label bougeait légèrement en hauteur. Je voulais
comprendre pourquoi. Donc j'ai essayé de voir en quelles unités sont les
dimensions du label.
Après trois heures de recherches et pas mal d'énervement je me suis mis à
douter de mes positions initiales. J'avais mal estimé la distance du label
au bord de mon PictureBox (de beaucoup puisque je le croyais au bord du
picture alors qu'il était au centre, d'où mon dernier post). En fait mon
avant dernier post est donc bien vrai. Le scaleMode du label c'est celui de
son conteneur.
Finalement vers 2 h du matin j'en viens à soupçonner ma fonction de
conversion qui jusque là fonctionnait bien. Je m'aperçois que le calcul par
cette fonction puis de sa réciproque transforme le point (100,100) en
(97,74). Là était le problème. Je pense à un problème d'arrondi puisque je
pars de single pour arriver en Long et revenir en single.
Je supprime le passage par les long et calcule tout en single. Rien n'y
fait. Et tout d'un coup la lumière se fait, le problème n'est apparu que
depuis que j'ai transféré une partie des calculs dans une dll en C. Encore
une petite demie-heure de tâtonnement et je trouve enfin le bug, dans ma
dll, lors d'un calcul matriciel un Y s'est malencontreusement transformé en
X rendant la fonction erronée (mais malheureusement seulement légèrement
erronée).
Tout est est rentré dans l'ordre.
Si j'avais analysé plus en profondeur le problème je me serai rendu plus
vite compte que le problème ne pouvait venir que de la dll.


"<pasdespam> @wanadoo.fr>" <"<pasdespam> a écrit dans le message de news:
43044ed1$0$1229$

Patrice Henrio a écrit :

On oublie, il semble que cela ne soit même pas ça.
Si quelqu'un a une idée.




Bonjour, le contrôle label n'ayant pas de propriété HDc, scalemode
n'existe pas.
Je suppose que le label est une simple région d'un contrôle et qu'il
appartient au DC du conteneur donc qu'il est mappé comme lui.
Mais tu nous dis que non, pourquoi ?

A+

Christophe