Explorer Tree checkbox

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Explorer Tree checkbox

Message par doudouvs »

Bonjour,

Déjà une petite présentation, je suis programmeur à mes heures perdu. Je suis pas Français donc excuser les fautes.
J'ai découvert l'existence de PB il y à 3 jours pour l'instant je suis satisfait de la présentation et de la simplicité d'utilisation (merci Fred) comparer à d'autre genre delphi je ne comprend meme pas la difference entre les versions Lol.

avant d'acheter le version oui je suis encore en demo (array,list, map ou macro) ne sont donc pas disponible

Voila mon problème :

Je souhaite faire un ExplorerTree avec des checkboxs et pouvoir recupere les répertoires ou les fichiers sélectionner malheureusement dans ExplorerTree il n'ai pas possible de rajouter #PB_CheckBox_....

J'ai vu sur le forum anglais des examples avec des #TVS..... qui ne marche pas, je pense que cela doit etre des anciennes version

Cordialement, Daniel
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Explorer Tree checkbox

Message par venom »

Salut doudouvs et bienvenue,

voici un code qui recupere le chemain d'un dossier ou fichier certes sans checkbox :wink: ça ne te convient pas ?

Code : Tout sélectionner

  If OpenWindow(0, 0, 0, 300, 300, "ExplorerTreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    ExplorerTreeGadget(0, 10, 10, 280, 280, "*.*")
  EndIf 

  Repeat
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
          
        Case 0
          Debug GetGadgetText(0)

      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Explorer Tree checkbox

Message par Backup »

peut etre une solution

Code : Tout sélectionner



; Démonstration des options possibles pour le gadget liste avec icônes...
If openwindow (0, 0, 0, 690, 300, "ListIconGadget" , #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
	; colonne de gauche
	textgadget (7, 10, 105, 300, 20, "Liste avec icônes + cases à cocher" , #PB_Text_Center )
	listicongadget (1, 10, 20, 600, 280, #PB_Explorer_Name , 100, #PB_ListIcon_CheckBoxes ) ; Liste avec icônes et cases à cocher
	addgadgetcolumn (1, 1, #PB_Explorer_Type , 100)
	addgadgetcolumn (1, 2, #PB_Explorer_Size , 100)
	
	Directory$ = "C:\" ; Énumère le contenu du répertoire C (Les sous-répertoires ne sont pas examinés)
	
	If examinedirectory (0, Directory$, "*.*" )
		While NextDirectoryEntry (0)
			If DirectoryEntryType (0) = #PB_DirectoryEntry_File
				Type$ = " [Fichier] "
				
				Else
				Type$ = " [Sous-répertoire] "
				
			EndIf
			
			;Debug DirectoryEntryName(0) + Type$ + "- Taille en octet : " + Str(DirectoryEntrySize(0))
			AddGadgetItem (1, -1, DirectoryEntryName (0) + Chr (10)+ Type$ + Chr (10)+ "- Taille en octet : " + Str ( DirectoryEntrySize (0) ) )
		Wend
		FinishDirectory (0)
	EndIf
	
	
	
	Repeat : Until WaitWindowEvent () = #PB_Event_CloseWindow
	EndIf
	
	
	
	; EPB
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: Explorer Tree checkbox

Message par doudouvs »

merci pour l'accueil :)

nickel Dobro c'est déjà un bon début pour une base, cela va au moins me donner une idée des possibilités.
Je me replonge dans la doc ...
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Explorer Tree checkbox

Message par Ar-S »

Bienvenue et bonne baignade ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: Explorer Tree checkbox

Message par doudouvs »

Merci effectivement je nage, j'espere ne pas couler
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Explorer Tree checkbox

Message par venom »

après tu peut partir sur un TreeGadget qui ressemble fort a un ExplorerTreeGadget et qui gere les combosbox :wink:

Code : Tout sélectionner

  If OpenWindow(0, 0, 0, 355, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    TreeGadget(0, 10, 10, 160, 160)                                         ; liste arborescente standard
    TreeGadget(1, 180, 10, 160, 160, #PB_Tree_CheckBoxes | #PB_Tree_NoLines)  ; liste arborescente avec cases à cocher + sans lignes reliant les noeuds
    For ID = 0 To 1
      For a = 0 To 10
        AddGadgetItem (ID, -1, "Elément normal "+Str(a), 0, 0) ; si vous souhaitez ajouter une image, utilisez 
        AddGadgetItem (ID, -1, "Noeud "+Str(a), 0, 0)          ; ImageID(x) comme 4ème paramètre
        AddGadgetItem (ID, -1, "Sous-élément 1", 0, 1)         ; Ceux-là sont au premier sous-niveau 
        AddGadgetItem (ID, -1, "Sous-élément 2", 0, 1)
        AddGadgetItem (ID, -1, "Sous-élément 3", 0, 1)
        AddGadgetItem (ID, -1, "Sous-élément 4", 0, 1)
        AddGadgetItem (ID, -1, "Fichier "+Str(a), 0, 0) ; sous-niveau 0 à nouveau
      Next
    Next
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Explorer Tree checkbox

Message par falsam »

J'ai ce magnifique code qui date de 2006. Ce qui est sélectionné apparaît à droite de l'écran.

Code : Tout sélectionner

; English forum: http://www.purebasic.fr/english/viewtopic.php?p=158360
; Author: sverson
; Date: 21. August 2006
; OS: Windows
; Demo: Yes

; Use ExplorerListGadget Checkboxes to select directories
; and display the result in a ListIconGadget
; Thanks to srod, breeze4me AND freak!
; See also remi_meier's "Simple Wrapper For TreeGadget-Macros by MSDN"
; http://www.purebasic.fr/english/viewtopic.php?p=104420

Global MainWindowEvent.l
Global ExplorerTreeNo.l, ExplorerTreeID.l, ListIconNo.l, ListIconID.l, SplitterNo.l, SplitterID.l
Global oldwproc.l, oldwproc1.l

#TVM_GETITEMSTATE = #TV_FIRST + 39
#TVS_CHECKBOXES   = $100
#LVM_GETHEADER    = (#LVM_FIRST + 31)


Procedure IsInList(GadgetNo.l,String.s)
  Protected GadgetItem.l, GadgetItems.l
  GadgetItems = CountGadgetItems(GadgetNo) - 1
  For GadgetItem = 0 To GadgetItems
    If String = GetGadgetItemText(GadgetNo,GadgetItem,4)
      ProcedureReturn GadgetItem
    EndIf
  Next
  ProcedureReturn -1
EndProcedure

Procedure TreeViewSetCheckBox(tvGadgetNo.l)
  Protected tvGadgetID.l, tvGadgetStyles.l
  tvGadgetID     = GadgetID(tvGadgetNo)
  tvGadgetStyles = GetWindowLong_(tvGadgetID,#GWL_STYLE) | #TVS_CHECKBOXES
  SetWindowLong_(tvGadgetID,#GWL_STYLE,tvGadgetStyles)
EndProcedure

Procedure.l GetItemNumber(GadgetID.l, hItem.l) ;/ THX freak CodeArchiv (modified)
  Protected hItem1.l, hItem2.l, ItemNum.l
  hItem1 = SendMessage_(GadgetID, #TVM_GETNEXTITEM, #TVGN_ROOT, 0)
  While hItem1 <> hItem
    hItem2 = SendMessage_(GadgetID, #TVM_GETNEXTITEM, #TVGN_CHILD, hItem1)
    Repeat
      If hItem2 = #Null: hItem2 = SendMessage_(GadgetID, #TVM_GETNEXTITEM, #TVGN_NEXT, hItem1): EndIf
      If hItem2 = #Null: hItem1 = SendMessage_(GadgetID, #TVM_GETNEXTITEM, #TVGN_PARENT, hItem1): EndIf
    Until hItem2 <> #Null
    hItem1 = hItem2
    ItemNum + 1
  Wend
  ProcedureReturn ItemNum
EndProcedure

Procedure ColumnAutoSize(GadgetID.l)
  Protected GadgetHdr.l, AktColumn.l, ColumnCount.l
  GadgetHdr   = SendMessage_(GadgetID,#LVM_GETHEADER,0,0)
  ColumnCount = SendMessage_(GadgetHdr,#HDM_GETITEMCOUNT,#Null,#Null)-1
  For AktColumn=0 To ColumnCount : SendMessage_(GadgetID,#LVM_SETCOLUMNWIDTH,AktColumn,#LVSCW_AUTOSIZE_USEHEADER) : Next
EndProcedure


Procedure.l WindowCallback1(hwnd, msg, wParam, lParam)
  Protected result.l
  Debug msg
  
  If msg = 20 ;/??? THX sparkie http://www.purebasic.fr/english/viewtopic.php?p=85045 (modified)
    ColumnAutoSize(ListIconID)
  EndIf
  result = CallWindowProc_(oldwproc1, hwnd, msg, wParam, lParam)
  
  ProcedureReturn result
EndProcedure
  
Procedure.l WindowCallback(hwnd, msg, wParam, lParam)
  Protected *nmhdr.NMHDR, lpht.TV_HITTESTINFO
  Protected result.l, itemID.l, itemNo.l, itemState.l, itemString.s, ListPos.l
  
  result = CallWindowProc_(oldwproc, hwnd, msg, wParam, lParam)
  
  If msg = #WM_KEYDOWN ;/ THX breeze4me http://www.purebasic.fr/english/viewtopic.php?p=158317 (modyfied)
    If wParam = #VK_SPACE
      itemID     = SendMessage_(ExplorerTreeID, #TVM_GETNEXTITEM, #TVGN_CARET,0)
      itemNo     = GetItemNumber(ExplorerTreeID,itemID)
      itemState  = (SendMessage_(ExplorerTreeID, #TVM_GETITEMSTATE, itemID, #TVIS_STATEIMAGEMASK)>>12) - 1
      itemString = GetGadgetText(ExplorerTreeNo)
      ListPos    = IsInList(ListIconNo,itemString)
      If itemState
        If ListPos=-1
          AddGadgetItem(ListIconNo,-1,"KEYBOARD"+Chr(10)+Str(itemID)+Chr(10)+Str(itemNo)+Chr(10)+Str(itemState)+Chr(10)+GetGadgetText(ExplorerTreeNo))
        EndIf
      Else
        If ListPos>-1
          RemoveGadgetItem(ListIconNo,ListPos)
        EndIf
      EndIf
      ColumnAutoSize(ListIconID)
    EndIf
  EndIf
  
  If msg= #WM_LBUTTONDOWN ;/ THX breeze4me http://www.purebasic.fr/english/viewtopic.php?p=158317 (modyfied)
    GetCursorPos_(@lpht\pt)
    ScreenToClient_(ExplorerTreeID,lpht\pt)
    itemID = SendMessage_(ExplorerTreeID,#TVM_HITTEST,0,lpht)
    SendMessage_(ExplorerTreeID,#TVM_SELECTITEM,#TVGN_CARET,itemID)
    itemNo     =  GetItemNumber(ExplorerTreeID,itemID)
    itemState  = (SendMessage_(ExplorerTreeID, #TVM_GETITEMSTATE, itemID, #TVIS_STATEIMAGEMASK)>>12) - 1
    itemString = GetGadgetText(ExplorerTreeNo)
    ListPos    = IsInList(ListIconNo,itemString)
    If itemState
      If ListPos=-1
        AddGadgetItem(ListIconNo,-1,"MOUSE"+Chr(10)+Str(itemID)+Chr(10)+Str(itemNo)+Chr(10)+Str(itemState)+Chr(10)+GetGadgetText(ExplorerTreeNo))
      EndIf
    Else
      If ListPos>-1
        RemoveGadgetItem(ListIconNo,ListPos)
      EndIf
    EndIf
    ColumnAutoSize(ListIconID)
  EndIf
  
  ProcedureReturn result
EndProcedure

If OpenWindow(0, 0, 0, 800, 500, "ExplorerTreeGadget: CheckboxHandler (Mouse+Keyboard)", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget)
  ExplorerTreeNo = ExplorerTreeGadget(#PB_Any,0,0,0,0,"")
  ExplorerTreeID = GadgetID(ExplorerTreeNo)
  ListIconNo     = ListIconGadget(#PB_Any,0,0,0,0,"EVENT",80,#PB_ListIcon_FullRowSelect| #PB_ListIcon_AlwaysShowSelection);|#LVS_NOCOLUMNHEADER)
  ListIconID     = GadgetID(ListIconNo)
  AddGadgetColumn(ListIconNo, 1, "ItemID", 70) : AddGadgetColumn(ListIconNo, 2, "ItemNo", 70) : AddGadgetColumn(ListIconNo, 3, "ItemState", 80) : AddGadgetColumn(ListIconNo, 4, "ItemValue", 200)
  SplitterNo     = SplitterGadget(#PB_Any,5,5,WindowWidth(0)-10,WindowHeight(0)-10,ExplorerTreeNo,ListIconNo,#PB_Splitter_Vertical|#PB_Splitter_FirstFixed)
  SplitterID     = GadgetID(SplitterNo)
  TreeViewSetCheckBox(ExplorerTreeNo)
  oldwproc  = SetWindowLong_(ExplorerTreeID, #GWL_WNDPROC, @WindowCallback())
  oldwproc1 = SetWindowLong_(SplitterID, #GWL_WNDPROC, @WindowCallback1())
  
  Repeat
    MainWindowEvent = WaitWindowEvent()
    Select MainWindowEvent
      Case #WM_SIZE
        ResizeGadget(SplitterNo,#PB_Ignore,#PB_Ignore,(WindowWidth(0)-10),WindowHeight(0)-10)
        ColumnAutoSize(ListIconID)
    EndSelect
  Until MainWindowEvent = #PB_Event_CloseWindow
EndIf
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: Explorer Tree checkbox

Message par doudouvs »

Ah mince les limites de version, bizarre dans la doc il dit que la version et limiter à 800 lignes

Line 37: GetWindowLong_() is not a function (or not available in demo version), array, list, map or macro.
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Explorer Tree checkbox

Message par falsam »

getWindowLong_ fait partie des API Microsoft. Les API ne fonctionnent pas avec la version de démonstration.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: Explorer Tree checkbox

Message par doudouvs »

ah si j'ai bien compris
Les API microsoft et autre commande genre TVS_CHECKBOXES ne marcheront pas sur un system OSX
C'est ballot
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Explorer Tree checkbox

Message par Backup »

toute les Api se reconnaissent par le "_" avant "("

Beep_(440,100) ; API Windows qui genere un son (un LA)

il existe des API pour Windows,Mac,Linux , et oui c'est aussi une limitation , faut bien motiver les gens a acheter la version complete :)

ce qui est ballot , c'est les gens, qui pense que tout est gratuit ....
les gens comme moi et d'autres sur le forum , fabriquent des prg , et ne sont jamais "récompensé" de leur travails
parceque des gens comme toi? , pensent que c'est ballot .. :roll:
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: Explorer Tree checkbox

Message par doudouvs »

Merci pour les précisions des API

Qui parle de gratuit, je n'ai rien demander de gratuit
Oui c'est ballot d'afficher des API limiter à Windows alors que le programme doit être multi plateforme
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Explorer Tree checkbox

Message par falsam »

doudouvs a écrit :Les API microsoft et autre commande genre TVS_CHECKBOXES ne marcheront pas sur un system OSX
C'est ballot
Bonjour doudouvs. Si tu exécutes Pure Basic sur un Ordinateur équipé d'un système OSX, alors effectivement aucune API Microsoft ne pourra fonctionner. Pourrais tu mettre dans la signature de ton profil la configuration de ton ordinateur ainsi que la version de pure basic que tu utilises. Regarde ma signature par exemple. On evitera ainsi de poster du code qui ne pourra pas fonctionner sur ton OS. Merci :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Explorer Tree checkbox

Message par falsam »

doudouvs a écrit :Je suis pas Français donc excuser les fautes.
Pour quelqu'un qui n'est pas français, je trouve que tu écris bien mieux que certains d'entres nous sur ce forum. :roll: Encore une fois, bienvenu à toi et beaucoup de plaisir avec Pure Basic.

PS : Dans ton profil utilisateur, tu peux spécifier ta localisation si tu le souhaites pour rappeler que tu n'es pas français et ainsi excuser tes fautes d'orthographe.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre