Fenetre d'attente pendant une recherche
Le
jerome
Bonjour,
Je voudrais pouvoir afficher une fenetre pendant l'exécution d'une procédure
stockée envoyant à l'utilisateur un message d'attente.
Le problème est que la fenetre d'où est lancée la requete est une fenetre
modale.
Si je fais un attente.show vbModeless j'ai un message d'erreur me disant que
je ne peux afficher une fenetre non modale par dessus une fenetre modale.
Et si je fais un attente.show vbModal la suite du code vb ne se fait pas
tant que la fenetre d'attente n'a pas été fermée.
Comment puis-je faire ?
En sachant que ma fenetre d'appel est nécessairement, dans mon cas une
fenetre modale.
Merci
Je voudrais pouvoir afficher une fenetre pendant l'exécution d'une procédure
stockée envoyant à l'utilisateur un message d'attente.
Le problème est que la fenetre d'où est lancée la requete est une fenetre
modale.
Si je fais un attente.show vbModeless j'ai un message d'erreur me disant que
je ne peux afficher une fenetre non modale par dessus une fenetre modale.
Et si je fais un attente.show vbModal la suite du code vb ne se fait pas
tant que la fenetre d'attente n'a pas été fermée.
Comment puis-je faire ?
En sachant que ma fenetre d'appel est nécessairement, dans mon cas une
fenetre modale.
Merci

Poser une question


Hello,
une solution alternative:
tu mets sur ta fenêtre un ou des controle(s) invisible(s),
par exemple des Label avec un texte comme
"Veuillez Patienter etc."
Juste avant le lancement de ta requête, tu rends ces controles
visibles. Puis à la fin de l'exec, tu les remet en invisible.
Avec un peu de soin, on peut faire quelque chose de joli
et pratique.
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Jean-marc a écrit :
Deux solutions alternatives ;-) :
Utiliser les API pour afficher la seconde fenêtre :
Private Const SW_SHOW = 5
Private Const HWND_TOPMOST = -1
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Declare Function ShowWindow Lib "user32" ( _
ByVal hwnd As Long, _
ByVal nCmdShow As Long) As Long
Private Declare Function SetWindowPos Lib "user32" ( _
ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long
Private Sub Command1_Click()
ShowWindow Form2.hwnd, SW_SHOW
SetWindowPos Form2.hwnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, _
SWP_NOSIZE Or SWP_NOMOVE
End Sub
Il n' y plus là de notions de vbModal ou vbModeless pour la fenêtre
appelée, par contre la fenêtre appelante garde le Focus (la fenêtre
appelée ne reçoit pas les événement souris ou clavier).
Une autre solution est d'utiliser un Exe ActiveX pour la seconde
fenêtre. Tournant 'Out of Process', les deux fenêtres vivent leur vie de
manière indépendante. C'est plus lourd à mettre en oeuvre, mais cela
permet plus de liberté.
--
Cordialement,
Jacques.
La solution API fonctionne.
Par contre j'essaie de faire en sorte que le Private Declare Function soit
écrit dans un module pour être appelé à plusieurs endroits.
Du style Public Declare Function mais je ne trouve pas la syntaxe correcte.
Re- Merci
"Jacques93" wrote in message
news:%230gB%
fenetre
disant
modale.
pas
Pourtant en mettant les déclarations des fonctions et des constantes
dans un module et en remplaçant Private par Public ça devrais marcher.
Tu peux aussi laisser ces fonctions (et constantes) en Private et
rajouter une fontion Public dans laquelle tu mets le code d'appel des
deux APIs, comme par exemple:
'Attention, non testé (pas envi de lancer VB6)
Public Function ShowFormOnTop(f as Form) as Long
ShowWindow f.hwnd, SW_SHOW
ShowFormOnTop = SetWindowPos(f.hwnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, _
SWP_NOSIZE Or SWP_NOMOVE)
End Function
Vincent Guichard
Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal
nCmdShow As Long) As Long
j'ai un message d'erreur : erreur de compilation, seul des commentaires
peuvent apparaitre apres end sub, end function ou end property
"Vincent Guichard" news:4564825d$0$5104$
soit
correcte.