[VB] Fenêtres semi-modales...

Fenêtres semi-modales... [VB] - VB/VBA/VBS - Programmation

Marsh Posté le 23-03-2004 à 16:42:49    

Salut à tous
 
Je souhaiterais afficher une fenêtre (Form) en mode semi-modal, c'est-a-dire que cette fenêtre reste toujours au 1er plan à l'écran mais il est quand même possible de cliquer sur d'autres fenêtres derrières.
 
Comment puis-je faire ça?
 
VB ne propose que 2 méthodes: vbModal et vbModeless
 
PS: toutes mes fenêtres appartiennent à la même application

Reply

Marsh Posté le 23-03-2004 à 16:42:49   

Reply

Marsh Posté le 23-03-2004 à 16:47:27    

C'est pas modal ça, c'est topmost.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 23-03-2004 à 16:56:37    

Possible avec une API
 
A mettre de préference dans un module séparé

Code :
  1. 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
  2. Public Sub FormOnTop(hWindow As Long, bTopMost As Boolean)
  3. ' Example: Call FormOnTop(me.hWnd, True)
  4.     Const SWP_NOSIZE = &H1
  5.     Const SWP_NOMOVE = &H2
  6.     Const SWP_NOACTIVATE = &H10
  7.     Const SWP_SHOWWINDOW = &H40
  8.     Const HWND_TOPMOST = -1
  9.     Const HWND_NOTOPMOST = -2
  10.    
  11.     wFlags = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
  12.    
  13.     Select Case bTopMost
  14.     Case True
  15.         Placement = HWND_TOPMOST
  16.     Case False
  17.         Placement = HWND_NOTOPMOST
  18.     End Select
  19.    
  20.     SetWindowPos hWindow, Placement, 0, 0, 0, 0, wFlags
  21. End Sub


 
A mettre dans l'evennement Load de la forme que tu veux garder en premier plan:

Code :
  1. Private Sub Form_Load()
  2.     Call FormOnTop(Me.hWnd, True)
  3. End Sub


 
:)

Reply

Marsh Posté le 23-03-2004 à 16:57:57    

topmost= au 1er plan par rapport à toutes les autres fenêtres de Windows
 
Moi je veux juste que ce soit par rapport à toutes les fenêtres de cette appli (MDI) uniquement. Est-ce possible?

Reply

Marsh Posté le 23-03-2004 à 16:59:29    

Merci ixemul !
 
"A mettre de préference dans un module séparé " <<-- pourquoi au juste?

Reply

Marsh Posté le 23-03-2004 à 17:00:26    

Lancelot** a écrit :

Merci ixemul !
 
"A mettre de préference dans un module séparé " <<-- pourquoi au juste?


 
Paske c'est plus propre  :o  
 

Reply

Marsh Posté le 23-03-2004 à 17:04:36    

:lol: je m'attendais pas à cette réponse!!!
 
Je pensais que t'allais me parler de stabilité...
Je trouve pas que c'est tellement plus propre.

Reply

Marsh Posté le 23-03-2004 à 17:06:22    

bha, question de "philosophie de developpement", j'aime bien mettre toutes mes declaration d'API a part du reste de mon programme ;)

Reply

Marsh Posté le 23-03-2004 à 17:11:37    

pareil, les API dans VB, ça reste quand même sacrément dégueulasse à regarder -> module dédié et elles sont encapsulées dans de belles fonctions VB :)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-03-2004 à 17:18:31    

bon sinon y'a un truc bizarre ixemul
Ma fenêtre affichée en mode topmost perd instantanément "la main" (ou le focus). Et j'ai beau cliquer dessus (sur la barre de titre), c'est comme si je cliquais sur la fenêtre de derrière.
 
Par ailleurs, j'aurais aimer mettre ma fenêtre en topmost juste par rapport à l'appli et non à Windows tout entier. :)

Reply

Marsh Posté le 23-03-2004 à 17:18:31   

Reply

Marsh Posté le 23-03-2004 à 17:22:52    

je pense que je vais trouver. Suffit de modifier les constantes et d'utiliser HWND_TOP

Reply

Marsh Posté le 23-03-2004 à 17:37:38    

"Aides toi et le ciel t'aideras :o"
 
;)

Reply

Marsh Posté le 23-03-2004 à 17:45:49    

mouai... ceci dit j'y arrive pas! :(
T'as testé ton exemple?

Reply

Marsh Posté le 23-03-2004 à 17:48:41    

non :)

Reply

Marsh Posté le 23-03-2004 à 17:55:22    

mouarf

Reply

Marsh Posté le 23-03-2004 à 18:28:57    

erf... Décidément je comprends pas pourquoi cette foutue fenêtre ne garde pas le focus. Est-ce parce que mes autres fenêtres derrières sont en mode modal?

Reply

Marsh Posté le 23-03-2004 à 18:36:31    

Lancelot** a écrit :

erf... Décidément je comprends pas pourquoi cette foutue fenêtre ne garde pas le focus. Est-ce parce que mes autres fenêtres derrières sont en mode modal?


 
 :ouch: Evidemment !

Reply

Marsh Posté le 23-03-2004 à 18:46:54    

arg! ça peut pas marcher alors!
Tant pi
 
Merci pour tout

Reply

Marsh Posté le 24-03-2004 à 08:22:47    

Comment il peut avoir plusieurs fenêtres modales en même temps dans son appli ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-03-2004 à 10:37:00    

VB l'autorise
Par contre dès qu'une fenêtre est modale, on ne peut afficher une nouvelle fenêtre en mode modeless (logique)

Reply

Marsh Posté le 24-03-2004 à 23:48:37    

Ce que je veux dire :

Code :
  1. win1.ShowModal()
  2. win2.ShowModal()


win2 ne sera pas montrée tant que win1 ne sera pas fermé...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 25-03-2004 à 07:16:25    

euh ça c'est du .NET il me semble, on n'était pas en VB(6)(A) là? :D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 25-03-2004 à 09:34:30    

sisi VB6 ruleeeezzzzzzzzzzzzz :lol:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed