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!