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 03-05-2007 07:55:49

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

[RESOLU] Gérer un menu "favoris"

Bonjour,

Dans notre application, je suis en train de mettre en place une sorte de favoris pour que les utilisateurs retrouvent plus facilement les programmes qu'ils utilisent le plus souvent.

Notre application comprend une centaine de fonctionnalités différentes et il n'est pas rare qu'on nous appelle pour nous demander "c'est où ça ?".

Le principe est simple : sur les entrées menu du m_frame (menu principal), j'ajoute un appel de fonction qui permet d'insérer dans une table FAVORIS (CODE_UTILISATEUR, CLASS_MENU, LIBELLE_MENU), pour l'utilisateur, le nom de l'entrée menu qu'il utilise (j'en stocke maximum 10 par utilisateur).

Ensuite, il a un raccourci pour ouvri son menu "Favoris", qui affiche les liens vers ses programmes.
1) pour faire le lien entre le menu du m_frame et la ligne du menu affichée (qui est une donnée de type string stockée dans ma BDD, référençant le ClassName() de l'entrée menu), j'ai une fonction récursive :

Sur dw_1.Clicked :

Code: pb

ClassDefinition  lcd_menu

lcd_menu = FindClassDefinition("m_frame")
wf_get_menu(lcd_menu, row)

Fonction wf_get_menu

Code: pb

Long  i

For i = 1 To UpperBound(acd_menu.NestedClassList)
  If Trim(dw_1.getItemString(al_row, "cv_class")) = Trim(Mid(acd_menu.NestedClassList[i].Name, 9)) Then
// EXECUTION DU CODE DU MENU
    Return True
  End If
  wf_get_menu(acd_menu.NestedClassList[i], al_row)
Next

Return False

Et c'est là que le bât blesse : j'avais déjà codé le truc, mais j'ai perdu mon code (ça arrive, parfois ). Comment faire pour appeler l'évènement Clicked du menu correspondant ? J'ai essayé acd_menu.NestedClassList[i].TriggerEvent("clicked"), voire m_frame.TriggerEvent(acd_menu.NestedClassList[i].Name + ".clicked")
mais ça ne marche pas... Une main secourable serait la bienvenue !!

Hors ligne

 

#2 03-05-2007 08:13:17

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

Re: [RESOLU] Gérer un menu "favoris"

tu as perdu ton script ?
tu ne l'as pas en pbd ?


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

Hors ligne

 

#3 03-05-2007 08:20:40

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Gérer un menu "favoris"

Et bien c'est à dire que je préparais dans mon coin mes tests, et cela fonctionnait, mais il n'était pas prévu de le développer dans l'immédiat, donc, relégué dans un coin, et puis nettoyage de printemps du HDD, et perdage de code... des fois, je vous jure...

Hors ligne

 

#4 03-05-2007 09:14:14

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

Re: [RESOLU] Gérer un menu "favoris"

nous, on utilise comme ca...
on enregistre les 5 derniers favoris...ou derniers ecrans visités par le user...

http://img82.imageshack.us/img82/5981/menucn8.jpg

tous ces ecrans , ou nom de classe sont enregistrés ensuite un fichier ini...  le fichier  login utilisateur.ini
à chaque utilisateur, son fichier ini.

je regarde si j'arrive à trouver le script...


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

Hors ligne

 

#5 03-05-2007 09:26:37

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: [RESOLU] Gérer un menu "favoris"

Bonjour sbouvetJD ,

Tu récupère la "classdefinition" du menu, mais pour pouvoir l'utiliser, il faut que l'objet menu ait été créé en mémoire.

En d'autre termes, il ne faut pas confondre le plan de la maison (ClassDefinition ) et la maison (menu)

Code: pb

m_frame lm_frame
lm_frame = Create using "m_frame"

never let people work on more than one thing at once.

Hors ligne

 

#6 03-05-2007 14:07:53

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

Re: [RESOLU] Gérer un menu "favoris"

en fait, on utilise le systeme de favoris de telle sorte...

le fichier ini...
avec

Code: ini

[MENU]
dernier=5
donnee=w_feuille_compte_client_granu|w_feuille_compte_client_granu-231516|231516,|w_ouverture_compte_client_granu|&|w_feuille_compte_client_granu|w_feuille_compte_client_granu-231058|231058,|w_ouverture_compte_client_granu|&|w_feuille_compte_client_granu|w_feuille_compte_client_granu-312840|312840,|w_ouverture_compte_client_granu|&|w_feuille_compte_client_granu|w_feuille_compte_client_granu-261534|261534,|w_ouverture_compte_client_granu|&|w_feuille_compte_client_granu|w_feuille_compte_client_granu-261247|261247,|w_ouverture_compte_client_granu|&|w_feuille_compte_client_granu|w_feuille_compte_client_granu-261072|261072,|w_ouverture_compte_client_granu|&|w_feuille_compte_client_granu|w_feuille_compte_client_granu-236734|236734,|w_ouverture_compte_client_granu|&|w_feuille_compte_client_granu|w_feuille_compte_client_granu-235342|235342,|w_ouverture_compte_client_granu|&|w_feuille_compte_client_granu|w_feuille_compte_client_granu-234750|234750,|w_ouverture_compte_client_granu|&|

titre=Compte client 231516 totolitoto.|Compte client 231058 C D E C|Compte client 312840 Pick Ouic|Compte client 261534 PbAdonf FRANCE|Compte client 261247 Pbexpert SA|Compte client 261072 SOS.|Compte client 236734 TINTIN|Compte client 235342 TINOIS|Compte client 234750 Hamburger|


comme tu peux le voir, il y a le nom de l'objet, et le titre du raccourci...

avec tout ca, on peut ouvrir l'objet, avec les retrieve...
ce n'est pas plus simple comme ca ?


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

Hors ligne

 

#7 03-05-2007 14:16:08

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Gérer un menu "favoris"

Ben c'est moins souple... Si quelqu'un bidouille le fichier .ini il peut s'en passer des choses... (Enfin, c'est mon avis !)

