Trucos en Visual Basic
Trucos en Visual Basic
Trucos en Visual Basic
End Sub.
Cmo pedir confirmacin de descarga de un formulario
Aplicable a Microsoft Visual Basic 5, Visual Basic 6 Quizs a veces desee
dar a los usuarios la opcin de confirmar que desean descargar un
formulario. En vez de utilizar una funcin MsgBox y un Select Case, puede
incluir este cdigo en el evento Form_Unload.
Private Sub Form_Unload (Cancelar as Integer)
Cancelar = (MsgBox ("Salir?", vbOKCancel Or _
vbQuestion, "Demo Confirmacion") = vbCancel)
End Sub
Detrs del botn Salir y de la opcin Salir del men, ponga simplemente
Unload Me. Cada vez que un usuario quiera salir se les pedir
confirmacin.
Cmo obtener el directorio desde donde estamos ejecutando nuestro
programa
Aplicable a Microsoft Visual Basic 6 Para obtener el directorio desde
donde estamos ejecutando nuestro programa lo nico que hay que hacer es
utilizar este cdigo:
Private Sub Form_Load()
Dim Directorio as String
ChDir App.Path
ChDrive App.Path
Directorio = App.Path
If Len(Directorio) > 3 Then
Directorio = Directorio & "\"
End If
Text1.Text = Directorio
End Sub
En este ejemplo el directorio aparecer en el cuadro de texto Text1.
Funcin creada por Eduardo Frneas. Originalmente publicada en
<http://www.arrakis.es/~eforneas/breves.htm>
Cmo colocar la hora y la fecha en la barra de ttulo de una MDI Form
Aplicable a Microsoft Visual Basic 6 Para colocar la hora y la fecha en
la barra de ttulo de una MDI Form siga estos pasos:
Coloque un objeto timer en el formulario MDI.
El valor de la propiedad Interval del objeto timer debe ser 1000.
Elimine el valor de la propiedad caption de la forma MDI.
En el procedimiento Timer del objeto escriba el siguiente cdigo:
<NombreForm>.Caption = "<Nombre de la aplicacin>" &
Format(Date, "dd-mm-yyyy") & " " & Format(Now, "h:nn:ss AM/PM")
Donde NombreForm el el nombre de su formulario MDI y Nombre de la
aplicacin es el nombre que le quiere dar.
En el procedimiento Load del formualario escriba el siguiente cdigo:
timer1.Enabled = true
Funcin originalmente publicada en <http://www.compuconsult.com.ve/>
Cmo hacer desaparecer el cursor del ratn
Aplicable a Microsoft Visual Basic 5, Visual Basic 6 Para hacer
desaparecer y aparecer el cuesor del ratn pegue el siguiente cdigo en
el mdulo:
Declare Function ShowCursor Lib "user32" (ByVal bShow_
As Long) As Long
Debe crear dos botones con:
Private Sub Command1_Click()
result = ShowCursor(False)
End Sub
y
Private Sub Command2_Click()
result = ShowCursor(True)
End Sub
Es muy importante que, en el caso del botn2 que hace reaparecer el
cursor, permita seleccionarlo desde el teclado poniendo su propiedad
Caption a &Mostrar.
DBGrid1.Columns(2).NumberFormat = "#,###.##"
el resultado s ser el correcto, y veremos los valores numricos en
dicha columna, y adems con el formato deseado (por ejemplo, 10.235,27).
PRECAUCIN: CUALQUIER UTILIZACIN POR SU PARTE DEL CDIGO INCLUIDO EN
ESTE ARTCULO SE HAR A SU CUENTA Y RIESGO. Microsoft facilita este
cdigo "tal cual" sin garanta de ningn tipo, ya sea explcita o
implcita, incluyendo expresamente en tal exencin de responsabilidad y,
a efectos meramente enunciativos y no limitativos, las garantas legales
mercantiles implcitas y/o la adecuacin a un propsito o finalidad en
particular.
Cmo lanzar sncronamente comandos de MS-DOS
Aplicable a Microsoft Visual Basic 4, Visual Basic 5, Visual Basic 6 A
veces interesa lanzar comandos MS-DOS desde Visual Basic y esperar a que
stos acaben. Una situacin habitual es lanzar ficheros por lotes (.BAT),
o comandos "net XXX", que realizan exploracin por distintos servidores
en la red y que pueden tardar varios segundos en ser ejecutados.
A continuacin se incluye un ejemplo de cmo lanzar un comando MS-DOS y
esperar a que ste acabe. Se utilizan dos funciones del API de Windows.
La declaracin de stas se ha obtenido del Visor de Texto API, un icono
que aparece en el grupo de programas de Visual Basic.
Estas funciones son:
OpenProcess(): a partir del identificador de un proceso en ejecucin esta
funcin devuelve el handle de dicho proceso.
GetExitCodeProcess(): recupera el cdigo de salida de un proceso lanzado.
Por otra parte, en el cdigo de ejemplo se incluye una referencia a
Environ$("Comspec") & " /c "
Esta instruccin fuerza a que se cierre la ventana MS-DOS de Windows 95 o
Windows 98 despus de que el comando MS-DOS se haya ejecutado. En
realidad la anterior instruccin se traduce en
"COMMAND.COM /C"
La utilizacin de la funcin Environ con el parmetro Comspec asegura que
el command.com se encontrar aunque no est en el path.
El ejemplo necesita un proyecto con un Textbox y un Command button, con
las propiedades por defecto. Al ejecutar el proyecto, teclear el comando
MS-DOS en el Textbox y pulsar Command1. Pasados unos segundos (depende
del comando a ejecutar), aparecer el mensaje "El comando ha acabado".
El cdigo del formulario es el siguiente:
Option Explicit
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STILL_ACTIVE = &H103
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess&, ByVal bInheritHandle&, ByVal dwProcessId&) _
As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) _
As Long
Sub EsperarShell(sCmd As String)
Dim hShell As Long
Dim hProc As Long
Dim codExit As Long
' ejecutar comando
hShell = Shell(Environ$("Comspec") & " /c " & sCmd, 2)
' esperar a que se complete el proceso
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)
Do
GetExitCodeProcess hProc, codExit
DoEvents
Loop While codExit = STILL_ACTIVE
MsgBox "El comando ha acabado"
End Sub
Private Sub Command1_Click()
EsperarShell (Text1.Text)
End Sub
Cmo depurar el SETUP1.VBP del asistente para instalar aplicaciones
Aplicable a Microsoft Visual Basic 4, Visual Basic 5, Visual Basic 6
Usted puede personalizar el asistente para la instalacin de aplicaciones
modificando el proyecto Setup1.vbp. Sin embargo, este proyecto no puede
ser depurado en el entorno de desarrollo (IDE) a menos que se emule el
comportamiento de la rutina de instalacin.
Para depurar el proyecto Setup1.vbp en el IDE siga los siguientes pasos:
Ejecute el asistente para instalar aplicaciones (tambin conocido como
asistente para empaquetado y distribucin) y cree unos discos de
instalacin en un directorio.
Edite el fichero Setup.lst en un editor de texto y haga las siguientes
modificaciones:
Visual Basic 4.0 16-bit
Localice:
Setup=setup1.exe
y reemplzelo con:
Setup=c:\vb\vb.exe c:\vb\setupkit\setup1\setup1.vbp /cmd
Visual Basic 4.0 32-bit
Localice:
Setup=setup132.exe
y reemplzelo con:
Setup=c:\vb\vb32.exe c:\vb\setupkit\setup1\setup1.vbp /cmd
Visual Basic 5.0
Localice:
Setup=setup1.exe
y reemplzelo con:
Setup="c:\archivos de programa\devstudio\vb\vb5.exe"
"c:\archivos de programa\devstudio\vb\setupkit\setup1\setup1.vbp" /cmd
Visual Basic 6.0
Localice:
Spawn=setup1.exe
y reemplzelo con:
Spawn="C:\Archivos de Programa\Microsoft Visual Studio\VB98\VB6.exe"
"C:\Archivos de Programa\Microsoft Visual Studio\VB98\Wizards\
PDWizard\Setup1\Setup1.vbp" /cmd
Comience la instalacin ejecutando Setup.exe.
Cuando Setup.exe termina, se ejecuta el IDE de Visual Basic cargando el
proyecto Setup1.vbp. Establezca los puntos de ruptura que considere
oportunos para hacer la depuracin y pulse F5 o F8.
Cmo detectar el estado de un impresora local
Aplicable a Microsoft Visual Basic 6 Las funciones de la API de Windows
para comprobar el estado de una impresora requieren que haya un documento
en el spooler. Esta restriccin obliga, en la mayora de los casos, a
mandar un trabajo de impresin para detectar el estado de la impresora.
Para evitar este incoveniente se puede abrir el puerto de la impresora
(normalmente lpt1) con CreateFile y tratarlo como un puerto de
comunicaciones normal. La API ClearCommError permite detectar errores en
el puerto.
El siguiente ejemplo muestra cmo examinar el estado de una impresora
(este mtodo slo funciona para impresoras locales) :
Cree un nuevo proyecto.
Aada un mdulo de proyecto.
Copie el siguiente cdigo en el mdulo de proyecto:
Public Const GENERIC_WRITE = &H40000000
Public Const GENERIC_READ = &H80000000
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Const CREATE_ALWAYS = 2
End Sub
Pulse el botn Command1. Comprobar que la caja de texto no cambia a
pesar de modificar su propiedad Text. Si pulsa el botn Command2 podr
observar cmo se reflejan los cambios.
Cmo obtener un puntero a una variable
Aplicable a partir de Microsoft Visual Basic 4.0 32 bits Una de las
caractersticas de Visual Basic que los programadores de C o Pascal echan
de menos es el uso de punteros. Visual Basic 5.0 proporciona una serie de
funciones no documentadas ni soportadas que permiten obtener un puntero a
una variable, a un objeto o una cadena. Con un poco de imaginacin y
gracias a esta nueva funcionalidad se pueden construir listas enlazadas,
rboles, etc., que permitan superar las limitaciones de Visual Basic. A
continuacin, se describen estas funciones no documentadas:
VarPtr(nombre_variable): obtiene un puntero a una variable de tipo
Integer, Long, etc., excepto String. StrPtr(nombre_variable_string):
obtiene un puntero a una variable de tipo String.
ObjPtr(nombre_variable_objeto): obtiene un puntero a una variable de tipo
objeto.
Ejemplo:
Dim x As String * 255
Dim y As New Form1
Dim z As Integer
MsgBox StrPtr(x)
MsgBox ObjPtr(y)
MsgBox VarPtr(z)
Cmo registrar/desregistrar controles ActiveX rpidamente
Aplicable a partir de Microsoft Visual Basic 4.0 32 bits A continuacin,
se indica cmo registrar/desregistrar DLLs y OCXs, asociando un tipo de
fichero con una accin:
Desde el "Explorador de Windows" seleccione en el men Ver\Opciones y
elija la pestaa "Tipos de Archivo".
Haga clic en el botn "Nuevo tipo".
Rellene el campo "Descripcin del tipo". Ejemplos:
Ficheros DLL
Ficheros OCX
Rellene el campo "Extensin asociada". Ejemplos:
DLL
OCX
Haga clic en el botn "Nueva" para aadir una accin al tipo de fichero.
Rellene el campo "Accin". Ejemplos:
Registrar
DeRegistrar
En el campo "Aplicacin utilizada para realizar la accin" indique la
aplicacin Regsvr32.exe. Ejemplos:
vForm.DrawWidth = 2
vForm.ScaleHeight = 256
For intContador = 0 To 255
vForm.Line (0, intContador)-(Screen.Width, _
intContador - 1), RGB(0, 0, 255 - intContador), B
Next intContador
End Sub
Puede llamar a esta funcin desde el evento Paint del formulario. La
rutina muestra un color azul degradado aunque usted puede modificar el
color en la funcin RGB.
Si muestra un MsgBox sobre el formulario al que ha aplicado el degradado
y mueve la ventana de este MsgBox antes de cerrarla, puede observar
efectos extraos en el repintado del formulario. En este caso, se
recomienda simular el cuadro de mensaje con un formulario, en cuyo caso
el movimiento de la ventana no ocasiona ningn efecto colateral.
Cmo implementar la funcin "Deshacer" en una caja de texto
Aplicable a partir de Microsoft Visual Basic 4.0 Cuando se modifica el
contenido de una caja de texto, el sistema operativo Windows mantiene un
buffer con los datos aadidos o borrados. Se puede utilizar la funcin de
la API SendMessage para recuperar el texto modificado.
El mensaje EM_UNDO permite recuperar el texto modificado en una caja de
texto. El mensaje EM_EMPTYUNDOBUFFER vaca el buffer de "Deshacer". El
mensaje EM_CANUNDO devuelve True si hay texto en el buffer de "Deshacer".
A continuacin, se muestra un ejemplo:
End Sub
Cmo determinar qu fuentes estn instaladas en el sistema
Aplicable a partir de Microsoft Visual Basic 4.0 La coleccin Fonts de
los objetos Screen y Printer proporcionan una lista de todas las fuentes
instaladas en el sistema operativo. El siguiente ejemplo muestra cmo
recuperar las fuentes de pantalla e impresora instaladas:
rc As Rect
rcPage As Rect
chrg As CharRange
End Type
Private Const WM_USER As Long = &H400
Private Const EM_FORMATRANGE As Long = WM_USER + 57
Private Const EM_SETTARGETDEVICE As Long = WM_USER + 72
Private Const PHYSICALOFFSETX As Long = 112
Private Const PHYSICALOFFSETY As Long = 113
Private Declare Function GetDeviceCaps Lib "gdi32" ( _
ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As
Long
Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" _
(ByVal lpDriverName As String, ByVal lpDeviceName As String, _
ByVal lpOutput As Long, ByVal lpInitData As Long) As Long
Public Function WYSIWYG_RTF(RTF As RichTextBox, LeftMarginWidth As Long,
_
RightMarginWidth As Long) As Long
Dim LeftOffset As Long, LeftMargin As Long, RightMargin As Long
Dim LineWidth As Long
Dim PrinterhDC As Long
Dim r As Long
Printer.Print Space(1)
Printer.ScaleMode = vbTwips
LeftOffset = Printer.ScaleX(GetDeviceCaps(Printer.hdc, _
PHYSICALOFFSETX), vbPixels, vbTwips)
LeftMargin = LeftMarginWidth - LeftOffset
RightMargin = (Printer.Width - RightMarginWidth) - LeftOffset
LineWidth = RightMargin - LeftMargin
PrinterhDC = CreateDC(Printer.DriverName, Printer.DeviceName, 0, 0)
r = SendMessage(RTF.hWnd, EM_SETTARGETDEVICE, PrinterhDC, _
ByVal LineWidth)
Printer.KillDoc
WYSIWYG_RTF = LineWidth
End Function
Public Sub PrintRTF(RTF As RichTextBox, LeftMarginWidth As Long, _
TopMarginHeight, RightMarginWidth, BottomMarginHeight)
Dim LeftOffset As Long, TopOffset As Long
Dim LeftMargin As Long, TopMargin As Long
Dim RightMargin As Long, BottomMargin As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim NextCharPosition As Long
Dim r As Long
Printer.Print Space(1)
Printer.ScaleMode = vbTwips
LeftOffset = Printer.ScaleX(GetDeviceCaps(Printer.hdc, _
PHYSICALOFFSETX), vbPixels, vbTwips)
TopOffset = Printer.ScaleY(GetDeviceCaps(Printer.hdc, _
PHYSICALOFFSETY), vbPixels, vbTwips)
LeftMargin = LeftMarginWidth - LeftOffset
TopMargin = TopMarginHeight - TopOffset
RightMargin = (Printer.Width - RightMarginWidth) - LeftOffset
BottomMargin = (Printer.Height - BottomMarginHeight) - TopOffset
rcPage.Left = 0
rcPage.Top = 0
rcPage.Right = Printer.ScaleWidth
rcPage.Bottom = Printer.ScaleHeight
rcDrawTo.Left = LeftMargin
rcDrawTo.Top = TopMargin
rcDrawTo.Right = RightMargin
rcDrawTo.Bottom = BottomMargin
fr.hdc = Printer.hdc
fr.hdcTarget = Printer.hdc
fr.rc = rcDrawTo
fr.rcPage = rcPage
fr.chrg.cpMin = 0
fr.chrg.cpMax = -1
TextLength = Len(RTF.Text)
Do
NextCharPosition = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
If NextCharPosition >= TextLength Then Exit Do
fr.chrg.cpMin = NextCharPosition
Printer.NewPage
Printer.Print Space(1)
fr.hDC = Printer.hDC
fr.hDCTarget = Printer.hDC
Loop
Printer.EndDoc
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
End Sub
Como obtener el directorio desde donde estamos ejecutando nuestro
programa:
Escribir el siguiente cdigo:
Private Sub Form_Load()
Dim Directorio as String
ChDir App.Path
ChDrive App.Path
Directorio = App.Path
If Len(Directorio) > 3 Then
Directorio = Directorio & "\"
End If
End Sub
Determinar si un fichero existe o no:
Escriba el siguiente cdigo: (una de tanta maneras aparte de Dir$())
Private Sub Form_Load()
On Error GoTo Fallo
x = GetAttr("C:\Autoexec.bat")
MsgBox "El fichero existe."
Exit Sub
Fallo:
MsgBox "El fichero no existe."
End Sub
Capturar la pantalla entera o la ventana activa:
Aadir dos botones y escribir el siguiente cdigo:
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte,
ByVal bScan As Byte, ByVal dwFlags As Long,
ByVal dwExtraInfo As Long)
Private Sub Command1_Click()
'Captura la ventana activa
keybd_event 44, 0, 0&, 0&
End Sub
Private Sub Command2_Click()
'Captura toda la pantalla
keybd_event 44, 1, 0&, 0&
End Sub
Salvar el contenido de un TextBox a un fichero en disco:
Aada el siguiente cdigo:
Private Sub Command1_Click()
Dim canalLibre As Integer
Load MnuIndex(ultElem)
MnuIndex(ultElem).Caption = "Menu -> " + Str(ultElem)
MnuQuitar.Enabled = True
End Sub
Cambiar el fondo de Windows desde Visual Basic:
Crear un formulario y escribir:
Private Declare Function SystemParametersInfo Lib "user32" Alias
"SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As
Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Sub Form_Load()
Dim fallo As Integer
fallo = SystemParametersInfo(20, 0, "C:\WINDOWS\FONDO.BMP", 0)
End Sub
Calcular el nmero de colores de video del modo actual de Windows:
Crear un formulario y un TextBox y escribir:
Private Declare Function GetDeviceCaps Lib "gdi32"
(ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Sub Form_Load()
i = (2 ^ GetDeviceCaps(Form1.hdc, 12)) ^
GetDeviceCaps(Form1.hdc, 14)
Text1.Text = CStr(i) & " colores."
End Sub
Ajustar un Bitmap a la pantalla:
Crear un formulario con un BitMap cualquiera y una etiqueta o Label con
los atributos que quiera.
Escribir lo siguiente:
Private Sub Form_Paint()
Dim i As Integer
For i = 0 To Form1.ScaleHeight Step Picture1.Height
For j = 0 To Form1.ScaleWidth Step Picture1.Width
PaintPicture Picture1, j, i, Picture1.Width,
Picture1.Height
Next
Next
End Sub
Private Sub Form_Resize()
Picture1.Left = -(Picture1.Width + 200)
Picture1.Top = -(Picture1.Height + 200)
Label1.Top = 100
Label1.Left = 100
End Sub
Detectar la unidad del CD-ROM:
Si para instalar una aplicacin o ejecutar un determinado software
necesitas saber si existe el CD-ROM:.
Crear un formulario con una etiqueta y escribir lo siguiente:
Option Explicit
Private Declare Function GetDriveType Lib "kernel32" Alias
"GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias
"GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal
lpBuffer As String) As Long
Private Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6
Function StripNulls(startStrg$) As String
Dim c%, item$
c% = 1
Do
If Mid$(startStrg$, c%, 1) = Chr$(0) Then
item$ = Mid$(startStrg$, 1, c% - 1)
"winmm.dll" () As Long
Private Sub Form_Load()
Dim inf As Integer
inf = waveOutGetNumDevs()
If inf > 0 Then
MsgBox "Tarjeta de sonido soportada.", vbInformation,
"Informacion: Tarjeta de sonido"
Else
MsgBox "Tarjeta de sonido no soportada.", vbInformation,
"Informacion: Tarjeta de sonido"
End If
End
End Sub
Crear una ventana con la informacin del Sistema:
Crear un formulario e insertar un mdulo y escribir en el formulario lo
siguiente:
Private Sub Form_Load()
Dim msg As String
MousePointer = 11
Dim verinfo As OSVERSIONINFO
verinfo.dwOSVersionInfoSize = Len(verinfo)
ret% = GetVersionEx(verinfo)
If ret% = 0 Then
MsgBox "Error Obteniendo Information de la Version"
End
End If
Select Case verinfo.dwPlatformId
Case 0
msg = msg + "Windows 32s "
Case 1
msg = msg + "Windows 95 "
Case 2
msg = msg + "Windows NT "
End Select
ver_major$ = verinfo.dwMajorVersion
ver_minor$ = verinfo.dwMinorVersion
build$ = verinfo.dwBuildNumber
msg = msg + ver_major$ + "." + ver_minor$
msg = msg + " (Construido " + build$ + ")" + vbCrLf + vbCrLf
Dim sysinfo As SYSTEM_INFO
GetSystemInfo sysinfo
msg = msg + "CPU: "
Select Case sysinfo.dwProcessorType
Case PROCESSOR_INTEL_386
msg = msg + "Procesador Intel 386 o compatible." + vbCrLf
Case PROCESSOR_INTEL_486
msg = msg + "Procesador Intel 486 o compatible." + vbCrLf
Case PROCESSOR_INTEL_PENTIUM
msg = msg + "Procesador Intel Pentium o compatible." + vbCrLf
Case PROCESSOR_MIPS_R4000
msg = msg + "Procesador MIPS R4000." + vbCrLf
Case PROCESSOR_ALPHA_21064
msg = msg + "Procesador DEC Alpha 21064." + vbCrLf
Case Else
msg = msg + "Procesador (desconocido)." + vbCrLf
End Select
msg = msg + vbCrLf
Dim memsts As MEMORYSTATUS
Dim memory&
GlobalMemoryStatus memsts
memory& = memsts.dwTotalPhys
msg = msg + "Memoria Fisica Total: "
+ "Kb" + vbCrLf
+ "Kb" + vbCrLf
+ "Kb" + vbCrLf
+ "Kb" + vbCrLf +
End Sub
Private Sub Form_Load()
Recycle "c:\a.txt"
End Sub
El programa preguntar si deseamos o no eliminar el fichero y enviarlo a
la papelera de reciclaje. El parmetro .fFlags nos permitir recuperar el
fichero de la papelera si lo deseamos. Si eliminamos esta lnea, el
fichero no podr ser recuperado.
Abrir el Acceso telefnico a Redes de Windows y ejecutar una conexin:
Crear un formulario y escribir el siguiente cdigo:
Private Sub Form_Load()
Dim AbrirConexion As Long
AbrirConexion = Shell("rundll32.exe rnaui.dll,RnaDial " &
"ConexinInternet", 1)
SendKeys "{ENTER}"
End Sub
Situar una ScroolBar horizontal en un ListBox:
Crear un formulario y escribir el siguiente cdigo:
Private Declare Function SendMessage Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,
ByVal wParam As Long, lParam As Any) As Long
Private Sub Form_Load()
Dim x As Integer, i As Integer
For i = 1 To 20
List1.AddItem "El nmero final de la seleccin es el " & i
Next i
x = SendMessage(List1.hwnd, &H194, 200, ByVal 0&)
End Sub
Forzar a un TextBox para que admita nicamente nmeros:
Crear un formulario, aadir un TextBox y escribir el siguiente cdigo:
Sub Text1_Keypress(KeyAscii As Integer)
If KeyAscii <> Asc("9") Then
'KeyAscii = 8 es el retroceso o BackSpace
If KeyAscii <> 8 Then
KeyAscii = 0
End If
End If
End Sub
Forzar a un InputBox para que admita nicamente nmeros:
Crear un formulario y escribir el siguiente cdigo:
Private Sub Form_Load()
Dim Numero As String
Do
Numero = InputBox("Introduzca un numero:")
Loop Until IsNumeric(Numero)
MsgBox "El numero es el " & Numero
Unload Me
End Sub
Hacer Drag & Drop de un control (ejemplo de un PictureBox):
En un formulario, aadir un PictureBox con una imagen cualquiera y
escribir el siguiente cdigo:
Private DragX As Integer
Private DragY As Integer
Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Source.Move (X - DragX), (Y - DragY)
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
'Si el boton del raton es el derecho, no hacemos nada
If Button = 2 Then Exit Sub
Picture1.Drag 1
DragX = X
DragY = Y
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer,
X As Single, Y As Single)
Picture1.Drag 2
End Sub
Centrar una ventana en Visual Basic:
Usar:
Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
En vez de:
Form1.Left = Screen.Width - Width \ 2
Form1.Top = Screen.Height - Height \ 2
Ejecuta pausas durante un determinado espacio de tiempo en segundos:
Llamada: Espera(5)
Sub Espera(Segundos As Single)
Dim ComienzoSeg As Single
Dim FinSeg As Single
ComienzoSeg = Timer
FinSeg = ComienzoSeg + Segundos
Do While FinSeg > Timer
DoEvents
If ComienzoSeg > Timer Then
FinSeg = FinSeg - 24 * 60 * 60
End If
Loop
End Sub
Editor de texto:
Seleccionar todo el texto:
Text1.SetFocus
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
Copiar texto:
Clipboard.Clear
Clipboard.SetText Text1.SelText
Text1.SetFocus
Pegar texto:
Text1.SelText = Clipboard.GetText()
Text1.SetFocus
Cortar texto:
Clipboard.SetText Text1.SelText
Text1.SelText = ""
Text1.SetFocus
Deshacer texto: (Nota: esta operacin slo es eficaz con el control Rich
TextBox).
En un mdulo copie esta lnea:
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long)
As Long
Esta es la instruccin de la funcin deshacer:
UndoResultado = SendMessage(Text1.hwnd, &HC7, 0&, 0&)
If UndoResultado = -1 Then
Beep
MsgBox "Error al intentar recuperar.", 20, "Deshacer texto"
End If
Seleccionar todo el texto:
SendKeys "^A"
Copiar texto:
SendKeys "^C"
Pegar texto:
SendKeys "^V"
Cortar texto:
SendKeys "^X"
Deshacer texto:
SendKeys "^Z"
Obtener el directorio de Windows y el directorio de Sistema:
En un mdulo copiar estas lneas:
Declare Function GetSystemDirectory Lib "kernel32" Alias
"GetSystemDirectoryA"_
(ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function GetWindowsDirectory Lib "kernel32" Alias
"GetWindowsDirectoryA"_
(ByVal lpBuffer As String, ByVal nSize As Long) As Long
Ponga dos Labels o etiquetas y un botn en el formulario:
Label1, Label2, Command1
Hacer doble click sobre el botn y escribir el cdigo siguiente:
Private Sub Command1_Click()
Dim Car As String * 128
Dim Longitud, Es As Integer
Dim Camino As String
Longitud = 128
Es = GetWindowsDirectory(Car, Longitud)
Camino = RTrim$(LCase$(Left$(Car, Es)))
Label1.Caption = Camino
Es = GetSystemDirectory(Car, Longitud)
Camino = RTrim$(LCase$(Left$(Car, Es)))
Label2.Caption = Camino
End Sub
Ocultar la barra de tareas en Windows 95 y/o Windows NT:
En un mdulo copiar estas lneas:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName_
As String, ByVal lpWindowName As String) As Long
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal
hWndInsertAfter
As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As
Long,_
ByVal wFlags As Long) As Long
Global Ventana As Long
Global Const Muestra = &H40
Global Const Oculta = &H80
En un formulario ponga dos botones y escriba el cdigo correspondiente
a cada uno de ellos:
'Oculta la barra de tareas
Private Sub Command1_Click()
Ventana = FindWindow("Shell_traywnd", "")
Call SetWindowPos(Ventana, 0, 0, 0, 0, 0, Oculta)
End Sub
'Muestra la barra de tareas
Private Sub Command2_Click()
Call SetWindowPos(Ventana, 0, 0, 0, 0, 0, Muestra)
End Sub
Cambiar rpidamente la propiedad Enabled
La propiedad Enabled de un objeto se puede alternar fcilmente con una
nica lnea de cdigo:
optAlternar.Enabled = NOT optAlternar.Enabled
Este cdigo es independiente de la definicin de True y False, la cual
vara segn la versin de VB utilizada. Ya sea que se represente
numricamente (-1 = True; 0 = False) o lgicamente, la operacin NOT se
adapta para dar el resultado correcto.
Evitar el "beep" del [ENTER]
End Sub
Centrar una Ventana
Para Centrar una ventana en el medio de la pantalla, colocar el siguiente
codigo en el evento Load de un Form:
Me.Move (Sreen.Width - Me.Width) / 2, Me.Move (Screen.Height - Me.Height)
/ 2
Enviar Faxes Utilizando los controles de VB
Utilizaremos para ello los controles MAPI Messages y MAPI Session para
crear un mensaje de Exchange.
Si en el campo de la direccin e-mail empiezas por "Fax: " y continuas
con el n de fax, conseguirs enviar el mensaje a travs del servicio MS
Fax.
Ten cuidado de utilizar un perfil de Exchange que solo incluya el
servicio Fax, no el Internet Mail, porque si no intentar enviarlo por
los dos sistemas.
MAPISession1.LogonUI = False
wPerfil = "Configuraciones de MS Exchange"
MAPISession1.UserName = wPerfil
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID
Sesion = True
lblEstado = "Creando mensaje..."
MAPIMessages1.ComposeMAPIMessages1.MsgSubject = ""
' No utilizar el campo de texto. Lo intenta imprimir con el Word como
' segunda hoja y falla dando error WordBasic n 124 (teniendo instalado
el Parche)
MAPIMessages1.MsgNoteText = "Este es el texto de la prueba....."
MAPIMessages1.RecipIndex = 0
MAPIMessages1.RecipIndex = NumDestino
MAPIMessages1.RecipType = mapToList
MAPIMessages1.RecipDisplayName = Data1.Recordset.Fields(1)
MAPIMessages1.RecipAddress = "Fax:" & Data1.Recordset.Fields(0)
MAPIMessages1.AttachmentIndex = I
MAPIMessages1.AttachmentPosition = I
MAPIMessages1.AttachmentPathName = wPath
MAPIMessages1.AttachmentName = wName
lblEstado = "Enviando mensaje..."
MAPIMessages1.Send
MAPISession1.SignOff
Encriptacion XOR
El operador lgico XOR suministra un interesante algoritmo de
encriptacin, se codifica en la primera llamada y se decodifica en la
segunda. Ejemplo:
Private Sub Form_Load()
Dim s As String
s = "Hola!"
'//Codifica
XORStringEncrypt s, "MiClave"
Show
Print "Codificado: "; s
'//Decodifica
XORStringEncrypt s, "MiClave"
Print "Decodificado: "; s
End Sub
Private Sub XORStringEncrypt(s As String, PassWord As String)
Dim n As Long
Dim i As Long
Dim Char As Long
n = Len(PassWord)
For i = 1 To Len(s)
Char = Asc(Mid$(PassWord, (i Mod n) - n * ((i Mod n) = 0), 1))
Mid$(s, i, 1) = Chr$(Asc(Mid$(s, i, 1)) Xor Char)
Next
End Sub
Leer una Cadena (string) dentro de otra...
En particular existen muchos comando tales conmo:
CommandString="Source=File.txt;Path=C:\CommonFiles;Title=;..."
Resulta que deseamos obtener lo que corresponde a Path= de la cadena
anterior. La siguiente funcin se usa de esta manera: s =
GetSubString(CommandString, "Path=", ";")
Public Function GetSubString( _
s As String, _
StartDelim As String, _
EndDelim As String _
) As String
Dim nStartDelim As Long
Dim nEndDelim As Long
nStartDelim = InStr(s, StartDelim)
If nStartDelim Then
nStartDelim = nStartDelim + Len(StartDelim)
nEndDelim = InStr(nStartDelim, s, EndDelim)
If nEndDelim Then
GetSubString = Mid$(s, nStartDelim, nEndDelim - nStartDelim)
End If
End If
End Function
En el siguiente ejemplo, obtengo el nombre de la base de datos de un
DataEnvirnment
Dim DE As New dePPDMMirror
gsDatabaseConnection = DE.cnnPPDMMirror.ConnectionString
gsDatabaseName = GetSubString(gsDatabaseConnection, "Source=", ";")
Set DE = Nothing
Fecha aleatoria
A veces es til, generalmente para pruebas, generar una fecha aleatoria
dentro de un rango, p.e deseo una fecha entre el 1/1/1960 y 1/1/2000,
llamariamos a esta funcin como MyDate=GetRandomDate("1/1/1960",
"1/1/2000")
Private Function GetRandomDate(ByVal StartDate As Date, ByVal EndDate As
Date) As Date
Static AnotherCall As Boolean
Dim nDays As Single
On Error GoTo ErrorHandler
If Not AnotherCall Then
Randomize Timer
AnotherCall = True
End If
nDays = DateValue(EndDate) - DateValue(StartDate)
GetRandomDate = CDate(DateValue(StartDate) + nDays * Rnd())
Exit Function
ErrorHandler:
GetRandomDate = Null
End Function
Trasnformar una Hora a Decimal (y viceversa...)
En algunos clculos es requerido transformar datos de hora a decimal y
viceversa (en Topografa es til). P.e. la hora 10:30 AM ser 10.5 en
decimal.
Public Function HourDec(h As Variant) As Variant
If Not IsNull(h) Then
HourDec = Hour(h) + Minute(h) / 60 + Second(h) / 3600
End If
End Function
Public Function DecHour(h As Variant) As Variant
Dim nHour As Integer
Dim nMinutes As Integer
Dim n As Integer
Dim rtn As String
n = UBound(v)
For i = 0 To n
rtn = rtn & v(i)
If i < n Then
rtn = rtn & vbCrLf
End If
Next
StrChain = rtn
End Function
P.e:
Text1 = StrChain( _
"Hola", _
"cmo", _
"estas")
O simplemente Text1 = StrChain( "Hola", "cmo", "estas"), es ms cmodo
que:
Text1 = "Hola"& vbCrLf & "cmo" & VbCrLf
& "estas"
Claro, suponiendo que las cadenas concatenadas sean extensas, como un SQL
o un comando Script.
Saber si un archivo es binario o solo texto
Algunos archivos tienen extensiones personalizadas y algunas veces
debemos evaluar si son
o no binarios antes de procesarlos.
Public Function IsBinaryFile(File As String) As Boolean
Const aLf = 10, aCR = 13, aSP = 32
Const MaxRead = 2 ^ 15 - 1
Dim ff As Integer
Dim s As Integer
Dim i As Integer
Dim n As Integer
Dim Rtn As Boolean
On Error GoTo IsBinaryFile_Err
ff = FreeFile
Open File For Binary Access Read As #ff
n = IIf(LOF(ff) > MaxRead, MaxRead - 1, LOF(ff))
Do
i = i + 1
If i >= n Then
IsBinaryFile = False
Rtn = True
Else
s = Asc(Input$(1, #ff))
If s >= aSP Then
Else
If s = aCR Or s = aLf Then
Else
IsBinaryFile = True
Rtn = True
End If
End If
End If
Loop Until Rtn
Close ff
Exit Function
IsBinaryFile_Err:
If ff Then Close ff
MsgBox "Error verifying file " & File & vbCrLf & Err.Description
End Function
var$ = Trim$(Str$(NUM#))
If InStr(var$, ".") = 0 Then
var$ = var$ + ".00"
End If
If InStr(var$, ".") = Len(var$) - 1 Then
var$ = var$ + "0"
End If
var$ = String$(15 - Len(LTrim$(var$)), "0") + LTrim$(var$)
DEC$ = Mid$(var$, 14, 2)
MILM$ = Mid$(var$, 1, 3)
MILL$ = Mid$(var$, 4, 3)
MILE$ = Mid$(var$, 7, 3)
UNID$ = Mid$(var$, 10, 3)
For I% = 1 To 11: SALI$(I%) = " ": Next I%
I% = 0
Unidades$(1) = "UNA "
Unidades$(2) = "DOS "
Unidades$(3) = "TRES "
Unidades$(4) = "CUATRO "
Unidades$(5) = "CINCO "
Unidades$(6) = "SEIS "
Unidades$(7) = "SIETE "
Unidades$(8) = "OCHO "
Unidades$(9) = "NUEVE "
Decenas$(1) = "DIEZ "
Decenas$(2) = "VEINTE "
Decenas$(3) = "TREINTA "
Decenas$(4) = "CUARENTA "
Decenas$(5) = "CINCUENTA "
Decenas$(6) = "SESENTA "
Decenas$(7) = "SETENTA "
Decenas$(8) = "OCHENTA "
Decenas$(9) = "NOVENTA "
Oncenas$(1) = "ONCE "
Oncenas$(2) = "DOCE "
Oncenas$(3) = "TRECE "
Oncenas$(4) = "CATORCE "
Oncenas$(5) = "QUINCE "
Oncenas$(6) = "DIECISEIS "
Oncenas$(7) = "DIECISIETE "
Oncenas$(8) = "DIECIOCHO "
Oncenas$(9) = "DIECINUEVE "
Veintes$(1) = "VEINTIUNA "
Veintes$(2) = "VEINTIDOS "
Veintes$(3) = "VEINTITRES "
Veintes$(4) = "VEINTICUATRO "
Veintes$(5) = "VEINTICINCO "
Veintes$(6) = "VEINTISEIS "
Veintes$(7) = "VEINTISIETE "
Veintes$(8) = "VEINTIOCHO "
Veintes$(9) = "VEINTINUEVE "
Centenas$(1) = " CIENTO "
Centenas$(2) = " DOSCIENTOS "
Centenas$(3) = " TRESCIENTOS "
Centenas$(4) = "CUATROCIENTOS "
Centenas$(5) = " QUINIENTOS "
Centenas$(6) = " SEISCIENTOS "
Centenas$(7) = " SETECIENTOS "
Centenas$(8) = " OCHOCIENTOS "
Centenas$(9) = " NOVECIENTOS "
If NUM# > 999999999999.99 Then Numlet$ = " ": Exit Function
Next a
DecimalABinario = retorno
End Function
Inhabilitar por un ratito los botones de la barra Inicio:
Los eventos Resize suelen tener ejecucin asncrona. Cuando un formulario
utiliza controles ActiveX complejos (lase acceso a datos) que toman
acciones de redimensionamiento, pueden fallar si el usuario, por ejemplo,
maximiza la ventana antes de que termine de cargarse el formulario, o
situaciones similares. La siguiente tcnica permite evitar este efecto.
'//Protect while loading
Private Declare Function SetWindowLong Lib "user32" Alias
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal
dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU = &H80000
Public Sub EnabledToolBoxMenu(frm As Form, Action As Boolean)
Static rtn, rtnI
If Action Then
If rtnI Then
rtn = SetWindowLong(frm.hwnd, GWL_STYLE, rtnI)
End If
Else
rtnI = GetWindowLong(frm.hwnd, GWL_STYLE)
rtn = rtnI And Not (WS_SYSMENU)
rtn = SetWindowLong(frm.hwnd, GWL_STYLE, rtn)
End If
End Sub
La forma correcta de usar el procedimiento es la siguiente:
Private Loading
Private Sub Form_Load()
Loading=True
'//Cdigo de carga...
Loading=False
EnabledToolBoxMenu Me, True
End Sub
Private Sub Form_Activate()
If Loading Then
EnabledToolBoxMenu Me, False
End If
End Sub
NOTA. Se pueden inhabilitar / habilitar separadamente los btones. API
suministra otras constantes similares a WS_SYSMENU. Ver documentacin de
SetWindowLong.
Ejecutar un programa DOS desde VB
Private Sub Command1_Click()
Shell "C:\WINDOWS\COMMAND\EDIT.COM", vbNormalFocus
End Sub
Ejecutar Microsoft Word desde VB
Hay que hacer automatizacin, o sea, instanciar un objeto Word
Dim oWord as new Word.ApplicationoWord.Visible = True 'Si quieres abrir
un documento en blanco o uno concreto
oWord.Documents.Add
oWord.Documents.Open "<Path\Nombre del documento>"
Bloquear el Boton Inicio, Crtl + Tab y Ctrl + Alt + Supr
Declarar en un Mdulo lo siguiente:
Public Declare Function SystemParametersInfo Lib "user32" Alias
"SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any,
ByVal fuWinIni As Long) As Long
(Ojo, toda esta declaracion debe estar en una sola linea!!)
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias
"SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
Public Sub PapeleraDeReciclaje(ByVal Fichero As String)
Dim SHFileOp As SHFILEOPSTRUCT
Dim RetVal As Long
With SHFileOp
.wFunc = FO_DELETE
.pFrom = Fichero
.fFlags = FOF_ALLOWUNDO
End With
RetVal = SHFileOperation(SHFileOp)
End Sub
Private Sub CommandButton1_Click()
PapeleraDeReciclaje "c:\a.txt"
End Sub
El programa preguntar si deseamos o no eliminar el archivo y enviarlo a
la papelera de reciclaje. El parmetro .fFlags nos permitir recuperar el
fichero de la papelera si lo deseamos. Si eliminamos esta lnea, el
fichero no podr ser recuperado.
Deshabilitar el ingreso de texto en ciertos TextBox...
Private Sub txtCampo_KeyPress(KeyAscii As Integer)
keyascii=0
End Sub
Insertar el siguiente Codigo en un Modulo:
Declare Function mciExecute Lib "winmm.dll" ( ByVal lpstrCommand As
String)
Insertar el siguiente codigo en el boton del formulario:
Private Sub Command1_Click()
iResult = mciExecute(" Play C:\WINDOWS\RINGIN.WAV")
End Sub
Escuchar un Archivo MIDI / WAV (2)
Primero tienes que insertar un MMControl en el formulario.
Luego, en propiedades lo haces invisible.
Haz doble click en el formulario y activa la opcin LOAD, que se refiere
a cuando se carga el formulario.
Finalmente escribe lo siguiente:
MMCONTROL1.FILENAME=("ruta y nombre del archivo Mid")
MMCONTROL1.COMMAND=OPEN 'para abrir el control
MMCONTROL1.COMMAND=PLAY 'para iniciar la ejecucin
MMCONTROL1.COMMAND=STOP 'para parar la ejecucin
MMCONTROL1.COMMAND=CLOSE 'para cerrar el control
Abrir / Cerrar la Unidad de CD
El procedimiento para lograr esto es el siguiente:
En la seccin Declaraciones de un Form, colocar el siguiente cdigo:
(podes sacarlo de el API Viewer /Visor de Texto API): (Todo debe ir en
una sola linea...!)
Private 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 mismo form (ej.: form1) colocar dos botones: Abrir y Cerrar.
En el codigo del boton Abrir, colocamos el siguiente codigo:
Chunk = Space$(LeftOver)
Get #FCnl, , Chunk
Put #PCnl, , Chunk
End If
EndSub:
Close #FCnl, #PCnl
Screen.MousePointer = vbDefault
Exit Sub
SubErr:
MsgBox Err.Description, vbInformation, "Impresion del archivo..."
Resume EndSub
End Sub
RECOMENDACIONES.
Es conveniente colocar un Botn para configurar la Impresora antes de
enviar el trabajo (un archivo de impresora debe ejecutarse con el mismo
controlador de la impresora que lo creo). Adicionamos un control
CommonDialog, y:
Private Sub cmdConfig_Click()
cdlPrinterSetup.Flags = cdlPDPrintSetup
cdlPrinterSetup.ShowPrinter
DoEvents
End Sub
Tambin es conveniente crear la opcin de cancelar:
Private Sub cmdCancel_Click()
CancelPrinting = True
End Sub
Impresion Directa con VB?
Private Sub Command1_Click()
Open "LPT1" For Output As #1
Print #1, Chr(27) & "W" & Chr(1); "Hola, mundo" & Chr(27) & "W" &
Chr(0) 'Imprime en ancho doble
Print #1, Chr(15) & "Nro. de boleta" & Chr(17) 'Imprime condensado
Close #1
End Sub
Imprimir un TextBox en lineas de X caracteres...
Aade un TextBox con las propiedades "Multiline=True" y
"ScrollBars=Vertical", y
un CommandButton. Haz doble click sobre l y escribe este cdigo:
Private Sub Command1_Click()
'X es 60 en este ejmplo
ImprimeLineas Text1, 60
End Sub
Public Sub ImprimeLineas(Texto As Object, Linea As Integer)
Dim Bloque As String
'Numero de caracteres = NumC
'Numero de Bloques = NumB
Dim NumC, NumB As Integer
NumC = Len(Texto.Text)
If NumC > Linea Then
NumB = NumC \ Linea
For I = 0 To NumB
Texto.SelStart = (Linea * I)
Texto.SelLength = Linea
Bloque = Texto.SelText
Printer.Print Bloque
Next I
Else
Printer.Print Texto.Text
End If
Printer.EndDoc
End Sub
Imprimir en modo apaisado/vertical:
printer.Orientation=vbPRPRPPortrait 'horizontal
printer.Orientation=bPRPLandScape 'vertical
Lanzar (o imprimir) un documento de Word cualquiera
Con este cdigo, Word no se abre, imprime el doc, se cierra y libera
memoria
Private Sub Command1_Click()
Dim AppWord As Word.Application
Dim DocWord As Word.Document
'Asignamos el documento
Set AppWord = CreateObject("word.application")
Set DocWord = AppWord.Documents.Open("C:\hola.doc")
'Colocamos el texto en el marcador
DocWord.Bookmarks("NombreCreador").Select
AppWord.Selection.TypeText Text:=Text1.Text
'Imprimimos en segundo plano
AppWord.Documents(1).PrintOut Background
'Comprobamos que Word no sigue imprimiendo
Do While AppWord.BackgroundPrintingStatus = 1
Loop
'Cerramos el documento sin guardar cambios
AppWord.Documents.Close (wdDotNotSaveChanges)
'Liberamos
Set DocWord = Nothing
'Nos cargamos el objeto creado
AppWord.Quit
Set AppWord = Nothing
End Sub
Imprimir el contenido de un RichTextBox tal como se ve:
Insertar el siguiente Codigo en el evento Click de un CommandButton
Private Sub Command1_Click()
On Error GoTo ElError
Printer.Print " "
RichTextBox1.SelPrint Printer.hDC
Printer.EndDoc
ElError:
End Sub
08/22/2006
7 MM/dd/yyyy HH:mm
08/22/2006 06:30
8 MM/dd/yyyy hh:mm tt
08/22/2006 06:30 AM
9 MM/dd/yyyy H:mm
08/22/2006 6:30
10 MM/dd/yyyy h:mm tt
08/22/2006 6:30 AM
10 MM/dd/yyyy h:mm tt
08/22/2006 6:30 AM
10 MM/dd/yyyy h:mm tt
08/22/2006 6:30 AM
11 MM/dd/yyyy HH:mm:ss
08/22/2006 06:30:07
12 MMMM dd
August 22
13 MMMM dd
August 22
14 yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
2006-08-22T06:30:07.7199222-04:00
15 yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
2006-08-22T06:30:07.7199222-04:00
16 ddd, dd MMM yyyy HH':'mm':'ss 'GMT' Tue, 22 Aug 2006 06:30:07 GMT
17 ddd, dd MMM yyyy HH':'mm':'ss 'GMT' Tue, 22 Aug 2006 06:30:07 GMT
18 yyyy'-'MM'-'dd'T'HH':'mm':'ss
2006-08-22T06:30:07
19 HH:mm
06:30
20 hh:mm tt
06:30 AM
21 H:mm
6:30
22 h:mm tt
6:30 AM
23 HH:mm:ss
06:30:07
24 yyyy'-'MM'-'dd HH':'mm':'ss'Z'
2006-08-22 06:30:07Z
26 yyyy MMMM
2006 August
27 yyyy MMMM
2006 August
2 MM/dd/yyyy H:mm
08/22/2006 6:30
0 yyyy'-'MM'-'dd'T'HH':'mm':'ss 2006-08-22T06:30:07
This C# code snippet displays the date and time in various formats.
using C = System.Console;
...
static void Main() {
DateTime dateTime = DateTime.Now;
C.WriteLine ("d = {0:d}", dateTime );
C.WriteLine ("D = {0:D}", dateTime );
C.WriteLine ("f = {0:f}", dateTime );
// mm/dd/yyyy
// month dd, yyyy
// day, month dd, yyyy hh:mm
C.WriteLine
AM/PM
C.WriteLine
C.WriteLine
C.WriteLine
C.WriteLine
C.WriteLine
(Sortable)
C.WriteLine
C.WriteLine
("g
("G
("M
("R
("s
//
//
//
//
//
=
=
=
=
=
{0:g}",
{0:G}",
{0:M}",
{0:R}",
{0:s}",
dateTime
dateTime
dateTime
dateTime
dateTime
);
);
);
);
);
mm/dd/yyyy HH:mm
mm/dd/yyyy hh:mm:ss
month dd
ddd Month yyyy hh:mm:ss GMT
yyyy-mm-dd hh:mm:ss
// hh:mm AM/PM
// hh:mm:ss AM/PM
s = 2006-03-03T16:20:26
t = 4:20 PM
T = 4:20:26 PM
u = 2006-03-03 16:20:26Z
U = Friday, March 03, 2006 10:20:26 PM
Y = March, 2006
Month = 3
Day Of Week = Friday
Time Of Day = 16:20:26.1406250
DateTime.Ticks = 632769996261406250