PC World le ofrece su laboratorio técnico para ayudarle a resolver sus problemas. Cada mes se publicará una selección de las consultas más representativas o interesantes. Para enviar sus consultas puede conectarse a nuestra página web y escribirlas directamente. Cuando nuestros técnicos las contesten aparecerán en dicha página y podrán ser publicadas en la revista. www.idg.es/pcworld/soluciones.asp

• Sólo se atenderán las consultas recibidas a través de nuestra página Web. • Las consultas deberán ir firmadas con el nombre y apellido del lector. • Para poder resolver su problema con facilidad se ruega que especifique con el mayor detalle posible su configuración de hardware y software. • El tamaño máximo de una consulta será de alrededor de 2.500 caracteres. • No se agruparán en un solo mensaje varias consultas que no estén relacionadas. • Sólo se responderá desde estas páginas. Debido a la gran cantidad de consultas que llegan al laboratorio no es posible responder al 100% de ellas, aunque se clasificarán las más representativas para su publicación en la revista. • La redacción se reserva el derecho a extractar, resumir o agrupar las consultas de cara a dotarlas de la máxima utilidad para un mayor número de lectores.

PROGRAMACION

Establecer el tamaño de una hoja al imprimir

Estoy realizando un programa de Visual Basic y necesito controlar de una manera fiable el tamaño del papel a la hora de imprimir. He probado con el objeto Printer y no me funciona correctamente. El tamaño que reconoce es A4 y las etiquetas que yo utilizo son más pequeñas. Me gustaría que me orientasen sobre el tema.

Carlos David Gutiérrez [email protected]

En principio para realizar esta tarea tienes que definir exactamente el tamaño de las etiquetas que vas a utilizar, una vez que tengas esto claro hay que intentar plasmar esas medidas en el código de programación en cuestión.

Para definir el tamaño del papel utilizaremos el objeto Printer, este objeto dispone de dos propiedades Height y Whidth para definir respectivamente el alto y el ancho del papel. Hay que tener en cuenta que estas dos propiedades únicamente están disponibles en tiempo de ejecución para el objeto Printer con lo que nos será imposible definirlas en tiempo de diseño.

En el ejemplo que hemos preparado, en un primer momento elegimos la impresora del sistema y después cambiamos el tamaño del papel. Al definir el alto (Height) y el ancho (Whidth) queda automáticamente definida la propiedad PaperSize cómo vbPRPSUser, que es el valor que tiene cuando las dimensiones están definidas por el usuario.

En cualquier caso tendrás que tener en cuenta que el efecto de las propiedades del objeto Printer depende del controlador suministrado por el fabricante de la impresora. Algunos valores de las propiedades pueden no tener ningún efecto o puede que valores distintos den el mimo resultado.

Private Sub Form_Load()

‘Recorrer todaslas Impresoras.

For intIndiceImpresora = 0 To Printers.Count - 1

Dim numero As Variant

Set Printer = Printers(intIndiceImpresora)

‘Nombre del dispositivo.

texto = Printer.DeviceName

If texto = “Fujitsu DL 900” Then

‘Orden de imprimir dentro del if.

‘Definimos las medidas en milimetros

Printer.ScaleMode = vbMillimeters

Printer.Height = 148 ‘ valor en milímetros

Printer.Width = 210 ‘ valor en milímetros

Printer.Print “Líneas a Imprimir en la primera mitad”

‘Nueva página (1/2 hoja)

Printer.NewPage

Printer.Print “Líneas a Imprimir en la seguda mitad”

Printer.EndDoc

End If

Next

End Sub

Ignacio Céspedes Orduña

Dificultades al cargar informe de Crystal Reports

Tengo una aplicación en Visual Basic .NET en la que lanzo varios informes realizados con el Crystal Reports que viene por defecto. El problema radica en que cuando intento cargar el informe en una máquina con Windows 98 me aparece una ventana de error indicando que no puede cargar dicho informe. He registrado el producto y e agregué los módulos correspondientes, sin éxito. ¿Me podéis echar una mano?

Pablo Saya Báez [email protected]

Para solucionar este problema únicamente hay que copiar el archivo dbghelp.dll en la carpeta system de Windows 98, de esta forma se cargarán aquellos informes que hasta ahora no habías podido cargar.

Si esto no funciona, puedes crear un instalador desde Visual Basic 6.0 que contenga los OCX de Crystal Reports, para esto tendrás que crear un formulario que contenga el control Crystal Reports y generar un archivo exe para crear las instalaciones. Ignacio Céspedes Orduña

Acceder desde Visual Basic 6.0 a las carpetas del Outlook.

Necesito acceder a la carpeta de elementos enviados del Outlook ya que realicé un programa que envía una serie de correos electrónicos y necesito controlar el día y la hora que se envían y el mismo dato para cuando se reciben.

Pipo López. [email protected]

Bien a continuación te presentamos un código de ejemplo que te va a permitir acceder como nos dices a tu bandeja de elementos enviados, naturalmente luego dependerá de tu habilidad cómo programador el ajustar el código al fin que andas buscando.

No obstante puede también echar una ojeada al MSDN en español y ver las tareas básicas de Outlook que se encuentran en la página http://msdn2.microsoft.com/es-es/library/ms268731(VS.80).aspx y aprender más sobre el tema en cuestión.

El código nos facilita los mensajes que tenemos sin leer en la bandeja de entrada indicándonos la fecha y la hora. Más o menos sería así:

Private Sub Form_Load()

Dim oApp As Outlook.Application

Dim oNameSpace As NameSpace

Dim oFolder As MAPIFolder ‘Representa una carpeta que contiene mensajes de correo electrónico.

Dim oMailItem As Object ‘ Representa un mensaje de correo electrónico.

Dim cFolder As MAPIFolder

Dim myItems As Items

Dim MailCounter As Integer, FolderCount As Integer

MailCounter = 0

Dim sMessage As String

‘ Se ejecuta automáticamente al arrancar Outlook.

Set oApp = New Outlook.Application

Set oNameSpace = oApp.GetNamespace(“MAPI”)

‘ Carpeta de entrada.

Set oFolder = oNameSpace.GetDefaultFolder(olFolderInbox) ‘ Representa la carpeta de entrada.

MailCounter = oFolder.UnReadItemCount

For FolderCount = 1 To oFolder.Folders.Count

Set cFolder = oFolder.Folders(FolderCount)

For Each oMailItem In cFolder.Items

If oMailItem.UnRead = True Then

List1.AddItem oMailItem.ReceivedTime ‘ para saber la fecha y la hora.

End If

Next oMailItem

MailCounter = mailcount + cFolder.UnReadItemCount

Next

Set oMailItem = Nothing

Set oFolder = Nothing

Set mFolder = Nothing

Set oNameSpace = Nothing

Set oApp = Nothing

msg:

If MailCounter = 1 Then

MsgBox “Tenemos un mensaje nuevo”

Else

MsgBox