domingo, 26 de junio de 2011

Anexo 5: Optimizando nuestro código.

Una vez concluido el programa vemos que me podemos organizar y reducir el codigo repetitivo mediante llamadas a procedimientos. Por ejemplo tenemos parte de codigo que se repite varias veces:


'ponemos en blanco la propiedad .text de los texbox
PictureBoxFoto.Picture = Picture["icon:/96/gambas"]
TextBoxDNI.text = ""
TextBoxNombre.text = ""
TextBoxApellidos.text = ""
TextBoxEmpresa.text = ""
TextBoxPuesto.text = ""
TextBoxTelfEmpresa.text = ""
TextBoxTelfParticular.text = ""
TextBoxFax.text = ""
TextBoxMovilEmpresa.text = ""
TextBoxMovilParticular.text = ""
TextBoxWEB.text = ""
PictureBoxFoto.Picture = ""
TextBoxDireccion.text = ""
TextBoxObs.text = ""
TextBoxFecha.text = ""
TextBoxCorreo.text = ""
'escribimos en el gridviews el dato introducido
titulo.rellena()
'el setfocus lo ponemos justo al inicio de los datos
TextBoxDNI.SetFocus


Este codigo se repite muchisimo, podemos crear una subrutina que lo englobe y que la llamemos cada vez que nos haga falta.
'---------------------------------------------------------------
'agrupando codigo que se repite mucho
'---------------------------------------------------------------
PUBLIC SUB limpia()
'ponemos en blanco la propiedad .text de los texbox
PictureBoxFoto.Picture = Picture["icon:/96/gambas"]
TextBoxDNI.text = ""
TextBoxNombre.text = ""
TextBoxApellidos.text = ""
TextBoxEmpresa.text = ""
TextBoxPuesto.text = ""
TextBoxTelfEmpresa.text = ""
TextBoxTelfParticular.text = ""
TextBoxFax.text = ""
TextBoxMovilEmpresa.text = ""
TextBoxMovilParticular.text = ""
TextBoxWEB.text = ""
PictureBoxFoto.Picture = ""
TextBoxDireccion.text = ""
TextBoxObs.text = ""
TextBoxFecha.text = ""
TextBoxCorreo.text = ""
'escribimos en el gridviews el dato introducido
titulo.rellena()
'el setfocus lo ponemos justo al inicio de los datos
TextBoxDNI.SetFocus
END
Otro tema seria ponerle iconos a los menus:
Desde el editor de menus podemos ponerles unos iconos a las distinttas opciones de los menus, es facil y queda muy bien:













Otro seria poner una etiqueta donde se viera que archivo “.lis” estamos actualmente trabajando.
En el formulario Fmain, crearemos un labeltext, llamado labelActual, y en el IDE de gambas, la propiedad Border, le ponemos el valor Raised, para que se vierea mejor (se hace un recuadro en el label recuadro)



Cada vez que abramos, guardemos, o generemos “listado General”, se presentaria el nombre de dicho archivo:
Por ejemplo: Modulo Archivo.Salva.
….........
lineas &= var.fecha_datos[a] & codigofinline
lineas &= var.correo[a] & codigofinline
NEXT
var.cambio = "NO"
File.Save(destino, lineas)
Fmain.LabelActual.text=destino
fins: ' hemos pulsado el boton de cancelar en el cuadro de dialogo Dialog.SaveFile()
'fin de la subrutina
END
En el módulo Archivo.abrir:
….........
b += 1
var.correo[a] = arr_cadenas[b]
NEXT
var.cambio = "NO"
titulo.rellena()
FMain.LabelActual.text = Dialog.Path
ENDIF
finlectura:
END
Y en el módulo importar.completo:
.............
lineas &= var.correo[a] & codigofinline
NEXT
File.Save(destino, lineas)
var.cambio = "NO"
FMain.LabelActual.text = destino
'fin del proceso
END



Quedaría mas o menos así:








Anexo 6: Añadir recientes
En este anexo vamos a añadir un nuevo módulo que lo llamaremos addrecientes, que se va a encargar de “recordar” los archivos que anteriormente habríamos abierto.
Primero añadiremos en el editor de menus del formulario Fmain este menu:

Y pondremos



Para los nombre reciente1,reciente2,reciente3 o reciente4, pondremos en el titulo “(vacio)”.
De esta manera estamos dejando 5 lugares para guardar las rutas de los últimos 5 archivos abiertos.


En el Formulario Fmain, añadimos en Form_Open():
PUBLIC SUB Form_Open()
ME.CENTER()
var.reinicio()
titulo.definir()
var.rutaimagen = "icon:/96/gambas"
addrecientes.abre()
END
y para que cada vez que pulsemos en un menu de recientes abra ese archivo:
'---------------------------------
'abrir archivos segun recientes
'---------------------------------
PUBLIC SUB reciente0_Click()
archivo.abrir(FMain.reciente0.caption)
END
PUBLIC SUB reciente1_Click()
archivo.abrir(FMain.reciente1.caption)
END
PUBLIC SUB reciente2_Click()
archivo.abrir(FMain.reciente2.caption)
END
PUBLIC SUB reciente3_Click()
archivo.abrir(FMain.reciente3.caption)
END
PUBLIC SUB reciente4_Click()
archivo.abrir(FMain.reciente4.caption)
END