Hors ligne

 

#8 03-05-2007 14:19:20

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

Re: [RESOLU] Gérer un menu "favoris"

au lieu de le mettre dans le fichier ini
tu le mets dans la base....  t'as quoi à repondre la ? 


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

Hors ligne

 

#9 03-05-2007 15:00:23

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Gérer un menu "favoris"

Avec le code suivant, on peut récupérer le code de l'évènement CLICKED. Je me dis que je peux peut-être l'affecter à un objet "menu" ?

Code: pb

ScriptDefinition lsd_menu
ClassDefinition lcd_menu
String ls_source
[...]
For j = 1 To Upperbound(lcd_menu.NestedClassList[i].ScriptList)
    lsd_menu = lcd_menu.NestedClassList[i].ScriptList[j]
    If lsd_menu.Name = "clicked" Then
        ls_source = lsd_menu.Source
    End If
Next

Hors ligne

 

#10 03-05-2007 15:03:01

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

Re: [RESOLU] Gérer un menu "favoris"

sbouvetJD a écrit:

Avec le code suivant, on peut récupérer le code de l'évènement CLICKED. Je me dis que je peux peut-être l'affecter à un objet "menu" ?

Code: pb

ScriptDefinition lsd_menu
ClassDefinition lcd_menu
String ls_source
[...]
For j = 1 To Upperbound(lcd_menu.NestedClassList[i].ScriptList)
    lsd_menu = lcd_menu.NestedClassList[i].ScriptList[j]
    If lsd_menu.Name = "clicked" Then
        ls_source = lsd_menu.Source
    End If
Next

tu as verifié si cela marche en mode EXEcutable ?

il me semble que...enfin, je ne suis pas sure...


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

Hors ligne

 

