Problème avec le rafraichissement de la fenêtre

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

Problème avec le rafraichissement de la fenêtre

Message par Le Soldat Inconnu »

Salut Fred

Voici le code en question, il y a beaucoup de gagdet et le rafraichissement de la fenêtre en prend un coup quand on passe du mode fenêtre pleine écran à fenêtre normal (le petit bouton a coté de la croix pour fermer la fenêtre dans la barre de titre :roll: )

En gros, ce me laisse des bout de dessin de gadget un peu partout sur la fenêtre


voici le code :

J'ai regarder si par hazard, je n'avais pas fait de bétise avec les numéros de gagdet mais non, j'ai tout mis dans une Enumeration ou par des #PB_Any

PB 4.10 installé

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication pour le programme :
; Ecriture sous forme HTML d'un caractère : ł

Enumeration 1
  #MDI
  
  #MDI_Categorie
  #MDI_Categorie_Liste
  #MDI_Categorie_Ajouter
  #MDI_Categorie_Renommer
  #MDI_Categorie_Supprimer
  #MDI_Categorie_Monter
  #MDI_Categorie_Descendre
  
  #MDI_Titre
  #MDI_Titre_Liste
  #MDI_Titre_Ajouter
  #MDI_Titre_Renommer
  #MDI_Titre_Supprimer
  #MDI_Titre_Monter
  #MDI_Titre_Descendre
  
  #Dictionnaire_Nom
  #Dictionnaire_Liste
  
  #Categorie_Nom
  
  #Recherche_Nom
  #Recherche_Texte
  #Recherche_Categories
  #Recherche_Titres
  #Recherche_Lancer
  #Recherche_Defaut
  
  #Resultat_Nom
  #Resultat_Liste
  
  #Menu_Organiser_Cascade
  #Menu_Organiser_Horizontal
  #Menu_Organiser_Vertical
  #Menu_Edition_Categorie
  #Menu_Edition_Titre
  #Menu_Edition_Definition_Ajouter
  #Menu_Edition_Definition_Editer
  #Menu_Option_Langue
  #Menu_Clavier = 100
  #Menu_MDI = 200
  
  #Categorie_Ligne_H = 300
  #Recherche_Ligne_H = 320
  #Separation_Ligne_V = 340
EndEnumeration


Global Dictionnaire.s, Organisation.l

#Espace_V = 10
#Espace_H = 5
#Espace_Ligne = 4

