|
Curso básico
de programación en Visual Basic
Lección
15
Solución,
open input
|
Realizamos
programas para la gestión de empresas. Empresas medianas y
pequeñas. Programas de contabilidad, cartera de pedidos
clientes proveedores, facturación control de albaranes,
tesorería cartera de cobros y pagos y estadísticas.
Nuestro
agradecimiento a todos los que por unas causas o por otras
visitan nuestra web. Gestión de empresas PYMES. Curso de
programación de Visual Basic.
|
1.- Comprobar que no tenga
más de 32000 caracteres y en caso de que el fichero los tenga, no
abrirlo.
'Esta es la parte que se encarga de abrirlo, el código anterior lo he omitido
'Asignamos el nombre del fichero
sFichero = Text1.Text
If Existe(sFichero) Then
Text2.Text = ""
i = FreeFile
Open sFichero For Input As i
tamFic = LOF(i)
If tamFic <= 32000 Then
Text2.Text = Input$(tamFic, i)
End If
Close i
'Una vez abierto, no está modificado
Modificado = False
End If
En este caso, lo único que hay que
hacer es comprobar si el tamaño es menor o igual al máximo
indicado, si es así, abrir el fichero, por tanto, sólo tendremos
que poner la parte que asigna al Text2 el contenido del fichero,
dentro de la comparación.
2.- En caso de que sea
mayor de 32000 caracteres, leer sólo los 32000 primeros.
La solución es casi como la
anterior, bueno, casi, es decir tendremos que hacer una comparación
y en caso del que sea cierta, asignar a la variable que indica el
número de caracteres a leer el valor máximo que queremos.
'Asignamos el nombre del fichero
sFichero = Text1.Text
If Existe(sFichero) Then
Text2.Text = ""
i = FreeFile
Open sFichero For Input As i
tamFic = LOF(i)
'
If tamFic > 32000 Then
tamFic = 32000
End If
Text2.Text = Input$(tamFic, i)
Close i
'Una vez abierto, no está modificado
Modificado = False
End If
Por tanto comprobamos si el
contenido de tamFic es mayor de 32000, en caso de
ser cierto, se cumple la condición, asignamos este valor a esa
variable, de esta forma sólo se leerán esos caracteres.
3.- Si el tamaño es mayor
de 32000 no poder guardarlo (y como extra: no poder editarlo)
Para conseguir esto, debemos
aprovechar el código usado en la segunda solución, de forma que si
es mayor de 32000, podamos asignar un flag, para saber que no se
debe guardar.
También podríamos evitar que se modificase el contenido del
TextBox, esto se consigue asignando la propiedad Locked
a True. De esta forma no se podrá escribir en el TextBox. Por
supuesto que en caso contrario se debería permitir la escritura,
ahora veremos cómo hacer estas cosas.
Veamos las cosas por partes:
'Asignamos el nombre del fichero
sFichero = Text1.Text
If Existe(sFichero) Then
Text2.Text = ""
i = FreeFile
Open sFichero For Input As i
tamFic = LOF(i)
'Nos aseguramos que se pueda editar
Text2.Locked = False
Text2.ForeColor = vbWindowText
If tamFic > 32000 Then
tamFic = 32000
'Si el tamaño no es el leido,
'no permitir escribir
Text2.Locked = True
'si además cambiamos el color... mejor
Text2.ForeColor = vbGrayText
End If
Text2.Text = Input$(tamFic, i)
Close i
'Una vez abierto, no está modificado
Modificado = False
En esta primera solución, aún no
evitamos que se pueda guardar, pero al menos cambiamos el color del
texto y evitamos que se pueda modificar el contenido, para ello he
cambiado el valor de la propiedad ForeColor, usando dos constantes
predefinidas, la primera es para asignar el color normal del texto y
la segunda es para asignar el color Gris cuando no podamos escribir
en el TextBox, la ventaja de usar estas constantes, al menos con el
VB5, es que si cambias los colores, usando el panel de control de
Windows, estos se usan de forma automática al asignarlos con estas
constantes.
Ahora pasemos a ver cómo evitar
que se guarde, cuando se abra parcialmente un fichero.
Para ello necesitaremos otra variable a nivel de módulo:
Dim PoderGuardar As
Boolean
Con esta indicaremos que podemos o
no guardar el contenido del TextBox.
Se asignará al abrir el fichero y se comprobará al guardarlo.
Veamos al completo los procedimientos de Abrir y Guardar:
Private Sub cmdAbrir_Click()
'Abrir
Dim i As Long, tamFic As Long
Dim sTmp As String
If Modificado Then
If MsgBox("El texto se ha modificado..." & vbCrLf & _
"¿Quieres guardarlo?", vbQuestion + vbYesNo) = vbYes Then
'Conservar el nombre actual
sTmp = Text1.Text
'y asignar el anterior
Text1.Text = sFichero
'guardarlo...
cmdGuardar_Click
'Volvemos a dejar el Text1 como estaba
Text1.Text = sTmp
End If
End If
'Asignamos el nombre del fichero
sFichero = Text1.Text
If Existe(sFichero) Then
Text2.Text = ""
i = FreeFile
Open sFichero For Input As i
tamFic = LOF(i)
'Nos aseguramos que se pueda editar
Text2.Locked = False
Text2.ForeColor = vbWindowText
'y que se pueda guardar
PoderGuardar = True
If tamFic > 32000 Then
tamFic = 32000
'Si el tamaño no es el leido,
'no permitir escribir
Text2.Locked = True
'si además cambiamos el color... mejor
Text2.ForeColor = vbGrayText
'No permitir que se guarde
PoderGuardar = False
End If
Text2.Text = Input$(tamFic, i)
Close i
'Una vez abierto, no está modificado
Modificado = False
End If
End Sub
Private Sub cmdGuardar_Click()
'Guardar
Dim i As Long
Dim SobreEscribir As Boolean
'Sólo se ejecuta el código si se puede guardar
If PoderGuardar Then
'Se asigna el valor Verdadero, por si no existe
SobreEscribir = True
'Si ya existe, preguntar
If Existe(Text1.Text) Then
If MsgBox("ATENCIÓN, el fichero ya existe." & vbCrLf & _
"¿Quieres sobrescribirlo?", vbQuestion + vbYesNo) = vbNo Then
'Hemos contestado que no, así que...
SobreEscribir = False
End If
End If
'Si no existe o se quiere sobrescribir...
If SobreEscribir Then
i = FreeFile
Open Text1.Text For Output As i
Print #i, Text2.Text
Close i
'Ya hemos guardado las modificaciones
Modificado = False
sFichero = Text1.Text
End If
End If
End Sub
Pues creo que esto es todo...
Una cosa que me gustaría que hicieras, al menos así aprenderías
más, es que intentaras entender las soluciones, no te limites a
copiarlas, sin saber el porqué de su uso... por supuesto que no
sólo hay una solución y si la que tu has encontrado, sirve para lo
mismo, pues mejor aún.
Aquí tienes el
código para usar dos controles Text2,
échale un vistazo a las comparaciones realizadas para poder saber
si se ha modificado y esas cosas, ya que ahora vas a trabajar con
dos controles, como si sólo fuese uno...
Que lo disfrutes y prueba a
experimentar otras posibilidades...
Nos vemos.
|