Y a-t-il encore qq1 qui utilise ce langage... [Clipper] - Programmation
Marsh Posté le 17-03-2002 à 23:10:25
Vraiment plus personne
Marsh Posté le 17-03-2002 à 23:11:40
Delphi roulez
Marsh Posté le 18-03-2002 à 09:16:56
[SDF]Poire a écrit a écrit : Delphi roulez |
Ouais, bon, OK, compris, je vais m'y remettre, mais je sens que je vais devoir ouvrir un autre topic, je bute sur une gestion des index.
Je vais encore chercher et si je trouve pas, hop, je reviens
Marsh Posté le 19-03-2002 à 07:18:08
Juste pour voir si ya vraiment plus un dinosaure qu'aurait pas vu...
Marsh Posté le 19-03-2002 à 17:05:10
Visiblement, JE suis le dernier dinosaure!
Marsh Posté le 19-03-2002 à 17:08:08
AlainTech a écrit a écrit : Visiblement, JE suis le dernier dinosaure! |
On peut voir le style de code que ca donne?? (je suis curieux )
Marsh Posté le 20-03-2002 à 01:07:54
Ventilo a écrit a écrit : On peut voir le style de code que ca donne?? (je suis curieux ) |
Avec plaisir
Voici un extrait de code qui affiche une liste vide qui va se remplir pendant l'encodage.
Chaque élément de la liste (intersection ligne/colonne) est un objet auquel je peux appliquer des méthodes ou récupérer/modifier les propriétés.
Désolé pour les smileys dans le texte, il y a beaucoup de : dans le code (Faites un edit, ils disparaissent)
Function ligent(nNumEnt,aTabLEnt)
local aOldLEnt
local cEcran
local cMode
local cRech
local cTaille
local lEncore
local lModif
local lOldExit
local mTabVal
local nColNum
local nKey
local nLigArt
local nSortie
local nTotArt
local oGet
local oTbr
local bTotArt := {|x| nTotArt := nTotArt + x[3]}
local lLigEnt := .f.
local nL := 1
set(_SET_CONFIRM, .t.)
if empty(aTabLEnt)
aTabLEnt := {{1,"* ",0,""}}
endif
oTbr := TBrowseNew(6,1,18,78)
oTbr:goTopBlock := {|| nL := 1}
oTbr:goBottomBlock := {|| nL := len(aTablEnt)}
oTbr:skipBlock := {|n, nSaveNl| nSaveNl := nL, ;
nL := if(n > 0, min(len(aTabLEnt), nL + n), ;
max(1, nL + n)), nL - nSaveNl}
oTbr:addcolumn(TBColumnNew(" ", {|| str(aTabLEnt[nL,1],3)}))
oTbr:addcolumn(TBColumnNew("Article", {|| aTabLEnt[nL,2]}))
oTbr:addcolumn(TBColumnNew(" Nombre", {|| aTabLEnt[nL,3]}))
oTbr:getcolumn(3):picture := "9999"
lEncore := .t.
oTbr:colpos := 2
while lEncore
while ! oTbr:stabilize()
if (nKey := inkey()) != 0
exit
endif
enddo
if oTbr:stable
nColNum := oTbr:colpos
aOldLEnt := aclone(aTabLEnt)
mTabVal := aTabLEnt[nL,nColNum]
lOldExit := readexit(.t.)
oGet := getNew(row(), col(), {|x| if(x == NIL, mTabVal, mTabVal := x)}, "mTabVal" )
do case
case nColNum == 2
oGet:picture := "@!"
case nColNum == 3
oGet:picture := "@K 9999"
end
readmodal({oGet})
nSortie := oGet:exitState
lModif := updated()
aTabLEnt[nL,nColNum] := mTabVal
readexit(lOldExit)
nKey := lastkey()
do case
case oTbr:colpos == 2 // code
if nKey == K_ENTER .or. nKey == K_TAB .or. nSortie == GE_ENTER
if ! empty(mTabVal)
if alltrim(mTabVal) == "*" .or. lModif
nTitre := 7
cRech := recherche(mTabVal)
if cAction != cc
cMode := ci
push(GetList)
cEcran := savescreen()
cRech := gestfich(cMode,cRech)
restscreen(,,,,cEcran)
GetList := pop()
endif
if cAction == ca
loop
else
aTabLEnt[nL,2] := ARTICLE->CODE
endif
nTitre := 12
endif
oTbr:colpos := 3
nKey := 0
else
lEncore := .f.
endif
endif
case oTbr:colpos == 3 // quantit?
if mTabVal != 0
nTotArt := 0
aeval(aTabLEnt,bTotArt)
if nSortie == GE_ENTER
nKey := K_DOWN
oTbr:colpos := 2
endif
else
nKey := 0
endif
end
oTbr:refreshCurrent()
oGet := {}
endif
@ 19, 46 say nTotArt picture "@E 9999"
do case
case nKey == K_DOWN
if nL = len(aTabLEnt) .and. alltrim(aTabLEnt[nL,2]) != "*"
aadd(aTabLEnt, {nL+1,"* ",0,""})
oTbr:colpos := 2
endif
oTbr:down()
if alltrim(aTabLEnt[nL,2]) != "*"
oTbr:colpos := 2
endif
case nKey == K_UP
oTbr:up()
case nKey == K_PGDN; oTbr:pagedown()
case nKey == K_PGUP; oTbr:pageup()
case nKey == K_CTRL_PGDN; oTbr:gobottom()
case nKey == K_CTRL_PGUP; oTbr:gotop()
case nKey == K_TAB .or. nKey == K_ENTER
if oTbr:colpos = 2
oTbr:colpos := 3
else
oTbr:down()
oTbr:colpos := 2
endif
case nKey == K_SH_TAB
if oTbr:colpos = 3
oTbr:colpos := 2
else
oTbr:up()
if nL != 1
oTbr:colpos := 3
endif
endif
case nKey == K_HOME
oTbr:home()
oTbr:colpos := 2
case nKey == K_END; oTbr:end()
case nKey == K_ESC; lEncore := .f.
endcase
enddo
if empty(atail(aTabLEnt)[3])
asize(aTabLEnt,len(aTabLEnt) - 1)
endif
if len(aTabLEnt) > 0
lLigEnt := .t.
endif
return lLigEnt
* Fin ligent
Toutes les variables préfixées o sont des objets.
Des fonctions telles que push et pop n'existent pas dans le langage, je les ai créées.
[jfdsdjhfuetppo]--Message édité par AlainTech--[/jfdsdjhfuetppo]
Marsh Posté le 20-03-2002 à 04:31:44
Ca fait penser à du basic avec plain d'autre bout de langage...
C'est pas intuitif dutout
Marsh Posté le 20-03-2002 à 11:09:49
Ventilo a écrit a écrit : Ca fait penser à du basic avec plain d'autre bout de langage... C'est pas intuitif dutout |
L'origine c'est dBase, mais en 100 fois plus puissant!
Et quel langage est intuitif, pour toi??
Pour moi, Clipper avait un énorme avantage: son comportement est toujours prévisible (contrairement à cette m***e de VB).
Si tu as un message d'erreur, tu relis les définitions et tu trouves.
Marsh Posté le 21-03-2002 à 00:30:28
Ventilo a écrit a écrit : Ca fait penser à du basic avec plain d'autre bout de langage... C'est pas intuitif dutout |
Eh, Ventilo, il est où ton langage intuitif?
Marsh Posté le 17-03-2002 à 10:35:19
... ou une de ses évolutions.
Habour
Visual objects
Clip4Win
Je suis en pleine indécision
Je crois que je maitrise assez bien ce langage, j'ai qqs programmes développés dessus mais j'ai maintenant un problème de connexion sur des bases autres que DBF.
Au taff je travaille sous VB/VBA, beurk (pas le choix)
Je me suis mis à Delphi, mais j'ai l'impression de devoir réinventer la roue (recherche de toutes les petites astuces) et je sature un peu.
Si qq1 a une expérience positive d'une des évolutions de Clipper, je suis toute ouïe
---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!