[R] Rafraichissement Automatique d'une ListView

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

[R] Rafraichissement Automatique d'une ListView

#1

Message par timmalos »

Bonjour a tous. Je suis sur un petit projet ou j'ai besoin de rafraichir automatiquement la fenetre (toutes les 10 secondes) en fonction d'infos contenues dans un .ini

Pour compliquer un peu le tout , l'application est en gros de la surveillance d'autres applications, dont le nombre varie. Elle est donc construite dynamiquement avec Assign() et Eval()

Vous pouvez voir qu'il y a 3 Guis, ne vous en formalisez pas, c'est pour la suite, sauf si mon problème vient de là.(Pas testé car impossible selon moi) Je viens a vous apres pas mal de tests bien sur, et si pas de reponse j'espere trouvé chez mes amis americains.


En fait, l'application se rafraichit bien, mais après le PREMIER rafraichissement, impossible de fermer, j'insiste sur le fait qu'avant le premier rafraichissement tout va bien, mais après rien ne va plus, mais on peut quand meme apercevoir que le rafraichissement s'est effectué partiellement. De plus, il n'a l'air de fonctionner qu'a moitié, quand ya 2 applications et qu'on scroll bar, il n'y a rien dessous. Je vous fournis le .zip complet ou vous pouvez tester directement. Enorme merci pour ceux qui s'attelleront a mon problème.

Donc voila, ya t'il une autre solution que

_GUICtrlListView_DeleteAllItems($hListView)
_GUICtrlListView_DeleteColumn($hListView,$i)

Présents dans le script? Parce que ca a l'air de totu faire buguer :(

Merci d'avance

Cordialement,
Tim
Fichiers joints
mes_qds_simulation_aide.zip
(10.6 Kio) Téléchargé 255 fois
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#2

Message par Tlem »

Salut Tim. J'ai essayé de comprendre ton script, mais j'avoue avoir attrapé un peut mal au crâne. :P

Bon alors pour commencer, si je comprend bien, tu as une liste d'application à surveiller et ta ListeView affiche donc 'dynamiquement' en fonction du fichier .ini la liste des applications avec un carré vert pour dire qu'ellle est active et un carré rouge pour dire qu'elle ne l'est pas !
Est-ce bien cela ?

Le fichier .ini est-il mis à jour pendant le fonctionnement du script.

Sinon, certaines choses me 'choque' dans la conception du script.
1 - Le fichier .ini à vraiment une structure relativement complexe. Ne peut-tu simplifier sa structure afin d'utiliser la fonction IniReadSectionNames ?
Tu pourrait alors avoir une structure comme ceci :

Code : Tout sélectionner

[applications1]
Nom = REHUCIT
dossier_de_simulation = \rehucit\
active = 1

[applications2]
Nom = TEST
dossier_de_simulation = \2eme_appli_de_test\
active = 1

[applications3]
Nom = T
dossier_de_simulation = \3eme\
active = 1

[applications4]
Nom = REHT
dossier_de_simulation =
active = 0
qui sera sûrement bien plus 'simple' et évolutive dans le temps.
Pour le numéro de version, tu peut récupérer ça dans les propriété de l'exe.

Dans la fonction _DoListView tu re-crée systématiquement $hListView. :shock:
Dans ce cas au lieu d'utiliser _GUICtrlListView_DeleteAllItems et _GUICtrlListView_DeleteColumn, supprime directement le contrôle :

Code : Tout sélectionner

GUICtrlDelete($hListView)
Ensuite je trouve les fonctions de mise à jour plutôt complexes.
Ne serait-il pas judicieux de passer plutôt par l'utilisation d'un ou plusieurs tableau.
Genre : un tableau multidimensionnel avec le nom de l'appli, sont état de surveillance, sont état de fonctionnement, et plus si nécessaire.
Ensuite une simple boucle de lecture des éléments et tu met à jour la ListView.

Bon c'est déjà un premier jet. ;)
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é".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#3

