Curso B�sico de Programaci�n
en Visual Basic

Soluciones de la entrega Quince.
Fecha: 23/Mar/98

 

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.
Guillermo


 

Ir al índice principal del Guille