Fenêtre principale restant active

Programmation d'applications complexes
ZapMan

Fenêtre principale restant active

Message 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. :evil:

ZapMan - Bleupiscines@lagoon.nc
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
ZapMan*

Fenêtre principale restant active

Message 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.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :)
ZapMan*

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :lol:

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 :)
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Le MDI sera supporté dans la prochaine version :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Chouette... Merci Fred ;)

Chris :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Chouette :10:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Elle va être bien la prochaine mise à jour :D Merci fred
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Fenêtre MDI

Message 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.
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message 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.... :)
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message 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.
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message 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)
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

La clé du problème

Message par ZapMan »

Le lien de Chris marche de nouveau et l'exemple qu'il a déniché correspond trés précisement à la solution de ce problème :
:D :D :D :D :D :D :D :D :D
http://purebasic.myforums.net/viewtopic.php?t=3706

Merci infiniment, Chris. Je me demande comment tu as fait pour trouver pile poil ce qu'il fallait aussi rapidement. Ma reconnaissance sera éternelle.

Yo !
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Répondre