|
|
|
|
|
|
| |
| |
| |
| |
|
Se Recomienda Resolución de 800x600 pixels |
|
2da PARTE 8.-
Activar la instancia anterior de una aplicación al cargarla por segunda vez Cuando
se ejecuta una aplicación de Visual Basic, se puede saber, mediante la
propiedad PrevInstance del objeto App, si dicha aplicación se está ejecutando. He
de aclarar que este truco sólo sirve si el Caption del programa es siempre el
mismo. Private Sub Form_Load()
Dim sCaption As String
'si ya se está ejecutando
If App.PrevInstance Then
'Guardar el caption de
esta aplicación
sCaption = Caption
'Cambiar el caption
actual para que no se active esta
Caption = "cualquier cosa"
'Activar la otra instancia
AppActivate sCaption
'Terminar esta copia del programa
End
End If
'Continuar ya que no hay otra copia
End Sub Esto es lo que habría que hacer si el caption de la
aplicación cambia y no mantiene siempre el mísmo valor. Private Sub Form_Load()
Dim sCaption As String
'si ya se está ejecutando If App.PrevInstance Then
'Leer del fichero de
configuración el caption de la aplicación
sCaption = GetSetting("Aplicacion.ini",
"General", "Caption", Caption)
'Cambiar el caption actual para que no se
active esta
Caption = "cualquier cosa"
'Activar la otra instancia
AppActivate sCaption
'Terminar esta copia del programa
End End If
'Cuando se cambie el caption de la aplicación,
'guardarlo en el fichero de configuración SaveSetting "Aplicacion.ini",
"General", "Caption", Caption
End Sub También se puede usar este método en el caso de que el
inicio de la aplicación esté en un procedimiento SUB MAIN, en ese caso no podrás
usar la propiedad Caption en la asignación de sCaption ni es necesario
cambiarla para que no se active esta copia, siempre y cuando al iniciarse desde
el módulo BAS aún no se haya mostrado el form.
9.-
Hacer referencia a un control usando una variable Ya
sabes que para asignar un valor de una propiedad de un control debes hacer lo
siguiente: Pero
puede que te encuentres en la necesidad de hacer referencia a un control por
medio de una variable, por ejemplo en el caso de que crees una clase que
manipule controles pero sólo sabe de ese control el nombre y nada más. Si
el control está dentro de un array de controles, se tendrá que hacer esto: Esta
forma de usar los controles, la tuve que usar en una clase que manipulaba unas
etiquetas y unos contenedores, para no obligarme a usar siempre el mismo nombre
en las etiquetas y contenedores.
10.-
Otra procedimiento para esperar X segundos Pues eso, otra forma de esperar un número
determinado de segundos. 'Si
se quiere usar de forma GLOBAL, insertarlo en un Módulo BAS y declararlo como público Private Sub Wait(ByVal nSec As Integer)
'Esperar un número de
segundos
Dim t1 As Date, t2 As Date
t1 = Second(Now)
t2 = t1 + nSec
Do
DoEvents
Loop While t2 > Second(Now) End Sub
11.-
Más sobre la colección Forms y Controls (hacer referencia a un control o form
usando variables) La cuestión es la siguiente: Se
puede referenciar a una propiedad de un control de la siguiente forma: Dim tControl As Control Set tControl = Controls(sNombreControl) tControl.BackColor = 0& Por tanto, se supone que se debería poder hacer esto otro
para poder modificar esa misma propiedad: Dim tForm As Form Set tForm = Forms(sNombreForm) tForm.BackColor = vbRed Pues
no... al menos a mi no me ha funcionado... me da Type Mismatch (error 13) La solución que he encontrado para hacer
esto es la siguiente: Public Sub Propiedades(ByVal elForm As
String, _
ByVal elControl As String, _
ByVal laPropiedad As String, _
ByVal elValor As Variant)
'Los parámetros se indican como cadena de caracteres,
'salvo el último que indica el valor a asignar
Dim tmpForm As Form
Dim tForm As Form
Dim tControl As Control
'Recorremos la colección Forms en busca del form indicado
For Each tmpForm In Forms
'Si es el mismo nombre, este es el form que queremos
If tmpForm.Name = elForm Then
'Asignarlo a la variable
Set tForm = tmpForm
End If
Next
'Si no se ha encontrado ese form, avisarlo mediante un error
If tForm Is Nothing Then
Err.Raise vbObjectError + 1000, _
"Propiedades", _
"No se ha hallado el form indicado por "
& elForm
Else
'Para detectar el error de asignación del control
On Local Error Resume Next
'Asignamos el control deseado a la variable
Set tControl = tForm.Controls(elControl)
If Err Then
Err = 0
'No atrapar los errores, sino no se mostraría el nuestro...
On Local Error GoTo 0
Err.Raise vbObjectError + 1000, _
"Propiedades", _
"No se ha hallado el control indicado por
" & elControl & _
" en el form " & elForm
End If
'interceptamos las propiedades que podemos manipular
'si se deja esto de LCase(laPropiedad), los nombres deben estar en minúsculas
'También puedes usar Option Compare Text en el módulo.
Select Case LCase(laPropiedad)
Case "backcolor"
tControl.BackColor = elValor
Case "forecolor"
tControl.ForeColor = elValor
Case "caption"
tControl.Caption
= elValor
Case "text"
tControl.Text = elValor
Case Else
'etc.
End Select
'
'En VB6 se puede usar CallByName para asignar el valor de una propiedad:
'evitandote todo el mogollón de comparaciones...
'CallByName tControl, laPropiedad, VbLet, elValor
'
End If End Sub 'Para
usarlo: Propiedades Me.Name, "Label1",
"Caption", "Hola Mundo" En resumen: si se quiere obtener un "objeto" form usando Forms("nombre del form"), no se puede...
©1998-2001 FMC Webs® Todos los derechos Reservados. Ferraro Mauro - San Nicolás - Argentina |
||||
|
El Codigo del Mes Aqui le mostraremos el Codigo Fuente del Mes, Votalo Ya!!! Preguntar Tutoriales Contactenos Redirecciona tu Pagina Gratis!!! Votanos en La web del Programador
|