Alignement des mnts à droite dans ListIcon

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Alignement des mnts à droite dans ListIcon

Message par omega »

Bonsoir,

Je voudrais confirmer s'il existe une instruction Pb qui permet d'aligner les nombres à droite dans une listIconGadget?
Pour l'instant j'utilise une méthode personnelle pour le faire.

Code : Tout sélectionner


;On suppose que tous les nombres ont 2 chiffres décimaux (ex: 15.25 ou 35996973.50 etc..)
Procedure Aligner()
Wnbre$=Trim(wnbre$)
Wtaille=32-len(Wnbre$)
AddGadgetItem(#Grid,-1,Rset(Wnbre$,wtaille))
EndProcedure

OpenWindow(0, 0, 0, 640, 300, "Aligner Nbre dans ListIconGadget", #PB_Window_SystemMenu | PB_Window_ScreenCentered)
ListIconGadget(1,  10,  25, 300, 70, "Montant", 100)

wNbre$="76402.55"
Aligner()
wNbre$="1000000.71"
Aligner()
wNbre$="225.02"
Aligner()

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
End

Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Alignement des mnts à droite dans ListIcon

Message par omega »

Erreur...

Merci de remlplacer #Grid par 1 ou 1 par #Grid
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Alignement des mnts à droite dans ListIcon

Message par kernadec »

bonsoir omega
sous Windows j'utilise cette procédure
sinon à l'adresse url dans la procédure y a un code cross plateforme

Cordialement

Code : Tout sélectionner

Enumeration
	#Win
	#Grid
EndEnumeration

;On suppose que tous les nombres ont 2 chiffres décimaux (ex: 15.25 ou 35996973.50 etc..)

ProcedureDLL.l JustifyListIconColumn(GadgetID.l,column.l,flag.l)    ;Justify ListIcon Column 0-Left 1-Right 2-Center
	; auteur paul **  http://www.purebasic.fr/english/viewtopic.php?f=13&t=48345
	lvc.LV_COLUMN
	lvc\Mask = #LVCF_FMT 
	Select flag
		Case 1
			lvc\fmt=#LVCFMT_RIGHT
		Case 2
			lvc\fmt=#LVCFMT_CENTER
		Default
			lvc\fmt=#LVCFMT_LEFT
	EndSelect
	ProcedureReturn SendMessage_(GadgetID(GadgetID),#LVM_SETCOLUMN,column,@lvc)
EndProcedure

OpenWindow(#Win, 0, 0, 640, 300, "Aligner Nbre dans ListIconGadget", #PB_Window_SystemMenu | PB_Window_ScreenCentered)
ListIconGadget(#Grid,  10,  25, 300, 70, "Montant", 100)


wNbre$="76402.55"
AddGadgetItem(#Grid,-1,wNbre$)
wNbre$="1000000.71"
AddGadgetItem(#Grid,-1,wNbre$)
wNbre$="225.02"
AddGadgetItem(#Grid,-1,wNbre$)

JustifyListIconColumn(#Grid,0,1)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Alignement des mnts à droite dans ListIcon

Message par omega »

Merci beaucoup kernadec, ça marche exactement comme je veux. Excellent !
J'avoue que je ne comnnais pas grand chose sur les structures et les API, j'ai essayé de faire la même
chose pour les lignes en remplaçant (dans ton code) COLUMN par ITEM, mais j'ai reçu un message d'erreur
me disant que fmt n'est pas une structure field....

Est-t il possible de faire pareil pour les lignes ?

Excuses-moi pour le dérangement mais... nous sommes là pour ça n'est ce pas??

Merci encore
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
wood51
Messages : 122
Inscription : ven. 05/juin/2009 13:04
Localisation : orléans

Re: Alignement des mnts à droite dans ListIcon

Message par wood51 »

Salut peut-être que çà pourras t'aider (même principe que kernadec)

Code : Tout sélectionner

#LI_Text_Left = #LVCFMT_LEFT
#LI_Text_Center = #LVCFMT_CENTER
#LI_Text_Right = #LVCFMT_RIGHT

Procedure LI_AlignText(gadget.i,colonne.i,align.i = #LI_Text_Center)
  Protected lvc.LVCOLUMN
  Protected hwndHeader.i,nbColumns.i
  Protected i.i
  
  ; remplissage la structure LVCOLUMN
  lvc\mask=#LVCF_FMT
  lvc\fmt = align
  
  ; si colonne = - 1 -> Alignement de toute les colonnes
  If colonne = -1
    
    ; récupération du nombre de colonne
    hwndHeader=SendMessage_(GadgetID(#ListIcon_1),#LVM_GETHEADER,0,0)
    nbColumns=SendMessage_(hwndHeader,#HDM_GETITEMCOUNT,0,0)
    
    For i = 0 To nbColumns - 1
      SendMessage_(GadgetID(gadget),#LVM_SETCOLUMN,i,@lvc)
    Next 
    
  Else
    
    ; sinon alignement de la colonne passé en paramètre
    SendMessage_(GadgetID(gadget),#LVM_SETCOLUMN,colonne,@lvc) 
    
  EndIf 
EndProcedure
@+ Wood51
Compétences : Bricoleur PureBasic du dimanche
Crâmage de cerveau en cours 100% :D
Projet en cours : http://purepicbasic.frenchboard.com/
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Alignement des mnts à droite dans ListIcon

Message par kernadec »

bonjour omega
Est-t il possible de faire pareil pour les lignes ?
Qu'entends tu par ligne?: des caractères textes... si oui
Alors pas soucis puisque tes chiffres dans ta Listicon sont en alphanumérique

maintenant pour LVCOLUMN structure (Windows),
pour mieux comprendre ce que tu peux faire ou ne pas faire, il faut aller sur Msdn..
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Cordialement
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Alignement des mnts à droite dans ListIcon

Message par omega »

Salut kernadec
Qu'entends tu par ligne?: des caractères textes... si oui
Alors pas soucis puisque tes chiffres dans ta Listicon sont en alphanumérique
Ton code permet d'aligner le contenu d'une COLONNE C à gauche, à droite ou au milieu
(le contenu de toutes les cellules de la colonne C sont concernées)
Mais si je veux aligner le contenu de toutes les cellules d'une LIGNE L??

exemple: J'ai une listIconGadget qui contient 3 colonnes (colonne 1: nom, Colonne 2: Adresse, colonne 3: âge)

Supposons que j'ai 4 lignes dans ma liste. Ton code me permet d'aligner une colonne à la fois, c'est à dire
tous les noms (de toutes les lignes)
Mais il ne permet pas d'aligner toute la ligne 2 par exemple, c'est à dire le nom, l'adresse et l'âge de la deuxième ligne ??

Je ne sais pas si je suis clair kernadec..
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Alignement des mnts à droite dans ListIcon

Message par kernadec »

apparemment la structure LVCOLUMN comme son nom l'indique gère les colonnes
et la justification ne s'exerce que sur celles-ci.
quand à dissocier les lignes des colonnes, là franchement je sais pas si c'est possible.

Cordialement

Code : Tout sélectionner

Enumeration
  #Win
  #Grid
EndEnumeration

;On suppose que tous les nombres ont 2 chiffres décimaux (ex: 15.25 ou 35996973.50 etc..)

ProcedureDLL.l JustifyListIconColumn(GadgetID.l,column.l,flag.l)    ;Justify ListIcon Column 0-Left 1-Right 2-Center
  ; auteur paul **  http://www.purebasic.fr/english/viewtopic.php?f=13&t=48345
  lvc.LV_COLUMN
  lvc\Mask = #LVCF_FMT 
  Select flag
    Case 1
      lvc\fmt=#LVCFMT_RIGHT
    Case 2
      lvc\fmt=#LVCFMT_CENTER
    Default
      lvc\fmt=#LVCFMT_LEFT
  EndSelect
  ProcedureReturn SendMessage_(GadgetID(GadgetID),#LVM_SETCOLUMN,column,@lvc)
EndProcedure

OpenWindow(#Win, 0, 0, 640, 300, "Aligner Nbre dans ListIconGadget", #PB_Window_SystemMenu | PB_Window_ScreenCentered)
ListIconGadget(#Grid,  10,  25, 350, 100, "Montant", 100)
AddGadgetColumn(#Grid,1,"Nom",100)
AddGadgetColumn(#Grid,2,"Adresse",100)

wNbre$="76402.55"
AddGadgetItem(#Grid,-1,wNbre$+Chr(10)+"omega1"+Chr(10)+"Rue Tintin")
wNbre$="1000000.71"
AddGadgetItem(#Grid,-1,wNbre$+Chr(10)+"omega2"+Chr(10)+"Rue Milou")
wNbre$="225.02"
AddGadgetItem(#Grid,-1,wNbre$+Chr(10)+"omega3"+Chr(10)+"Rue Dupond")

JustifyListIconColumn(#Grid,0,1)
JustifyListIconColumn(#Grid,1,2)
JustifyListIconColumn(#Grid,2,3)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Répondre