#11 03-05-2007 15:06:33

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: [RESOLU] Gérer un menu "favoris"




//Message de régulation

Merci d'utiliser le mod code=pb pour des questions de lisibilité
Je corrige en attendant

//fin message de régulation



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

Hors ligne

 

#12 03-05-2007 15:49:13

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Gérer un menu "favoris"

Judicieuse remarque ; effectivement en EXE, on n'a pas accès à la propriété "source". Mille gaufrettes, comment ai-je pu me débrouiller la dernière fois ?!
(Et désolé pour le manque de lisibilité, je tâcherai de m'appliquer )

Dernière modification par sbouvetJD (03-05-2007 15:49:51)

Hors ligne

 

#13 03-05-2007 16:13:58

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Gérer un menu "favoris"

shahin a écrit:

Bonjour sbouvetJD ,

Tu récupère la "classdefinition" du menu, mais pour pouvoir l'utiliser, il faut que l'objet menu ait été créé en mémoire.

En d'autre termes, il ne faut pas confondre le plan de la maison (ClassDefinition ) et la maison (menu)

Code: pb

m_frame lm_frame
lm_frame = Create using "m_frame"

Bonsoir, en effet c'est de cette façon que j'ai fait qq manipulations sur les menus (comme par exemple les menus dynamiques)



<HS>
On en apprend tous les jours avec PB ! Je ne connaissais pas les objets ScriptDefinition et ClassDefinition

PB doit se prendre des bonnes hallus avec des noms de variables comme ça :

sbouvetJD a écrit:

Code: pb

ScriptDefinition lsd_menu

</HS>


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#14 04-05-2007 06:37:57

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Gérer un menu "favoris"

On peut troller ici ?

Hors ligne

 

#15 04-05-2007 07:20:17

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Gérer un menu "favoris"

Comme disait Archimède : EUREKA ! Voilà la solution au problème (fonction appelée sur dw_1.Clicked, dw_1 contenant la donnée CV_CLASS correspondant au nom du menu sélectionné)

Code: pb

// Event dw_1.Clicked
If dwo.Name = "lv_menu" Then
  If wf_get_menu(m_frame, row) Then Close(Parent)
End If

// Function wf_get_menu(menu amnu_menu, long al_row)
Long    i
ClassDefinition  lcd_menu
Boolean    lb_ret

For i = 1 To UpperBound(amnu_menu.Item)
  lcd_menu = amnu_menu.Item[i].ClassDefinition  
  If Trim(dw_1.getItemString(al_row, "cv_class")) = Trim(Mid(lcd_menu.Name, 9)) Then // ON TRONQUE LES 9 PREMIERS CARACTERES (m_frame`)
    amnu_menu.Item[i].TriggerEvent("clicked")
    Return True
  End If
  lb_ret = wf_get_menu(amnu_menu.Item[i], al_row)
  If lb_ret Then Exit
Next

Return lb_ret

Et je confirme que ça marche AUSSI en compilé
La solution préconisée (nom de la window à ouvrir dans le tag) ne pouvait satisfaire à notre besoin car l'ouverture d'un écran peut être conditionnée (donc passage de paramètres, +eurs lignes de code sur l'évènement clicked du menu, etc.). Cependant, je retiens pour de futures applications plus simples !

PS: Comment vous faites pour mettre les keywords en couleur ?

Hors ligne

 

#16 04-05-2007 07:23:09

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: [RESOLU] Gérer un menu "favoris"

Au fait, ton problème de favoris est-il résolu?




<HS>

Un petit rappel pour ceux qui ne savent pas ce qu'est un troll



</HS>


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

Hors ligne

 

#17 04-05-2007 07:26:35

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: [RESOLU] Gérer un menu "favoris"

Oups, désolé, nos réponses se sont croisées...

sbouvetJD a écrit:

PS: Comment vous faites pour mettre les keywords en couleur ?

Il suffit de mettre code=pb comme indiqué ici


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

Hors ligne

 

#18 04-05-2007 07:40:48

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Gérer un menu "favoris"

Grand désolé, mais j'apprends vite ;) Alors, oui, ça y est, mes favoris marchent !

Hors ligne

 

#19 04-05-2007 07:46:32

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

Re: [RESOLU] Gérer un menu "favoris"

c'est quoi ta solution ?
ca m'interesse


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

Hors ligne

 

#20 04-05-2007 08:07:59

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Gérer un menu "favoris"

1) Structure de ma table :
CC_STE (société de l'utilisateur)
CI_MATRIC (matricule de l'utilisateur)
CV_CLASS (nom du menu)
LV_MENU (libellé associé)

2) fonction d'instanciation de la table :

Code: pb

// function gf_set_favoris
UO_DSAncetre lds_favori
Long ll_row

lds_favori = Create UO_DSAncetre
lds_favori.DataObject = "d_favoris"
lds_favori.setTransObject(SQLCA)
lds_favori.Retrieve(gSoc, gMatric)

If lds_favori.Find("cv_class = ~"" + as_class + "~"", 1, lds_favori.RowCount()) = 0 Then
  If lds_favori.RowCount() < 10 Then
    ll_row = lds_favori.InsertRow(0)
    lds_favori.setItem(ll_row, "cc_ste", gSoc)
    lds_favori.setItem(ll_row, "ci_matric", gMatric)
    lds_favori.setItem(ll_row, "cv_class", as_class)
    lds_favori.setItem(ll_row, "lv_menu", as_menu)
    
    If lds_favori.Update(True, False) = 1 Then
      COMMIT USING SQLCA;
      lds_Favori.ResetUpdate()
    Else
      ROLLBACK USING SQLCA;
    End If
  End If
End If
Destroy lds_favori
Return True


Appel de cette fonction sur chacune de mes entrées menu :

Code: pb

maFenetre lw
Parametres la

la.lng[1] = 2

SetPointer(HOURGLASS!)
iEntryClassName =This.ClassName()
OpenSheetWithParm(lw, la, parentwindow, 0, Original!)

gf_set_favori("Libellé", iEntryClassName)


Sur dw_1.Clicked de ma w_dlg_favoris

Code: pb

m_frame  lmnu_main

lmnu_main = Create Using "m_frame"

If dwo.Name = "lv_menu" Then
  If wf_get_menu(lmnu_main, row) Then Close(Parent)
End If

Destroy lmnu_main


Fonction wf_get_menu

Code: pb

Long i
ClassDefinition lcd_menu
Boolean lb_ret

For i = 1 To UpperBound(amnu_menu.Item)
  lcd_menu = amnu_menu.Item[i].ClassDefinition  
/* ON TRONQUE LE LIBELLE DU MENU (m_frame`nom_menu)                */
  If Trim(dw_1.getItemString(al_row, "cv_class")) = Trim(Mid(lcd_menu.Name, 9)) Then  
    amnu_menu.Item[i].TriggerEvent("clicked")
    Return True
  End If
  lb_ret = wf_get_menu(amnu_menu.Item[i], al_row)
  If lb_ret Then Exit
Next

Return lb_ret

Hors ligne

 

#21 04-05-2007 08:13:47

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: [RESOLU] Gérer un menu "favoris"

pour ta solution
je passe le topic à [RESOLU]


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

Hors ligne

 

#22 04-05-2007 08:21:05

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

Re: [RESOLU] Gérer un menu "favoris"





100


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

Hors ligne

 

#23 04-05-2007 08:23:04

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Gérer un menu "favoris"

<HS>Ma grand-mère habite à Massy aussi ! </HS>

Hors ligne

 

#24 04-05-2007 08:28:38

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

Re: [RESOLU] Gérer un menu "favoris"



sbouvetJD a écrit:

<HS>Ma grand-mère habite à Massy aussi ! </HS>

chouette, j'irais boire le thé chez elle alors 



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