y en Form_Close()
PUBLIC SUB Form_Close()
DIM res AS Integer
IF var.cambio = "si" THEN
res = Message.Question("¿Desea salir sin salvar?", "si", "no")
IF res = 1 THEN
addrecientes.salva()
ME.CLOSE
ELSE
STOP EVENT 'paramos este evento y no salgo del programa
ENDIF
ELSE
ME.close
ENDIF
'no salgo del programa
END










En el modulo archivo, en la subrutina abrir(), al inicio añadimos:
PUBLIC SUB abrir(OPTIONAL ruta AS String)
DIM a AS Integer 'contador de conjunto de datos
DIM b AS Integer 'contador de dato
DIM arr_cadenas AS String[]
DIM codigofinline AS String
DIM numero_de_datos AS Integer
codigofinline = "|"
IF ruta = "" THEN
Dialog.Title = "Seleccione un archivo de datos listin"
Dialog.Filter = ["*.lis", "Datos de Listin"]
IF NOT Dialog.OpenFile() THEN
ruta = Dialog.Path
ELSE
STOP EVENT
ENDIF
ENDIF


arr_cadenas = Split(File.Load(ruta), codigofinline)


IF arr_cadenas[0] <> "v0.0.1" THEN
'se trata de una version incompatible con la version de este programa, abandono el procedimiento
...


y al final del módulo añadimos
…...
var.correo[a] = arr_cadenas[b]
NEXT
var.cambio = "NO"
titulo.rellena()
FMain.LabelActual.text = Dialog.Path
addrecientes.add(Dialog.path)
finlectura:
END


Ahora pasamos a definir el nuevo modulo addrecientes:



PUBLIC SUB add(ruta AS String) AS String
IF FMain.reciente0.caption = "(sin recientes)" THEN
FMain.reciente0.caption = ruta
RETURN
ENDIF
'no adjuntar si el elemento esta repetido
IF FMain.reciente0.caption = ruta THEN
RETURN
ENDIF
IF FMain.reciente1.caption = ruta THEN
RETURN
ENDIF
IF FMain.reciente2.caption = ruta THEN
RETURN
ENDIF
IF FMain.reciente3.caption = ruta THEN
RETURN
ENDIF
IF FMain.reciente4.caption = ruta THEN
RETURN
ENDIF
IF FMain.reciente1.caption = "(vacio)" THEN
FMain.reciente1.caption = ruta
FMain.reciente1.Visible = TRUE
RETURN
ENDIF
IF FMain.reciente2.caption = "(vacio)" THEN
FMain.reciente2.caption = ruta
FMain.reciente2.Visible = TRUE
RETURN
ENDIF
IF FMain.reciente3.caption = "(vacio)" THEN
FMain.reciente3.caption = ruta
FMain.reciente3.Visible = TRUE
RETURN
ENDIF
IF FMain.reciente4.caption = "(vacio)" THEN
FMain.reciente4.caption = ruta
FMain.reciente4.Visible = TRUE
RETURN
ENDIF
'si llega hasta aqui quiere decir que tenemos relleno los 5 recientes,
'por lo tanto debemos trasladar todos los caption y añadir al ultimo el nuevo
FMain.reciente0.caption = FMain.reciente1.caption
FMain.reciente1.caption = FMain.reciente2.caption
FMain.reciente2.caption = FMain.reciente3.caption
FMain.reciente3.caption = FMain.reciente4.caption
FMain.reciente4.caption = ruta
END


PUBLIC SUB salva()
DIM lineas AS String
DIM ruta AS String
lineas = "************** Contenido de Doc. Recientes ***" & "\n"
lineas &= "documentosrecientes" & "\n"
lineas &= "v.0.0.1" & "\n"
lineas &= FMain.reciente0.caption & "\n"
lineas &= FMain.reciente1.caption & "\n"
lineas &= FMain.reciente2.caption & "\n"
lineas &= FMain.reciente3.caption & "\n"
lineas &= FMain.reciente4.caption & "\n"
lineas &= "************* Fin ************" & "\n"
ruta = User.Home
File.Save(ruta & "/documentosrecienteslistin.DocRec", lineas)
END


PUBLIC SUB abre()
DIM arr_cadenas AS String[]
FMain.reciente1.Visible = FALSE
FMain.reciente2.Visible = FALSE
FMain.reciente3.Visible = FALSE
FMain.reciente4.Visible = FALSE
IF Exist(User.Home & "/documentosrecienteslistin.DocRec") = FALSE THEN
'no Existe el archivo, por lo tanto podemos continuar con el salvado con el mismo nombre
ENDIF
TRY arr_cadenas = Split(File.LOAD(User.Home & "/documentosrecienteslistin.DocRec"), "\n")
IF ERROR THEN
Message.Error("error en lectura")
RETURN
ENDIF
'si se produce un error vuelve al programa, no encuentra el archivo documentosrecientes.DocRec
FMain.reciente0.caption = arr_cadenas[3]
FMain.reciente1.caption = arr_cadenas[4]
FMain.reciente2.caption = arr_cadenas[5]
FMain.reciente3.caption = arr_cadenas[6]
FMain.reciente4.caption = arr_cadenas[7]
IF FMain.reciente1.caption <> "(vacio)" THEN
FMain.reciente1.Visible = TRUE
ENDIF
IF FMain.reciente2.caption <> "(vacio)" THEN
FMain.reciente2.Visible = TRUE
ENDIF
IF FMain.reciente3.caption <> "(vacio)" THEN
FMain.reciente3.Visible = TRUE
ENDIF
IF FMain.reciente4.caption <> "(vacio)" THEN
FMain.reciente4.Visible = TRUE
ENDIF
END

No hay comentarios:

Publicar un comentario