Page 1 sur 1
Listicongadget- case à cocher
Publié : lun. 18/avr./2022 14:33
par michelmarchand
Bonjour, dans une Listicongadget
Comment décocher un case à cocher par programmation
Car setgadgetstate(#Listi ) et
Setgadgetitemstate( #Listi, pos, -1 )
Ne fonctionne pas.
Quand j’ajoute une ligne dans la Listicongadget
La case est cochée
Je valide la ligne, en crée une nouvelle mais la précédente
N’est pas décoché
Merci pour votre aide
Re: Listicongadget- case à cocher
Publié : lun. 18/avr./2022 18:16
par Ollivier
C'est comme ça :
Code : Tout sélectionner
SetGadgetItemState(TonGadget, TonElement, #PB_ListIcon_Checked)
Et, bien sûr, ça se modifie quand l'élément existe, pas quand la listIcon est vide.
Et, pour récupérer l'état d'une case à cocher en listIcon :
Code : Tout sélectionner
Etat = Bool(GetGadgetItemState(TonGadget, TonElement) & #PB_ListIcon_Checked)
(Et c'est dans la section débutant qu'il faut poser la question, là j'ai mis plein de merde sur mon smartphone parce que t'as fait sonner la boîte mail et donc j'ai répondu sans gant)
Re: Listicongadget- case à cocher
Publié : lun. 18/avr./2022 21:22
par Ollivier
À tête reposée, cette procédure récupère ou modifie l'état d'une checkbox.
G = Numéro de gadget
E = Numéro d'élément
C = Commande de la case à cocher
0: pas de modification
1: mise à zéro
2: mise à un
4: va-et-vient
Valeur de retour = Etat de la case à cocher (1 ou 0)
Code : Tout sélectionner
Procedure libox(G, E, C = 0)
Chk = #PB_ListIcon_Checked
S = GetGadgetItemState(G, E)
D = Bool(S & Chk)
If C & 7
D = (D ! Bool(C & 4) ) | Bool(C & 2) & Bool(Not(C & 1) )
SetGadgetItemState(G, E, (S & ~Chk) | (D * Chk) )
EndIf
ProcedureReturn D
EndProcedure
Re: Listicongadget- case à cocher
Publié : lun. 18/avr./2022 21:59
par Ollivier
J'ai mis les deux procédures (check box et sélection, gérés indépendamment) en suggestion pour que ça soit natif dans une prochaine mise à jour :
https://www.purebasic.fr/english/viewtopic.php?p=583318
Pour simplifier et être plus fonctionnel :
Code : Tout sélectionner
Procedure Mask(S, C, M)
Select C
Case 0: S & ~M
Case 1: S | M
Case 2: S = Bool(S & M) ; non exclusive result (only a 1-bit set returns a logical one else zero)
Case 3: S ! M
Case 4: S = Not((S & M) - M) ; exclusive result (all the bits of the mask must be set to cause a logical one else zero)
EndSelect
ProcedureReturn S
EndProcedure
Exemple concret :
Code : Tout sélectionner
WinFlag = Mask(WinFlag, 1, #PB_Window_SizeGadget) ; active l'état de redimensionnement d'une option de fenêtre
WinFlag = Mask(WinFlag, 0, #PB_Window_SizeGadget) ; désactive l'état de redimensionnement d'une option de fenêtre
WinFlag = Mask(WinFlag, 3, #PB_Window_SizeGadget) ; change logiquement l'état de redimensionnement d'une option de fenêtre
Debug Mask(WinFlag, 4, #PB_Window_SizeGadget) ; retourne l'état exclusif de redimensionnement d'une option de fenêtre
Debug Mask(WinFlag, 2, #PB_Window_SizeGadget) ; retourne l'état non exclusif de redimensionnement d'une option de fenêtre
Re: Listicongadget- case à cocher
Publié : mer. 20/avr./2022 19:02
par michelmarchand
Bonsoir et Merci Olivier
je vient de tester ta fonction
elle fonctionne pour l’effacement de la case à cocher
mais ne coche pas lors de l'ajout d'une nouvelle ligne.
Merci d'avance
;G = Numéro de gadget
;E = Numéro d'élément
;C = Commande de la Case à cocher
;0: pas de modification
;1: mise à zéro
;2: mise à un
;4: va-et-vient
;Valeur de retour = Etat de la Case à cocher (1 ou 0)
libox( 1, GetGadgetState( 1 ), 1 )
If GetGadgetState( 1 ) = -1
AddGadgetItem( 1,-1,"new" )
x = CountGadgetItems( 1 )
libox( 1, x, 2 )
EndIf
Re: Listicongadget- case à cocher
Publié : jeu. 21/avr./2022 1:48
par Ollivier
La 1ère ligne est repérée par le numéro zéro.
Donc si tu te repères avec CountGadgetList() il faut décrémenter (ajouter -1)
Code : Tout sélectionner
libox( 1, GetGadgetState( 1 ), 1 )
If GetGadgetState( 1 ) = -1
AddGadgetItem( 1,-1,"new" )
x = CountGadgetItems( 1 ) - 1 ; <<< ------ ICI LE " -1 "
libox( 1, x, 2 )
EndIf
Et tu verras : ma procédure ne bugue pas. Si tu as d'autres questions, n'hésite pas.
Re: Listicongadget- case à cocher
Publié : jeu. 21/avr./2022 5:25
par michelmarchand
Bonjour olivier
opération réussi
Merci
Structure
Publié : dim. 08/mai/2022 16:08
par michelmarchand
Bonjour Olivier
existe-t'il une solution pour lister le contenu d'une structure,
voilà: je suis sur une recherche multicritère et je voudrais lister les variables contenu dans la structure et créer les colonnes d'une listicon
et charger les éléments enregistrés
ex : j'ai une Structure Classeur
Code : Tout sélectionner
NumEnrg.i
CompteTiers.s
TypePiece.s
NumeroPiece.s
DateEnrg.s
Debit.s
Credit.s
Acompte.s
DateEch.s
FraisDiv.s
TauxTva.s
ModeRegl.s
; List LigneDoc.Ligne()
EndStructure
Mydb()\Classeur() (et d'autre tables)
additem( combo, -1, (là les éléments de la structure) )
et la recherche ( j'aimerai simplifier le code ci-dessous car j'ai 3 combos, 3 string pour la valeur à rechercher )
donc 3 colonnes à créer
Code : Tout sélectionner
If GetGadgetText( Combo_0 ) = "Classeur"
If GetGadgetText( String_0 ) <> ""
If GetGadgetText( Combo_1 ) = "CompteTiers"
AddGadgetColumn( ListIcon_0, 0, "CompteTiers", 100 )
AddGadgetColumn( ListIcon_0, 1, "TypePiece", 100 )
AddGadgetColumn( ListIcon_0, 2, "NumeroPiece", 100 )
ForEach Mydb()\Classeur()
If GetGadgetText( String_0 ) = MyDb()\Classeur()\CompteTiers
AddGadgetItem( ListIcon_0, -1 , MyDb()\Classeur()\CompteTiers+Chr(10)+MyDb()\Classeur()\TypePiece+Chr(10)+MyDb()\Classeur()\NumeroPiece+Chr(10)+MyDb()\Classeur()\DateEnrg )
EndIf
Next
EndIf
EndIf
EndIf
j'espère que cela sera clair pour toi .
merci d'avance
---edit Ar-S---
Merci de penser à mettre le code dans les balises codes à cet effet. [ code ][ /code ]
C'est corrigé
Re: Listicongadget- case à cocher
Publié : lun. 09/mai/2022 12:42
par michelmarchand
Merci Désolé
Re: Listicongadget- case à cocher
Publié : mar. 10/mai/2022 14:38
par Ollivier
C'est une bonne question... Je dirais "oui", à coup sûr même, mais il y a un prix : ça contraint à lire le fichier source comme un fichier texte, et retrouver la structure voulue.
Donc le plus judicieux est de lire ce fichier pour exporter le texte de la structure dans un tableau, une zone data ou un fichier texte, afin de le crypter si besoin.
Je vais m'attarder sur cette question quand j'ai un peu de temps pour produire un code...
Re: Listicongadget- case à cocher
Publié : mar. 10/mai/2022 17:53
par Ar-S
Pourrais tu mettre un code fonctionnel pour exprimer ton besoin ?
As tu explorer les Map() ?
Re: Listicongadget- case à cocher
Publié : mer. 11/mai/2022 8:13
par TazNormand
Salut
Pour rappel, PureBasic intègre la bibliothèque DataBase pour la gestion de base de données.
peut-être faudrait il que tu te penches sur le stockage de tes données en BdD si tu as des requêtes de recherches un peu lourdes.
Ne connaissant pas ton projet, difficile de justifier si c'est un bon choix, mais par expérience, plus il y a de données, plus simple est la gestion par des requêtes SQL.