Repertoire racine d'un ExplorerListGadget()

Programmation d'applications complexes
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Repertoire racine d'un ExplorerListGadget()

Message par Chris »

J'ai un petit problème à vous soumettre!

J'ouvre un ExplorerListGadget(), en lui donnant un répertoire de départ, avec le flag #PB_Explorer_NoParentFolder.

Ce que je voudrais, c'est que le dossier parent,(l'icône avec les deux points ..), n'apparaisse pas lorsque je suis dans le dossier racine, mais soit visible quand je suis dans un des sous-dossiers.

Je ne sais pas si je me suis bien expliqué, mais en résumé, je voudrais avoir les flags suivants:

Si je suis dans le dossier racine : #PB_Explorer_NoDriveRequester|#PB_Explorer_NoMyDocuments|#PB_Explorer_NoParentFolder
Si je suis dans un des sous-dossiers : #PB_Explorer_NoDriveRequester|#PB_Explorer_NoMyDocuments

J'ai essayé avec un SetWindowLong_(), mais ça n'a pas l'air de fonctionner. Alors si quelqu'un a une idée...!

Code : Tout sélectionner

#Window = 0
#Explorer = 0

chemin$ = "D:\PureBasic\CodeArchiv\"

StyleRoot = #PB_Explorer_NoDriveRequester|#PB_Explorer_NoMyDocuments|#PB_Explorer_NoParentFolder

If OpenWindow(#Window,0,0,220,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ExplorerListGadget")
  If CreateGadgetList(WindowID(#Window)) 
    hExpl = ExplorerListGadget(#Explorer, 0, 0, 220, 200, chemin$+"*.pb" , StyleRoot)
  EndIf
  
  ; For i = 3 To 1 Step -1
    ; SendMessage_(hExpl,#LVM_DELETECOLUMN,i,0)
  ; Next
  SendMessage_(hExpl,#LVM_SETCOLUMNWIDTH,0,GadgetWidth(#Explorer)-24)
  ChangeListIconGadgetDisplay(#Explorer,1)
  
  
  Repeat
    Select WaitWindowEvent()
      
      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #Explorer
            If EventType() = #PB_EventType_LeftDoubleClick
              Debug GetGadgetText(#Explorer)+GetGadgetItemText(#Explorer,GetGadgetState(#Explorer),0)
            EndIf
        EndSelect
        
      Case #PB_Event_CloseWindow
        quit = #True
    EndSelect
  Until quit
EndIf 
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je ne pense pas que cela soit possible tel que c'est actuellement.

Le dossier parent .. est ajouté à la liste en fonction des paramètres passés une fois pour toute à l'exploreur (pas de possibilités de modifier les flags).

Si tu es dans le répertoire racine, le fait de cliquer sur le .. affichera l'ensemble des drives.

Il faudrait qu'il y ait un flag empêchant d'afficher l'ensemble des drives, et donc d'avoir ce .. qui sert à ça dans ce cas précis.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ce serait bien, d'avoir la possibilité en option, de ne pas pouvoir remonter dans l'arborescence contenant le dossier qui a été déclaré comme racine.
Ca pourrait également s'appliquer à l'ExplorerComboGadget(), et à l'ExplorerTreeGadget()
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Tu as aussi la solution de faire ceci:

Code : Tout sélectionner

#Window = 0 
#Explorer = 0 

Cible$ = "c:\PureBasic\" 
chemin$=Cible$
;/ j'ai rajouté #PB_Explorer_NoDirectoryChange pour gérer le double click gauche
;/ et j'ai supprimé #PB_Explorer_NoParentFolder

StyleRoot = #PB_Explorer_NoDriveRequester|#PB_Explorer_NoMyDocuments|#PB_Explorer_NoDirectoryChange 

If OpenWindow(#Window,0,0,220,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ExplorerListGadget") 
  If CreateGadgetList(WindowID(#Window)) 
    hExpl = ExplorerListGadget(#Explorer, 0, 0, 220, 200, chemin$+ "*.pb" , StyleRoot) 
  EndIf 
  
  
  Repeat 
    Select WaitWindowEvent() 
      
      Case #PB_Event_Gadget 
        Select EventGadgetID() 
          Case #Explorer 
            If EventType() = #PB_EventType_LeftDoubleClick 
              Element = GetGadgetState(#Explorer)
              If Element=0
                If Right(chemin$,1)="\":chemin2$=Left(chemin$,Len(chemin$)-1):EndIf 
                chemin2$ = GetPathPart(chemin2$) 
                If FindString(chemin2$, Cible$, 1)
                  chemin$=chemin2$
                Else
                  MessageRequester("Info","Répertoire supérieur interdit")
                EndIf 
              Else
                Result$ = GetGadgetItemText(#Explorer, Element, 0)
                chemin$=chemin$+Result$+"\"
              EndIf 
              SetGadgetText(#Explorer, chemin$)
            Else
            EndIf 
        EndSelect 
        
      Case #PB_Event_CloseWindow 
        Quit = #True 
    EndSelect 
  Until Quit 
EndIf 
:)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Sinon Chris, voici un mini exploreur qui n'affiche que le répertoire courant, à toi de gérer le reste.

Avec ce code , on peut trier en cliquant sur le bouton de la 1ere colonne par ordre alphabétique ou inverse avec la flèche qui indique le sens du tri (j'ai mis quelques explications) et qui fonctionne avec les flèches XP sous XP et celles des datas pour les autres OS.

On peut facilement ajouter les paramètres des fichiers.

Code : Tout sélectionner

; Auteur : Denis
; Version de PB : 3.92 beta
; Librairie utilisée : MoreListIconGadget --> sur mon mini site
; Date : 15 octobre 2004
;
; Explication du programme :
; Affiche le contenu d'un dossier avec les icônes, le nom de fichier/dossier
; le type (fichier ou dossier) et la date du dernier accès en écriture du fichier
;
; En cliquant sur le bouton des entêtes de colonnes 'Fichiers', il est possible de trier soit
; par ordre alphabétique ou inverse, et en fonction des options de laisser les dossier
; en haut de la liste
; en fonction des options, on peut afficher ou non la date des dossiers

Enumeration
  #MainWindow
  #ListIcon
  #Folder_En_Haut
  #Folder_En_Bas
  #Frame3DFolders
  #Date_Dossier_Ok
  #Date_Dossier_Non_Ok
  #Frame3DDate
  #Majuscule
  #Minuscule
  #Frame3DMaj
  #CouleurSysteme
  #CouleurPerso
  #Frame3DCouleur
  #Fleche_A_Droite
  #Fleche_A_Gauche
  #Frame3DFleche
  #Font
  #FontHeader
  #UxTheme_dll
  #Fleche_Up
  #Fleche_Down
EndEnumeration

Structure HDITEM
    mask.l 
    cxy.l
    pszText.l
    hbm.l
    cchTextMax.l
    fmt.l
    lParam.l
    iImage.l
    iOrder.l
    type.l
    pvFilter.l
EndStructure 

Structure SHFILEINFO_Ok ; la structure SHFILEINFO PB est fausse
  hIcon.l
  iIcon.l
  dwAttributes.l
  szDisplayName.b[#MAX_PATH]
  szTypeName.b[80]
EndStructure

Structure LVITEM ; La structure LV_ITEM est incomplète
  Mask.l
  iItem.l
  iSubItem.l
  State.l
  stateMask.l
  pszText.l
  cchTextMax.l
  iImage.l
  lParam.l
  iIndent.l
  iGroupId.l
  cColumns.l
  puColumns.l
EndStructure

Global Var.LVITEM ; utilisée pour relancer une séquence de tri de tous les éléments
Global TypeTri.l
Global Dossier.s
Global InfosFile.SHFILEINFO_Ok
Global ListIconHwnd
Global Position_Dossier ; mémorise la position des dossier, haute ou basse
Global TenirCompteMajuscule
Global ThemeActiver  ; 0 si pas de theme sinon le handle du theme
Global Hwnd_ImageList  ; le handle de l'image list lorsque les themes ne sont pas actifs
Global Index_FlecheUp    ; index de l'image fleche montante dans la liste des images
Global Index_FlecheDown  ; index de l'image fleche descendante dans la liste des images
Global Alignement        ; indique l'alignement de l'image du Header
                          ; #Image_A_Droite, à droite du texte
                          ; #Image_A_Gauche, à gauche du texte


; #LOCALE_USER_DEFAULT   = 1024
#LOCALE_SYSTEM_DEFAULT = 2048
#Date = "dd'/'MM'/'yyyy" ; format utiliser par l'API GetDateFormat
#Largeur_Fenetre = 800
#Hauteur_Fenetre = 495
#Position_Haute = 0
#Position_basse = 1
#Image_A_Droite = 0
#Image_A_Gauche = 1

; constantes du Header
#HDI_IMAGE = $0020
#HDI_ORDER = $0080
#HDF_IMAGE = $0800
#HDF_SORTUP = $400
#HDF_SORTDOWN = $200 
#HDF_BITMAP_ON_RIGHT = 4096
#HDM_SETIMAGELIST = 4616

Procedure Resequence()
  NbItem = CountGadgetItems(#ListIcon)
  Var\Mask = #LVIF_PARAM
  Var\iSubItem = 0
  Var\iItem = 0
  While NbItem
    Var\lParam = Var\iItem
    SendMessage_(ListIconHwnd, #LVM_SETITEM, 0, @Var)
    Var\iItem + 1
    NbItem - 1
  Wend
EndProcedure


Procedure Tri(lParam1.l, lParam2.l, lParamSort.l)
  ; le fait qu'il y a peu de colonne permet d'utiliser pour exemple les 16 bits de poids fort
  ;
  ; le codage est le suivant
  ; 1000000000000000    --> tri ascendant
  ; 0100000000000000    --> tri descendant
  
  #Ascendant = 1 << 31 ; le bit de poids fort à 1 tous les autres à 0
  #Descendant = 1 << 30 ; le bite de poids fort à 0 puis le suivant à 1 puis tous les autres à 0
  
  If TenirCompteMajuscule = #false
    Chaine1.s = LCase(GetGadgetItemText(#ListIcon, lParam1, 0))
    Chaine2.s = LCase(GetGadgetItemText(#ListIcon, lParam2, 0))
  Else
    Chaine1.s = GetGadgetItemText(#ListIcon, lParam1, 0)
    Chaine2.s = GetGadgetItemText(#ListIcon, lParam2, 0)
  EndIf
  
  Dossier1 = FileSize(Dossier + Chaine1)
  Dossier2 = FileSize(Dossier + Chaine2)
  
  
  ; Voici ce que dit la doc MS
  
  ; La procédure doit retourner une valeur négative si le 1er élément doit être affiché
  ; avant le second. Si l'élément 1 doit être affiché après le 2, la procédure doit
  ; retourner une valeur positive, si les 2 éléments sont identiques, la procédure
  ; doit retourner 0.
  
  ; 4 cas
  
  ; Cas 1
  ; ;------
  ; les 2 éléments sont des dossiers, on compare les chaînes.
  ; Si l'élément 1 doit être affiché avant le 2, on retourne une valeur négative (-1)
  ; Si l'élément 2 doit être affiché avant le 1, on retourne une valeur positive (1)
  ; Si les 2 chaines sont identiques, on retourne 0
  
  ; Cas 2
  ; ;------
  ; les 2 éléments sont des fichiers, on compare les chaînes
  
  ; Cas 3
  ; ;------
  ; l'élément 1 est un dosssier et pas le 2
  ; Si La position des dossiers est "haute", on retourne -1 car l'élément 1 doit être
  ; positionné avant l'élément 2, donc on retourne -1 sinon la position sélectionnée
  ; est "basse", on retourne 1 car l'élément 2 doit être positionné avant l'élément 1
  
  ; Cas 4
  ; ;------
  ; l'élément 2 est un dosssier et pas le 1er
  ; Si La position des dossiers est "haute", on retourne 1 car l'élément 2 doit être
  ; positionné avant l'élément , donc on retourne 1 sinon la position sélectionnée
  ; est "basse", on retourne -1 car l'élément 1 doit être positionné avant l'élément 2
  
  
  Select Dossier1
    Case -2 ; Dossier1 est un dossier
      Select Dossier2
        Case -2 ; Dossier2 est un dossier
          ; Cas 1
          If lParamSort & #Ascendant
            If Chaine1 > Chaine2
              ProcedureReturn 1
            Else
              ProcedureReturn - 1
            EndIf
          Else
            If Chaine1 > Chaine2
              ProcedureReturn - 1
            Else
              ProcedureReturn 1
            EndIf
          EndIf
          
        Default ; Dossier2 est un fichier
          ; Cas 3
          If Position_Dossier = #Position_haute
            ProcedureReturn - 1
          Else
            ProcedureReturn 1
          EndIf
      EndSelect
      
      
    Default ; Dossier1 est un fichier
      Select Dossier2
        Case -2 ; Dossier2 est un dossier
          ; Cas 4
          If Position_Dossier = #Position_haute
            ProcedureReturn 1
          Else
            ProcedureReturn - 1
          EndIf
          
        Default ; Dossier2 est un fichier
          ; Cas 2
          If lParamSort & #Ascendant
            If Chaine1 > Chaine2
              ProcedureReturn 1
            Else
              ProcedureReturn - 1
            EndIf
          Else
            If Chaine1 > Chaine2
              ProcedureReturn - 1
            Else
              ProcedureReturn 1
            EndIf
          EndIf
      EndSelect
  EndSelect
  
EndProcedure

Procedure Affiche_Fleche(Colonne.l, Sens.l)
; affiche la flèche montante ou descendante en fonction du paramètre sens  dans le
; bouton de la colonne désignée par le paramètre colonne 
           ; on affiche la flèche montante gérée par le système à gauche du texte    

  VarHeader.HDITEM\pszText = @"Fichiers"  ; le texte du bouton colonne 1ere colonne
  VarHeader\Mask = #HDI_IMAGE | #HDI_FORMAT | #HDI_TEXT
  VarHeader\fmt =  #HDF_IMAGE | #HDF_STRING
 ; VarHeader\fmt & #HDF_BITMAP_ON_RIGHT
If ThemeActiver
  If sens = #ascendant
     VarHeader\fmt| #HDF_SORTUP
  Else
     VarHeader\fmt| #HDF_SORTDOWN
  EndIf
Else   ; on utilise les icônes flèches bleues chargées par CatchImage
  If sens = #ascendant
     VarHeader\iImage = Index_FlecheUp
  Else
     VarHeader\iImage = Index_FlecheDown
  EndIf
EndIf

If Alignement = #Image_A_Droite
    VarHeader\fmt = VarHeader\fmt | #HDF_BITMAP_ON_RIGHT
EndIf

  SendMessage_(HeaderID(#ListIcon), #HDM_SETITEM, Colonne, @VarHeader)
EndProcedure


Procedure Ma_CallBack(hWnd, Message, wParam, lParam)
  resultat = #PB_ProcessPureBasicEvents
  If Message = #WM_NOTIFY
    *NotifyMsgInfos.NMLISTVIEW = lParam ; lParam est un pointeur sur une structure NMLISTVIEW
    If * NotifyMsgInfos\hdr\hwndFrom = ListIconHwnd
      
      ; click sur le bouton de la colonne 1, --> on tri la liste
      If * NotifyMsgInfos\hdr\code = #LVN_COLUMNCLICK
        Colonne = *NotifyMsgInfos\iSubItem ; indice de la colonne du click
        If colonne = 0 ; on ne prend en compte que le clique de le 1ere colonne
          If TypeTri = #Ascendant
            TypeTri = #Descendant
          Else
            TypeTri = #Ascendant
          EndIf
        ; on affiche la flèche correspondante dans le bouton de la colonne
          Affiche_Fleche(Colonne.l, TypeTri)
        ; on envoie le message indiquant que l'on va envoyer tous les éléments
        ; de la liste pour trier
          SendMessage_(*NotifyMsgInfos\hdr\hwndFrom, #LVM_SORTITEMS, colonne | TypeTri, @Tri())
          ; on envoie les éléments en suivant pour les comparaisons pour le tri
          Resequence()
        EndIf
      EndIf
    EndIf
  EndIf
  ProcedureReturn resultat
EndProcedure

Procedure LectureDossier()
  LockWindowUpdate_(ListIconHwnd)
  ClearGadgetItemList(#ListIcon)
  UpdateWindow_(WindowID(#MainWindow))
  FileInfos.WIN32_FIND_DATA ; filetime
  If ExamineDirectory(0, Dossier, "*.*")
    Repeat
      Type = NextDirectoryEntry()
      If Type
        NomFichier$ = DirectoryEntryName()
        If NomFichier$ <> "." And NomFichier$ <> ".."

        ; on récupère les infos sur l'icône et sur la description du fichier
        SHGetFileInfo_(Dossier + NomFichier$, 0, @InfosFile, SizeOf(SHFILEINFO_Ok), #SHGFI_SYSICONINDEX | #SHGFI_SMALLICON | #SHGFI_TYPENAME)
        
        ; on affiche le 1er élément dans la listicongadget, soit le fichier + l'icône
        VarList.LVITEM\Mask = #LVIF_TEXT | #LVIF_IMAGE ; ; mask défini le type de données | #LVIF_PARAM
        VarList\iImage = InfosFile\iIcon ; l'index de l'icon dans la liste système
        VarList\pszText = @NomFichier$ ; la chaîne à afficher
        VarList\iSubItem = 0 ; indique que c'est le premier élément et pas un sous-élément
        
        ; on envoie le message pour afficher le premier élément
        SendMessage_(ListIconHwnd, #LVM_INSERTITEM, 0, @VarList)
        
        ; on envoie le message pour afficher le deuxième élément
        VarList\Mask = #LVIF_TEXT
        VarList\pszText = @InfosFile\szTypeName[0] ; la chaîne à afficher
        VarList\iSubItem = 1 ; 1 indique que c'est le deuxième car débute à 0
        ; on envoie le message pour afficher le type dans la 2ème colonne
        SendMessage_(ListIconHwnd, #LVM_SETITEM, 0, @VarList)
        
        Nom.s = Dossier + NomFichier$
        ; on récupère la date du fichier
        ; ID = -2 c'est un dossier, -1 le fichier n'existe pas, sinon c'est un fichier
        ID = FileSize(Nom)
        If ID <> - 1
          If (ID = -2 And GetGadgetState(#Date_Dossier_Ok)) Or (ID <> - 2)
            ID = CreateFile_(@Nom, #GENERIC_READ, #FILE_SHARE_READ, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_SYSTEM, 0)
            If ID
              FileDateTime.s = Space(50)
              String1.s = Space(50)
              GetFileTime_(ID, lpCreationTime.FILETIME, lpLastAccessTime.FILETIME, lpLastWriteTime.FILETIME)
              CloseHandle_(ID)
              FileTimeToLocalFileTime_(@lpLastWriteTime, @OutPut.FILETIME)
              FileTimeToSystemTime_(@OutPut, @OutPutSystemTime.SYSTEMTIME)
              GetDateFormat_(#LOCALE_SYSTEM_DEFAULT, 0, @OutPutSystemTime, #Date, @String1, Len(String1))
              GetTimeFormat_(#LOCALE_SYSTEM_DEFAULT, #TIME_FORCE24HOURFORMAT, @OutPutSystemTime, 0, @FileDateTime, 50)
              String1 + "  " + FileDateTime
              VarList\iSubItem = 2 ; colonne 3
              VarList\pszText = @String1
              SendMessage_(ListIconHwnd, #LVM_SETITEM, 0, @VarList)
            Else
              String1 = "?" 
              VarList\iSubItem = 2 ; colonne 3
              VarList\pszText = @String1
              SendMessage_(ListIconHwnd, #LVM_SETITEM, 0, @VarList)
            EndIf
          EndIf
        EndIf
      EndIf
      EndIf

    Until Type = 0
  EndIf
  LockWindowUpdate_(0)
EndProcedure

If OpenWindow(#MainWindow, 0, 0, #Largeur_Fenetre, #Hauteur_Fenetre, #PB_Window_WindowCentered | #PB_Window_SystemMenu, "Mini Exploreur de fichiers")
  If CreateGadgetList(WindowID())
    ListIconHwnd = ListIconGadget(#ListIcon, #Largeur_Fenetre - 580, 10, 580, #Hauteur_Fenetre - 20, "Fichiers", 575 / 3, #LVS_SHAREIMAGELISTS)
    AddGadgetColumn(#ListIcon, 1, "Type", 580 / 3)
    AddGadgetColumn(#ListIcon, 2, "Date de la dernière écriture", 580 / 3 - 20)

    Font = LoadFont(#Font, "ARIAL", 8, #PB_Font_Italic | #PB_Font_Bold)
    SetColumnHeaderFont(#ListIcon, LoadFont(#FontHeader, "ARIAL", 10, #PB_Font_Italic ));| #PB_Font_Bold))

    Dossier.s = "C:\" ; dossier à examiner

    Position_Dossier = #Position_Haute  ; position haute des dossier pour commencer
    TenirCompteMajuscule = #false       ; on ne tient pas compte des majuscules pour commencer
    Alignement = #Image_A_Droite        ; l'image est à droite du texte dans le header
    Colonne = 0                         ; on commence par trier en fonction de la 1er colonne
    
    ; Assign la listImage système à la listIcon
 
    CurrentDirectory.s = Space(#MAX_PATH)
    GetSystemDirectory_(CurrentDirectory, #MAX_PATH)
    hImageListS.l = SHGetFileInfo_(CurrentDirectory, 0, @InfosFile, SizeOf(SHFILEINFO_Ok), #SHGFI_SYSICONINDEX | #SHGFI_SMALLICON)
    ImageList_SetBkColor_(hImageListS, #CLR_NONE)
    SendMessage_(ListIconHwnd, #LVM_SETIMAGELIST, #LVSIL_SMALL, hImageListS)
    
    SetWindowCallback(@Ma_Callback())
    ; le fond en noir
    SetListIconGadgetColor(#ListIcon, 0)
    ; le texte en jaune
    SetListIconGadgetColor(#ListIcon, #PB_SetTextColor | #yellow)

    ; détermine si les thèmes sont activés ou non, résultat dans ThemeActiver
    ; ThemeActiver = 0 il n'y a pas de thèmes
     HeaderID = HeaderID(#ListIcon)  ; le handle du header
     If OpenLibrary(#UxTheme_dll, "UxTheme.dll")
        ThemeActiver = CallFunction(#UxTheme_dll, "GetWindowTheme", HeaderID)
        CloseLibrary(#UxTheme_dll)
     EndIf

    ; création des boutons pour les dossiers
    OptionGadget(#Folder_En_Haut, 20, 38, 129, 15, "  En haut")
    OptionGadget(#Folder_En_Bas, 20, 56, 134, 15, "  En bas")
    SetGadgetState(#Folder_En_Haut, 1)
    SetGadgetFont(#Folder_En_Haut, Font)
    SetGadgetFont(#Folder_En_Bas, Font)
    Frame3DGadget(#Frame3DFolders, 12, 18, 170, 62, " Afficher les Dossiers ")
    
    ; création des boutons pour la date
    OptionGadget(#Date_Dossier_Ok, 20, 138, 129, 15, "  Afficher")
    OptionGadget(#Date_Dossier_Non_Ok, 20, 156, 134, 15, "  Masquer")
    SetGadgetState(#Date_Dossier_Non_Ok, 1)
    SetGadgetFont(#Date_Dossier_Ok, Font)
    SetGadgetFont(#Date_Dossier_Non_Ok, Font)
    Frame3DGadget(#Frame3DDate, 12, 118, 170, 62, " Date des dossiers ")
    
    ; création des boutons pour la prise en compte majuscule/minuscule
    OptionGadget(#Majuscule, 20, 238, 129, 15, "  En tenir compte")
    OptionGadget(#Minuscule, 20, 256, 160, 15, "  Ne pas en tenir compte")
    SetGadgetState(#Minuscule, 1)
    SetGadgetFont(#Majuscule, Font)
    SetGadgetFont(#Minuscule, Font)
    Frame3DGadget(#Frame3DMaj, 12, 218, 170, 62, " Majuscules/Minuscules ")
    
    ; création des boutons pour la couleur de la liste
    OptionGadget(#CouleurSysteme, 20, 338, 129, 15, "  Couleurs système")
    OptionGadget(#CouleurPerso, 20, 356, 160, 15, "  Couleurs perso")
    SetGadgetState(#CouleurPerso, 1)
    SetGadgetFont(#CouleurSysteme, Font)
    SetGadgetFont(#CouleurPerso, Font)
    Frame3DGadget(#Frame3DCouleur, 12, 318, 170, 62, " Couleur de la liste ")

    ; création des boutons pour la position de la flèche dans le bouton du Header
    OptionGadget(#Fleche_A_Droite, 20, 438, 129, 15, "  A droite du texte")
    OptionGadget(#Fleche_A_Gauche, 20, 456, 160, 15, "  A gauche du texte")
    SetGadgetFont(#Fleche_A_Droite, Font)
    SetGadgetFont(#Fleche_A_Gauche, Font)
    Frame3DGadget(#Frame3DFleche, 12, 418, 170, 62, " Position de la flèche du bouton ")
    SetGadgetState(#Fleche_A_Droite, 1)

     If ThemeActiver = 0 ; pas de thèmes, on charge les icônes flèches
                         ; on assigne une liste image au Header
       FlecheUp   = CatchImage(#Fleche_Up, ?FlecheBleue_Montante)
       FlecheDown = CatchImage(#Fleche_Down, ?FlecheBleue_Descendante)
       ; on cré la liste d'images
       Hwnd_ImageList = ImageList_Create_(GetSystemMetrics_(#SM_CXSMICON), GetSystemMetrics_(#SM_CYSMICON), #ILC_MASK | #ILC_COLOR32, 2, 0)
       ; on assigne la liste d'images au control du Header
       SendMessage_(HeaderID, #HDM_SETIMAGELIST, 0, Hwnd_ImageList)
       ; on ajoute les 2 images à la liste et on récupère l'index de chacune
       Index_FlecheUp   = ImageList_ReplaceIcon_(Hwnd_ImageList, -1, FlecheUp)
       Index_FlecheDown = ImageList_ReplaceIcon_(Hwnd_ImageList, -1, FlecheDown)
      Else
       DisableGadget(#Fleche_A_Droite, 1) ; marche pas avec les thèmes XP
       DisableGadget(#Fleche_A_Gauche, 1) ; marche pas avec les thèmes XP
     EndIf

    LectureDossier()
    Resequence()
    TypeTri = #Ascendant
    ; on affiche la flèche correspondante dans le bouton de la colonne
    Affiche_Fleche(Colonne.l, TypeTri)
    SendMessage_(ListIconHwnd, #LVM_SORTITEMS, 0 | TypeTri, @Tri()) ; colonne 0
    Resequence()
    
    ;- Boucle evenements
    Repeat
      Select WaitWindowEvent()
        Case #PB_EventGadget
          event = EventGadgetID()
          
          If event = #Date_Dossier_Ok Or event = #Date_Dossier_Non_Ok
            LectureDossier()
            Resequence()
            SendMessage_(ListIconHwnd, #LVM_SORTITEMS, 0 | TypeTri, @Tri()) ; colonne 0
            Resequence()
          ElseIf event = #Folder_En_Haut
            Position_Dossier = #Position_haute
            LectureDossier()
            Resequence()
            SendMessage_(ListIconHwnd, #LVM_SORTITEMS, 0 | TypeTri, @Tri()) ; colonne 0
            Resequence()
          ElseIf event = #Folder_En_bas
            Position_Dossier = #Position_basse
            LectureDossier()
            Resequence()
            SendMessage_(ListIconHwnd, #LVM_SORTITEMS, 0 | TypeTri, @Tri()) ; colonne 0
            Resequence()
          ElseIf event = #Majuscule ; on tient compte des majuscule
            TenirCompteMajuscule = #True
            LectureDossier()
            Resequence()
            SendMessage_(ListIconHwnd, #LVM_SORTITEMS, 0 | TypeTri, @Tri()) ; colonne 0
            Resequence()
          ElseIf event = #Minuscule ; on ne tient pas compte des majuscule/minuscule
            TenirCompteMajuscule = #false
            LectureDossier()
            Resequence()
            SendMessage_(ListIconHwnd, #LVM_SORTITEMS, 0 | TypeTri, @Tri()) ; colonne 0
            Resequence()
          ElseIf event = #CouleurSysteme; on applique les couleurs systèmes à la liste
             SetListIconGadgetColor(#ListIcon, #PB_NoListBackColor)
          ElseIf event = #CouleurPerso; on applique les couleurs perso à la liste
            ; le fond en noir
             SetListIconGadgetColor(#ListIcon, 0)
             ; le texte en jaune
             SetListIconGadgetColor(#ListIcon, #PB_SetTextColor | #yellow)
          ElseIf event = #Fleche_A_Droite; on positionne la flèche à droite du texte
               Alignement = #Image_A_Droite
               Affiche_Fleche(Colonne.l, TypeTri)
          ElseIf event = #Fleche_A_Gauche; on positionne la flèche à gauche du texte
               Alignement = #Image_A_Gauche
               Affiche_Fleche(Colonne.l, TypeTri)
          EndIf
          
        Case #PB_Event_CloseWindow
          Quit + 1
      EndSelect
    Until Quit
  EndIf
EndIf
End

DataSection

FlecheBleue_Montante:  ; format ico
Data.l $00010000, $10100001, $00010000, $03680018, $00160000, $00280000
Data.l $00100000, $00200000, $00010000, $00000018, $03000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $0B293737, $00000108, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $FF2060FF
Data.l $FFFFC0FF, $80FFFF80, $FF80FFFF, $80FF20C0, $2080FF20, $FF2080FF
Data.l $00002080, $00000000, $00000000, $00000000, $00000000, $FF000000
Data.l $FFFF2060, $80FFFFC0, $FF20C0FF, $C0FF20C0, $20C0FF20, $002080FF
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $60FF0000, $C0FFFF20, $FF80FFFF, $C0FF20C0, $2080FF20, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $2060FF00, $FFC0FFFF, $80FF80FF, $00000020, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF2060FF, $0000C0FF, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF000000, $00002060, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $FFFF0000, $FFFF0000, $FFFF0000
Data.l $FFFF0000, $03800000, $07C00000, $0FE00000, $1FF00000, $3FF80000
Data.l $7FFC0000, $FFFE0000, $FFFF0000, $FFFF0000, $FFFF0000, $FFFF0000
Data.b  0, 0, -1, -1, 0, 0

FlecheBleue_Descendante:  ; format ico
Data.l $00010000, $10100001, $00010000, $03680018, $00160000, $00280000
Data.l $00100000, $00200000, $00010000, $00000018, $03000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF000000, $00002060, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF2060FF, $0000C0FF, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $2060FF00, $FFC0FFFF, $80FF80FF, $00000020, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $60FF0000, $C0FFFF20, $FF80FFFF, $C0FF20C0, $2080FF20, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $FF000000
Data.l $FFFF2060, $80FFFFC0, $FF20C0FF, $C0FF20C0, $20C0FF20, $002080FF
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $FF2060FF
Data.l $FFFFC0FF, $80FFFF80, $FF80FFFF, $80FF20C0, $2080FF20, $FF2080FF
Data.l $00002080, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $0B293737, $00000108, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $FFFF0000, $FFFF0000, $FFFF0000
Data.l $FFFF0000, $FFFE0000, $7FFC0000, $3FF80000, $1FF00000, $0FE00000
Data.l $07C00000, $03800000, $FFFF0000, $FFFF0000, $FFFF0000, $FFFF0000
Data.b  0, 0, -1, -1, 0, 0

EndDataSection
Dernière modification par Anonyme2 le sam. 30/oct./2004 5:56, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Merci ! :)

Je verrais tout ça plus tard.
Répondre