#Clavier_Nom = 25
#Clavier_Nom_H = 16
#Clavier_Bouton = 22
#Clavier_Bouton_Maj = 25
#Clavier_Espace = 5
#Clavier_NbLettre = 100
Structure Clavier_Info
  Nom.s
  Maj.l
  Nom_ID.l
  Menu_ID.l
  Maj_ID.l
  Active.l
  Touche_ID.l[#Clavier_NbLettre]
  Touche_Min.c[#Clavier_NbLettre]
  Touche_Maj.c[#Clavier_NbLettre]
EndStructure
Global NewList Clavier.Clavier_Info()

#Categorie_Largeur = 150
#Categorie_Nb = 20
#Categorie_Texte_H = 16
Structure Categorie_Info
  Nom.s
  Ordre.l
  Recherche.l
  Nom_ID.l
  Liste_ID.l
EndStructure
Global Dim Categorie.Categorie_Info(#Categorie_Nb)
#Texte_Nb = 20
Structure Titre_Info
  Nom.s
  Ordre.l
  Recherche.l
EndStructure
Global Dim Titre.Titre_Info(#Texte_Nb)
Structure Definition_Info
  id.l
  Categorie.l[#Categorie_Nb]
  Texte.s[#Texte_Nb]
  Texte_ID.l[#Texte_Nb]
EndStructure
Global NewList Definition.Titre_Info()

Structure Page_Info
  Win_ID.l
  WebG_ID.l
  Definition_ID.l
EndStructure

#Recherche_Largeur = 150
#Recherche_Texte_H = 16

Declare Sauver()


Procedure Gestion_Organisation(Type = 0)
  Organisation = Type
  
  If Organisation = #PB_MDI_Cascade
    SetMenuItemState(0, #Menu_Organiser_Cascade, 1)
  Else
    SetMenuItemState(0, #Menu_Organiser_Cascade, 0)
  EndIf
  If Organisation = #PB_MDI_TileHorizontally
    SetMenuItemState(0, #Menu_Organiser_Horizontal, 1)
  Else
    SetMenuItemState(0, #Menu_Organiser_Horizontal, 0)
  EndIf
  If Organisation = #PB_MDI_TileVertically
    SetMenuItemState(0, #Menu_Organiser_Vertical, 1)
  Else
    SetMenuItemState(0, #Menu_Organiser_Vertical, 0)
  EndIf
EndProcedure

Procedure Charger_Clavier()
  ; If ExamineDirectory(0, "Clavier\", "*.clv")
    ; While NextDirectoryEntry(0)
      ; FileType = DirectoryEntryType(0)
      ; 
      ; If FileType = #PB_DirectoryEntry_File
        ; Fichier.s = DirectoryEntryName(0)
        ; 
        ; If ReadFile(0, "Clavier\" + Fichier)
          ; AddElement(Clavier())
          ; Clavier()\Nom = StringField(Fichier, 1, ".")
          ; n = -1
          ; Maj = 0
          ; Repeat
            ; n + 1
            ; Caractere.c = ReadCharacter(0)
            ; If Caractere = 0
              ; Maj + 1
              ; n = -1
            ; Else
              ; If Maj
                ; Clavier()\Touche_Maj[n] = Caractere
              ; Else
                ; Clavier()\Touche_Min[n] = Caractere
              ; EndIf
            ; EndIf
          ; Until Eof(0)
          ; 
          ; CloseFile(0)
        ; EndIf
        ; 
      ; EndIf
      ; 
    ; Wend
  
  AddElement(Clavier())
  Clavier()\Nom = "FR 1"
  Clavier()\Active = 1
  n = -1
  For Caractere = 97 To 122
    n + 1
    Clavier()\Touche_Maj[n] = Caractere
    Clavier()\Touche_Min[n] = Caractere
  Next
  
  AddElement(Clavier())
  Clavier()\Nom = "FR 2"
  Clavier()\Active = 1
  n = -1
  For Caractere = 97 To 122
    n + 1
    Clavier()\Touche_Maj[n] = Caractere
    Clavier()\Touche_Min[n] = Caractere
  Next
    
    SortStructuredList(Clavier(), 2, OffsetOf(Clavier_Info\Nom), #PB_Sort_String) 
    
    n = #Menu_Clavier
    ForEach Clavier()
      Clavier()\Menu_ID = n
      n + 1
    Next
    
  ; EndIf
EndProcedure

Procedure Clavier_Majuscule()
  If Clavier()\Maj
    For n = 0 To #Clavier_NbLettre - 1
      If Clavier()\Touche_Maj[n]
        SetGadgetText(Clavier()\Touche_ID[n], Chr(Clavier()\Touche_Maj[n]))
      EndIf
    Next
  Else
    For n = 0 To #Clavier_NbLettre - 1
      If Clavier()\Touche_Min[n]
        SetGadgetText(Clavier()\Touche_ID[n], Chr(Clavier()\Touche_Min[n]))
      EndIf
    Next
  EndIf
EndProcedure
Procedure Clavier_Creation()
  If Clavier()\Active
    Clavier()\Nom_ID = TextGadget(#PB_Any, 0, 0, #Clavier_Nom, #Clavier_Nom_H, Clavier()\Nom)
    SetGadgetFont(Clavier()\Nom_ID, FontID(1))
    Clavier()\Maj_ID = ButtonGadget(#PB_Any, 0, 0, #Clavier_Bouton_Maj, #Clavier_Bouton, "aA", #PB_Button_Toggle)
    For n = 0 To #Clavier_NbLettre - 1
      If Clavier()\Touche_Min[n]
        Clavier()\Touche_ID[n] = ButtonGadget(#PB_Any, 0, 0, #Clavier_Bouton, #Clavier_Bouton, "")
      Else
        Break
      EndIf
    Next
    Clavier_Majuscule() ; Laissez à la fin
  Else
    FreeGadget(Clavier()\Nom_ID)
    FreeGadget(Clavier()\Maj_ID)
    For n = 0 To #Clavier_NbLettre - 1
      If Clavier()\Touche_ID[n]
        FreeGadget(Clavier()\Touche_ID[n])
        Clavier()\Touche_ID[n] = 0
      EndIf
    Next
  EndIf
EndProcedure

Declare Fenetre_Dimension(Zone = -1)

Procedure Fenetre_Edition_Categorie()
  If IsWindow(#MDI_Categorie) = 0
    AddGadgetItem(#MDI, #MDI_Categorie, "Editer les catégories")
    #MDI_Categorie_Texte_H = 32
    
    
    If Organisation <> 0
      SetGadgetState(#MDI, Organisation)
      While WindowEvent() : Wend
    EndIf
    UseGadgetList(WindowID(0))
    Fenetre_Dimension(#MDI_Categorie)
  EndIf
EndProcedure
Procedure Fenetre_Edition_Titre()
  If IsWindow(#MDI_Titre) = 0
    AddGadgetItem(#MDI, #MDI_Titre, "Editer les titres")
    #MDI_Titre_Texte_H = 32
    
    If Organisation <> 0
      SetGadgetState(#MDI, Organisation)
      While WindowEvent() : Wend
    EndIf
    UseGadgetList(WindowID(0))
    Fenetre_Dimension(#MDI_Titre)
  EndIf
EndProcedure

Procedure Fenetre_Dimension(Zone = -1)
  If Zone <= 0
    y = 0
    L = WindowWidth(0)
    H = WindowHeight(0) - MenuHeight()
    ForEach Clavier()
      If Clavier()\Active = 1
        x = #Clavier_Espace
        ResizeGadget(Clavier()\Nom_ID, x, y + (#Clavier_Bouton - #Clavier_Nom_H) / 2, #PB_Ignore, #PB_Ignore) : x + #Clavier_Nom
        ResizeGadget(Clavier()\Maj_ID, x, y, #PB_Ignore, #PB_Ignore) : x + #Clavier_Bouton_Maj + #Clavier_Espace
        x2 = 0
        For n = 0 To #Clavier_NbLettre - 1
          If Clavier()\Touche_ID[n]
            ResizeGadget(Clavier()\Touche_ID[n], x + x2, y, #PB_Ignore, #PB_Ignore)
            x2 + #Clavier_Bouton
            If x2 + x  + #Clavier_Bouton > L And n < #Clavier_NbLettre - 1 And Clavier()\Touche_ID[n + 1]
              x2 = 0
              y + #Clavier_Bouton
            EndIf
          Else
            Break
          EndIf
        Next
        y + #Clavier_Bouton + #Clavier_Espace
      EndIf 
    Next
    
    ResizeGadget(#MDI, #Recherche_Largeur + #Espace_V + #Categorie_Largeur + #Espace_V, y, L - #Recherche_Largeur - #Espace_V - #Categorie_Largeur - #Espace_V, H - y)
    
    x = 0
    If y = 0
      y = #Espace_H
    EndIf
    y2 = y
    
    ResizeGadget(#Categorie_Ligne_H, x, y, #PB_Ignore, #PB_Ignore) : y + #Espace_Ligne
    ResizeGadget(#Dictionnaire_Nom, x + #Espace_V, y, #PB_Ignore, #PB_Ignore) : y + #Categorie_Texte_H
    ResizeGadget(#Dictionnaire_Liste, x, y, #PB_Ignore, #PB_Ignore) : y + GadgetHeight(#Dictionnaire_Liste) + #Espace_H
    
    ResizeGadget(#Categorie_Ligne_H + 1, x, y, #PB_Ignore, #PB_Ignore) : y + #Espace_Ligne
    ResizeGadget(#Categorie_Nom, x + #Espace_V, y, #PB_Ignore, #PB_Ignore) : y + #Categorie_Texte_H
    
    y = y2
    x = #Categorie_Largeur + #Espace_V
    ResizeGadget(#Recherche_Ligne_H, x, y, #PB_Ignore, #PB_Ignore) : y + #Espace_Ligne
    ResizeGadget(#Recherche_Nom, x + #Espace_V, y, #PB_Ignore, #PB_Ignore) : y + #Recherche_Texte_H
    ResizeGadget(#Recherche_Texte, x, y, #PB_Ignore, #PB_Ignore) : y + GadgetHeight(#Recherche_Texte)
    y + #Espace_H
    ResizeGadget(#Recherche_Categories, x, y, #PB_Ignore, #PB_Ignore) : y + GadgetHeight(#Recherche_Categories)
    ResizeGadget(#Recherche_Titres, x, y, #PB_Ignore, #PB_Ignore) : y + GadgetHeight(#Recherche_Titres)
    y + #Espace_H
    ResizeGadget(#Recherche_Lancer, x, y, #PB_Ignore, #PB_Ignore) : y + GadgetHeight(#Recherche_Lancer)
    ResizeGadget(#Recherche_Defaut, x, y, #PB_Ignore, #PB_Ignore) : y + GadgetHeight(#Recherche_Defaut)
    
    y + #Espace_H
    ResizeGadget(#Recherche_Ligne_H + 1, x, y, #PB_Ignore, #PB_Ignore) : y + #Espace_Ligne
    ResizeGadget(#Resultat_Nom, x + #Espace_V, y, #PB_Ignore, #PB_Ignore) : y + #Recherche_Texte_H
    ResizeGadget(#Resultat_Liste, x, y, #PB_Ignore, H - y - #Espace_H)
    
    If Organisation <> 0
      SetGadgetState(#MDI, Organisation)
      While WindowEvent() : Wend
    EndIf
    
  EndIf
  
  ; RedrawWindow_(GadgetID(#MDI), 0, 0, 1)
  
  If IsWindow(#MDI_Categorie) And (Zone < 0 Or Zone = #MDI_Categorie)
    x = 0
    y = 0
    L = WindowWidth(#MDI_Categorie)
    H = WindowHeight(#MDI_Categorie)
    
  EndIf
  
  If IsWindow(#MDI_Titre) And (Zone < 0 Or Zone = #MDI_Titre)
    x = 0
    y = 0
    L = WindowWidth(#MDI_Categorie)
    H = WindowHeight(#MDI_Categorie)
    
  EndIf
  
  
  
EndProcedure







Charger_Clavier()

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 500, 500, "Dictionnaire", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_Maximize | #PB_Window_Invisible | #PB_Window_SizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

;{- Police
LoadFont(0, "Tahoma", 8, #PB_Font_HighQuality)
LoadFont(1, "Tahoma", 8, #PB_Font_HighQuality | #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(0))
;}
;{- Menu
If CreateMenu(0, WindowID(0))
  MenuTitle("Edition")
  MenuItem(#Menu_Edition_Definition_Editer, "Ajouter une définition")
  MenuItem(#Menu_Edition_Definition_Editer, "Editer la définition")
  MenuBar()
  MenuItem(#Menu_Edition_Categorie, "Editer les catégories")
  MenuItem(#Menu_Edition_Titre, "Editer les titres")
  MenuTitle("Options")
  OpenSubMenu("Claviers")
    ForEach Clavier()
      MenuItem(Clavier()\Menu_ID, Clavier()\Nom)
      SetMenuItemState(0, Clavier()\Menu_ID, Clavier()\Active)
    Next
  CloseSubMenu()
  MenuBar()
  MenuItem(#Menu_Option_Langue, "Select language")
  MenuTitle("Fenêtres")
  MenuItem(#Menu_Organiser_Cascade, "Cascade")
  MenuItem(#Menu_Organiser_Horizontal, "Horizontal")
  MenuItem(#Menu_Organiser_Vertical, "Vertical")
  Gestion_Organisation(Organisation)
EndIf

;}

;{- Images


Couleur_Fond = GetSysColor_(#COLOR_3DFACE)

CreateImage(#Categorie_Ligne_H, #Categorie_Largeur, 2)
StartDrawing(ImageOutput(#Categorie_Ligne_H))

StopDrawing()
CreateImage(#Recherche_Ligne_H, #Recherche_Largeur, 2)
StartDrawing(ImageOutput(#Recherche_Ligne_H))

StopDrawing()
;}
;{- Gadgets
ForEach Clavier()
  If Clavier()\Active
    Clavier_Creation()
  EndIf
Next

MDIGadget(#MDI, 0, 0, 400, 400, 2, #Menu_MDI)
; AddGadgetItem(#MDI, #PB_Any, "Blabla 1")
; AddGadgetItem(#MDI, #PB_Any, "Blabla 2")

For n = 0 To 1
  ImageGadget(#Categorie_Ligne_H + n, 0, 0, #Categorie_Largeur, 2, ImageID(#Categorie_Ligne_H))
Next
TextGadget(#Dictionnaire_Nom, 0, 0, #Categorie_Largeur - #Espace_V, #Categorie_Texte_H, "Dictionnaire")
SetGadgetFont(#Dictionnaire_Nom, FontID(1))
ComboBoxGadget(#Dictionnaire_Liste, 0, 0, #Categorie_Largeur, 50)

TextGadget(#Categorie_Nom, 0, 0, #Categorie_Largeur - #Espace_V, #Categorie_Texte_H, "Catégories")
SetGadgetFont(#Categorie_Nom, FontID(1))

For n = 0 To 1
  ImageGadget(#Recherche_Ligne_H + n, 0, 0, #Recherche_Largeur, 2, ImageID(#Recherche_Ligne_H))
Next

TextGadget(#Recherche_Nom, 0, 0, #Recherche_Largeur - #Espace_V, #Recherche_Texte_H, "Rechercher")
SetGadgetFont(#Recherche_Nom, FontID(1))
StringGadget(#Recherche_Texte, 0, 0, #Recherche_Largeur, GadgetHeight(#Dictionnaire_Liste), "")
ListIconGadget(#Recherche_Categories, 0, 0, #Recherche_Largeur, 100, "Dans les catégories :", #Recherche_Largeur - 30, #PB_ListIcon_FullRowSelect | #PB_ListIcon_CheckBoxes)
ListIconGadget(#Recherche_Titres, 0, 0, #Recherche_Largeur, 100, "Dans les titres :", #Recherche_Largeur - 30, #PB_ListIcon_FullRowSelect | #PB_ListIcon_CheckBoxes)
ButtonGadget(#Recherche_Lancer, 0, 0, #Recherche_Largeur, 25, "Lancer", #PB_Button_Default)
SetGadgetFont(#Recherche_Lancer, FontID(1))
ButtonGadget(#Recherche_Defaut, 0, 0, #Recherche_Largeur, 21, "Effacer")

TextGadget(#Resultat_Nom, 0, 0, #Recherche_Largeur - #Espace_V, #Recherche_Texte_H, "Résultats")
SetGadgetFont(#Resultat_Nom, FontID(1))
ListViewGadget(#Resultat_Liste, 0, 0, #Recherche_Largeur, 100)
;}

Fenetre_Dimension()

HideWindow(0, 0)

Repeat
  Event = WaitWindowEvent()
  
  Select EventWindow() ; Fenêtre de provenance
    Case 0
      Select Event ; Evènement
        Case #PB_Event_Menu
          Select EventMenu()
              ;{ Menu "Fenêtre"
            Case #Menu_Organiser_Cascade
              SetGadgetState(#MDI, #PB_MDI_Cascade )
              While WindowEvent() : Wend
              Gestion_Organisation(#PB_MDI_Cascade)
            Case #Menu_Organiser_Horizontal
              SetGadgetState(#MDI, #PB_MDI_TileHorizontally )
              While WindowEvent() : Wend
              Gestion_Organisation(#PB_MDI_TileHorizontally)
            Case #Menu_Organiser_Vertical
              SetGadgetState(#MDI, #PB_MDI_TileVertically )
              While WindowEvent() : Wend
              Gestion_Organisation(#PB_MDI_TileVertically)
              ;}
              ;{Menu edition
            Case #Menu_Edition_Categorie
              Fenetre_Edition_Categorie()
            Case #Menu_Edition_Titre
              Fenetre_Edition_Titre()
              ;}
            Case #Menu_Option_Langue

              
            Default
              ForEach Clavier()
                If EventMenu() = Clavier()\Menu_ID
                  Clavier()\Active = Clavier()\Active ! 1
                  Clavier_Creation()
                  SetMenuItemState(0, Clavier()\Menu_ID, Clavier()\Active)
                  Fenetre_Dimension()
                EndIf
              Next
          EndSelect
          
        Case #PB_Event_Gadget
          ForEach Clavier()
            Select EventGadget() ; Gadgets
              Case Clavier()\Maj_ID
                Clavier()\Maj = GetGadgetState(Clavier()\Maj_ID)
                Clavier_Majuscule()
            EndSelect
          Next
          
        Case #PB_Event_SizeWindow
          Fenetre_Dimension(0)
          
        Case #PB_Event_CloseWindow
          Quitter = 1
      EndSelect
      
    Case #MDI_Categorie
      Select Event
        Case #PB_Event_SizeWindow
          Fenetre_Dimension(#MDI_Categorie)
          Gestion_Organisation(0)
        Case #PB_Event_MoveWindow
          Gestion_Organisation(0)
        Case #PB_Event_CloseWindow
          CloseWindow(#MDI_Categorie)
      EndSelect
    Case #MDI_Titre
      Select Event
        Case #PB_Event_SizeWindow
          Fenetre_Dimension(#MDI_Categorie)
          Gestion_Organisation(0)
        Case #PB_Event_MoveWindow
          Gestion_Organisation(0)
        Case #PB_Event_CloseWindow
          CloseWindow(#MDI_Categorie)
      EndSelect
    Default
      
      
  EndSelect
  
  
Until Quitter

End
Ca plante chez d'autre pour l'affichage de la fenêtre quand on du mode fenêtre pleine écran à fenêtre normal ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

hum !!

Je te conseille d'aller lui dire ça sur le Forum Anglais
Parce que Fred ne viens quasi plus ici !! :?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Une bonne remarque :

Ca plante que quand je réduis la fenêtre, un début d'explication :

Je remets en place les gadget du haut de la fenêtre d'abord puis ceux du bas.
Donc quand je diminue la taille de la fenêtre, je viens déplacer des gadgets sur d'autres que je vais déplacer plus tard.
Et tous les gadgets qui se sont retrouvés sous un autre gadget pendant la phase de redimensionnement ne sont pas rafraichis correctement.
En gros, il garde le dessin du gadget qui a été dessiné par dessus.

Faut que je passe tous mes gadgets avec des RedrawWindow_ et bazar du genre de l'API ?
Répondre