Page 1 sur 2
Fenêtre principale restant active
Publié : ven. 13/févr./2004 22:35
par ZapMan
Je suis en train de réaliser un éditeur de sons multifenêtres. L'ennui c'est que quand j'ouvre ou que je clique sur une fenêtre Child, ma fenêtre principale devient inactive. Mes menus deviennent donc inactif eux aussi. Je voudrais que la fenêtre principale reste toujours active quels que soient les actions de l'utilisateur dans la fenêtre principale. C'est ce qui se passe normalement dans un programme multifenêtre (voir par exemple Word ou Excel). Mon code ressemble à :
OpenWindow (1, blabla...)
OpenWindow (2, blabla...)
SetParent_(WindowID(1),WindowID(2))
Merci de votre aide, j'ai passé des heures à décortiquer ce problème sans résultat.
ZapMan -
Bleupiscines@lagoon.nc
Publié : sam. 14/févr./2004 8:04
par Anonyme2
Salut,
essaye avec la commande ActivateWindow() qui donne le focus à la fenêtre.
Avant cette commande, utilise UseWindow(#Fenetre) pour sélectionner la bonne fenêtre.
Fenêtre principale restant active
Publié : dim. 15/févr./2004 22:22
par ZapMan*
Ma question n'était peut-être pas suffisamment claire : Je veux que la fenêtre principale reste active EN MEME TEMPS que la fenêtre fille (child). Si le menu de ma fenêtre principale comporte par exemple la commande "fermer", cette commande doit pouvoir fonctionner aprés que j'ai cliqué sur la barre de titre de l'une de mes fenêtres filles.
Publié : dim. 15/févr./2004 22:35
par Chris
Salut
C'est déjà l'état par défaut, ça, il me semble
Normalement, PB ne fait pas de fenêtres modales sans passer par du code.
Tu n'aurais pas un bout de code à poster? , ce serait plus simple
Chris

Publié : lun. 16/févr./2004 7:49
par ZapMan*
If OpenWindow(0,30,140, 550, 300, #PB_Window_SystemMenu ,"Fenêtre Maman")
If CreateMenu(0, WindowID())
MenuTitle("File")
MenuItem(1, "Open"+Chr(9)+"Ctrl+O")
MenuItem(2, "Close"+Chr(9)+"Ctrl+W")
MenuItem(3, "Quit"+Chr(9)+"Ctrl+Q")
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_ShortCut_O, 1)
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_ShortCut_W, 2)
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_ShortCut_Q, 3)
EndIf
NoWin=1
OpenWindow(NoWin,(NoWin*10),(NoWin*10), 300, 200, #PB_Window_SystemMenu ,("Fenêtre Fille"+Str(NoWin)))
SetParent_(WindowID(NoWin), WindowID(0)) ; Child Window
CreateGadgetList(WindowID(NoWin))
EditorGadget(1,5,5,290,190)
AddGadgetItem(1,-1,"Voilà le problème :")
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"Quand cette fenêtre est au premier plan,")
AddGadgetItem(1,-1,"le raccourci clavier CTRL W (par exemple)")
AddGadgetItem(1,-1,"ne marche pas.")
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"Dans une application multifenêtre telle que Word,")
AddGadgetItem(1,-1,"la fenêtre principale reste active même quand")
AddGadgetItem(1,-1,"l'une des fenêtres filles est active.")
AddGadgetItem(1,-1,"On a alors DEUX fenêtres actives en même temps.")
AddGadgetItem(1,-1,"Comment faire ça ??")
Quit=0
Close=0
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_EventMenu
Select EventMenuID()
Case 1
NoWin+1
OpenWindow(NoWin,(NoWin*10),(NoWin*10), 300, 200, #PB_Window_SystemMenu ,("Fenêtre Fille"+Str(NoWin)))
SetParent_(WindowID(NoWin), WindowID(0)) ; Child Window
Case 2
Close=1
Case 3
Quit=1
EndSelect
ElseIf EventID = #PB_EventCloseWindow
Close=1
EndIf
If Close
Close=0
WID=GetForeGroundWindow_()
LookForWin=0
While WindowID(LookForWin)<>WID
LookForWin+1
Wend
If LookForWin = 0
Quit=1
EndIf
CloseWindow(LookForWin)
EndIf
Until Quit = 1
EndIf
End
Publié : lun. 16/févr./2004 11:42
par Chris
Salut
Bon... Là, je comprends mieux ce que tu veux faire
Le problème, c'est que Word, c'est du MDI, Multiple Document Interface ou Interface à Documents Multiples pour les p'tits gars d' cheu nous
Et ça, à mon avis, Pure Basic ne sait le faire que par le code.
Il n'y a pas, à ma connaissance, de fonctions prévues pour.
Si Fred peut confirmer!!!
J'ai trouvé un post de El Choni sur le forum anglais, qui pourrait peut-être te servir, mais bon... ça à l'air chaud à coder.
http://purebasic.myforums.net/viewtopic.php?t=3706
En fait, c'est un template MDI, c'est à dire que c'est le code de base. A toi, ensuite, d'adapter les fenêtres filles à ta convenance.
Chris

Publié : lun. 16/févr./2004 15:35
par Fred
Le MDI sera supporté dans la prochaine version

Publié : lun. 16/févr./2004 15:56
par Chris
Chouette... Merci Fred
Chris

Publié : lun. 16/févr./2004 18:22
par Le Soldat Inconnu
Chouette

Publié : lun. 16/févr./2004 18:36
par Oliv
Elle va être bien la prochaine mise à jour

Merci fred
Fenêtre MDI
Publié : lun. 16/févr./2004 21:52
par ZapMan
Merci mille fois à tous. Merci Chris, ta réponse m'éclaire tout à fait. Le lien que tu m'a donné ne fonctionne pas pour le moment mais j'essayerai plus tard (les trucs chauds à coder, ça me plait).
S'il vous reste un peu d'énergie, ça serait vraiment génial de m'apporter le même type d'aide pour mon autre question tordue : comment réaliser un Drag and drop de données entre 2 fenêtres (voir cette autre question dans le forum).
Le forum c'est génial. Merci encore à tous.
Publié : mar. 17/févr./2004 1:54
par cederavic
j'ai jeter un oeil sur l'api et aparement, il faut recuperer le evenement sur la fenetre parent ET la fenetre child donc il faut passer par l'api ou faire un truc genre
Code : Tout sélectionner
#Window1 = 1 ; fenetre parent
#Window2 = 2 ; fenetre child
UseWindow(#Window1)
Select WindowEvent()
;blablabla
EndSelect
UseWindow(#Window2)
Select WindowEvent()
;blablabla
EndSelect
a tester....

Publié : mar. 17/févr./2004 6:29
par ZapMan
Non, Cederavic (mais merci pour ton aide). Le problème est d'avoir DEUX fenêtre actives en même temps, pas de les activer à tour de rôle. Je n'ai pas eu le temps de jeter un coup d'Oeil du côté de MDI mais la solution est surement là-dedans.
Publié : mar. 17/févr./2004 13:07
par cederavic
oui oui mais il me semble avoir vu dans l'api que l'on peut metre un flag parent ou child, je vais retourner voir (sinon j'ai relu mon code et tu a raion c'est pas du tout ça lol)
La clé du problème
Publié : mer. 18/févr./2004 22:26
par ZapMan