Probléme de fenêtre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Pascal Vernie
Messages : 127
Inscription : mar. 15/mars/2005 16:37

Probléme de fenêtre

Message par Pascal Vernie »

Bonsoir à tous

Voila mon code:

Code : Tout sélectionner

Procedure Aide()
    OpenWindow(1,200,100, 100, 200,"AIDE", #PB_Window_SystemMenu )
    StartDrawing(WindowOutput(1))
    DrawText(10,10,"Ceci est l'aide")
    StopDrawing()
EndProcedure

If OpenWindow(0,100,100, 400, 300,"FENETRE PRINCIPALE", #PB_Window_SystemMenu )
    If CreateGadgetList(WindowID(0))
        ButtonGadget(0, 50, 75, 40, 20, "AIDE" ,#PB_Button_Default)
    EndIf
    
    
    Repeat 
        
        StartDrawing(WindowOutput(0)) 
        DrawText(10,10,"Mon Programme")
        Box(10,100,200,100,RGB($FF,$FF,$AE))
        StopDrawing() 
        
        EventID.l = WaitWindowEvent()
        
        If EventID = #PB_Event_Gadget
            Select EventGadget()
                Case 0
                    Aide()
            EndSelect
        EndIf
        
        If EventID = #PB_Event_CloseWindow
            If EventWindow() = 0
                fin = 1
            EndIf
            CloseWindow(EventWindow())
        EndIf
    Until fin = 1 
EndIf
End
Maintenant mon problème:
Lorsque je clique sur le bouton AIDE ma fenêtre s'affiche en effaçant une partie du texte "mon programme" et une partie du rectangle jaune, c'est normal.
Mais ou je ne trouve pas la solution c'est quand je déplace la fenêtre vers la droite mon texte et mon rectangle ne s'affichent correctement que lorsque je relache la souris.
je ne trouve pas cela trés pro, est-ce qu'il y a une solution qui rende mieux.
en vous remerciant de votre aide.
Amitiés
Pascal
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

comme ceci par exemple (utilisation d'une callback) :

Code : Tout sélectionner

Procedure Aide()
  OpenWindow(1,200,100, 100, 200,"AIDE", #PB_Window_SystemMenu )
EndProcedure

Procedure MaProcedureCallback(WindowID, message, wParam, lParam)
  
  Resultat = #PB_ProcessPureBasicEvents
  
  Select message
    
    Case #WM_PAINT
      
      Select WindowID
        
        Case WindowID(0) ; PRINCIPALE
          StartDrawing(WindowOutput(0))
          DrawText(10,10,"Mon Programme")
          Box(10,100,200,100,RGB($FF,$FF,$AE))
          StopDrawing()
          
        Case WindowID(1) ; AIDE
          StartDrawing(WindowOutput(1))
          DrawText(10,10,"Ceci est l'aide")
          StopDrawing()
          
      EndSelect
      
  EndSelect
  
  ProcedureReturn Resultat
  
EndProcedure

If OpenWindow(0,100,100, 400, 300,"FENETRE PRINCIPALE", #PB_Window_SystemMenu )
  
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 50, 75, 40, 20, "AIDE" ,#PB_Button_Default)
  EndIf
  
  SetWindowCallback(@MaProcedureCallback()) ; <----------------- CALLBACK POUR WM_PAINT --------<<<
  
  Repeat
    
    EventID.l = WaitWindowEvent()
    
    Select EventID
      
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            Aide()
        EndSelect
        
      Case #PB_Event_CloseWindow
        If EventWindow() = 0
          fin = 1
        EndIf
        CloseWindow(EventWindow())
        
    EndSelect
    
  Until fin = 1
  
EndIf
End 
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ou alors tu dessines tous tes tracés dans une image grace à ImageOutPut(0) au lieu de WindowOutput(0).
et enfin tu utilises l'image dans un ImageGadget() et ca devra être bon.
Image
Pascal Vernie
Messages : 127
Inscription : mar. 15/mars/2005 16:37

Message par Pascal Vernie »

Merci Flype
Je vais essayer de comprendre les callback, que je ne connaissais pas .
C'est exactement ce qoe je voulais, cela a une autre "gueule" que mon prog, là c'est pro. J'ai décidement encore beaucoup à apprendre ......
Merci encore.
Pascal
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

ou tout simplement sans callback (pk toujours ce réflexe ?)

Code : Tout sélectionner

Procedure Aide()
  OpenWindow(1,200,100, 100, 200,"AIDE", #PB_Window_SystemMenu )
EndProcedure

If OpenWindow(0,100,100, 400, 300,"FENETRE PRINCIPALE", #PB_Window_SystemMenu )
 
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 50, 75, 40, 20, "AIDE" ,#PB_Button_Default)
  EndIf
 
  Repeat
   
    EventID.l = WaitWindowEvent()
   
    Select EventID
     
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            Aide()
        EndSelect
      
      Case #WM_PAINT
     
        Select EventWindow()
         
          Case 0 ; PRINCIPALE
            StartDrawing(WindowOutput(0))
            DrawText(10,10,"Mon Programme")
            Box(10,100,200,100,RGB($FF,$FF,$AE))
            StopDrawing()
           
          Case 1 ; AIDE
            StartDrawing(WindowOutput(1))
            DrawText(10,10,"Ceci est l'aide")
            StopDrawing()
           
        EndSelect
       
      Case #PB_Event_CloseWindow
        If EventWindow() = 0
          fin = 1
        EndIf
        CloseWindow(EventWindow())
       
    EndSelect
   
  Until fin = 1
 
EndIf
End 
Dri
Pascal Vernie
Messages : 127
Inscription : mar. 15/mars/2005 16:37

Message par Pascal Vernie »

Merci pour ta réponse Dr. Dri, mais désolé ton Prog donne le même résultat que le mien, alors que celui de Flype n'efface pas le contenu de la fenêtre principale.
Amitiés.
Pascal
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Dr. Dri a écrit :ou tout simplement sans callback (pk toujours ce réflexe ?)
réflexe oui et non - çà dépend.
en l'occurrence ici çà permet d'intercepter les évènements
meme quand un autre évènement bloque la boucle purebasic.
Image
Répondre