Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 09-01-2008 16:04:03

mial  
White & The Farmerz Gang
Lieu: Nancy
Date d'inscription: 09-02-2007
Messages: 113
Pépites: 4,366
Banque: 18,191,568,319,324

[RESOLU] Annuler une tache de fond

Bonjour,

J'ai un service qui crée des documents Word.

Pour indiquer le traitement, il y a une fenêtre qui apparait avec une barre de progression. Le service est une variable d'instance de la fenêtre.

Durant mon traitement (depuis le service), je mets à jour le titre de la fenêtre et les 2 Progress Bar, cela fonctionne bien.

Mon problème survient quand j'essaie de donner à l'utilisateur la possiblité d'annuler la tache...Impossible de reprendre le controle sur la fenêtre (deplacement, clic sur le bouton,...) alors qu'elle est rafraichit correctement.

J'ai placé des yield dans mes boucles mais rien à faire...et pas d'autre idées...

Merci d'avance!

Dernière modification par mial (10-01-2008 09:42:27)

Hors ligne

 

#2 09-01-2008 16:37:29

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Annuler une tache de fond

il y a un timer sur ta barre de progression ?

tu as le code qui permet de charger cette fenetre, et et les autres scripts ?


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#3 09-01-2008 16:48:53

mial  
White & The Farmerz Gang
Lieu: Nancy
Date d'inscription: 09-02-2007
Messages: 113
Pépites: 4,366
Banque: 18,191,568,319,324

Re: [RESOLU] Annuler une tache de fond

Je ne suis pas sur que ca aide mais ca ne coute rien

Voici donc la fonction principale de ma fenetre possedant les progressbar avec inv_word un objet n_cst_word chargé du traitement:

Code: pb

string ls_mode

if isvalid(inv_word) then
  
  // j'associe la GUI
  inv_word.w_title = this
  inv_word.hpb_jauge = hpb_1
  inv_word.hpb_jauge2 = hpb_2
  inv_word.st_progress = st_1

  ls_mode = inv_word.of_getmode()
  
  if ls_mode = 'DE' then    // Impression Word dernier evt
    inv_word.event ue_impression_word_dernier_evt()
    if inv_word.of_getprevisualisation() then
      cb_terminer.visible = true
    else
      Close(this)
    end if
  elseif ls_mode = 'RV' then   // Impression relevé vide
    inv_word.event ue_impression_word_releve_vide()
    if inv_word.of_getprevisualisation() then
      cb_terminer.visible = true
    else
      Close(this)
    end if
  elseif ls_mode = 'PE' then   // Impression dernier evt dchaque periodicite
    inv_word.event ue_impression_word_periodicite()
    //if inv_word.of_getprevisualisation() then
    //  cb_terminer.visible = true
    //else
      Close(this)
    //end if
  elseif ls_mode = 'NC' then   // Non conformité
    inv_word.event ue_non_conformite()
    Close(this)
  end if

end if


et la fonction principale de mon service n_cst_word :

Code: pb

For ll_i = 1 to upperbound(is_balises)
    setpointer(arrow!)
    w_title.setfocus()
    w_title.setredraw(true)
    Yield ( )
    hpb_jauge2.StepIt ( )
    st_progress.Text = 'Remplacement de ' + is_balises[ll_i] + '...'
    
    iole_document_tab[ll_index].ActiveDocument.Content.Select
    
    // Test de la présence de la balise
    do while iole_document_tab[ll_index].Selection.Find.Execute(is_balises[ll_i])
      
      // Elle existe, on remplace par la valeur si celle-ci n'est pas nulle
      if not isnull(is_valeurs[ll_i]) and Trim(is_valeurs[ll_i]) <> "" then 
        iole_document_tab[ll_index].selection.TypeText(is_valeurs[ll_i])
      else
          iole_document_tab[ll_index].selection.TypeText(" ")
      end if
      
    loop  
  next

Vous pouvez voir que mon service met a jour les 2 progressbar et le titre.

Reste a savoir comment rendre ma fenêtre reactive aux clics de souris...

Hors ligne

 

#4 09-01-2008 16:55:46

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Annuler une tache de fond

il y a quoi comme code sur le bouton annuler de ta barre de progression ?


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#5 09-01-2008 17:00:52

mial  
White & The Farmerz Gang
Lieu: Nancy
Date d'inscription: 09-02-2007
Messages: 113
Pépites: 4,366
Banque: 18,191,568,319,324

Re: [RESOLU] Annuler une tache de fond

Pour l'instant rien du tout...juste une messageBox avec un point d'arret en debug, mais rien ne se passe.

Pareil pour tous le evenement clicked, key, .. de ma fenêtre. Il ne passe dans aucun evenement :

l'affichage de la fenêtre est correct mais aucun interactivité.

Hors ligne

 

#6 09-01-2008 17:08:59

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Annuler une tache de fond

il faudrait que tu ajoutes une variable d'instance du genre  'boolean ib_annuler'

dans ta boucle, tu testes cette variable, tant qu'elle est fausse, la boucle tourne.

à partir de ce bouton 'annuler', intégré dans ta fenetre de barre de progression...
un petit bout de code de type :

Code: pb

w_word    lw_parent
lw_parent = Parent.ParentWindow()

IF isvalid(lw_parent) then
 lw_parent.event ue_annulerword()
 close(this) 
end if


et dans l'evenement ue_annulerword de ta fenetre, tu as juste à mettre le boolean à true.


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#7 09-01-2008 17:13:10

mial  
White & The Farmerz Gang
Lieu: Nancy
Date d'inscription: 09-02-2007
Messages: 113
Pépites: 4,366
Banque: 18,191,568,319,324

Re: [RESOLU] Annuler une tache de fond

Oui j'ai bien compri, le bouton annuler est la pour ca..

Je répète mon problème : Impossible de faire le moindre clic sur le bouton annuler ni sur la fenêtre elle même.
Le traitement du service semble empecher toute action. Seul le rafraichissement de ma fenêtre est opérationnel.

Hors ligne

 

#8 09-01-2008 17:21:51

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Annuler une tache de fond

tu ne peux pas mettre un "sleep" à la fin de ton do while ? histoire que tu ai le temps d'avoir la main sur la fenetre de progression ?


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#9 09-01-2008 17:29:09

mial  
White & The Farmerz Gang
Lieu: Nancy
Date d'inscription: 09-02-2007
Messages: 113
Pépites: 4,366
Banque: 18,191,568,319,324

Re: [RESOLU] Annuler une tache de fond

Je viens d'essayer et ca ne change malheureusement rien.

Hors ligne

 

#10 09-01-2008 17:36:13

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Annuler une tache de fond

tu ne peux pas declencher la fenetre d'avancement sur une nouvelle fenetre ?
parce vu ton code, j'ai l'impression que tout est codé dans le meme objet.


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#11 09-01-2008 17:39:01

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Annuler une tache de fond

enfin, je donne des pistes comme ca... car je vois bien ton probleme.
on peut maitriser cela pour les retrieve, mais la, c'est un autre cas.


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#12 10-01-2008 09:42:03

mial  
White & The Farmerz Gang
Lieu: Nancy
Date d'inscription: 09-02-2007
Messages: 113
Pépites: 4,366
Banque: 18,191,568,319,324

Re: [RESOLU] Annuler une tache de fond

Résolut grâce à un

Code: pb

do while Yield ( )
    loop

plutôt qu'un yield() simple.

Hors ligne

 

#13 10-01-2008 10:21:26

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Annuler une tache de fond

bravo à toi


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22