Buenas, queridos novatos,
Les traigo un nuevo truco o sugerencia para que tengan todo mas optimizado y de facil acceso, por mi experiencia les cuento que me arte de tener 500 proyectos en una o varias carpetas.
Muchas veces necesite un proyecto rapido para consultar algo o hacer algunas pruebas y no lo encontraba o si lo encontraba lo hacia despues de un buen rato de buscar.
El truco se basa en esto y en si este truco tambien le puede servir a los expertos :P jajaja, se trata de hacer un proyecto solo que diga por ejemplo TodasMisPruebas y en el tener todos nuestros proyectos ordenados en carpetas, ya que podemos cambiar la clase inicio que es la que gambas ejecuta primero al arrancar y de ahi podemos enlazar formularios, clases, archivos, módulos como querramos.
En todo caso cuando querramos separar un proyecto y pulirlo bien ahí si hacemos un proyecto aparte.
Bueno espero les sirva, saludos.
Allanando el camino a los iniciados en Gambas, porque programar en Gambas es un placer!!
jueves, 30 de abril de 2015
miércoles, 29 de abril de 2015
Ejemplo simple de programacion de una clase
Clase Registro
' gambas class file
' by postapase
Export
Property Lugar As String '' Devuelve o muestra la carpeta que contiene el archivo de registros.
Property Read Nombre As String '' Devuelve o muestra el nombre del archivo de registros.
Property Read Ruta As String '' Devuelve o muestra la ruta completa del archivo de registros.
Private sLugar As String
Private sNombreX As String
Private sRuta As String
Public Sub _new(sDir As String, sNombre As String)
If Exist(sDir) = True Then
sLugar = sDir
sNombreX = sNombre
Lugar_Write(sLugar)
sRuta = sLugar &/ sNombre
If Exist(sRuta) = False Then
File.Save(sRuta, "*** Creado(" & Now & ") ***" & gb.NewLine)
Endif
Else
Message.Error("Lugar invalido!")
Return
Endif
End
Private Function Lugar_Read() As String
Return sLugar
End
Private Sub Lugar_Write(Value As String)
sLugar = Value
End
Private Function Nombre_Read() As String
Return sNombreX
End
Private Function Ruta_Read() As String
Return sRuta
End
Public Sub Agregar(Mensaje As String) '' Agrega un mensaje al archivo de registros.
Dim ArchivoX As File
If Exist(sRuta) = False Then
Return
Endif
If IsNull(Mensaje) Then
Return
Endif
ArchivoX = Open sRuta For Append
Print #ArchivoX, "(" & Now & ") " & Mensaje
Close #ArchivoX
End
Public Sub Borrar() '' Borra todo el contenido del archivo de registros (precaucion).
If Access(sLugar, gb.Write) = True Then
If Exist(sRuta) = True Then
Try Kill sRuta
File.Save(sRuta, "*** Creado(" & Now & ") ***" & gb.NewLine)
Else
File.Save(sRuta, "*** Creado(" & Now & ") ***" & gb.NewLine)
Endif
Endif
End
' by postapase
Export
Property Lugar As String '' Devuelve o muestra la carpeta que contiene el archivo de registros.
Property Read Nombre As String '' Devuelve o muestra el nombre del archivo de registros.
Property Read Ruta As String '' Devuelve o muestra la ruta completa del archivo de registros.
Private sLugar As String
Private sNombreX As String
Private sRuta As String
Public Sub _new(sDir As String, sNombre As String)
If Exist(sDir) = True Then
sLugar = sDir
sNombreX = sNombre
Lugar_Write(sLugar)
sRuta = sLugar &/ sNombre
If Exist(sRuta) = False Then
File.Save(sRuta, "*** Creado(" & Now & ") ***" & gb.NewLine)
Endif
Else
Message.Error("Lugar invalido!")
Return
Endif
End
Private Function Lugar_Read() As String
Return sLugar
End
Private Sub Lugar_Write(Value As String)
sLugar = Value
End
Private Function Nombre_Read() As String
Return sNombreX
End
Private Function Ruta_Read() As String
Return sRuta
End
Public Sub Agregar(Mensaje As String) '' Agrega un mensaje al archivo de registros.
Dim ArchivoX As File
If Exist(sRuta) = False Then
Return
Endif
If IsNull(Mensaje) Then
Return
Endif
ArchivoX = Open sRuta For Append
Print #ArchivoX, "(" & Now & ") " & Mensaje
Close #ArchivoX
End
Public Sub Borrar() '' Borra todo el contenido del archivo de registros (precaucion).
If Access(sLugar, gb.Write) = True Then
If Exist(sRuta) = True Then
Try Kill sRuta
File.Save(sRuta, "*** Creado(" & Now & ") ***" & gb.NewLine)
Else
File.Save(sRuta, "*** Creado(" & Now & ") ***" & gb.NewLine)
Endif
Endif
End
Código fuente en servidor de Gambas Farm
viernes, 17 de abril de 2015
función de IDE gambas
De aquí en mas iré publicando mis análisis del código de la IDE gambas.
Sera algo asi como analisis del codigo de un experto por un novato jaja.
(tengan precaución con mis comentarios no me hago responsable de mis horrores)
' gambas class file
'by postapase
'conjunto de caracteres que no se pueden usar para un nombre de archivo
Private Const FILE_FORBIDDEN_CAR As String = "?*/~" 'declaracion de constante de tipo string
Public Sub Form_Open()
Me.Center 'centra el formulario
End
Public Function CheckFileName(sName As String, Optional sDir As String) As String
'esta función es parte de la ide de gambas 3.7 se encuentra en el modulo Project
'leer el post: http://novatocodegambas.blogspot.com/2014/05/juguemos-ser-benoit-minisini.html
'función compuesta por dos argumentos uno obligatorio que es sName y el otro opcional es decir no es obligatorio
'colocar el argumento. Esta función retorna un valor de tipo string
'partes de la función:
'Declaracion: Public Function CheckFileName
'Argumentos: (sName As String, Optional sDir As String)
'Dato que retorna o devuelve la función: As String
Dim iInd As Integer
If Not sName Then Goto VOID_NAME 'chequea si el nombre es nulo o vacio.
'salta de aqui a la Etiqueta VOID_NAME:
If String.Left$(sName) = "." Then 'chequea si el primer caracter del nombre empieza por punto
iInd = 1
Goto BAD_START 'salta de aqui a la Etiqueta BAD_START: si el if devuelve true
Endif
For iInd = 1 To String.Len(sName) 'recorre el nombre del archivo viendo si tiene un caracter ilegal
If InStr(FILE_FORBIDDEN_CAR, String.Mid$(sName, iInd, 1)) Then Goto BAD_CHAR
'salta de aqui a la Etiqueta BAD_CHAR: si el if devuelve true
Next
If Len(sDir) Then
'verifica si el archivo ya existe
If Exist(sDir &/ sName) Then Goto ALREADY_EXIST 'salta de aqui a la Etiqueta ALREADY_EXIST: si el if devuelve true
Endif
Return
'Nombre vacio"
VOID_NAME:
Return ("Please type a name.") '"Por favor, escriba un nombre."
BAD_CHAR:
Return ("This name contains a forbidden character:") & " [ " & String.Mid$(sName, iInd, 1) & " ]"
'"Este nombre contiene un carácter prohibido"
BAD_START:
Return ("The name cannot begins with a dot.") '"El nombre no puede empezar por un punto."
ALREADY_EXIST:
Return ("This name is already used. Choose another one.") '"Este nombre ya está en uso. Elija otra."
End
Public Sub Button1_Click()
' este codigo lo agregue yo para ver funcionando la funcion
Print File.Name(FileChooser1.SelectedPath)
Print FileChooser1.Dir
Print FileChooser1.SelectedPath
Message.Info(CheckFileName(File.Name(FileChooser1.SelectedPath), FileChooser1.Dir))
'muestra el mensaje con el string que retorno la funcion CheckFileName
'si sale un mensaje sin texto es que el nombre esta correcto.
End
'by postapase
'conjunto de caracteres que no se pueden usar para un nombre de archivo
Private Const FILE_FORBIDDEN_CAR As String = "?*/~" 'declaracion de constante de tipo string
Public Sub Form_Open()
Me.Center 'centra el formulario
End
Public Function CheckFileName(sName As String, Optional sDir As String) As String
'esta función es parte de la ide de gambas 3.7 se encuentra en el modulo Project
'leer el post: http://novatocodegambas.blogspot.com/2014/05/juguemos-ser-benoit-minisini.html
'función compuesta por dos argumentos uno obligatorio que es sName y el otro opcional es decir no es obligatorio
'colocar el argumento. Esta función retorna un valor de tipo string
'partes de la función:
'Declaracion: Public Function CheckFileName
'Argumentos: (sName As String, Optional sDir As String)
'Dato que retorna o devuelve la función: As String
Dim iInd As Integer
If Not sName Then Goto VOID_NAME 'chequea si el nombre es nulo o vacio.
'salta de aqui a la Etiqueta VOID_NAME:
If String.Left$(sName) = "." Then 'chequea si el primer caracter del nombre empieza por punto
iInd = 1
Goto BAD_START 'salta de aqui a la Etiqueta BAD_START: si el if devuelve true
Endif
For iInd = 1 To String.Len(sName) 'recorre el nombre del archivo viendo si tiene un caracter ilegal
If InStr(FILE_FORBIDDEN_CAR, String.Mid$(sName, iInd, 1)) Then Goto BAD_CHAR
'salta de aqui a la Etiqueta BAD_CHAR: si el if devuelve true
Next
If Len(sDir) Then
'verifica si el archivo ya existe
If Exist(sDir &/ sName) Then Goto ALREADY_EXIST 'salta de aqui a la Etiqueta ALREADY_EXIST: si el if devuelve true
Endif
Return
'Nombre vacio"
VOID_NAME:
Return ("Please type a name.") '"Por favor, escriba un nombre."
BAD_CHAR:
Return ("This name contains a forbidden character:") & " [ " & String.Mid$(sName, iInd, 1) & " ]"
'"Este nombre contiene un carácter prohibido"
BAD_START:
Return ("The name cannot begins with a dot.") '"El nombre no puede empezar por un punto."
ALREADY_EXIST:
Return ("This name is already used. Choose another one.") '"Este nombre ya está en uso. Elija otra."
End
Public Sub Button1_Click()
' este codigo lo agregue yo para ver funcionando la funcion
Print File.Name(FileChooser1.SelectedPath)
Print FileChooser1.Dir
Print FileChooser1.SelectedPath
Message.Info(CheckFileName(File.Name(FileChooser1.SelectedPath), FileChooser1.Dir))
'muestra el mensaje con el string que retorno la funcion CheckFileName
'si sale un mensaje sin texto es que el nombre esta correcto.
End
Clase Printer
' gambas class file
'by postapase
Public Sub btnClear_Click()
TextArea1.Clear
End
Public Sub btnImprimir_Click()
Printer1.Print()
End
Public Sub Printer1_Draw()
Dim PRINT_MARGIN As Float = Paint.Width / Printer1.PaperWidth * 10
Dim Datos As String[]
Dim DatosAimprimir, Xlinea As String
Datos = Split(TextArea1.Text, gb.NewLine) 'separando cada linea por salto de linea del TextArea
For Each Xlinea In Datos
DatosAimprimir &= Trim$(Xlinea) & gb.CrLf 'agrego salto de linea entendible por la impresora
Next
Paint.DrawRichText(DatosAimprimir, PRINT_MARGIN, PRINT_MARGIN,,, Align.TopNormal)
End
Public Sub btnSalir_Click()
Me.Close
End
Public Sub Form_Open()
Me.Center
End
'by postapase
Public Sub btnClear_Click()
TextArea1.Clear
End
Public Sub btnImprimir_Click()
Printer1.Print()
End
Public Sub Printer1_Draw()
Dim PRINT_MARGIN As Float = Paint.Width / Printer1.PaperWidth * 10
Dim Datos As String[]
Dim DatosAimprimir, Xlinea As String
Datos = Split(TextArea1.Text, gb.NewLine) 'separando cada linea por salto de linea del TextArea
For Each Xlinea In Datos
DatosAimprimir &= Trim$(Xlinea) & gb.CrLf 'agrego salto de linea entendible por la impresora
Next
Paint.DrawRichText(DatosAimprimir, PRINT_MARGIN, PRINT_MARGIN,,, Align.TopNormal)
End
Public Sub btnSalir_Click()
Me.Close
End
Public Sub Form_Open()
Me.Center
End
domingo, 12 de abril de 2015
Drag y Drop (Ej. 1)
' gambas class file
'by postapase
Public Sub Form_Open()
Me.Center
End
Public Sub Button1_Drop()
Button1.Picture = Picture[Drag.Data]
End
Public Sub Button2_MouseDrag()
If Mouse.Left Then
Button2.Drag("icon:/64/linux")
Endif
End
Public Sub Button3_MouseDrag()
If Mouse.Left Then
Button3.Drag("icon:/64/book")
Endif
End
Public Sub Button4_MouseDrag()
If Mouse.Left Then
Button4.Drag("icon:/64/gambas")
Endif
End
Public Sub Button5_MouseDrag()
If Mouse.Left Then
Button5.Drag("icon:/64/gnu")
Endif
End
Public Sub Button1_Click()
Button1.Picture = Null
End
'by postapase
Public Sub Form_Open()
Me.Center
End
Public Sub Button1_Drop()
Button1.Picture = Picture[Drag.Data]
End
Public Sub Button2_MouseDrag()
If Mouse.Left Then
Button2.Drag("icon:/64/linux")
Endif
End
Public Sub Button3_MouseDrag()
If Mouse.Left Then
Button3.Drag("icon:/64/book")
Endif
End
Public Sub Button4_MouseDrag()
If Mouse.Left Then
Button4.Drag("icon:/64/gambas")
Endif
End
Public Sub Button5_MouseDrag()
If Mouse.Left Then
Button5.Drag("icon:/64/gnu")
Endif
End
Public Sub Button1_Click()
Button1.Picture = Null
End
Código fuente: ArrastrarYsoltar-0.0.1.tar.gz
Ejemplo 2:
' gambas class file
'by postapase
Public Sub Form_Open()
Me.Center
End
Public Sub Button1_Drop()
Button1.Picture = Drag.Data.Picture
End
Public Sub Button2_MouseDrag()
If Mouse.Left Then
Button2.Drag(Button2.Picture.Image)
Endif
End
Public Sub Button3_MouseDrag()
If Mouse.Left Then
Button3.Drag(Button3.Picture.Image)
Endif
End
Public Sub Button4_MouseDrag()
If Mouse.Left Then
Button4.Drag(Button4.Picture.Image)
Endif
End
Public Sub Button5_MouseDrag()
If Mouse.Left Then
Button5.Drag(Button5.Picture.Image)
Endif
End
Public Sub Button1_Click()
Button1.Picture = Null
End
'by postapase
Public Sub Form_Open()
Me.Center
End
Public Sub Button1_Drop()
Button1.Picture = Drag.Data.Picture
End
Public Sub Button2_MouseDrag()
If Mouse.Left Then
Button2.Drag(Button2.Picture.Image)
Endif
End
Public Sub Button3_MouseDrag()
If Mouse.Left Then
Button3.Drag(Button3.Picture.Image)
Endif
End
Public Sub Button4_MouseDrag()
If Mouse.Left Then
Button4.Drag(Button4.Picture.Image)
Endif
End
Public Sub Button5_MouseDrag()
If Mouse.Left Then
Button5.Drag(Button5.Picture.Image)
Endif
End
Public Sub Button1_Click()
Button1.Picture = Null
End
martes, 7 de abril de 2015
InfoDataBasesSQL
Programa para ver internamente las tablas maestras, las tablas creadas por el usuario, tablas tipo view y cualquier otro dato que contenga la base de datos SQLITE.
El paquete fuente esta en el servidor farm de gambas.
Descargar base de datos sqlite de ejemplo: Cortes
Es necesario registrarse
http://www.gambas-es.org/download.php?id=570
' gambas class file
'by postapase
'http://novatocodegambas.blogspot.com/
'http://tanteador-tenis-de-mesa.blogspot.com/
Public Conexion As Connection
Public RutaBD As String
Public NombreBD As String
Public NombreTabla As String
Public Sub Form_Open()
Me.Center
Me.y = 0
End
Public Sub btnAbrirDB_Click()
Dialog.Title = "Selecciona un archivo de base de datos (sqlite3)"
If Dialog.openfile() Then Return
RutaBD = File.Dir(Dialog.path)
NombreBD = File.Name(Dialog.path)
txtDirDB.Text = RutaBD & "/" & NombreBD
Me.Title = Application.Name & " - " & NombreBD
btnConectar.Enabled = True
End
Public Sub ListaTablasMaestras_Click()
Dim Xcampo As Field
Dim Xtabla As Table
ListaTablasCreadas.UnselectAll
NombreTabla = ListaTablasMaestras.Text
For Each Xtabla In Conexion.Tables
If Xtabla.Name = ListaTablasMaestras.Text Then
ListaCampos.Clear
For Each Xcampo In Xtabla.Fields
ListaCampos.Add(Xcampo.Name)
Next
Endif
Next
DataSource1.Connection = Conexion
DataSource1.Table = NombreTabla
DataSource1.Visible = True
End
Public Sub ListaTablasCreadas_Click()
Dim Xcampo As Field
Dim Xtabla As Table
ListaTablasMaestras.UnselectAll
NombreTabla = ListaTablasCreadas.Text
For Each Xtabla In Conexion.Tables
If Xtabla.Name = ListaTablasCreadas.Text Then
ListaCampos.Clear
For Each Xcampo In Xtabla.Fields
ListaCampos.Add(Xcampo.Name)
Next
Endif
Next
DataSource1.Connection = Conexion
DataSource1.Table = NombreTabla
DataSource1.Visible = True
End
Public Sub btnConectar_Click()
Dim Xtabla As Table
ListaTablasMaestras.Clear
Conexion = New Connection
Conexion.type = "sqlite"
Conexion.host = RutaBD
Conexion.name = NombreBD
Try Conexion.Open
If Error Then
Message.Error("El fichero elegido no es una base de datos sqlite")
txtDirDB.Clear
btnConectar.Enabled = False
Return
Else
btnDesconectar.Enabled = True
btnConectar.Enabled = False
btnAbrirDB.Enabled = False
DataSource1.Connection = Conexion
For Each Xtabla In Conexion.Tables
If Left$(Xtabla.Name, 7) = "sqlite_" Then
ListaTablasMaestras.Add(Xtabla.name)
Else
ListaTablasCreadas.Add(Xtabla.name)
Endif
Next
Endif
End
Public Sub btnDesconectar_Click()
If Conexion.Opened = True Then Conexion.Close
Limpiar()
btnAbrirDB.Enabled = True
End
Public Sub Form_Close()
If IsNull(Conexion) = False Then
If Conexion.Opened = True Then Conexion.Close
Endif
End
Public Sub Limpiar()
btnConectar.Enabled = True
btnDesconectar.Enabled = False
ListaTablasMaestras.Clear
ListaTablasCreadas.Clear
ListaCampos.Clear
DataSource1.Table = Null
DataSource1.Visible = False
End
Public Sub btnDesconectar2_Click()
TextArea1.Clear
TextArea1.SetFocus
End
'by postapase
'http://novatocodegambas.blogspot.com/
'http://tanteador-tenis-de-mesa.blogspot.com/
Public Conexion As Connection
Public RutaBD As String
Public NombreBD As String
Public NombreTabla As String
Public Sub Form_Open()
Me.Center
Me.y = 0
End
Public Sub btnAbrirDB_Click()
Dialog.Title = "Selecciona un archivo de base de datos (sqlite3)"
If Dialog.openfile() Then Return
RutaBD = File.Dir(Dialog.path)
NombreBD = File.Name(Dialog.path)
txtDirDB.Text = RutaBD & "/" & NombreBD
Me.Title = Application.Name & " - " & NombreBD
btnConectar.Enabled = True
End
Public Sub ListaTablasMaestras_Click()
Dim Xcampo As Field
Dim Xtabla As Table
ListaTablasCreadas.UnselectAll
NombreTabla = ListaTablasMaestras.Text
For Each Xtabla In Conexion.Tables
If Xtabla.Name = ListaTablasMaestras.Text Then
ListaCampos.Clear
For Each Xcampo In Xtabla.Fields
ListaCampos.Add(Xcampo.Name)
Next
Endif
Next
DataSource1.Connection = Conexion
DataSource1.Table = NombreTabla
DataSource1.Visible = True
End
Public Sub ListaTablasCreadas_Click()
Dim Xcampo As Field
Dim Xtabla As Table
ListaTablasMaestras.UnselectAll
NombreTabla = ListaTablasCreadas.Text
For Each Xtabla In Conexion.Tables
If Xtabla.Name = ListaTablasCreadas.Text Then
ListaCampos.Clear
For Each Xcampo In Xtabla.Fields
ListaCampos.Add(Xcampo.Name)
Next
Endif
Next
DataSource1.Connection = Conexion
DataSource1.Table = NombreTabla
DataSource1.Visible = True
End
Public Sub btnConectar_Click()
Dim Xtabla As Table
ListaTablasMaestras.Clear
Conexion = New Connection
Conexion.type = "sqlite"
Conexion.host = RutaBD
Conexion.name = NombreBD
Try Conexion.Open
If Error Then
Message.Error("El fichero elegido no es una base de datos sqlite")
txtDirDB.Clear
btnConectar.Enabled = False
Return
Else
btnDesconectar.Enabled = True
btnConectar.Enabled = False
btnAbrirDB.Enabled = False
DataSource1.Connection = Conexion
For Each Xtabla In Conexion.Tables
If Left$(Xtabla.Name, 7) = "sqlite_" Then
ListaTablasMaestras.Add(Xtabla.name)
Else
ListaTablasCreadas.Add(Xtabla.name)
Endif
Next
Endif
End
Public Sub btnDesconectar_Click()
If Conexion.Opened = True Then Conexion.Close
Limpiar()
btnAbrirDB.Enabled = True
End
Public Sub Form_Close()
If IsNull(Conexion) = False Then
If Conexion.Opened = True Then Conexion.Close
Endif
End
Public Sub Limpiar()
btnConectar.Enabled = True
btnDesconectar.Enabled = False
ListaTablasMaestras.Clear
ListaTablasCreadas.Clear
ListaCampos.Clear
DataSource1.Table = Null
DataSource1.Visible = False
End
Public Sub btnDesconectar2_Click()
TextArea1.Clear
TextArea1.SetFocus
End
El paquete fuente esta en el servidor farm de gambas.
Descargar base de datos sqlite de ejemplo: Cortes
Nueva versión 0.1.2
Es necesario registrarse
http://www.gambas-es.org/download.php?id=570
Ultima versión
Suscribirse a:
Entradas (Atom)