Message par timmalos »

Ensuite une simple boucle de lecture des éléments et tu met à jour la ListView.
Et tu aurais fait comment?

Sinon depuis mon message j'ai reussi a trouvé pourquoi le programme plantait. L'utilisation des _ListView ne provoque pas de message d'erreur mais plante a leur execution si mal goupillées.
Aperemment ca marche plutot bien, voila ce que j'ai mis:

Code : Tout sélectionner

If $func_param = 1 Then
            
            _GUICtrlListView_DeleteallItems(GUICtrlGetHandle($hListView))
            _GUICtrlListView_RemoveAllGroups($hListView)
            ;_GUICtrlListView_InsertColumn($hListView,$i, Eval("appli"&$i&"_nom"), $width/1.3,2)
            ;_GUICtrlListView_DeleteColumn($hListView,0)
            
            
            ;$hListView2 = GUICtrlCreateListView("Application n°1", -1, -1, $width, @DesktopHeight - 100,$LVS_NOCOLUMNHEADER)
        Else
        
            $hListView = GUICtrlCreateListView("Application n°1", -1, -1, $width, @DesktopHeight - 100,$LVS_NOCOLUMNHEADER)
            _GUICtrlListView_SetExtendedListViewStyle($hListView, $exStyles)
            _GUICtrlListView_InsertColumn($hListView,$i, Eval("appli"&$i&"_nom"), $width/1.3,2)
            _GUICtrlListView_DeleteColumn($hListView,0)
        EndIf
Le func_param est activé après le premier demarrage en quelque sorte.


Merci pour l'idée de l'ini je met ca en place.
En fait, tu avais presque compris, il y a plusieurs applications qui vont aller verifier que des applications sur le net tournent bien.
Et ces memes applications contiennent plusieurs vérifications internes. Mon programme doit regrouper tout ca. Je posterai à la fin du projet le code source, et enorme merci d'avoir jeté un coup d'oeil, je sais que dans un projet comme ceci que l'on a pas créé c'est horriblement dur de comprendre (surtout que je code mal^^)


Si tu le veux je te poste le code dès que j'ai rectifié le .ini, et en privé je peux t'envoyer le vrai(là il est beaucoup tronqué), juste pour que tu vois un peu à quoi ca ressemble.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#4

Message par timmalos »

Et le bug venait partiellement de
_GUICtrlListView_DeleteallItems($hListView)

Qui en fait doit s'ecrire comme ca :

_GUICtrlListView_DeleteallItems(GUICtrlGetHandle($hListView))

(A savoir :wink: )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#5

Message par Tlem »

Pour le _GUICtrlListView_DeleteallItems je confirme qu'il fonctionne mieux avec la dernière syntaxe.
Pourtant, selon la documentation :
Parameters
$hWnd = Control ID/Handle to the control
Donc normalement le Control ID devrait fonctionner.

Je dirais donc qu'il y à bug dans la fonction puisque en lisant la description de la fonction dans le fichier GuiListView.au3, il est fait état du même fonctionnement...
► Afficher le texte_GUICtrlListView_DeleteAllItems
Pas de trace d'un ticket en relation sur le bugtrack. Donc tu peut rajouter un ticket sans problème.

Peut être serait-il judicieux (je dit peut être une connerie, mais bon ...), de modifier la fonction comme ceci :
► Afficher le texte_GUICtrlListView_DeleteAllItems
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é".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#6

Message par timmalos »

Le truc c'est que j'ai trouvé cette forme dans un exemple, j'arrive plus à trouver lequel d'une des fonctions _guilistview

Je risque d'avoir du mal à m'exprimer en anglais, deja que je comprend mal les distinctions entre un handle et controlID ...
Si tu veux que j'essaye je vais aller poster.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#7

Message par orax »

timmalos a écrit :Donc voila, ya t'il une autre solution que

