[..] Listview en mode OnEvent

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Julien
Niveau 5
Niveau 5
Messages : 141
Enregistré le : sam. 02 août 2008 17:01
Status : Hors ligne

[..] Listview en mode OnEvent

#1

Message par Julien »

Bonjour,

je sais que le sujet à déjà été traité mais je ne trouve pas de réponse à mon dysfonctionnement.

J'utilise dans mon script une façon de faire (bonne ou mauvaise mais la même partout) et je voudrais continuer.

Dans un premier temps j'utilise les options suivantes :

Code : Tout sélectionner

Opt("MustDeclareVars", 1)
Opt("GUIOnEventMode", 1) ;
Voila un exemple du code :

Code : Tout sélectionner

 _Form()

Func _Form()
    Global $Form = GUICreate("form", 653, 239, -1, -1, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_FormOff")
    Global $ListView = _GUICtrlListView_Create($Form, "", 8, 8, 634, 182, BitOr($LVS_REPORT, $LVS_SHOWSELALWAYS))
    _GUICtrlListView_SetExtendedListViewStyle($ListView, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_BORDERSELECT))
    _GUICtrlListView_InsertColumn($ListView, 0, "Col 1", 70)
    Global $Button = GUICtrlCreateButton("Exit", 512, 200, 120, 25)
    GUICtrlSetOnEvent(-1, "_FormOff")
EndFunc

Func _FormOn()
    _Form()
    GUISetState(@SW_SHOW, $Form)
    _FormWait() ; Si cette ligne est commentée le mode OnEvent est respecté
EndFunc

Func _FormOff()
    GUISetState(@SW_HIDE, $Form)
EndFunc

Func _FormWait()
    _GUICtrlListView_RegisterSortCallBack($ListView,False)
    GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")
    While 1
        Sleep(100)
    WEnd
    _GUICtrlListView_UnRegisterSortCallBack($ListView)
    GUIRegisterMsg($WM_NOTIFY, "")
EndFunc

While 1
    Sleep(1000) ; Boucle de d'attente
WEnd
 
J'ai suivis l'aide pour obtenir ce que je voulais au niveau de l'affichage de la listview, du tri, de la récupération des données, de la mises à jour.

Ce qui ne fonctionne pas c'est les actions sur le bouton, probablement à cause de la boucle while qui une fois initalisé ne peux être intérompue dans le mode OnEvent, comment faire alors pour que par exemple ma fonction _FormOff() soit prise en compte ?

D'avance merci pour votre aide.
Modifié en dernier par Julien le mar. 12 juin 2012 21:18, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Listview en mode OnEvent

#2

Message par Tlem »

Difficile de tester votre code en l'état. Ceci dit, votre fonction _FormWait() m'interpelle grandement, car en l'état, le code est bloqué dans l'appel de cette fonction par la boucle infinie, de plus à aucun moment vous affichez la GUI.

Je sais que dans les exemple le code principal est mis dans une fonction, mais généralement, sur un code simple et standard on ne procède pas de la sorte.

Je vous conseil de lire le chapitre sur les GUI dans le très bon tutoriel de notre ami Tim que vous trouverez sur le site du zéro en cliquant sur le logo en haut à gauche de ce site. ;)
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é".
Julien
Niveau 5
Niveau 5
Messages : 141
Enregistré le : sam. 02 août 2008 17:01
Status : Hors ligne

Re: [..] Listview en mode OnEvent

#3

Message par Julien »

Bonsoir,

J'ai mis à jour le code dans mon exemple.
En effet je suis certain que mon problème vient de cette boucle car le problème ne se pose plus quand je désactive l'appel à _FormWait().

Mais je ne peux plus trier les colonnes dans ma listview.

Je vais regarder à nouveau ce tuto pour chercher ce que j'ai loupé. Merci.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Listview en mode OnEvent

#4

Message par Tlem »

Votre code n'est toujours pas fonctionnel en l'état. Tout ce que vous avez fait, c'est de rajouter l'appel à la fonction _Form(), mais si de notre coté il faut imaginer ou reconstruire le code qui permet d'afficher votre GUI, vous comprendrez bien que certains auront autre chose à faire.

La structure de votre code n'est pas standard, donc faite la lecture du tutoriel, adaptez votre code en utilisant les conseils pour le mode événementiel et si ça ne fonctionne toujours pas, revenez nous voir avec un code que l'on peut lancer pour tester et trouver une solution à votre problème.
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é".
Répondre