Page 1 of 1

Mejor forma de crear objetos desde codigo - Experiencias

Posted: Thu Aug 15, 2019 5:18 pm
by Compuin
Hola foro como estan

Vuelvo a insistir con la creacion de dialogos y objetos sin el uso de recursos. Quien ha logrado conseguir la forma mas rapida de colocar objetos en el dialogo en forma efectiva en cuanto a posicion y/o ubicacion : Framnes, Say, get, Button, combobox, etc

Atento a sus comentarios

Re: Mejor forma de crear objetos desde codigo - Experiencias

Posted: Thu Aug 15, 2019 5:57 pm
by Armando
Compuin:

Temo que no hay forma más rápida que usar un editor de recursos, por código es ir
a prueba y error, tu experiencia te ira llevando a determinar las coordenadas más
fácilmente.

Por qué te resistes a usar un editor de recursos?.

Saludos

Re: Mejor forma de crear objetos desde codigo - Experiencias

Posted: Tue Aug 20, 2019 12:05 pm
by cmsoft
Es una buena pregunta...
A mi me gusta mucho utilizar diálogos desde código, porque vengo de la época del Clipper.
Mi conclusión fue:
Escribir los Says de 15 en 15 pixels, comenzando desde 7
Escribir los Gets de 15 en 15 pixels, comenzando desde 5
Los says ponerlos alineados a la derecha en 60 pixels comenzando en la fila 5
Los gets ponerlos a partir de la fila 70
Utilizar font TAHOMA SIZE 0,-11
Crear una funcion para que me de las coordenadas donde poner los botones Grabar y Cancelar (con un recuadro)
Claro que siempre cuando el formulario no es un estandar de renglon bajo renglon, hay que tocarlo...

Code: Select all

DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-11.5
DEFINE DIALOG oForm TITLE IF(lAlta,"Alta","Modificacion") + " de Legajos" FROM 05,10 TO 20,90 OF oWnd1 FONT oFont
   acor := AcepCanc(oForm) // Me llena un arreglo con las coordenadas y me hace un box que los encierra.
   @ 07, 05 SAY "D.N.I.:"             OF oForm PIXEL SIZE 60,12 RIGHT
   @ 22, 05 SAY "Nombre:"             OF oForm PIXEL SIZE 60,12 RIGHT
   @ 37, 05 SAY "Fecha Ingr.:"        OF oForm PIXEL SIZE 60,12 RIGHT
   @ 52, 05 SAY "Fecha Egr.:"         OF oForm PIXEL SIZE 60,12 RIGHT
   @ 67, 05 SAY "Caja:"               OF oForm PIXEL SIZE 60,12 RIGHT
   @ 82, 05 SAY "Jubilado?:"          OF oForm PIXEL SIZE 60,12 RIGHT
   @ 05, 70 GET oGet[1] VAR base:dni   PICTURE "99999999" OF oForm PIXEL RIGHT 
   @ 20, 70 GET oGet[2] VAR base:nombre   OF oForm PIXEL VALID(base:nombre <> SPACE(30))
   @ 35, 70 GET oGet[3] VAR base:fecing   OF oForm PIXEL 
   @ 50, 70 GET oGet[4] VAR base:fecegr   OF oForm PIXEL 
   @ 65, 70 GET oGet[5] VAR base:caja     OF oForm PIXEL 
   @ 80, 70 GET oGet[6] VAR base:jubila   OF oForm PIXEL PICTURE "@!" SIZE 15,12 VALID(base:jubila$"SN")
   @ acor[1],acor[2] BUTTON oBot[1] PROMPT "&Grabar" OF oForm SIZE 30,10 ;
           ACTION ((lRta := .t.), oForm:End() ) PIXEL
   @ acor[3],acor[4] BUTTON oBot[2] PROMPT "&Cancelar" OF oForm SIZE 30,10 ;
           ACTION ((lRta := .f.), oForm:End() ) PIXEL CANCEL
ACTIVATE DIALOG oForm CENTER
Es cuestion de gustos y comodidades.

Re: Mejor forma de crear objetos desde codigo - Experiencias

Posted: Tue Aug 20, 2019 12:11 pm
by Compuin
cmsoft wrote:Es una buena pregunta...
A mi me gusta mucho utilizar diálogos desde código, porque vengo de la época del Clipper.
Mi conclusión fue:
Escribir los Says de 15 en 15 pixels, comenzando desde 7
Escribir los Gets de 15 en 15 pixels, comenzando desde 5
Los says ponerlos alineados a la derecha en 60 pixels comenzando en la fila 5
Los gets ponerlos a partir de la fila 70
Utilizar font TAHOMA SIZE 0,-11
Crear una funcion para que me de las coordenadas donde poner los botones Grabar y Cancelar (con un recuadro)
Claro que siempre cuando el formulario no es un estandar de renglon bajo renglon, hay que tocarlo...

