Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Form non modal dans une DLL

4 réponses
Avatar
Bruno L
Bonjour,
J'ai un soucis avec un Form dans une DLL

Je d=E9veloppe une appli (HTML/VBScript)... Derri=E8re, j'ai=20
une DLL (VB6) que j'utilise pour r=E9cup=E9rer des donn=E9es=20
d'une autre appli.

Quand je clique sur un lien de ma page HTML, je voudrais=20
faire appara=EEtre une progressbar (ou au moins une fen=EAtre=20
pour faire patienter l'utilisateur).

J'ai essay=E9 de cr=E9er un FORM dans ma DLL. Pas de soucis.
Le probl=E8me c'est que quand j'essaie de l'afficher =E0=20
partir de ma page HTML il me dit que le FORM doit=20
obligatoirement est modal (car c'est une DLL).
Re-probl=E8me... La fen=EAtre modale stoppe le traitement=20
jusqu'=E0 sa fermeture !!!

Quelqu'un aurait une id=E9e ???
Merci d'avance.

4 réponses

Avatar
Ludovic SOEUR
C'est par une astuce de sioux que l'on peut y arriver ! J'ai eu le même
problème où je voulais faire une requête asynchrone et afficher une barre de
progression.

L'astuce est assez simple.
Dans ton programme, tu places un timer que tu mets à "disabled" et à
interval = 10 (un nombre différent de 0 et petit)
Maintenant, on va supposer que ta form avec la progress bar s'appelle
fProgress.
Dans ton code, au lieu de mettre

fProgress.show vbModal
mafonctiondetraitement
fProgress.Hide (ca n'a pas vraiment de sens vu que ton programme était
bloqué sur le sowh vbModal mais bon on comprend ce que tu voulais faire)
mafonctionquivasuivre

il faut mettre le code suivant :

monTimer.enabled=true 'Lance le timer pour avoir une reprise de main après
le show
fProgress.show vbModal 'Affiche la form de progression et à windows de
traiter le 1er message du timer
mafonctionquivasuivre 'La reprise se fera ici quand dans le code du timer,
l'appel à hide sera effectué

Ton code sera stoppé au show vbmodal, mais tu va pouvoir reprendre la main
grace au timer. Il te faut donc rajouter le code du timer

public sub monTimer_Timer()
monTimer.enabledúlse 'Ne pas oublier d'annuler l'astuce de sioux
mafonctiondetraitement
fProgress.Hide 'Rend la main au programme principal
end sub

Et voila, le programme qui était bloqué au show vbModal va reprendre au
moment où il y aura le Hide
Reste à toi de mettre dans "mafonctiondetraitement" la modification de la
progressbar de la form fProgress

Je ne sais pas si j'ai été assez clair....

"Bruno L" a écrit dans le message de news:
34e701c4293b$1a5dca20$
Bonjour,
J'ai un soucis avec un Form dans une DLL

Je développe une appli (HTML/VBScript)... Derrière, j'ai
une DLL (VB6) que j'utilise pour récupérer des données
d'une autre appli.

Quand je clique sur un lien de ma page HTML, je voudrais
faire apparaître une progressbar (ou au moins une fenêtre
pour faire patienter l'utilisateur).

J'ai essayé de créer un FORM dans ma DLL. Pas de soucis.
Le problème c'est que quand j'essaie de l'afficher à
partir de ma page HTML il me dit que le FORM doit
obligatoirement est modal (car c'est une DLL).
Re-problème... La fenêtre modale stoppe le traitement
jusqu'à sa fermeture !!!

Quelqu'un aurait une idée ???
Merci d'avance.
Avatar
ng
Salut,

Soit tu déclenches le traitement dans l'événement activate de ta form :

Dim bShow As Boolean
Private Sub Form_Load()
If Not bShow Then
bShow = True
'//code
End If
End Sub

Soit tu jettes un oeil sur l'API ShowWindows pour afficher ta form :

'//Dans ton module de classe :

Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal
nCmdShow As Long) As Long
Private Const SW_SHOWNORMAL = 1

'//Fonction affichant la form Form1
Public Sub ShowMaForm()
Call Load(Form1)
Call ShowWindow(Form1.hwnd, SW_SHOWNORMAL)
'//traitement
MsgBox "traitement"
End Sub


--
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/
http://apisvb.europe.webmatrixhosting.net/

Bruno L a écrit :

Bonjour,
J'ai un soucis avec un Form dans une DLL

Je développe une appli (HTML/VBScript)... Derrière, j'ai
une DLL (VB6) que j'utilise pour récupérer des données
d'une autre appli.

Quand je clique sur un lien de ma page HTML, je voudrais
faire apparaître une progressbar (ou au moins une fenêtre
pour faire patienter l'utilisateur).

J'ai essayé de créer un FORM dans ma DLL. Pas de soucis.
Le problème c'est que quand j'essaie de l'afficher à
partir de ma page HTML il me dit que le FORM doit
obligatoirement est modal (car c'est une DLL).
Re-problème... La fenêtre modale stoppe le traitement
jusqu'à sa fermeture !!!

Quelqu'un aurait une idée ???
Merci d'avance.


Avatar
Bruno L
Merci beaucoup, c'est nickel (j'utilise showWindows)

-----Message d'origine-----
Salut,

Soit tu déclenches le traitement dans l'événement


activate de ta form :

Dim bShow As Boolean
Private Sub Form_Load()
If Not bShow Then
bShow = True
'//code
End If
End Sub

Soit tu jettes un oeil sur l'API ShowWindows pour


afficher ta form :

'//Dans ton module de classe :

Private Declare Function ShowWindow Lib "user32" (ByVal


hwnd As Long, ByVal
nCmdShow As Long) As Long
Private Const SW_SHOWNORMAL = 1

'//Fonction affichant la form Form1
Public Sub ShowMaForm()
Call Load(Form1)
Call ShowWindow(Form1.hwnd, SW_SHOWNORMAL)
'//traitement
MsgBox "traitement"
End Sub


--
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/
http://apisvb.europe.webmatrixhosting.net/

Bruno L a écrit :

Bonjour,
J'ai un soucis avec un Form dans une DLL

Je développe une appli (HTML/VBScript)... Derrière, j'ai
une DLL (VB6) que j'utilise pour récupérer des données
d'une autre appli.

Quand je clique sur un lien de ma page HTML, je voudrais
faire apparaître une progressbar (ou au moins une




fenêtre
pour faire patienter l'utilisateur).

J'ai essayé de créer un FORM dans ma DLL. Pas de soucis.
Le problème c'est que quand j'essaie de l'afficher à
partir de ma page HTML il me dit que le FORM doit
obligatoirement est modal (car c'est une DLL).
Re-problème... La fenêtre modale stoppe le traitement
jusqu'à sa fermeture !!!

Quelqu'un aurait une idée ???
Merci d'avance.




.



Avatar
Bruno L
Merci pour ta soluce mais j'en ai une autre avec les API

Load Form1
ShowWindow Form1.Hwnd SW_SHOW

Ca marche nickel sans fenêtre modale.
Merci ng pour l'idée

-----Message d'origine-----
C'est par une astuce de sioux que l'on peut y arriver !


J'ai eu le même
problème où je voulais faire une requête asynchrone et


afficher une barre de
progression.

L'astuce est assez simple.
Dans ton programme, tu places un timer que tu mets


à "disabled" et à
interval = 10 (un nombre différent de 0 et petit)
Maintenant, on va supposer que ta form avec la progress


bar s'appelle
fProgress.
Dans ton code, au lieu de mettre

fProgress.show vbModal
mafonctiondetraitement
fProgress.Hide (ca n'a pas vraiment de sens vu que ton


programme était
bloqué sur le sowh vbModal mais bon on comprend ce que tu


voulais faire)
mafonctionquivasuivre

il faut mettre le code suivant :

monTimer.enabled=true 'Lance le timer pour avoir une


reprise de main après
le show
fProgress.show vbModal 'Affiche la form de progression et


à windows de
traiter le 1er message du timer
mafonctionquivasuivre 'La reprise se fera ici quand dans


le code du timer,
l'appel à hide sera effectué

Ton code sera stoppé au show vbmodal, mais tu va pouvoir


reprendre la main
grace au timer. Il te faut donc rajouter le code du timer

public sub monTimer_Timer()
monTimer.enabledúlse 'Ne pas oublier d'annuler


l'astuce de sioux
mafonctiondetraitement
fProgress.Hide 'Rend la main au programme principal
end sub

Et voila, le programme qui était bloqué au show vbModal


va reprendre au
moment où il y aura le Hide
Reste à toi de mettre dans "mafonctiondetraitement" la


modification de la
progressbar de la form fProgress

Je ne sais pas si j'ai été assez clair....

"Bruno L" a écrit dans le message de


news:
34e701c4293b$1a5dca20$
Bonjour,
J'ai un soucis avec un Form dans une DLL

Je développe une appli (HTML/VBScript)... Derrière, j'ai
une DLL (VB6) que j'utilise pour récupérer des données
d'une autre appli.

Quand je clique sur un lien de ma page HTML, je voudrais
faire apparaître une progressbar (ou au moins une fenêtre
pour faire patienter l'utilisateur).

J'ai essayé de créer un FORM dans ma DLL. Pas de soucis.
Le problème c'est que quand j'essaie de l'afficher à
partir de ma page HTML il me dit que le FORM doit
obligatoirement est modal (car c'est une DLL).
Re-problème... La fenêtre modale stoppe le traitement
jusqu'à sa fermeture !!!

Quelqu'un aurait une idée ???
Merci d'avance.


.