Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1629 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [vb6] mdi child toujours visible, c impossible???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[vb6] mdi child toujours visible, c impossible???

n°482278
fils_de_la​_lumiere
Posté le 10-08-2003 à 01:31:37  profilanswer
 

j'ai dans un feuille mdi
 
- une form qui prend tout la largeur & longeur
- et un petit form de 100x100
 
je voudrai que la petite form soit toujours visible dans la feuille mdi meme si on clic sur la grande form
 
j'ai mis ca dans un module :  
 

Declare Sub 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)


 
et ca dans la form parent
 
 

Form1.Show
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
SetWindowPos Form1.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW


 
mais ca marche pas et ca fait 8 heure que je suis dessus est ce que qq1 peut me depanner ca m'aiderai vraiment
 
merci

mood
Publicité
Posté le 10-08-2003 à 01:31:37  profilanswer
 

n°482285
karlkox
Posté le 10-08-2003 à 03:49:17  profilanswer
 

C'est normal ... tu passe l'hWnd de la grande feuille. Il faut que tu récuperes l'hWnd des feuilles fille (via FindWindow, par exemple) et tu passes l'hWnd retourné à SetWindowPos.

n°482286
fils_de_la​_lumiere
Posté le 10-08-2003 à 04:16:42  profilanswer
 

tu veu parler de Form1.hWnd? paske Form1 c le nom de la ptite mdi child

n°482287
karlkox
Posté le 10-08-2003 à 04:23:22  profilanswer
 

Tu es sur ?? bizarre ... je n'ai jamais fait d'application MDI mais bon, je ne vois pas pourquoi ca ne s'appliquerais pas dans ce contexte [:anne-sophie]
 
MAJ : ca vient peut etre de ton flag, je fais pour ma part
 
SetWindowPos Form1.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE


Message édité par karlkox le 10-08-2003 à 04:27:50
n°482344
cvb
Posté le 10-08-2003 à 11:55:52  profilanswer
 


Fonction SetWindowPos


 

Code :
  1. Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" ( _
  2.                  ByVal hwnd As Long, _
  3.                  ByVal hWndInsertAfter As Long, _
  4.                  ByVal x As Long, _
  5.                  ByVal y As Long, _
  6.                  ByVal cx As Long, _
  7.                  ByVal cy As Long, _
  8.                  ByVal wFlags As Long) As Long


 
 


Cette API permet d'afficher la fenêtre où bon vous semble sur  
l'écran en exécutant une méthode du type move avec la possibilité de laisser la feuille toujours au premier plan d'affichage.  
hwnd est le handle de la feuille,  
hWndInsertAfter est une des contantes définies ci-dessous,  
X, Y, cx et cy sont respectivement les coordonnées et les dimensions de l'image.  
wFlags est une combinaison de constantes ci-dessous.  
 
 
HWND_BOTTOM 1 -->Place la fenêtre en dessous de toutes les autres.  
HWND_NOTOPMOST -2 --> Place la fenêtre au dessus de toutes les fenêtres qui n'ont pas l'attribut "TOPMOST" (et en dessous de ces dernières).  
HWND_TOP 0 --> Place la fenêtre au premier niveau.  
HWND_TOPMOST -1 --> Place la fenêtre au premier niveau, celle-ci conserve cet attribut même lorsqu'elle perd le focus.  
SWP_HIDEWINDOW &H80 --> Cache la fenêtre.  
SWP_NOACTIVATE &H10 --> N'active pas la fenêtre.  
SWP_NOMOVE &H2 --> Garde la même position (les paramètres X et Y ne sont pas pris en compte).  
SWP_NOSIZE &H1 --> Conserve les dimensions courantes (paramètres cx et cy pas pris en compte).  
SWP_SHOWWINDOW &H40 --> Affiche la fenêtre.  


 

Code :
  1. Exemple d'utilisation :
  2. ' Cette fonction vous permet de créer des boîtes à outils (Toolbox).
  3. Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _
  4.         ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _
  5.         ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  6. Private Const HWND_TOPMOST = -1
  7. Private Const HWND_NOTOPMOST = -2
  8. Private Function PositionForm(ByVal Feuille As Form, Optional PrePlan As Boolean = True) As Long
  9. Dim lgConst As Long
  10. If PrePlan Then
  11.     lgConst = HWND_TOPMOST
  12. Else
  13.     lgConst = HWND_NOTOPMOST
  14. End If
  15. PositionForm = SetWindowPos(Feuille.hwnd, lgConst, _
  16.                 Feuille.Left \ Screen.TwipsPerPixelX, _
  17.                 Feuille.Top \ Screen.TwipsPerPixelY, _
  18.                 Feuille.Width \ Screen.TwipsPerPixelX, _
  19.                 Feuille.Height \ Screen.TwipsPerPixelY, 0)
  20. End Function
  21. Private Sub Form_Load()
  22. ' Pour mettre une Feuille au premier plan, il suffit alors d'ajouter le code suivant:
  23. PositionForm Form1
  24. ' Pour qu'elle retrouve un comportement normal:
  25. PositionForm Form1, False
  26. End Sub


 
va sur ma signature API WINDOWS. sa vient de là. Les constantes comme les fonctions se déclare dans les modules en mode public ou en private avant le code à proprement dit, comme montré dans l'exemple. Les constantes n'ont rien à faire dans la code....comme je le vois. Tu mets juste leur valeur et uniquement !


Message édité par cvb le 10-08-2003 à 11:56:55
n°482385
karlkox
Posté le 10-08-2003 à 13:33:13  profilanswer
 

Je ne pense pas que ca vienne de la, tu peux tres bien déclarer les constantes dans le bloc de la fonction PositionForm. Non, je pense que ca vient de son hWnd, il doit croire que le form1.hWnd correspond a celui de sa fenêtre MDI mais chaque fenêtre fille à son propre hWnd ...

n°482527
cvb
Posté le 10-08-2003 à 15:41:22  profilanswer
 

karlkox a écrit :

Je ne pense pas que ca vienne de la, tu peux tres bien déclarer les constantes dans le bloc de la fonction PositionForm. Non, je pense que ca vient de son hWnd, il doit croire que le form1.hWnd correspond a celui de sa fenêtre MDI mais chaque fenêtre fille à son propre hWnd ...


 
je pense également, mais quand je vois des constantes déclarés, comme il le fait dans son code, sa fait bizarre ! [:athlonmp]

n°489515
fils_de_la​_lumiere
Posté le 17-08-2003 à 16:30:24  profilanswer
 

merci pour toute vos reponses mais j'ai toujours ce probleme, voila ce que je fait et ca marche pas http://kabee.free.fr/contacts_spac [...] ditest.zip
 
ya forcement quelque chose que je fait pas correctement mais koi :??:  
 
dans mon exemple au dessus je voudrait juste que form2 soit toujours visible
 
 :jap:

n°489578
fils_de_la​_lumiere
Posté le 17-08-2003 à 18:06:58  profilanswer
 

up

n°489666
karlkox
Posté le 17-08-2003 à 20:00:20  profilanswer
 

Je viens de regarder mais tu ne peux pas mêttre que la form2 visible, il faut que la form mère (MDIform) le soit aussi.

mood
Publicité
Posté le 17-08-2003 à 20:00:20  profilanswer
 

n°489769
fils_de_la​_lumiere
Posté le 17-08-2003 à 22:42:12  profilanswer
 

c a dire?
 
je veut que la 2 soit "superieur" à la 1 et 3

n°490144
cvb
Posté le 18-08-2003 à 12:12:05  profilanswer
 

tu auras une feuille qui saura toujours au dessus d'une autre ! c'est quelques choses d'évident ! Si tu veux afficher la feuille trois, pour y faire des manip, tu ne peux pas demander à la deux d'être au premier plan, c'est pas jouable et inversement! Et ce quels soient au des fenêtres filles MDI ou "normal"...
 
Aprés si tu veux afficher ta feuille 2 au premier plan, pour une raison quelconque, tu peux le faire avec l'API windows.  
 
Personellement, - je n'ai pas essayé avec les feuilles fille MDI - je l'ai fais avec des feuilles normal et le code vérifier et revéfifier, n'as jamais fonctionner, sauf dans le cas d'un projet avec uniquement deux feuilles...j'avais toujours la feuille que je voulais mettre au premier plan, en arrière plan, ou dans la barre des tâches. Elle ne prenait pas la priorité sur une application X, comme Word ou quelques choses comme ça. C'est peut-être VB qui ne digère pas cette API windows dans certains des cas. Il faut vérifier.


Message édité par cvb le 18-08-2003 à 12:23:46
n°494838
fils_de_la​_lumiere
Posté le 22-08-2003 à 18:46:07  profilanswer
 

