Pas de problème (pb), que du PowerBuilder (PB) ^^

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 14-06-2011 09:20:06

dydo  
Membre Geek
Date d'inscription: 25-04-2011
Messages: 21
Pépites: 98
Banque: 0

exécuter un code d'une window sans l'ouvrir

Bonjour à tous,

j'ai 2 window (w_1 et w_2)  dans mon programme que je voulais les lancer un par un automatiquement sans les ouvrir (sans utiliser la fonction Open). ==> rassembler les traitement

pour cela mon bout de code est le suivant :

Code: pb

w_1 = create w_1 // instancier la 1ère Window
w_1.TriggerEvent("open")
w_1.cb_retrouver.TriggerEvent(Clicked!)
w_1.dw_detail.insertrow(0) // ICI insertrow retourne -1 !!!
w_1.TriggerEvent("close")
// 2 ème Window
w_2 = create w_2 // instancier la 2ème Window
w_2.TriggerEvent("open")
w_2.cb_retrouver.TriggerEvent(Clicked!)
w_2.dw_detail.insertrow(0) // ICI insertrow retourne -1 !!!
w_2.TriggerEvent("close")



les events sont exécuté avec succées, les datawindow sont reconnus mais je peux pas les manipuler (insertrow retoune -1, retrieve aussi).

je ne veux pas dupliquer le code des 2 fenetres dans le nouvel traitement par ce que j'aurais une redondance de code.

en utlisant "Open(w_1)" au lieu de "w_1 = create w_1", cela fonctionne trés bien ; mais je ne veux pas ouvrir la w_1 , en plus que faire si la window est ouverte et contient des données ??

de même j'ai pas intérêt à factoriser les traitements dans des userobjects et des fonctions car un risque de regression est grand, en plus ça coutera bcp en terme de temps.

Merci d'avance pour vos réponses !!

Hors ligne

 

#2 14-06-2011 09:23:50

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Re: exécuter un code d'une window sans l'ouvrir

Si j'ai compris pourquoi ne pas utiliser la fonction open() mais avec la propriété non visible pour les fenêtres ?
L'instruction w_1 = create w_1, n'est pas équivalent à open() en PB, open() fait appel à plus d'instructions.

Dernière modification par Dadone (14-06-2011 09:28:23)

Hors ligne

 

#3 14-06-2011 09:38:09

dydo  
Membre Geek
Date d'inscription: 25-04-2011
Messages: 21
Pépites: 98
Banque: 0

Re: exécuter un code d'une window sans l'ouvrir

C'est sure que la fonction "Open()" englobe l'event "open".

Mais mon problème c'est quoi faire lorsque la fenetre w_1 est déja ouverte en plus elle contient des données que je ne veux pas écraser.

Il y a t-il une solution pour faire fonctionner ma proposition

Merci ;)

Hors ligne

 

#4 14-06-2011 09:49:54

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Re: exécuter un code d'une window sans l'ouvrir

dydo a écrit:

C'est sure que la fonction "Open()" englobe l'event "open".

Mais mon problème c'est quoi faire lorsque la fenetre w_1 est déja ouverte en plus elle contient des données que je ne veux pas écraser.

Il y a t-il une solution pour faire fonctionner ma proposition

Merci ;)

Si une classe est déjà instanciée, on peut créer une seconde instance cette nouvelle instance contiendra des nouvelles données indépendantes de la première instance. La routine open() permet de créer autant d'instance que l'on souhaite. et encore une fois la propriété non visible évite le problème des données visibles.

Dernière modification par Dadone (14-06-2011 09:53:45)

Hors ligne

 

#5 14-06-2011 09:54:41

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: exécuter un code d'une window sans l'ouvrir

Tu as fait un setTransObject sur tes datawindows?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#6 14-06-2011 10:16:05

dydo  
Membre Geek
Date d'inscription: 25-04-2011
Messages: 21
Pépites: 98
Banque: 0

Re: exécuter un code d'une window sans l'ouvrir

foon a écrit:

Tu as fait un setTransObject sur tes datawindows?

Même le setTransObject me retourne -1 !!!

c'est vraiment étrange, la datawindow est reconnue mais je peux rien manipuler.

j'ai préféré ne pas utiliser la fonction Open() mais .... j'ai pas le choix

Merci bien à vous

Hors ligne

 

#7 14-06-2011 12:10:53

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: exécuter un code d'une window sans l'ouvrir

dydo a écrit:

foon a écrit:

Tu as fait un setTransObject sur tes datawindows?

Même le setTransObject me retourne -1 !!!

c'est vraiment étrange, la datawindow est reconnue mais je peux rien manipuler.

j'ai préféré ne pas utiliser la fonction Open() mais .... j'ai pas le choix

Merci bien à vous

Cela viens du fait que la partie graphique n'a pas été "activée", en générale il faut faire un OpenUserObject(...) pour palier à ce problème. Dans ton cas, c'est différent, tu voudrais utiliser ton object window sans faire le Open( ... ) et pouvoir accéder à ces controls, ce qui n'est pas possible à ma connaissance.

D'un autre côté, ce que tu exprimes me laisse penser qu'il faudrait revoir le code de cette fenêtre pour encapsuler le comportement réutilisable à l’extérieur (ex, passer par un nvo). Si c'est trop lourd à faire alors je ne vois guère autre chose que ce qu'a proposé Dadone.


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#8 14-06-2011 12:52:30

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Re: exécuter un code d'une window sans l'ouvrir

En revanche, il y a un aspect que je n'ai pas compris : qu'est ce qui empêche le code d'être factorisé entre les 2 fenêtres ?
Il n'existe pas de cas ou la factorisation est impossible pour des de classes de même type (ici le type est "window"). Il suffit d'une relation hiérachique commune.

Hors ligne

 

#9 14-06-2011 15:39:19

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: exécuter un code d'une window sans l'ouvrir

Je crois qu'il veux dire que c'est relativement chaotique et que tout le monde tremble à l'idée de toucher à cette partie de code ...
Ceci dit, dans ce genre de cas, je conseil quand même une analyse poussée quitte à passer du temps une fois; de plus il existe des outils comme VE pour çà


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#10 14-06-2011 15:50:14

dydo  
Membre Geek
Date d'inscription: 25-04-2011
Messages: 21
Pépites: 98
Banque: 0

Re: exécuter un code d'une window sans l'ouvrir

Bonjour,

Merci bcp pour vos réponses !!

je me sens pas seul à me casser la tête

en faite, je crois que je vais utiliser la fonction OpenUserObject(...) pour initialiser mes datawindow ==> j'ai testé cette fonction et ça fonctionne à merveille.

1000 merci

Hors ligne

 

#11 15-06-2011 10:25:30

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: exécuter un code d'une window sans l'ouvrir

ne pas oublier d'ajouter le [RESOLU] dans le titre de la discussion


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22