Page 1 of 1

Compartir con vosotros un trozo de código

Posted: Fri Jan 17, 2014 5:00 pm
by informaticaeloy
Hola. Tengo una parte del código de mi programa principal de gestión. Querría compartirlo con vosotros por si a alguien le sirve de referencia para algo y también por si os apetece echarle un ojo y hacer cualquier comentario para mejorar mi forma de trabajar. No se si hay algún sitio para subirlo. Están los PRG, las DBF, los BMP, ... y el EXE.
Antonio, te lo mando y lo cuelgas en algún sitio? o lo puedo poner en el foro?

Cualquier crítica o comentario será bienvenido.
Un saludo.

Re: Compartir con vosotros un trozo de código

Posted: Fri Jan 17, 2014 7:47 pm
by karinha
Puedes usar:

http://www.4shared.com

un excelente anfitrión para sus archivos.

Salu2

Re: Compartir con vosotros un trozo de código

Posted: Sun Jan 19, 2014 5:30 am
by FranciscoA
+1

Re: Compartir con vosotros un trozo de código

Posted: Sun Jan 19, 2014 3:47 pm
by informaticaeloy
Hola. Como tengo una cuenta lo subo al dropbox

https://www.dropbox.com/s/z7me5lpy6v7k8tv/agenda.rar

Si a alguien le sirve como referencia genial, y si alguien lo revisa y me comenta mejoras en mi forma de programar pues entonces ......
genial:=genial*100

Un saludo

Re: Compartir con vosotros un trozo de código

Posted: Mon Jan 20, 2014 3:21 pm
by FranciscoA
Gracias.

Re: Compartir con vosotros un trozo de código

Posted: Mon Jan 20, 2014 5:33 pm
by mastintin
Muchas Gracias por compartir tu código .
Como nos dices que podemos hacer comentarios ( siempre constructivos :-) ) sobre el código , quiero decirte que veo que en la edicion de la agenda usas los arrays para sostener los objetos get y las variables . Yo tambien los usaba hasta que descubrí los Hash que permiten que mi codigo sea mucho mas "comprensible" cuando se alarga el numero de lineas a realizar ....
Me explico un poco : tu codigo

Code: Select all


    GNRL:={}
 
         OBJ_GNRL=ARRAY(FCOUNT())
         FOR N=1 TO FCOUNT()
             AADD(GNRL,FIELDGET(N))
         NEXT
         DBSETORDER(INDICE)
         GO POS

            DEFINE DIALOG EDIT_GNRL FROM 0, 0 TO 27, 72;
            TITLE  "Gestión de la Agenda";
            font ofontdlg

            @ 15,  15  SAY "Código" PIXEL SIZE 50,10 right
            IF NUEVO
               GNRL[1]=ULT
               @ 15,  70  GET OBJ_GNRL[1] VAR GNRL[1] PIXEL  SIZE 26,10  UPDATE;
                          VALID TRATAR_AGEN(1) COLOR CLR_AZULETE,CLR_AMARILLO
               OBJ_GNRL[1]:bLostFocus={||OBJ_GNRL[1]:SetColor(CLR_AMARILLO,CLR_AZULETE)}
               OBJ_GNRL[1]:bGotFocus={||OBJ_GNRL[1]:SetColor(CLR_AZULETE,CLR_AMARILLO)}

 
mi codigo seria asi :

Code: Select all


    GNRL:= {=>}
    OBJ_GNRL:= {=>}

        FOR N=1 TO FCOUNT()
             GNRL[ fieldname(n) ] := FIELDGET(N)            
         NEXT
         DBSETORDER(INDICE)
         GO POS

            DEFINE DIALOG EDIT_GNRL FROM 0, 0 TO 27, 72;
            TITLE  "Gestión de la Agenda";
            font ofontdlg

            @ 15,  15  SAY "Código" PIXEL SIZE 50,10 right
            IF NUEVO

               GNRL["codigo"]=ULT

               @ 15,  70  GET OBJ_GNRL["codigo"] VAR GNRL["codigo"] PIXEL  SIZE 26,10  UPDATE;
                          VALID TRATAR_AGEN(1) COLOR CLR_AZULETE,CLR_AMARILLO
               OBJ_GNRL["codigo"]:bLostFocus={||OBJ_GNRL["codigo"]:SetColor(CLR_AMARILLO,CLR_AZULETE)}
               OBJ_GNRL["codigo"]:bGotFocus={||OBJ_GNRL["codigo"]:SetColor(CLR_AZULETE,CLR_AMARILLO)}

 

Re: Compartir con vosotros un trozo de código

Posted: Mon Jan 20, 2014 8:12 pm
by Joaquim Ferrer
Como apunte, intenta no incluir llamadas a función en la iteracion de bucles, es decir

Code: Select all

for n:=1 to fcount() o for n:=1 to len()
es preferible

Code: Select all

nCount:= fcount(); for n:=1 to nCount
o

Code: Select all

nLen := len(a); for n:=1 to nLen
Tambien puedes simplificar este codigo

Code: Select all

 OBJ_GNRL["codigo"]:bGotFocus={||OBJ_GNRL["codigo"]:SetColor(CLR_AZULETE,CLR_AMARILLO)}
Por este otro

Code: Select all

 OBJ_GNRL["codigo"]:bGotFocus={|this|this:SetColor(CLR_AZULETE,CLR_AMARILLO)}