cvb a écrit :

tu auras une feuille qui saura toujours au dessus d'une autre ! c'est quelques choses d'évident ! Si tu veux afficher la feuille trois, pour y faire des manip, tu ne peux pas demander à la deux d'être au premier plan, c'est pas jouable et inversement! Et ce quels soient au des fenêtres filles MDI ou "normal"...
 
Aprés si tu veux afficher ta feuille 2 au premier plan, pour une raison quelconque, tu peux le faire avec l'API windows.  
 
Personellement, - je n'ai pas essayé avec les feuilles fille MDI - je l'ai fais avec des feuilles normal et le code vérifier et revéfifier, n'as jamais fonctionner, sauf dans le cas d'un projet avec uniquement deux feuilles...j'avais toujours la feuille que je voulais mettre au premier plan, en arrière plan, ou dans la barre des tâches. Elle ne prenait pas la priorité sur une application X, comme Word ou quelques choses comme ça. C'est peut-être VB qui ne digère pas cette API windows dans certains des cas. Il faut vérifier.


 
mais pourtant j'ai deja vu des appli vb avec des mdi dont une été toujours visible quand l'utilisateur le désirai donc je c'est que c'est possible. C'est forcement moi qui utilise mal l'api windows.

n°494924
cvb
Posté le 22-08-2003 à 19:47:42  profilanswer
 

fils_de_la_lumiere a écrit :


 
mais pourtant j'ai deja vu des appli vb avec des mdi dont une été toujours visible quand l'utilisateur le désirai donc je c'est que c'est possible. C'est forcement moi qui utilise mal l'api windows.


 
ne confonds tu pas avec avec les feuilles modal et non modal, dans ce cas là c'est trés simple, la feuille en arrière plan n'est pas accessible et le code est trés simple :
 
load form1
form1.show 1
 
@+

n°494986
fils_de_la​_lumiere
Posté le 22-08-2003 à 21:07:11  profilanswer
 

cvb a écrit :


 
ne confonds tu pas avec avec les feuilles modal et non modal, dans ce cas là c'est trés simple, la feuille en arrière plan n'est pas accessible et le code est trés simple :
 
load form1
form1.show 1
 
@+


 
lorsque que je lui dit ça il me répond assez explicitement :D :
 
Les feuilles MDI filles ne peuvent pas être affichées modalement. Mais bon c form1.show 1 qui renvoie cette erreur, je suis casi sur qu'avec une api bien faite on peut faire afficher une mdi fille toujours visible par rapport aux autres MDI fille

n°495021
cvb
Posté le 22-08-2003 à 22:22:43  profilanswer
 

fils_de_la_lumiere a écrit :


 
lorsque que je lui dit ça il me répond assez explicitement :D :
 
Les feuilles MDI filles ne peuvent pas être affichées modalement. Mais bon c form1.show 1 qui renvoie cette erreur, je suis casi sur qu'avec une api bien faite on peut faire afficher une mdi fille toujours visible par rapport aux autres MDI fille


 
Personellement, je n'en connais pas. Essaye sur http://www.mentalis.org/ tu as + de 900 API windows à feuilleté !  [:ddr555]  si tu as des problème avec ta connection, aucun problème, tu peux télécharger une application, qui fonctionne trés bien !  :D  
 
Ensuite concernant l'erreur, je parlais pour des feuilles non MDI qui elle peuvent être modal ! Aprés concernant. Si tu trouves n'hésite pas à nous fournir la solution, sa fera avancé les choses. Perso, sa m'interesse !


Message édité par cvb le 22-08-2003 à 22:23:28

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [vb6] mdi child toujours visible, c impossible???

 

Sujets relatifs
impossible dafficher 2 script JS sur la meme page[Résolu] Impossible d'exécuter des javascript
VB6 - Composant FTP : Ch testeurs (code source client FTP fourni)[VB6] Datagrid et ajout d'enregistrement via code
[VBA Access] Le nom des variables reste til "visible" dans les ".mde"lnk1104 impossible d'ouvrir libcmt.lib
[CSS] Faire un Halo autour du texte [ - Impossible - ]impossible de catcher une exception
[VB6] PB avec un filter de type 'like'tableau dynamique en VB6 (débutant)
Plus de sujets relatifs à : [vb6] mdi child toujours visible, c impossible???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR