OVH Cloud OVH Cloud

Pb d'affichage

11 réponses
Avatar
Antoine Labusquière
Hop, rebonjour.

J'ai u petit soucis d'affichage:
Lorsque mon appli se lance, sous certaines conditions je vais lancer un
traitement.
Ce traitement dure 1à 2 minutes, mais pendant ce temps là, rien n'est
visible à l'écran.
J'ai bien créé une feuille "Mire", pour patienter, que je charge au début du
traitement, mais on ne voit pas le contenu de la feuille (et notamment le
message d'attente), mais seulement le contour de cette feuille.
Comment puis-je faire pour que cette feuille apparaisse correctement ???

Merci

10 réponses

1 2
Avatar
Quasimodo
on 12/1/2004, Antoine Labusquière supposed :
Hop, rebonjour.

J'ai u petit soucis d'affichage:
Lorsque mon appli se lance, sous certaines conditions je vais lancer un
traitement.
Ce traitement dure 1à 2 minutes, mais pendant ce temps là, rien n'est
visible à l'écran.
J'ai bien créé une feuille "Mire", pour patienter, que je charge au début du
traitement, mais on ne voit pas le contenu de la feuille (et notamment le
message d'attente), mais seulement le contour de cette feuille.
Comment puis-je faire pour que cette feuille apparaisse correctement ???

Merci



Bonjour,
vous pouvez utiliser des doevents dans le corp de votre traitement pour
rendre la main.
Par exemple, si vous avez une boucle avec un grand nombre d'itérations,
vous rajouter dans le corp de celle-ci, doevents.

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com
Avatar
christophe-pasde
Salut,

J'ai eu le même problème:
(résolu c'est tout bête)

Soit Myfunction qui est une fonction qui lance un traitement long

dès la première ligne après les déclarations:

Fmire.show
'et c'est là le truc:
Fmire.refresh

ça oblige la feuille a complètement se charger et ensuite à s'afficher.

Christophe



Antoine Labusquière a écrit :

Hop, rebonjour.

J'ai u petit soucis d'affichage:
Lorsque mon appli se lance, sous certaines conditions je vais lancer un
traitement.
Ce traitement dure 1à 2 minutes, mais pendant ce temps là, rien n'est
visible à l'écran.
J'ai bien créé une feuille "Mire", pour patienter, que je charge au début du
traitement, mais on ne voit pas le contenu de la feuille (et notamment le
message d'attente), mais seulement le contour de cette feuille.
Comment puis-je faire pour que cette feuille apparaisse correctement ???

Merci




Avatar
ng
Ou encore faire un DoEvents après l'affichage de la form et/ou pendant le
traitement.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

christophe-pasde<> @wanadoo.fr>" < wrote:
Salut,

J'ai eu le même problème:
(résolu c'est tout bête)

Soit Myfunction qui est une fonction qui lance un traitement long

dès la première ligne après les déclarations:

Fmire.show
'et c'est là le truc:
Fmire.refresh

ça oblige la feuille a complètement se charger et ensuite à
s'afficher.
Christophe



Antoine Labusquière a écrit :

Hop, rebonjour.

J'ai u petit soucis d'affichage:
Lorsque mon appli se lance, sous certaines conditions je vais lancer
un traitement.
Ce traitement dure 1à 2 minutes, mais pendant ce temps là, rien n'est
visible à l'écran.
J'ai bien créé une feuille "Mire", pour patienter, que je charge au
début du traitement, mais on ne voit pas le contenu de la feuille
(et notamment le message d'attente), mais seulement le contour de
cette feuille. Comment puis-je faire pour que cette feuille apparaisse
correctement
??? Merci




Avatar
ng
Salut,

Non en fait le DoEvents rend la main au système, pour lui permettre
d'afficher corecttement mes mises à jours (refrachissement de dc notamment).

En cas d'utilisation dans un boulce, on peut utiliser un modulo sinon ca
ralentirait le traitement.

Dim i As Integer

For i = 1 to 10000
If i mod 20 = 0 Then DoEvents
'//traitement
Next

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

christophe-pasde<> @wanadoo.fr>" < wrote:
Salut,

Je suis d'accord avec toi, mais le doevents je m'en méfie, en plus
quelle condition tu mets pour qu'il s'arrête ?
Dans le cas où tu maitrises le traitement, OK, et dans ce cas une
petite animation type copie de fichier c'est beaucoup plus joli.
Dans l'autre, dll par exemple, je vois pas trops, en plus certain
traitement (images par exemple ) bloque completement le systeme, et
aucun evenements n'est pris en compte à partir de l'instant où la dll
est appelée, jusqu'à ce qu'elle rende la main.

Et j'ajouterai que le form.refresh est une instruction plus typée.
ça force la mise à jour du DC, et c'est l'unique but recherché, le
doevents c'est quand même plus large, c'est un peu comme utiliser un
variant à la place de l'objet ClasseToto.

bon ceci dit ce n'est que MHA

Christophe.

ng a écrit :
Ou encore faire un DoEvents après l'affichage de la form et/ou
pendant le traitement.




Avatar
christophe-pasde
Salut,

Je suis d'accord avec toi, mais le doevents je m'en méfie, en plus
quelle condition tu mets pour qu'il s'arrête ?
Dans le cas où tu maitrises le traitement, OK, et dans ce cas une petite
animation type copie de fichier c'est beaucoup plus joli.
Dans l'autre, dll par exemple, je vois pas trops, en plus certain
traitement (images par exemple ) bloque completement le systeme, et
aucun evenements n'est pris en compte à partir de l'instant où la dll
est appelée, jusqu'à ce qu'elle rende la main.

Et j'ajouterai que le form.refresh est une instruction plus typée.
ça force la mise à jour du DC, et c'est l'unique but recherché, le
doevents c'est quand même plus large, c'est un peu comme utiliser un
variant à la place de l'objet ClasseToto.

bon ceci dit ce n'est que MHA

Christophe.

ng a écrit :
Ou encore faire un DoEvents après l'affichage de la form et/ou pendant le
traitement.



Avatar
Quasimodo
christophe-pasde<> used his keyboard to write :
Salut,

Je suis d'accord avec toi, mais le doevents je m'en méfie, en plus quelle
condition tu mets pour qu'il s'arrête ?
Dans le cas où tu maitrises le traitement, OK, et dans ce cas une petite
animation type copie de fichier c'est beaucoup plus joli.
Dans l'autre, dll par exemple, je vois pas trops, en plus certain traitement
(images par exemple ) bloque completement le systeme, et aucun evenements
n'est pris en compte à partir de l'instant où la dll est appelée, jusqu'à ce
qu'elle rende la main.

Et j'ajouterai que le form.refresh est une instruction plus typée.
ça force la mise à jour du DC, et c'est l'unique but recherché, le doevents
c'est quand même plus large, c'est un peu comme utiliser un variant à la
place de l'objet ClasseToto.

bon ceci dit ce n'est que MHA

Christophe.

ng a écrit :
Ou encore faire un DoEvents après l'affichage de la form et/ou pendant le
traitement.






Bonjour,
Vous avez raison, mais le problème, c'est que si cette
fonction/procédure ce trouve dans une dll à part (ou même dans un seul
exe), vous devrez passer en référence votre forme. Il est peut être
inutile de surcharger ce traitement, ainsi que sa portabilité. Vous
faite un simple doevents (pas de passage de valeurs ou autres chose),
de rendre la main quelques instants et de continuer la suite de la
procèdure. Pouvez-vous me dire pourquoi le doevents n'est pas une
solution valable?

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com
Avatar
christophe-pasde
Re ,


Bonjour,
Vous avez raison, mais le problème, c'est que si cette
fonction/procédure ce trouve dans une dll à part (ou même dans un seul
exe), vous devrez passer en référence votre forme.



En fait je travail comme suit:

la dll externe est appelée dans un module de classe.
La feuille "Mire" : Fmire

procedure, function , event
Fmire.show
Fmire.refresh

Myobject.Methodelongue

unload Fmire

end procedure, function , event

Je vois pas ce qu'il y a de pas portable.

Chaque projet qui utilise myobject , j'ajoute Fmire au projet et voilà.

Il est peut être
inutile de surcharger ce traitement, ainsi que sa portabilité. Vous
faite un simple doevents (pas de passage de valeurs ou autres chose), de
rendre la main quelques instants



Ok quels sont les critères de stop de ces qqs instants ?

et de continuer la suite de la
procèdure. Pouvez-vous me dire pourquoi le doevents n'est pas une
solution valable?



J'ai pas dis pas valable je l'utilise dans d'autres cas, juste méfiant,
car si les qqs instants dépassent qqs instants l'utilisateur peut
théoriquement lancer une autre tache si il y en a une de lançable et du
coup alourdir le traitement, ça implique un contrôle préalable que seule
la tâche acceptée peut être lancée.

Christophe
Avatar
ng
DoEvents fonctionnerait aussi ds ce cas.

D'une manière générale, on préféra DoEvents :

Admettons que sur ta form mire tu es une progessbar que tu dessines toi même
ds une picturebox, il faudraut faire un picturebox.refresh, admettons
également que tu mettes le pourcentage dans un label, là tu fais comment
pour rafraichir le label ? label.refresh ! etc...il peut y en avoir bcp ! Un
doevents permetterait de tout faire d'un coup.

Là tu va me dire mais c'est une dll donc pas de progression : bah si on peut
:
1/ si c'est une DLL ActiveX : elle peut générer un Event
2/ si c'est une dll classique : ele peut faire du callback

Mais bon étant donné que dans ce cas on affiche pas la progression et donc
qu'on a un seul refresh, le refresh est plus rapide que le doevents :)

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

christophe-pasde<> @wanadoo.fr>" < wrote:
Re ,


Bonjour,
Vous avez raison, mais le problème, c'est que si cette
fonction/procédure ce trouve dans une dll à part (ou même dans un
seul exe), vous devrez passer en référence votre forme.



En fait je travail comme suit:

la dll externe est appelée dans un module de classe.
La feuille "Mire" : Fmire

procedure, function , event
Fmire.show
Fmire.refresh

Myobject.Methodelongue

unload Fmire

end procedure, function , event

Je vois pas ce qu'il y a de pas portable.

Chaque projet qui utilise myobject , j'ajoute Fmire au projet et
voilà.
Il est peut être
inutile de surcharger ce traitement, ainsi que sa portabilité. Vous
faite un simple doevents (pas de passage de valeurs ou autres
chose), de rendre la main quelques instants



Ok quels sont les critères de stop de ces qqs instants ?

et de continuer la suite de la
procèdure. Pouvez-vous me dire pourquoi le doevents n'est pas une
solution valable?



J'ai pas dis pas valable je l'utilise dans d'autres cas, juste
méfiant, car si les qqs instants dépassent qqs instants l'utilisateur
peut théoriquement lancer une autre tache si il y en a une de
lançable et du coup alourdir le traitement, ça implique un contrôle
préalable que seule la tâche acceptée peut être lancée.

Christophe


Avatar
Quasimodo
RE,
christophe-pasde<> brought next idea :
Re ,


Bonjour,
Vous avez raison, mais le problème, c'est que si cette fonction/procédure
ce trouve dans une dll à part (ou même dans un seul exe), vous devrez
passer en référence votre forme.



En fait je travail comme suit:

la dll externe est appelée dans un module de classe.
La feuille "Mire" : Fmire

procedure, function , event
Fmire.show
Fmire.refresh

Myobject.Methodelongue

unload Fmire

end procedure, function , event

Je vois pas ce qu'il y a de pas portable.


Sorry, sorry ..., je me suis mal exprimé.
Ok, c'est portable, mais je pensais plutôt au fait de dissocier le
traitement de la présentation.

Chaque projet qui utilise myobject , j'ajoute Fmire au projet et voilà.

Il est peut être
inutile de surcharger ce traitement, ainsi que sa portabilité. Vous faite
un simple doevents (pas de passage de valeurs ou autres chose), de rendre
la main quelques instants



Ok quels sont les critères de stop de ces qqs instants ?


Peut être un timer via l'api correspondant, ou modulo, un socket ouvert
(bon dans votre cas pas besoin d'un socket, mais pour une autre
application c'est possible, ...).
et de continuer la suite de la
procèdure. Pouvez-vous me dire pourquoi le doevents n'est pas une solution
valable?



J'ai pas dis pas valable je l'utilise dans d'autres cas, juste méfiant, car
si les qqs instants dépassent qqs instants l'utilisateur peut théoriquement
lancer une autre tache si il y en a une de lançable et du coup alourdir le
traitement, ça implique un contrôle préalable que seule la tâche acceptée
peut être lancée.


Et oui !!!
Christophe



Merci, pour votre réponse, je conprend mieux. J'avais oublié le fais
que le user pouvais faire autre chose.

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com
Avatar
Antoine Labusquière
Je confirme, le Doevents marche bien dans mon cas.
Merci pour vos éclaircissements

"Antoine Labusquière" a écrit dans le
message de news:cokc26$eof$
Hop, rebonjour.

J'ai u petit soucis d'affichage:
Lorsque mon appli se lance, sous certaines conditions je vais lancer un
traitement.
Ce traitement dure 1à 2 minutes, mais pendant ce temps là, rien n'est
visible à l'écran.
J'ai bien créé une feuille "Mire", pour patienter, que je charge au début


du
traitement, mais on ne voit pas le contenu de la feuille (et notamment le
message d'attente), mais seulement le contour de cette feuille.
Comment puis-je faire pour que cette feuille apparaisse correctement ???

Merci




1 2