Page 1 sur 1

[R] Insertion de controles dans une listview

Posté : lun. 28 avr. 2008 10:54
par olaiv
Bonjour à tous ,

J'aimerais pouvoir associer une progress bar ou un bouton à une colonne/ligne spécifique d'une listview et qu'elle réagisse avec(si on change la taille les controles suivent , si on supprime la ligne ils sont supprimés également etc ..)

Pour l'instant je ne fais que superposer mes controles par dessus ce qui n'est pas pratique ni souple les controles disparaissant quand je clic.

Peut être y a t-il plus simple comme passer par un tableau pour rentrer les controles en fonction de la ligne / colonne puis l'afficher ??

Merci d'avance

Re: [...] Insertion de controles dans une listview

Posté : lun. 28 avr. 2008 11:23
par Tlem
Utilisez Koda (C:\Program Files\AutoIt3\SciTE\Koda\Koda) si vous avez installé Scite4AutoIt pour voir les propriétés avancées d'un ListView.

Par défaut le bouton de la colonne peut servir.
Sinon il est possible de rajouter des ChekBoxs, ou des icônes sur les lignes du ListView.

Re: [...] Insertion de controles dans une listview

Posté : mar. 29 avr. 2008 17:29
par olaiv
J'ai essayé tout ça je ne suis pas beaucoup plus avancé.

J'ai essayé de créer ma progress bar en même temps que je creer l'objet de la listview. Au lieu de simplement afficher la barre il rajoute un label de l'ID de cette progress bar dans une colonne et je n'ai par la suite aucun moyen de modifier ce nouveau controle ..

Peut être que les listview ne sont pas faites pour ça ?

Est ce qu'il est possible d'y arriver en affichant un tableau directement sur la fenêtre GUI au lieu d'afficher une listview ?
Ou par une autre astuce peut être ... ?

Re: [...] Insertion de controles dans une listview

Posté : mar. 29 avr. 2008 21:37
par Tlem
J'avoue avoir un peut de mal à comprendre ce que vous voulez exactement.
Et sans code pour essayer, difficile de vous aider plus.

Re: [...] Insertion de controles dans une listview

Posté : mer. 30 avr. 2008 10:39
par olaiv
Effectivement un peu de code ne ferait pas de mal , ainsi que quelques explications.

Je mettrais dans un tableau un nombre aléatoire de noms de fichiers , puis je créerais une ligne sur la list view par fichier dans le tableau.
Chaque ligne comprendra une progress bar dans la deuxieme colonne.
Je cherche un moyen de controler ces progress bar facilement , proprement et efficassement.

Code : Tout sélectionner

#include <GUIConstants.au3>
guicreate("Test listview",600,600)

GUICtrlCreateProgress(229,106,110,16)

$listView=GUICtrlCreateListView("                                     |                                         ",75,100,460,230,$LVS_NOCOLUMNHEADER,BitOR($WS_EX_CLIENTEDGE,$LVS_EX_CHECKBOXES,$LVS_EX_GRIDLINES))        
$objet1=GUICtrlCreateListViewItem("personal.pst",$listView) ;1ere ligne
GUICtrlCreateButton("Annuler",400,138,80,20)
$objet2=GUICtrlCreateListViewItem("",$listView)
$objet3=GUICtrlCreateListViewItem("archive2007.pst     |"&GUICtrlCreateProgress(229,139,110,16),$listView) ;3eme ligne


GUISetState()

Do 
    $msg=GUIGetMsg()
Until $msg=$gui_event_close
 

Dans la première ligne je superpose une progress bar , sur la troisieme ligne je la créer au moment de créer l'objet de la list view.

Dans les deux cas il y a pas mal de problèmes qui sautent aux yeux ...


A part ça j'ai plusieurs questions :D

1) Si on clic sur la checkbox ou sur la premiere colonne d'une ligne ça efface tout controle à la ligne sélectionnée , y'a t il un moyen d'éviter ça ?
Y'a t il un mode pour désactiver la sélection des cellules de la list view ? Qu'il ne selectionne même pas le texte quand on clique dessus.

