[R] Insertion de controles dans une listview

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
olaiv
Niveau 3
Niveau 3
Messages : 41
Enregistré le : sam. 26 avr. 2008 22:17
Status : Hors ligne

[R] Insertion de controles dans une listview

#1

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
olaiv
Niveau 3
Niveau 3
Messages : 41
Enregistré le : sam. 26 avr. 2008 22:17
Status : Hors ligne

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

#3

Message 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 ... ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#4

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
olaiv
Niveau 3
Niveau 3
Messages : 41
Enregistré le : sam. 26 avr. 2008 22:17
Status : Hors ligne

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

#5

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#6

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
olaiv
Niveau 3
Niveau 3
Messages : 41
Enregistré le : sam. 26 avr. 2008 22:17
Status : Hors ligne

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

#7

Message 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:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#8

Message 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 ..." ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
olaiv
Niveau 3
Niveau 3
Messages : 41
Enregistré le : sam. 26 avr. 2008 22:17
Status : Hors ligne

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

#9

Message par olaiv »

Solution trouvée :D
Fichiers joints
Ex_ListView_Progress.au3
Un exemple : ...
(2.89 Kio) Téléchargé 221 fois
ListView_Progress.au3
Il faut utiliser cet include
(7.76 Kio) Téléchargé 246 fois
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#10

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
olaiv
Niveau 3
Niveau 3
Messages : 41
Enregistré le : sam. 26 avr. 2008 22:17
Status : Hors ligne

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

#11

Message 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 ;)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#12

Message 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).
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
olaiv
Niveau 3
Niveau 3
Messages : 41
Enregistré le : sam. 26 avr. 2008 22:17
Status : Hors ligne

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

#13

Message 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é ;)
olaiv
Niveau 3
Niveau 3
Messages : 41
Enregistré le : sam. 26 avr. 2008 22:17
Status : Hors ligne

Re: [R] Insertion de controles dans une listview

#14

Message 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.
Répondre