Code: Select all

DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-11.5
DEFINE DIALOG oForm TITLE IF(lAlta,"Alta","Modificacion") + " de Legajos" FROM 05,10 TO 20,90 OF oWnd1 FONT oFont
   acor := AcepCanc(oForm) // Me llena un arreglo con las coordenadas y me hace un box que los encierra.
   @ 07, 05 SAY "D.N.I.:"             OF oForm PIXEL SIZE 60,12 RIGHT
   @ 22, 05 SAY "Nombre:"             OF oForm PIXEL SIZE 60,12 RIGHT
   @ 37, 05 SAY "Fecha Ingr.:"        OF oForm PIXEL SIZE 60,12 RIGHT
   @ 52, 05 SAY "Fecha Egr.:"         OF oForm PIXEL SIZE 60,12 RIGHT
   @ 67, 05 SAY "Caja:"               OF oForm PIXEL SIZE 60,12 RIGHT
   @ 82, 05 SAY "Jubilado?:"          OF oForm PIXEL SIZE 60,12 RIGHT
   @ 05, 70 GET oGet[1] VAR base:dni   PICTURE "99999999" OF oForm PIXEL RIGHT 
   @ 20, 70 GET oGet[2] VAR base:nombre   OF oForm PIXEL VALID(base:nombre <> SPACE(30))
   @ 35, 70 GET oGet[3] VAR base:fecing   OF oForm PIXEL 
   @ 50, 70 GET oGet[4] VAR base:fecegr   OF oForm PIXEL 
   @ 65, 70 GET oGet[5] VAR base:caja     OF oForm PIXEL 
   @ 80, 70 GET oGet[6] VAR base:jubila   OF oForm PIXEL PICTURE "@!" SIZE 15,12 VALID(base:jubila$"SN")
   @ acor[1],acor[2] BUTTON oBot[1] PROMPT "&Grabar" OF oForm SIZE 30,10 ;
           ACTION ((lRta := .t.), oForm:End() ) PIXEL
   @ acor[3],acor[4] BUTTON oBot[2] PROMPT "&Cancelar" OF oForm SIZE 30,10 ;
           ACTION ((lRta := .f.), oForm:End() ) PIXEL CANCEL
ACTIVATE DIALOG oForm CENTER
Es cuestion de gustos y comodidades.
Excelente, gracias por el aporte

Tendras la funcion para las coordenadas de los botones ?

Re: Mejor forma de crear objetos desde codigo - Experiencias

Posted: Tue Aug 20, 2019 12:19 pm
by cmsoft
Si, aca te la dejo:

Code: Select all

FUNCTION AcepCanc(oDlg)
LOCAL acor, arr := ARRAY(4), oGru
acor := GetDialogBaseUnits()
oDlg:lHelpIcon := .f.
arr[1] := oDlg:nHeight/ acor[2] - 15
arr[2] := INT(oDlg:nWidth/acor[1]/2/2 -20)
arr[3] := oDlg:nHeight/ acor[2] - 15
arr[4] := INT(oDlg:nWidth/acor[1]/2/2*3 -20)
@ oDlg:nHeight/ acor[2] - 22,01 GROUP oGru TO  oDlg:nHeight/acor[2] -1,oDlg:nWidth/acor[1]-1 PIXEL
RETURN arr

Re: Mejor forma de crear objetos desde codigo - Experiencias

Posted: Tue Aug 20, 2019 12:20 pm
by Compuin
cmsoft wrote:Si, aca te la dejo:

Code: Select all

FUNCTION AcepCanc(oDlg)
LOCAL acor, arr := ARRAY(4), oGru
acor := GetDialogBaseUnits()
oDlg:lHelpIcon := .f.
arr[1] := oDlg:nHeight/ acor[2] - 15
arr[2] := INT(oDlg:nWidth/acor[1]/2/2 -20)
arr[3] := oDlg:nHeight/ acor[2] - 15
arr[4] := INT(oDlg:nWidth/acor[1]/2/2*3 -20)
@ oDlg:nHeight/ acor[2] - 22,01 GROUP oGru TO  oDlg:nHeight/acor[2] -1,oDlg:nWidth/acor[1]-1 PIXEL
RETURN arr

Muchas gracias

Voy a probar a ver como me sale