OVH Cloud OVH Cloud

Line

5 réponses
Avatar
Barsalou
Bonjour à tous

Je constate un curieux comportement de la commande Line.

J'exécute dans 2 fenêtres du même projet l'instruction :
Line (x1, y1)-(x2, y2), QBcolor(12), BF

Dans un cas le rectangle EFFACE les Labels qui se trouvent à l'intérieur,
dans l'autre fenêtre il les laisse intacts.
Pourtant ces labels ont été copiés d'une fenêtre vers l'autre.

Que se passe-t-il ?

NOTA: j'ai aussi des ListBox et des OptionButton à l'intérieur des
rectangles. Ils ne sont pas effacés.

Merci de m'aider

5 réponses

Avatar
Barsalou
J'ajoute que je peux récupérer mes Labels avec Label....Refresh mais ce
n'est pas élégant et n'explique pas le phénomène.
Avatar
Picalausa François
Hello,

Pour faire simple, les labels sont tracés en même temps que tout traçage
nécessaire sur le form (c'est à dire, à l'événement Paint). Ceci est du au
fait qu'il s'agisse de contrôle windowless (ils ne disposent pas de leur
propre surface de traçage, mais peuvent indiquer à leur parent la zone
qu'ils aimeraient occuper).
Ceci permet de diminuer le nombre d'hwnd que windows devra gérer pour une
même application. (ce qui évitait sous 9x de tomber sur les limites de
nombre d'hwnd, et qui permet encore de préserver un peu de mémoire)

Label.refresh, force la zone client de la form à retracer le label, et donc
corrige le problème.

En disposant d'une feuille autoredraw = true, il est aussi possible de
masquer ce problème.
Une autre manière de l'aborder est de stoquer les éléments (ici, le
rectangle) à tracer d'une manière ou d'une autre, et dans l'événement paint
de tracer ceux-ci. Il suffira alors d'utiliser la méthode Refresh du form
pour actualiser tous les labels et effectuer le traçage (ça se rapproche de
ce que réalisé autoredraw).

Une autre manière de procéder est de négliger l'avantage windowless, les
fenêtres superposées effectuant un clipping automatiquement. Par exemple, en
plaçant le label dans un picturebox sur la form, le problème disparait car
le picturebox est une fenêtre!

--
Picalausa François

"Barsalou" a écrit dans le message de
news:
J'ajoute que je peux récupérer mes Labels avec Label....Refresh mais ce
n'est pas élégant et n'explique pas le phénomène.


Avatar
Jean-marc
"Barsalou" a écrit dans le message de
news:
J'ajoute que je peux récupérer mes Labels avec Label....Refresh mais ce
n'est pas élégant et n'explique pas le phénomène.


Avatar
Jean-marc
"Barsalou" a écrit dans le message de
news:
J'ajoute que je peux récupérer mes Labels avec Label....Refresh mais ce
n'est pas élégant et n'explique pas le phénomène.




<l'autre messages est parti trop vite, sorry ...>

Hello,

j'ai déjà eu un comportement bizarre de ce genre, je
ne me rapelle plus des détails.

A tout hasard (eet sans garanties), ta feuille a t'elle
la propriété AutoRedraw à True?
Si non, peux tu mettre à True? Cela change t'il qq chose?

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Barsalou
Merci.
Avec autoredraw tout marche !