2) Peut on augmenter la hauteur des lignes dans une list view sans modifier la taille d'écriture des mots?

3) Peut on créer un lien hypertexte(à la place de mon bouton annuler par exemple) ?


En ésperant avoir été plus clair merci d'avance :D

Re: [...] Insertion de controles dans une listview

Posté : mer. 30 avr. 2008 20:15
par Tlem
Est-ce donc ce que vous recherchez :

Code : Tout sélectionner

#include <GUIConstants.au3>
Dim $i, $j
guicreate("Test listview",600,400)

$progressbar1 = GUICtrlCreateProgress(229,106,110,16)

$listView=GUICtrlCreateListView("                                     |                                         ",75,100,460,230,$LVS_NOCOLUMNHEADER,BitOR($WS_EX_CLIENTEDGE,$LVS_EX_CHECKBOXES,$LVS_EX_GRIDLINES))        
$objet1=GUICtrlCreateListViewItem("personal.pst",$listView) ;1ere ligne
$objet2=GUICtrlCreateListViewItem("",$listView)
$objet3=GUICtrlCreateListViewItem("archive2007.pst     |",$listView) ;3eme ligne
$progressbar2 = GUICtrlCreateProgress(229,139,110,16)
$Annul = GUICtrlCreateButton("Annuler",540,138,50,20)

GUISetState()

Do
    $msg=GUIGetMsg()
        $i = $i + 1
        $j = $j + 3
        GUICtrlSetData ($progressbar1,$i)
        GUICtrlSetData ($progressbar2,$j)
        If $i = 100 then $i = 0
        If $j >= 98 Then $j = 0
        Sleep (5)
Until $msg = $gui_event_close or $msg = $Annul
Pour les autres questions, merci de créer d'autres posts.
Merci

Re: [...] Insertion de controles dans une listview

Posté : mer. 30 avr. 2008 23:44
par olaiv
Pas exactement le bouton annuler est hors de la listview or je cherche un moyen d'associer un contrôle par colonne et d'en garder l'affichage même quand il est inactif.
En modifiant la position du bouton annuler comme je souhaite(voir code) il est impossible de cliquer dessus.
Je cherche maintenant un moyen de contourner ce problème en remplacer le bouton par un lien hypertexte par exemple.

Code : Tout sélectionner

#include <GUIConstants.au3>
Dim $i, $j
guicreate("Test listview",600,400)

$progressbar1 = GUICtrlCreateProgress(229,106,110,16)

$listView=GUICtrlCreateListView("                                     |                                         ",75,100,460,230,$LVS_NOCOLUMNHEADER,BitOR($WS_EX_CLIENTEDGE,$LVS_EX_CHECKBOXES,$LVS_EX_GRIDLINES))        
$objet1=GUICtrlCreateListViewItem("personal.pst",$listView) ;1ere ligne
$objet2=GUICtrlCreateListViewItem("",$listView)
$objet3=GUICtrlCreateListViewItem("archive2007.pst     |",$listView) ;3eme ligne
$progressbar2 = GUICtrlCreateProgress(229,139,110,16)
$Annul = GUICtrlCreateButton("Annuler",420,138,50,20) ;position du bouton annuler sur la 3eme colonne ==> clic dessus impossible

GUISetState()

Do
    $msg=GUIGetMsg()
        $i = $i + 1
        $j = $j + 3
        GUICtrlSetData ($progressbar1,$i)
        GUICtrlSetData ($progressbar2,$j)
        If $i = 100 then $i = 0
        If $j >= 98 Then $j = 0
        Sleep (5)
Until $msg = $gui_event_close or $msg = $Annul
 
Dans votre code les progressbar sont régulièrement mise à jour et réapparaissent donc au premier plan ce qui évite le problème,je pense que je vais adopter cette solution(rafraîchir constamment les progressbar).


J'essaye d'obtenir une interface précise désolé de pinailler :wink:

Re: [...] Insertion de controles dans une listview