_GUICtrlListView_DeleteAllItems($hListView)
_GUICtrlListView_DeleteColumn($hListView,$i)
Tlem a écrit :Ensuite je trouve les fonctions de mise à jour plutôt complexes.
Ne serait-il pas judicieux de passer plutôt par l'utilisation d'un ou plusieurs tableau.
Genre : un tableau multidimensionnel avec le nom de l'appli, sont état de surveillance, sont état de fonctionnement, et plus si nécessaire.
Ensuite une simple boucle de lecture des éléments et tu met à jour la ListView.
Je crois que ça ressemble un peu à ce que j'avais fait ici : Tri ascendant/descendant d'une ListView avec icônes (mais j'avais simplifié le code, il est un peu incomplet). J'avais fait comme ça parce qu'avec _GUICtrlListView_DeleteallItems ça clignotait (mais ça marchait quand même). En gros, $a_listeProcessus contient les infos de la Listview actuelle et $a_listeProcessusMAJ contient les nouvelles infos. Une comparaison est faite entre les deux tableaux et je ne modifie que ce qu'il y a à modifier.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#8

Message par Tlem »

@tim, comme je l'ai déjà dit, ça ne me gène pas de rapporter ce genre de problème sur le forum Anglais ou sur le bugtrack. Il suffit simplement de me le dire.
Je ne voudrais pas que les membres du forum imaginent que je m'attribue la découverte d'un bug ou autre.
Donc j'essaie d'être neutre. ;)
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é".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#9

Message par timmalos »

Oh oh oh, je vais pas t'en vouloir si tu rapporte ce bug!!! Je suis pas à la ruée vers l'or des bugs ;) Ca serait un grand plus si tu le faisais pour moi ;) Sinon je vais avoir du mal. Par contre j'irai lire ce que tu as mis pour approuver/completer j'ai fait pas mal d'autres recherches. Mais si tu le fais je te dis un GRAND merci, sinon ca sera pour le week end prochain, quand j'aurai fini mon appli, comme ca j'aurai le temps. Ca marche niquel la ca fait plaisir, mais je vais quand meme regarder le post de Orax, car il est vrai qu'au rafraichissement c'est pas tres beau a voir.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#10

Message par Tlem »

Bon. Au final, avant de poster sur le forum Anglais, j'ai contrôlé quelques petites choses.

Et là ... J'y comprend pas grand chose car l'exemple de la doc fonctionne trés bien avec le control ID. Donc je pense que c'est au niveau de ton script que quelque chose coince ... Mais je sais vraiment pas quoi. :shock:

Exemple de la doc :

Code : Tout sélectionner

#include <GuiConstantsEx.au3>
#include <GuiListView.au3>

Global $GUI, $hListView

$GUI = GUICreate("ListView Delete All Items", 400, 300)

$hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
GUISetState()

; 3 column load
For $iI = 0 To 9
    GUICtrlCreateListViewItem("Item " & $iI & "|Item " & $iI & "-1|Item " & $iI & "-2", $hListView)
Next

MsgBox(4160, "Information", "Delete All Items")
; Items created using built-in function, pass the control ID
MsgBox(4160, "Deleted?", _GUICtrlListView_DeleteAllItems($hListView))

; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
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é".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#11

Message par timmalos »

Peut etre parce que l'exemple est fondé sur
GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)

Qui retourne effectivement un handle alors que moi j'ai utilisé
_Guilistview_create() ou quelque chose comme ca, mais en tout ca l'UDF. Et là il faut rajouter Guictrlgethandle() pour que ca marche, donc je pense qu'il y a bien un bug avec le controlID
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#12

Message par Tlem »

Dans ton code c'est pourtant bien GUICtrlCreateListView qui est utilisé (ligne 166).
Peut être est-ce lié à la deuxième GUI ou au style...
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é".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Rafraichissement Automatique d'une ListView

#13

Message par timmalos »

Oups, moi dans mon code actuel j'utilise la creation de l'UDF, ya qq chose qui cloche
Répondre