Page 2 sur 2

Re: Problème Comportement EditorGadget()

Publié : mar. 04/mai/2010 19:32
par Geo Trouvpatou
Dobro a écrit : ensuite je lui montre comment faire un thread, puisqu'il semblait ne pas maitriser le truc
donc je repars sur cette partie de code a nouveau
pour ma part j'ai faillit le faire, cependant il m'a paru judicieux de lui laisser le faire
de lui meme , de plus; rien ne dit que le comportement du debut (fenetre bloqué), n'est pas un fait voulu par boddhi ! ;) ...
Oui mais pour ma part j'avoue que parfois je pose des questions en croisant les doigts pour qu'une âme charitable me donne une solution clé en main :wink:, alors je fais un peu pareil.

Maintenant si boddhi veut absolument des fenêtres bloquées pendant de lourds traitements, ça je sais faire :mrgreen:.
Ça à été mon plus gros emmerdement de mes débuts.

Bye.

Re: Problème Comportement EditorGadget()

Publié : mar. 04/mai/2010 19:37
par Backup
Geo Trouvpatou a écrit :Oui mais pour ma part j'avoue que parfois je pose des questions en croisant les doigts pour qu'une âme charitable me donne une solution clé en main :wink:, alors je fais un peu pareil.

pour ma part, j'aime mieux laisser le gars découvrir par lui même
c'est plus formateur , je donne les chemins a suivre , après c'est a lui de voir...

même s'il m'arrive aussi de donner des soluces toutes faites...

en fait tout dépend du gars et ......de mes competences ..:)

Re: Problème Comportement EditorGadget()

Publié : mer. 05/mai/2010 8:59
par boddhi
@ Dobro & @ Geo Trouvpatou

Merci de votre aide et mon code ne vaut vraiment pas la peine que l'on se chamaille.. :D :D
Geo Trouvpatou a écrit :1) Tu utilises EnableExplicit et c'est très bien, c'est une des 1ères choses que j'ai appris à faire.
Inconvénient c'est qu'il faut déclarer ses variables.
Toi tu as mis Define pour que le compilo arrête de te saôuler mais regarde comment j'ai défini les variables dans les procédures.

Cela évite que dans du code externe si tu utilises une variable avec le même nom que dans une de tes procédure, cela ne foute le merdier à l'extérieur.
Bien évidemment parfois on est obligé d'en Globaliser certaines.
Merci de tes conseils. Toutefois, je sais tout cela. J'ai écrit rapidement ce bout de code simplement pour illustrer le problème que je rencontre sur le raffraichissement de l'EditorGadget. En règle générale, mes codes sont mieux verrouillés... :) :)

Geo Trouvpatou a écrit :2) Perso à la place de ArgNom.s je préfère ArgNom$, pourquoi?
Parce que si tu files ton prog à d'autres, ou si tu ouvres ton prog dans 3 mois et que tu as une procédure de 400 lignes
C'est vrai, ta remarque est tout à fait pertinente.
Vieux programmeur en basic, j'ai connu le temps où le $ était la seule possibilité de déclarer une variable String. Mais voilà, on gagne des habitudes, on en perd...parfois de bonnes :D

J'ai testé vos codes à tous deux mais je n'obtiens pas le résultat escompté...
Comme le suppose Dobro, mon but est d'empêcher l'utilisateur de pouvoir agir sur l'IU durant le traitement de la procédure (c'est pour cela que j'avais mis ;DisableWindow(0,#True)).
Le principe du Thread ne me semble pas approprié ici puisqu'il lance la procédure en tâche de fond.

Je crois aussi qu'une partie du problème vient peut-être du fait que j'utilise, dans ma procédure, la commande RunProgram() avec le paramètre #PB_Program_Open pour pouvoir récupérer le stdout de l'application. Cela a peut-être un impact que je ne comprends pas encore...


Le synopsis de mon programme est le suivant :
  • - L'utilisateur sélectionne (via un bouton) un dossier qui alimente en noms de fichiers, selon un filtre un ListIconGadget,
    - Il pointe ensuite l'un des items
    - **** A partir de là, il ne doit plus avoir la main sur l'IU ****
    - Tous les contrôles StringGadget(), EditorGadget() et ImageGadget(), au contenu lié à un item éventuellement selectionné auparavant, sont mis à blanc,
    - **** Ici, une partie des champs n'est pas correctement raffraichie **** (1)
    - La procédure détermine si le fichier est compressé,
    - **** Ici, le DisableWindow ne fonctionne pas (:?) **** (2)
    - Si oui, décompression du fichier avec un exécutable DOS lancé par RunProgram,
    - Ouverture (ReadFile) du fichier si le fichier a bien été décompressé ou s'il ne l'était pas,
    - Récupération de données binaires Unicode,
    - Récupération de données binaires graphiques,
    - Conversion des données en graphique,
    - Mise à jour des gadgets StringGadget(), EditorGadget() et ImageGadget(),
    - Restitution du contrôle à l'utilisateur
(1) Pour solutionner le problème du raffraichissement, il y a la solution barbare qui consiste à recréer les gadgets, mais bon, je pense qu'il doit y avoir un autre moyen.
(2) Là, franchement je ne comprends pas, même avec un EnableWindow_(), la fênetre reste accessible... il y a qq chose qui m'échappe... Peut-être qu'il faudra que j'en passe par des DisableGadget()...

Merci.

Re: Problème Comportement EditorGadget()

Publié : mer. 05/mai/2010 9:25
par Backup
remarque que si tu ne veux pas que l'utilisateur soit tenté d'utiliser ton soft pendant qu'il travail
tu peux aussi mettre la fenetre hors de portée !! (a l'extérieur de l'écran)

et afficher un splash screen pendant ce temps ....

les gadgets sont désactivables aussi ...(HideGadget(#Gadget, Etat))

bref l'imagination peut parfois remplacer un petit probleme :)
- **** Ici, une partie des champs n'est pas correctement raffraichie **** (1)
si ! il le sont si tu utilise WaitWindowEvent(10) ,WindowEvent() ; je te l'ai démontré plus haut !!
mais j'ai l'impression que tu ne calcul pas ce que je te dis ... :roll:

Re: Problème Comportement EditorGadget()

Publié : jeu. 06/mai/2010 11:12
par cederavic
Dobro a écrit :remarque que si tu ne veux pas que l'utilisateur soit tenté d'utiliser ton soft pendant qu'il travail
tu peux aussi mettre la fenetre hors de portée !! (a l'extérieur de l'écran)

et afficher un splash screen pendant ce temps ....

les gadgets sont désactivables aussi ...(HideGadget(#Gadget, Etat))

bref l'imagination peut parfois remplacer un petit probleme :)
La lecture peut quant à elle résoudre un problème :
DisableWindow()

Syntaxe

DisableWindow(#Fenetre, Etat)
Description

Active ou désactive les interactions avec l'utilisateur sur la #Fenetre spécifiée.

Le paramètre 'Etat' peut prendre une des valeurs suivantes:
1: La fenêtre est désactivée.
0: La fenêtre est activée.

OS Supportés

Tous
:P