Posté : jeu. 01 mai 2008 11:15
par Tlem
En ce qui concerne la mise en place d'un contrôle bouton dans un ListView, à ma connaissance ce n'est pas possible avec AutoIt (Mais je suis très loin de tout connaître et il y à peut être une solution que je ne connais pas).

A titre personnel, je ne trouve pas ça forcément esthétique, et ne vois en quoi le fait d'avoir les boutons à droite du ListView vous dérange.
Mais comme ont le dit : "Les goûts et les couleurs ..." ;)

Re: [...] Insertion de controles dans une listview

Posté : mar. 22 juil. 2008 09:25
par olaiv
Solution trouvée :D

Re: [...] Insertion de controles dans une listview

Posté : mar. 22 juil. 2008 20:35
par Tlem
Pour les progress bar oui, mais si vous déplacez la GUI, elles se figent aussi. :D
Et le bouton associé à une colonne ? Je ne l'ai pas vu ! :P

Re: [...] Insertion de controles dans une listview

Posté : mar. 22 juil. 2008 23:11
par olaiv
Effectivement mais si on redimensionne la fenêtre les progress bar étant intégrées sont bien cachées :)

Mais je suis d'accord ça ne répond que partiellement au problème.

Autre question même sujet , avec l'UDF ListView_Progress.au3 postée plus haut existe-t-il un moyen de cacher / supprimer / modifier la position des progress bar?

En effet pour le logiciel de copie que je fais j'ai besoin d'en créer beaucoup et après 8-10 l'exécution est très ralentie ...

J'aimerais donc avoir le même résultat qu'avec Ex_ListView_Progress.au3 mais n'avoir qu'une bar de progression dont je changerais l'emplacement en fonction du fichier en cours de copie.

Est-ce clair ? :) Merci ;)

Re: [...] Insertion de controles dans une listview

Posté : mar. 22 juil. 2008 23:35
par Tlem
olaiv a écrit :Autre question même sujet , avec l'UDF ListView_Progress.au3 postée plus haut existe-t-il un moyen de cacher / supprimer / modifier la position des progress bar?
En lisant le code de ListView_Progress.au3 je dirait oui.
Regardez la description de la fonction dans le fichier.
$sItemIndex et $sSubItemIndex vous permettrons de déterminer la position dans le tableau.
Quant à supprimer ou cacher la progressBar, étant donné qu'il s'agit d'un contrôle, vous pouvez en faire ce que vous voulez ...
olaiv a écrit :J'aimerais donc avoir le même résultat qu'avec Ex_ListView_Progress.au3 mais n'avoir qu'une bar de progression dont je changerais l'emplacement en fonction du fichier en cours de copie.
Créez une seule ProgressBar et lorsqu'elle à fini, détruisez là (GUICtrlDelete devrait fonctionner) puis recréez en une à des coordonnée différentes ($sItemIndex et $sSubItemIndex).

Re: [...] Insertion de controles dans une listview

Posté : mer. 23 juil. 2008 10:20
par olaiv
Après étude en détail la progress bar étant créee avec _WinAPI_CreateWindowEx j'ai utilisé _WinAPI_DestroyWindow pour supprimer le control , les fonctions s'appliquant aux GUI ne fonctionnant pas dessus :x

Je vais donc comme conseillé la supprimer / recréer à volonté ;)

Re: [R] Insertion de controles dans une listview

Posté : ven. 25 juil. 2008 16:58
par olaiv
Argh problème.
L'UDF que j'ai posté est pratique mais consomme énormement et plus on en créer plus l'application tourne lentement.
J'aimerais réussir à
-Soit changer la position de la progressBar en modifiant l'index.Il me semblait au début que la fonction _MoveProgress de l'include permettait de le faire mais en fait non , ou alors je m'en suis mal servi.
-Soit en utilisant comme je le disais _WinAPI_DestroyWindow et en supprimant correctement la progressbar apparement cela ne suffit pas.J'ai vu dans l'include qu'il utilise des dll pour la création c'est peut être ça je ne sais pas.