![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
neptunia
Cela semble, bien .. mais, si tu connais déjà le code de la liste ? cela fait quand meme apparaitre le fenetre ?
exemple, tu sais que c'est la famille client 30, tu ne peux pas directement le saisir ?
J'aimerai bien voir ta fenêtre f4_file & F4_fen tu me prêtes ton code ? *sourire d'ange*
Aussi, à quel moment lances tu ton code afin qu'il détecte l'appuie de la touche ?!
Mille mercis pour ton aide en tout cas
![:)](https://www.developpez.net/forums/images/smilies/icon_smile.gif)
Bises
Alexandra
On peut saisir dans le champ, c'est la touche F4 qui déclenche l'ouverture de la fenêtre (si le champ est paramétré dans le fichier F4_File)
La détection de touche se fait par une déclaration d'évènement dans le code du projet
wEveHdl=Evénement("F4_Key","*.*",256)
Pour la fenêtre qui affiche la liste, il y a plusieurs possibilités. Dans ce projet il n'y a qu'une seule fenêtre F4_Fen avec une table générique (Colonnes COL01,COL02, etc...)
remplie en fonction de la description dans le fichier F4_file pour le champ considéré.
Je suis d'accord avec Ry_Yo, ça fait un code ardu avec moult indirections, pas très lisible.
Dans un autre projet, j'ai utilisé un modèle de fenêtre F4_Fen, décliné en autant de fenêtres que de listes possibles. C'est plus simple, mais on perd
l'avantage de pouvoir rajouter une liste F4 sans recompiler.
De plus, s'il y a 25 fenêtres avec une recherche de code article (Champ RCH_CodArt par exemple) , on définit une seule fois la liste correspondant à RCH_CodArt
et elle est implémentée automatiquement sur les 25 fenêtres.
EDIT: Les champs sur lesquels on peut activer F4 sont repérés par un fond vert.
La fonction SetCtrlChamp parcours le fichier F4_File et met en fond vert les champs actifs de la fenêtre dont le nom correspond.
(la 1ère partie de la fonction signale les champs obligatoires)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| PROCEDURE SetCtrlChamp(pFen)
i est un entier
ChObl est une chaîne
pFen=Majuscule(pFen)
// Champs obligatoires (TypCtrl="OBLI"): libelle bleu
// Le controle du champ est effectué dans ObligOK(), bouton OK de la fenetre
gHlitRecherche("ctrlch","kFenChCt",Complète(pFen,20))
TANTQUE HTrouve() // Il y a des champs obligatoires pour cette fenetre
ChObl=SansEspace(CC.champ)
SI CC.TypCtrl="OBLI" ET Occurrence(ChObl)>0 // Verifie que le champ existe toujours
SI ({ChObl}..Etat=Actif ET {ChObl}..Visible=Vrai) // Si le champ est actif...
{ChObl}..Libellé=gStylo(iBleuClair)+{ChObl}..Libellé // ... son libelle passe en bleu
FIN
FIN
HLitSuivant("ctrlch","kFenChCt")
FIN
//------------------------------------------
// Champs F4 sur fond vert
SI Occurrence("F4_INV")>0 // Verifie présence du bouton F4_Inv
i=1
HLit("f4_file",i) // Lecture de tous les enreg champs
TANTQUE PAS HEnDehors()
SI (HEtat()=hEtatActif) ET Occurrence(F4.champ)>0 // Si le champ existe dans la fenetre...
SI {F4.champ}..Type<>typTable // ... et pas une colonne de table...
SI ({F4.champ}..Etat=Actif ET {F4.champ}..Visible=Vrai) // ... et est actif...
{F4.champ}..CouleurFond=RVB(192,255,192) //... il passe en fond vert
FIN
FIN
FIN
i++
HLit("f4_file",i) // Champ suivant
FIN
FIN |
Partager