Fenêtre Modale [Une autre solution]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Fenêtre Modale [Une autre solution]

Message par brossden »

Bonjour à tous

Kwain ... machin truc chose :wink: a posé la question de créer une fenetre modale.

Ce que j'ai pu voir ne me satisfaisait pas, j'ai réussi à pondre le code qui suit et qui me semble mieux répondre au problème.
Merci de me faire remonter les problèmes si vous en rencontrez !


Code : Tout sélectionner


Enumeration
  #Win0 : #Win1 : #BP0 : #Image0
EndEnumeration
ExamineDesktops()
res= keybd_event_( #VK_SNAPSHOT,0,#KEYEVENTF_EXTENDEDKEY,0 )
res= keybd_event_( #VK_SNAPSHOT,0,#KEYEVENTF_KEYUP,0 )
CreateImage(#Image0, DesktopWidth(0),DesktopHeight(0))
GetClipboardImage(#Image0)
Procedure Fond(Win,Ima)
  Fond.LOGBRUSH\lbStyle=3 : Fond\lbColor=0 : Fond\lbHatch=ImageID(Ima)
  SetClassLong_(WindowID(Win),-10,CreateBrushIndirect_(Fond))
EndProcedure
Procedure Open_Window_0()
  OpenWindow(#Win0,0, 0, DesktopWidth(0),DesktopHeight(0), "Image",  #PB_Window_BorderLess )
  Fond(#Win0,#Image0)
  OpenWindow(#Win1,50,50, 300,300, "Fenêtre Modale", #PB_Window_TitleBar |#PB_Window_ScreenCentered )
  CreateGadgetList(WindowID(#Win1))
  ButtonGadget(#BP0, 200, 120, 90, 30, "Terminer")
  StickyWindow(#Win0,1)
  DisableWindow(#Win0,1)
  StickyWindow(#Win0,0)
  StickyWindow(#Win1,1)
EndProcedure
Open_Window_0()
Repeat
  Event = WaitWindowEvent()
  GadgetID = EventGadget()
  If Event = #PB_Event_Gadget
    If GadgetID = #BP0
      End
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
End


Dernière modification par brossden le ven. 04/mai/2007 10:14, modifié 2 fois.
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour mon bon BROSSDEN :D

Alors la.....j'suis ébouriffé :D

Réouvrir un POST que je croyais perdu et impossible à faire 8O
Et ainsi réanimer la petite flamme d'espoir qui vivotait au fin fond de moi,
Grand merci.

Je vois que tu a triché en copiant l'ecran et en faisant croire que c'est le vrai fond que l'on vois, c'est malin :wink:

Le bleme que j'ai eu c'est que je n'arrive pas a faire apparaitre ma fenetre principale :cry:
J'ai essayé avec mes 2 neurones de modifier ton code, mais je ne vais pas te surprendre en te disant que je n'y suis pas arrivé :lol:

Le top serait d'intégrer la capture d'ecran dans la procedure afin que l'on ai pas de code à mettre en dehors, et aussi que tout ce qui est fait avant la procedure soit pris en charge dans l'image de l'ecran.

Voila ton code avec ma fenetre principale
Fait la apparaitre si t'es CAP :lol: :lol:

Code : Tout sélectionner

Enumeration 
 #Win0 : #Win1 : #BP0 : #Image0 
EndEnumeration 

ExamineDesktops() 
res= keybd_event_( #VK_SNAPSHOT,40,#KEYEVENTF_EXTENDEDKEY,0 ) 
CreateImage(#Image0, DesktopWidth(0),DesktopHeight(0)) 
GetClipboardImage(#Image0) 

Procedure Fond(Win,Ima) 
 Fond.LOGBRUSH\lbStyle=3 : Fond\lbColor=0 : Fond\lbHatch=ImageID(Ima) 
 SetClassLong_(WindowID(Win),-10,CreateBrushIndirect_(Fond)) 
EndProcedure 

Procedure Open_Window_0() 
  OpenWindow(#Win0,0, 0, DesktopWidth(0),DesktopHeight(0), "Image",  #PB_Window_BorderLess ) 
  Fond(#Win0,#Image0) 
  OpenWindow(#Win1,50,50, 300,300, "Fenêtre Modale", #PB_Window_TitleBar |#PB_Window_ScreenCentered ) 
  CreateGadgetList(WindowID(#Win1)) 
  ButtonGadget(#BP0, 200, 120, 90, 30, "Terminer") 
  StickyWindow(#Win0,1) 
  DisableWindow(#Win0,1) 
  StickyWindow(#Win0,0) 
  StickyWindow(#Win1,1) 
EndProcedure 

OpenWindow (15, 0, 0, 509, 185, "Fenetre principale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered ) 
Open_Window_0() 

Repeat 
  Event = WaitWindowEvent() 
  GadgetID = EventGadget() 
  If Event = #PB_Event_Gadget 
    If GadgetID = #BP0 
      End 
    EndIf 
  EndIf 
Until Event = #PB_Event_CloseWindow 

End 
Encore merci de ta precieuse aide
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Pour Kwain

Il y avait un Bug !

Reprends le code il est corrigé !

ton Problème :

Code : Tout sélectionner

Enumeration
  #Win0 : #Win1 :#Win2: #BP0 : #Image0: 
EndEnumeration
ExamineDesktops()
CreateImage(#Image0, DesktopWidth(0),DesktopHeight(0))



Delay(100)

res = keybd_event_( #VK_SNAPSHOT,0,#KEYEVENTF_EXTENDEDKEY,0 )
res = keybd_event_( #VK_SNAPSHOT,0,#KEYEVENTF_KEYUP,0 )

GetClipboardImage(#Image0)


Procedure Fond(Win,Ima)
  Fond.LOGBRUSH\lbStyle=3 : Fond\lbColor=0 : Fond\lbHatch=ImageID(Ima)
  SetClassLong_(WindowID(Win),-10,CreateBrushIndirect_(Fond))
EndProcedure

Procedure Open_Window_0()
  OpenWindow(#Win0,0, 0, DesktopWidth(0),DesktopHeight(0), "Image",  #PB_Window_BorderLess )
  Fond(#Win0,#Image0)
  OpenWindow (#Win2, 0, 0, 809, 185, "Fenetre principale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered )
  OpenWindow(#Win1,50,50, 300,300, "Fenêtre Modale", #PB_Window_TitleBar |#PB_Window_ScreenCentered )
  CreateGadgetList(WindowID(#Win1))
  ButtonGadget(#BP0, 200, 120, 90, 30, "Terminer")
  StickyWindow(#Win0,1)
  DisableWindow(#Win0,1)
  StickyWindow(#Win0,0)
  StickyWindow(#Win2,1)
  DisableWindow(#Win2,1)
  StickyWindow(#Win2,0)
  StickyWindow(#Win1,1)
EndProcedure


Open_Window_0()
Repeat
  Event = WaitWindowEvent()
  GadgetID = EventGadget()
  If Event = #PB_Event_Gadget
    If GadgetID = #BP0
      End
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
End
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Exact ça marche au poil.
Je sais je suis un peu casse c...... mais y'aurais pas moyen de faire une seule procedure avec tout le jus dedans style :

Code : Tout sélectionner

Procedure Open_SuperWindowBROSSDEN_Modale_0() 
x
x
x
x
x
x
x
  EndProcedure 

OpenWindow (#Win2, 0, 0, 809, 185, "Fenetre principale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered ) 
Open_SuperWindowBROSSDEN_Modale_0

Repeat 
  Event = WaitWindowEvent() 
  GadgetID = EventGadget() 
  If Event = #PB_Event_Gadget 
    If GadgetID = #BP0 
      End 
    EndIf 
  EndIf 
Until Event = #PB_Event_CloseWindow 
End 
Comme ça on met la procedure dans un .pbi et y'a juste à l'appeler pour avoir une fenetre modale.
Elle serait independante comme l'est l'instruction OpenWindow (#Win2, 0, 0, 809, 185, "Fenetre principale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered )

Puis en plus, on pourrait mettre tous le code et les fenetres avant, on appelle la super procedure BROSSDEN et Chniack c'est coincé jusqu'a que l'on eteigne la super fenetre modale BROSSDEN de la super procedure BROSSDEN :D

Mais quand on eteind la super fenetre modale BROSSDEN de la super procedure BROSSDEN les autres restent ça eteint pas le prg, pour eteindre le prg faut eteindre la fenetre principale merdique de KCC :D

Oui, oui je suis chiant, je sais je sais :oops:
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Pour Mon Petit Kwain machin truc chose ....

Que ne ferais-je pour toi !


Merci au Soldat inconnu et à Dobro pour la copie d'écran

Code : Tout sélectionner


Enumeration
  #Win0 : #Win1 : #WinM : #BP0 : #BP1 : #Image0
EndEnumeration
ExamineDesktops()

Procedure Open_Window_0()
  OpenWindow (#Win0, 0, 0, 809, 185, "Fenetre principale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered )
  CreateGadgetList(WindowID(#Win0))
  ButtonGadget(#BP0, 200, 120, 90, 30, "Ouvre Modale")
EndProcedure

Procedure Open_Window_1()
  OpenWindow (#Win1, 50, 50, 300, 300, "Fenetre Modale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible )
  CreateGadgetList(WindowID(#Win1))
  ButtonGadget(#BP1, 200, 120, 90, 30, "Ferme Modale")
EndProcedure

Procedure Modal(Win, Options)
  HideWindow(Win,1)
  Static WinA, Image
  If Options = 1
    #CAPTUREBLT = $40000000
    Image  = CreateImage ( #PB_Any, DesktopWidth (0), DesktopHeight (0))
    dc_bur = GetDC_ (0)
    DC_im = StartDrawing ( ImageOutput ( Image ))
    BitBlt_ (DC_im,0,0 , DesktopWidth (0), DesktopHeight (0), dc_bur , 0,0 , #SRCPAINT|#CAPTUREBLT )
    StopDrawing ()
    ReleaseDC_ (0, dc_bur)
    WinA = OpenWindow(#PB_Any,0, 0, DesktopWidth(0),DesktopHeight(0),"",  #PB_Window_BorderLess|#PB_Window_Invisible )
    Fond.LOGBRUSH\lbStyle=3 : Fond\lbColor=0 : Fond\lbHatch=ImageID(Image)
    SetClassLong_(WindowID(WinA),-10,CreateBrushIndirect_(Fond))
    HideWindow(WinA,0)
    DisableWindow(WinA,1)
    HideWindow(Win,0)
    StickyWindow(Win,1)

  ElseIf Options = 0
    HideWindow(WinA,1)
    StickyWindow(Win,0)
    CloseWindow(WinA)
    CloseWindow(Win)
  EndIf

EndProcedure

Open_Window_0()

Repeat
  Event = WaitWindowEvent()
  GadgetID = EventGadget()
  If Event = #PB_Event_Gadget
    If GadgetID = #BP0
      Open_Window_1()
      Modal(#Win1,1 )
    EndIf
    If GadgetID = #BP1
      Modal(#Win1,0 )
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
End

Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Alors la....les bras m'en tombent.

C'est génial, trop mégatop cool.

J'ai ajusté ton code pour qu'il aille dans mon appli.
Et je me suis aperçu que ça ne marchais pas à tous les coups une fois ton code modifié par mes soins (etonnant non :lol:).

Code : Tout sélectionner

Enumeration 
 #Win0 : #Win1 : #WinM : #BP0 : #BPM : #Image0 
EndEnumeration 

ExamineDesktops() 

Procedure OpenWinModal(Win, x, y, h, l, titre.s, Options) 
 #CAPTUREBLT = $40000000 
 CreateImage ( #Image0 , DesktopWidth (0), DesktopHeight (0)) 
 dc_bur = GetDC_ (0) 
 DC_im = StartDrawing ( ImageOutput ( #Image0 )) 
 BitBlt_ (DC_im,0,0 , DesktopWidth (0), DesktopHeight (0), dc_bur , 0,0 , #SRCPAINT|#CAPTUREBLT ) 
 StopDrawing () 
 ReleaseDC_ (0, dc_bur) 
 OpenWindow(#WinM,0, 0, DesktopWidth(0),DesktopHeight(0),"",  #PB_Window_BorderLess ) 
 Fond.LOGBRUSH\lbStyle=3 : Fond\lbColor=0 : Fond\lbHatch=ImageID(#Image0) 
 SetClassLong_(WindowID(#WinM),-10,CreateBrushIndirect_(Fond)) 
 OpenWindow(Win, x, y, h, l, titre, Options) 
 DisableWindow(#WinM,1) 
 StickyWindow(Win,1) 
EndProcedure 

Procedure CloseModal(Win) 
  StickyWindow(Win,0) 
  CloseWindow(#WinM) 
  CloseWindow(Win) 
EndProcedure 

OpenWindow (#Win0, 0, 0, 809, 185, "Fenetre principale" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered ) 
CreateGadgetList(WindowID(#Win0)) 
ButtonGadget(#BP0, 200, 120, 90, 30, "Ouvre Modale") 

Repeat 

 Event = WaitWindowEvent() 
 GadgetID = EventGadget() 
 Delay(7)
  
 Select Event
  Case #PB_Event_CloseWindow
   If EventWindow() = #win1
    CloseModal(#Win1) 
   Else
    Break
   EndIf  
  Case  #PB_Event_Gadget 
   If GadgetID = #BP0 
    OpenWinModal(#Win1,50,50,300,300,"Fenêtre Modale", #PB_Window_SystemMenu|#PB_Window_TitleBar |#PB_Window_ScreenCentered ) 
   EndIf 
 EndSelect
 
ForEver

End 
J'avais un panneau gris à la place de l'image. 8O

J'ai donc rajouté un delay(6) dans la boucle et maintenant ça marche.
J'espere que j'ai bien fait ???

En tout cas, je te suis reconnaissant, moi et les 5 générations qui me succederons :lol:

Encore merci pour ton aide precieuse
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

J'ai changé le code pour rendre n'importe quelle fenetre modale reprends mon nouveaux code !
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

D'accord merci.

Je vais quitter mon boulot avec tristesse, puisque je te quitte par la meme occasion :cry:

Je te souhaite un bon et grand WE.

Peut etre pourrais-je clapoter ce WE, si ma femme me laisse faire, c'est pas gagné. :twisted:

Excelente soirée
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Tu va pas y croire
Je viens juste de tomber sur ce code que j'avais récupéré je ne sais ou.

Voila encore une autre methode.
Si ça peut aussi te donner des idées

Comme dab j'y comprend rien, meme pas une vague idée de ce qu'il a fait.
Au moins le tiens avait le merite d'etre compris au moins le principe par un amateur comme moi.

Code : Tout sélectionner

; English forum: http://purebasic.myforums.net/viewtopic.php?t=6060&highlight=
; Author: Spangly
; Date: 04. May 2003

; Proper Dialogs in Purebasic 
; Hacked together by Spangly 

Structure DLG_TEMPLATE 
    style.l 
    dwExtendedStyle.l 
    cdit.w 
    x.w 
    y.w 
    cx.w 
    cy.w 
    menu.w 
    class.w 
    title.l 
EndStructure 

dlg.DLG_TEMPLATE 
dlg\style=#WS_POPUP | #WS_BORDER | #WS_SYSMENU | #DS_MODALFRAME | #WS_CAPTION | #DS_CENTER 
dlg\cx=200 
dlg\cy=100 

Procedure DlgProc(hWnd, uMsg, wParam, lParam) 
 Select uMsg 
 Case #WM_INITDIALOG 
     CreateGadgetList(hWnd) 
     ButtonGadget(0,20,20,100,22,"OK") 
     ButtonGadget(1,20,50,100,22,"Cancel") 
     ButtonGadget(2,20,80,100,22,"Quit") 
     SetWindowText_(hWnd,"Dialog Title") 
 Case #WM_COMMAND 
     EndDialog_(hWnd,wParam&$FFFF) 
 EndSelect 
 ProcedureReturn 0 
EndProcedure 

OpenWindow(0, 325, 185, 600, 330, "Proper Dialogs", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar ) 
Debug DialogBoxIndirectParam_(0,dlg,WindowID(0),@DlgProc(),0) 

Repeat 
    event.l=WaitWindowEvent() 
    Select event 
        Case #PB_Event_Gadget 
            Debug EventGadget() 
    EndSelect 
Until event=#PB_Event_CloseWindow 

End 
Cette fois, c'est decidé, j'y vais je vais me faire engueuler ......
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

J'utilise ce code pour centrer une fenêtre modal sur la fenêtre principale:

Code : Tout sélectionner

Procedure OpenDialog2(Dialog_ID, Dialog_Larg, Dialog_Haut, Dialog_Texte.s, Window_Main1, Dialog_Option)
  If Dialog_Option
    ExamineDesktops()
    Dialog_Largeur = DesktopWidth(0)/2
    Dialog_Hauteur = DesktopHeight(0)/2 
  Else
    GetWindowRect_(WindowID(Window_Main1),Window1_Rect.RECT)
    Dialog_Largeur=Window1_Rect\left+((Window1_Rect\right-Window1_Rect\left)/2)
    Dialog_Hauteur=Window1_Rect\Top+((Window1_Rect\bottom-Window1_Rect\Top)/2)
  EndIf

  valeur.l=OpenWindow(Dialog_ID,0,0,Dialog_Larg,Dialog_Haut,Dialog_Texte,#PB_Window_Invisible)
  If Dialog_ID=-1
    Dialog_ID=valeur
  EndIf
  
  GetWindowRect_(WindowID(Dialog_ID),Dialog_Rect2.RECT)
  Dialog_Largeur2=(Dialog_Rect2\right-Dialog_Rect2\left)/2
  Dialog_Hauteur2=(Dialog_Rect2\bottom-Dialog_Rect2\Top)/2
  Dialog_X=Dialog_Largeur-Dialog_Largeur2
  Dialog_Y=Dialog_Hauteur-Dialog_Hauteur2

  SetWindowPos_(WindowID(Dialog_ID),WindowID(Window_Main1),Dialog_X,Dialog_Y,0,0,#SWP_NOSIZE|#SWP_SHOWWINDOW)
  
  If SetProp_(WindowID(Dialog_ID), "Window Main", WindowID(Window_Main1)) 
    If SetWindowLong_(WindowID(Window_Main1), #GWL_STYLE,GetWindowLong_(WindowID(Window_Main1),#GWL_STYLE) | #WS_DISABLED)
      Debug SetWindowLong_(WindowID(Dialog_ID),#GWL_HWNDPARENT,0)
      If  GetWindowLong_(WindowID(Dialog_ID),#GWL_HWNDPARENT)=WindowID(Window_Main1)
        ProcedureReturn valeur
      EndIf
    EndIf
  EndIf 
  ProcedureReturn 0
EndProcedure

Procedure CloseDialog2(Window_Dialog2)
  Window_Main.l= GetProp_(WindowID(Window_Dialog2), "Window Main")
  If RemoveProp_(WindowID(Window_Dialog2), "Window Main")
    If SetWindowLong_(Window_Main, #GWL_STYLE,GetWindowLong_(Window_Main,#GWL_STYLE) ! #WS_DISABLED)
      If SetFocus_(Window_Main)
        If CloseWindow(Window_Dialog2)
          ProcedureReturn 1
        EndIf
      EndIf
    EndIf
    EndIf 
  ProcedureReturn 0
EndProcedure  

Enumeration
  #Window=0
  #dialog
EndEnumeration

  OpenWindow(#Window,200,200,400,400,"Fenêtre principale",#PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(#Window))
    StringGadget(0,100,20,180,20,"")
  EndIf 
  ;-------------------------------------------------------------------- 
  dlg=OpenDialog2(#dialog,280,100,"Boite de Dialogue",#Window,0)
    ;Je crée une liste de gadget comme pour une fenêtre normal
    If CreateGadgetList(WindowID(#dialog))
      TextGadget(2, 40, 10,180,20,"Entrez le mot de passe pour continuer",#PB_Text_Center) 
      StringGadget(3,40, 40,180,20,"",#PB_String_Password)  
      ButtonGadget(4,80,70,100,20,"OK") 
    EndIf
  ;--------------------------------------------------------------------  
  Repeat 
    EventID.l=WaitWindowEvent()
    Select EventID 
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 4
            texte.s=GetGadgetText(3)
            If texte<>""
              SetGadgetText(0,"Mot de passe correct")
            EndIf
            ;CallDebugger
            CloseDialog2(#dialog)
        EndSelect
        
      Case #WM_CLOSE
        Quit=1
    EndSelect 
  Until Quit=1
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci NICO

ça on peux dire que c'est de la vraie modale, comme chez bilou.

Le code est encore moins simple que celui du dessus, mais c'est de la modale, car on peux qd meme cliquer a coté de la fenetre principale.

La fenetre de BROSSDEN etait modale sur tout le PC.

J'ai encore planché et je viens de trouver moi aussi comment faire une fenetre modale.
Mon code est méga simple, j'ai trouvé cette fonction dans un autre code, mais vous allez rire, j'y ai rien compris :D
A part peut etre que l'on recupere le handle de je ne sais quoi, le fond d'ecran peut etre, puis on le desactive .... :roll:
Et on le reactive a la fermeture de la modale
J'ai tout bon ou bien je vais au coin :D

Enfin bref, ça marche et y'a 4 lignes.
J'aimerais quand meme connaitre votre avis.
Et si quelqu'un pouvait m'expliquer mon propre code ... :oops:

Si ça vous interesse, voila une methode de + pour creer une modale.
C'est quand meme dingue que ce soit si compliqué 8O

Code : Tout sélectionner

;     Fenetre modale créée par Kwai chang caine (Pour une fois, c'est bon de le souligner)
Version PB : 4.0
Date : 5/5/2007

#Label = 1
#Texte = 2
#Oui = 3
#Modale = 4
     
Procedure OpenModalWindow(Id, x, y, l, h , Titre$, Option) 
 Global hWinForeGround
 hWinForeGround = GetForegroundWindow_() 
 OpenWindow(Id, x, y, l, h , Titre$, Option) 
 EnableWindow_(hWinForeGround, #False) 
EndProcedure 

OpenWindow(0,5 , 5, 360, 90 , "Fenetre principale", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
CreateGadgetList(WindowID(0))
ButtonGadget(#Modale, 50, 50 , 100, 25, "Créer modale") 
     
Repeat 
 
 Evenement = WaitWindowEvent()
 
 Select Evenement
  
  Case #PB_Event_Gadget 
 
   Select EventGadget() 
  
    Case #Modale 
    
     OpenModalWindow(1, 10, 10, 250, 100 , "Fenetre modale", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
     CreateGadgetList(WindowID(1))
     TextGadget(#Label, 10, 10, 340, 20, "") 
     StringGadget(#Texte, 10, 10, 200, 20, "") 
     ButtonGadget(#Oui, 50, 50 , 100, 25, "Oui") 
       
    Case #Oui 
     
     Texte$ = GetGadgetText(#Texte)
     
     If Trim(Texte$) = ""
      MessageRequester("", "Le texte entré est vide",0)
     Else
      MessageRequester("", "Le texte entré est " + GetGadgetText(#Texte),0)
     EndIf 
   
   EndSelect 
  
  Case #PB_Event_CloseWindow  
  
   If EventWindow() = 1
    EnableWindow_(hWinForeGround, #True) 
    CloseWindow(1) 
   ElseIf EventWindow() = 0
    CloseWindow(0)
    Break
   EndIf
   
 EndSelect 
 
ForEver
Je tiens à remercier BROSSDEN, DOBRO, NICO, PROGI1984, MINIROP pour m'avoir aidé dans cette mini aventure :wink:
Bonne journée à vous et à toute la famille
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour à tous !
Je ne comprends pas votre raisonnement vous cherchez à faire une fenêtre modale et vous vous satisfaisez d'une fenêtre en arrière plan qui soit inactive, c'est pas la même chose et vous branler le moustique avec des gants de box !!!
Enfin vous ne devez pas avoir la même définition que moi de modale !
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Dis donc denis ........sur l'autre POST tu parle de pipe, sur celui-la de branler les moustiques, on sent bien que c'est le WE et qui plus est, la nuit et que peut etre que ce soir ongogolo a la case, ou bien au contraire y'a "mal de tete" en ce moment, enfin bref ...... :lol: :lol:

En fait ce que je voulais, c'est une modale comme le defini bilou avec son VB.
Normalement ces deux derniers codes reproduisent exactement l'effet crosoft, j'ai vérifié, ça fait la meme chose.
Voila, quoi qu'il en soit cela ne devalorise pas ton code pour le coup :wink:
C'est juste une autre maniere de faire une modale, diront nous beaucoup plus radicale, c'est tout.

Bonne "nuit" et ce soir essaye sans les gants de boxes c'est + facile :lol: :lol:
Répondre