dépendance : Termkey Termcurs
- change FULL 2022-03-30 23h15 voir "Issues" du 2022-03-30
- change Remove GRID 2022-03-31 2h44
- change position posx posy rown grig 2022-04-05 16h27
- change procurs setPageGrid calcul nbr page and isPanelkey test button actif 202-04-07 15h40
- update TERMCURS 2022-04-08 TERMKEY 2022-04-08
- update TERMCURS 2022-04-09
- refonte du "projet" prise en compte de la fonction ioFMT(PANEL,GRIDSFL,select,pos(index grid) ) et plus
Soulager la compréhention par la visualisation des Formulaires puis de générer le code.
Créer des programmes en pure NIM,sans lib externe et occupant peu de place mémoire.
l'utilisation de Termvte , crée une fenêtre terminale, beaucoup plus souple à gérer que xterm etc...
elle peut fonctionner dans un terminal que vous paramétrez.
tutoreil vidéo
Utiliser la souris pour naviguer, sélectionner, positionner...
titleTerm.: Nom étendu du fichier comprenant l'ensemble des panels
fileTerm..: Nom du fichier (exemple.dspf)
F9 enregistre
F12 abandon
Recharge le display file en mémoire. Apporter toutes les modifications jugées nécéssaires.
- choix : créer = "999 add panel" sinon cliquer sur une ligne
fonction saisie clavier: up / down -- tab / tabs -- enter, pour valider la zone de saisie et passer à la zone suivante.
si il y a une erreur de saisie appuyez sur la touche "Escape" pour corriger
field | fonction |
---|---|
Name | Obligatoire, le référencement et le panel sont lier voir exemple dans le source |
PosX,Y | récupération du positionement de la souris |
Heights | nombre de lignes verticales |
Width | nombre de caractères horizontals |
Cadre | appuyer sur une touche, le choix apparaît ---- combo: ligne = 1 ligne =2 |
Title | Titre du panel |
F1..F24 | appuyer sur la bar d'espacemant pour activé la fonction |
Check Field | associer le controle par défault des zones comprise dans le panel |
F3 n'a pas besoin de crontôle ex: = exit programe
F9 F11 on besoin de faire le contrôle car les données ont des conséquences
vous pouvez dans le source affecter à la main d'autre valeur ex CtrlV
leurs donner un text plus explicite ex F9 = F9 Enrg.
si vous ne mettez pas de text la fonction n'est pas visible à l'écran mais active
ne pas ce servir CrtlH qui est réserver à la saisie.
ex:
defButton(TKey.F3,"F3 Exit.",false)
defButton(TKey.F9,"F9 Enrg.",true)
defButton(TKey.CtrlV,"",true)
pointer la souris pour positioner l'objet que vous voulez décrire.
key | Fonction |
---|---|
AltL | Label puis tapez votre label CtrlV valide le label |
AltT | Titre idem label |
AltF | Field |
AltM | Menu |
AltP | display de tous les menus |
AltG | Combo/Grid |
AltD | affichage des objet Label Field Menu |
AltO | réordonner les objet Label Field |
AltR | remove les objet Label Field Menu Combo/Grid |
AltS | réaffichage du terminal |
CtrlQ | fermeture du panel retour au menu principal |
CtrlH | réserver à la saisie pour Help field |
choix ajouter ou modifier
veuillez valider chaque zone
field | fonction |
---|---|
Name | nom du buffer |
PosX,Y | défini au moment du clique de la souris |
Ref.Type | combo: détermine le mode de sasie |
With | nombre d'entier |
Scal | Nombre de décimal après la virgule |
Empty | on -> Vide off -> la zone est obligatoire |
Error | message ce rapportant à la zone de saisie |
Help | aide avec la touche CtrlH |
Edt.Char | code par exemple : € $ ¥ ₪ £ % |
Protect | falg interdisant la saisie ou modification |
pnlF1.hiden.add(defStringH("zone10",DATE_ISO, "2020-04-24")) # full String
pnlF1.hiden.add(defSwitchH("zone15", SWITCH,true)) # specifique switch
pnlF1.hiden.add(defStringH("zone8",DECIMAL, "256.05")) # full String
exemple : Decimal
exemple : appel process appel automatiquement la procédure ex: un combo ou calcul avec retour de donnés...
field | fonction |
---|---|
Form | Combo / Grid |
Name | nom du process |
PosX,Y | défini au moment du clique de la souris |
Rows | Nombre de ligne horizontale |
Separateur | combo: sepStyle noStyle |
pensez à l'association de la zone process et name.combo
field | fonction |
---|---|
text | titre de la colonne |
long | nombre de caractères |
PosX,Y | défini au moment du clique de la souris |
Type | combo TEXT_FREE DIGIT .... |
Color | combo color |
Car | code par exemple : € $ ¥ ₪ £ % |
enregistrement data des colonnes
key | Fonction |
---|---|
AltC | Header Colonne |
AltI | Item uniquement combo |
AltP | liste colonne |
AltR | remove colonne |
AltD | display combo/grid |
AltS | recharge à la Définition du Combo/Grid |
CtrlV | sauvegarde le combo/grid |
AltQ | quitter l'envirronement de définition combo/grid |
Résultat :
key | Fonction |
---|---|
CtrlV | validation |
CtrlP | display menu |
AltP | display full menu |
AltS | refresh saisie menu |
F9 enregistrement
F12 return
field | fonction |
---|---|
Name | nom du menu |
PosX,Y | défini au moment du clique de la souris |
.... | Item |
cadre | combo: 1 ligne 2 lignes |
.... | combo: Vertical ou Horizontal |
exemple:
dans la sous directorie ./dspf
"name.dspf" Génère un fichier json
dans la directorie du programme TermSDA "Source.nim" que vous pouvez compiler
envirronement de travail
TermSDA et Tsource son des executables des terminaux fait avec C++ GTK libvte ex: Tsource vous permez d'excuter Source dans une fenêtre terminal
Particularité:
- le proc faisant appel à la fonction FCALL n'est pas defini
- la gestion du grid vous est laissé à faire à la main un exemple complet dans exemple
- nim c -f --gc:orc -d:useMalloc --passc:-flto --passC:-fno-builtin-memcpy --verbosity:0 --hints:off --threads:on -d:release -o:procSDA procSDA.nim
- creer un dossier placer le programme TermSDA et le programme procSDA dans ce dossier Idem pour TSource
- creer un sous dossier dspf et obj->(pour compiler TermSDA.ccp fenêtre window)
- les dossiers: .vscode -les procedures et envirronement VSCODE exemple -programme nim src -programme terminal ccp proc...
programme | Text |
---|---|
procCurs | interne(termcurs) |
procField | definition Field |
procLabel | definition Label |
procGrid | definition Grid/Combo |
procMenu | definition Menu |
procPanel | definition Panel |
procInit | ouveture programme SDA |
callqry | combo commun |
procJson | lecture / écriture JSON |
procSDA | programme Principal |
makefile | outil pour compiler ccp |
VSCODE :
exemple source généré:
import termkey
import termcurs
import tables
var callQuery: Table[string, proc(fld : var FIELD)]
type
FIELD_Fcli00a {.pure.}= enum
cliNom,
decimal,
tproc
const P1: array[FIELD_Fcli00a, int] = [0,1,2]
# MENU -> TEST
var Table = new(MENU)
Table = newMenu("Table", 10, 44, vertical, @["Définition", "Visualisation", "Liste"], line1)
# Panel Fcli00a
var Fcli00a= new(PANEL)
# description
proc dscFcli00a() =
Fcli00a = newPanel("Fcli00a",1,1,32,132,@[defButton(TKey.F3,"F3",false,true), defButton(TKey.F9,"F9",true,true), defButton(TKey.F10,"F10",true,true)],line1,"Fiche Client")
# LABEL -> Fcli00a
Fcli00a.label.add(defTitle("L02002", 2, 2, "Fiche Client"))
Fcli00a.label.add(deflabel("L04002", 4, 2, "Nom.......:"))
Fcli00a.label.add(deflabel("L06002", 6, 2, "Décimal...:"))
Fcli00a.label.add(deflabel("L09002", 9, 2, "Proc......:"))
# FIELD -> Fcli00a
Fcli00a.field.add(defString("cliNom", 4, 14, ALPHA_UPPER,30,"", FILL, "Obligatoire","Nom du client"))
Fcli00a.field.add(defNumeric("decimal", 6, 14, DECIMAL,9,2,"", EMPTY,"", ""))
setEdtCar(Fcli00a.field[P1[decimal]], "€")
Fcli00a.field.add(defString("tproc", 9, 14, FPROC,10,"", EMPTY, "","appel procedure"))
setProcess(Fcli00a.field[P1[tproc]],"myproc")
#===================================================
proc myproc(fld : var FIELD) =
var Cell_pos : int = -1
var Xcombo = newGRID("myproc",9,14,14,sepStyle)
var Cell_Pays = defCell("Pays",10,TEXT_FREE,"Cyan")
setHeaders(Xcombo, @[Cell_Pays])
addRows(Xcombo, @[ "France" ])
addRows(Xcombo, @[ "Espagne" ])
addRows(Xcombo, @[ "Italie" ])
printGridHeader(Xcombo)
case fld.text
of "France" : Cell_pos = 0
of "Espagne" : Cell_pos = 1
of "Italie" : Cell_pos = 2
else : discard
while true :
let (keys, val) = ioGrid(Xcombo,Cell_pos)
case keys
of TKey.Enter :
restorePanel(Fcli00a,Xcombo)
fld.text = $val[0]
break
else: discard
callQuery["myproc"] = myproc
#===================================================
proc main() =
initTerm(32,132)
dscFcli00a()
printPanel(Fcli00a)
displayPanel(Fcli00a)
# ONLY -> FOR TEST
dspMenuItem(Fcli00a,Table,0)
let nTest = ioMenu(Fcli00a,Table,0)
#Exemple ------
while true:
let key = ioPanel(Fcli00a)
case key
of TKey.PROC : # for field Process
if isProcess(Fcli00a,Index(Fcli00a)):
callQuery[getProcess(Fcli00a,Index(Fcli00a))](Fcli00a.field[Index(Fcli00a)])
of TKey.F3:
break
of TKey.F9:
break
of TKey.F10:
break
else : discard
closeTerm()
main()
Projet Contact: exemple