poblemas con VB?

Preguntas y Respuestas
sobre Visual Basic

Iniciado el: 06/Nov/98
Actualizado el: 12/Mar/99 (09/Feb/2007)

Sobre esta página de Preguntas y Respuestas


Contenido:

  1. Cómo evitar los caracteres "raros" al añadir un cambio de línea en un TextBox Multiline (06/Nov)
  2. Activar formulario en MDI (06/Nov)
  3. ¿Que tipo de control? (06/Nov)
  4. ¿Cómo crear controles en tiempo de ejecución? (07/Dic)
  5. ¿Cómo asignar una imagen a un campo de una base de datos? (usando el DataControl) (07/Dic)
  6. ¿Cómo llamar al "buscador" del Explorer? (Buscar Ficheros o Directorios) (11/Mar)
  7. ¿Cómo cambiar la orientación de una página e imprimir en cualquier posición? (12/Mar)
  8. ¿Cómo redondear los números? (12/Mar)

8- ¿Cómo redondear los números? (12/Mar/99, 09/Feb/07)

Pregunta:


From: Daniel R. de Avila Cunha <tarraubella@som.com.ar>
Date: viernes, 12 de marzo de 1999 19:49
Subject: redondeo con visual Basic


Querido Guille :
... es acerca de como redondear en Visual Basic,
yo vengo del Clipper y alli existia una funcion llamada round() ,
existe en visual algo asi, o por lo menos para poder enmascar la variable ?

Desde ya muchas gracias
Daniel de Avila Cunha
Buenos Aires - Argentina
dany3_98@yahoo.com

Respuesta:

En la versión 6 si que viene una función para "redondear", pero hasta ahora lo hemos hecho de esta forma:

x = Int(Num + 0.5)

Si lo que pretendes es simplemente "obviar" los decimales:

x = Fix(Num)

Cuidado con las comas y puntos en los decimales... algunas funciones no se comportan como esperamos.

Nota del 09/Feb/2007:
Aquí te pongo una función de redondeo enviada por Richard Alain

Private Function Round(cantidad As Double, numeroDecimales As Integer) As String
    Dim str As String, i As Integer
    str = "#0"
    If numeroDecimales > 0 Then
        str = str & "."
        For i = 1 To numeroDecimales
            str = str & "0"
        Next i
    End If
    Round = Format(cantidad, str)
End Function

 


7- ¿Cómo cambiar la orientación de una página e imprimir en cualquier posición? (12/Mar)

Pregunta:

From: Rafael Sánchez Ruiz <datasoft@ns.intertux.com.mx>
Date: martes, 22 de diciembre de 1998 17:55


Disculpa la molestia como puedo decir a Visual basic 5.0 como imprimir en
forma apaisada(Horizontal), ademas no se como posecionarme de la hoja de
impresion es decir un ejemplo en Clipper para imprimir en una hoja
posecionandome de ella es asi :

SET PRINTER ON
@ 2, 1 Say "hola" */ esto saldra en la hoja y en la posicion 2,1
@ 12, 1 Say "hola" */ esto impriendo en la posicion de la hoja 12,1

no se si me explico gracias.

Respuesta:

Para seleccionar la posición del papel, usa la propiedad Orientation del objeto Printer, a la que puedes asignarle cualquiera de estos dos valores:

vbPRORPortrait  '=1 Vertical
vbPRORLandscape '=2 Horizontal

Para posicionarte en cualquier "punto" del papel, debes hacerlo con SetCurrentX, SetCurrentY; también puedes usar estas propiedades para saber la posición actual.

Además con cualquiera de estos métodos también se cambia la posición actual en la que se imprimirá en la impresora.
(Esto está sacado de la ayuda del VB)

Método Asigna la posición de CurrentX, CurrentY a:
Circle El centro del objeto
Cls 0, 0
EndDoc 0, 0
Line En la posición final de lo dibujado.
NewPage 0, 0
Print La siguiente posición.
PSet El punto recién dibujado.

No me cansaré de repetirlo: Acostumbraros a mirar la ayuda del VB...


6- ¿Cómo llamar al "buscador" del Explorer? (buscar ficheros o directorios) (11/Mar)

Pregunta:

From: David G. <david@rscfm.com>
Date: miércoles, 10 de marzo de 1999 22:56


Hola guille .

...te agradeceria que me explicases como puedo abrir el buscador " el buscador de el explorer " de windows desde una aplicacion de vb6.0.

muchas gracias.
david CB.

Nota para david CB: La cuenta de tu correo no es correcta... ¿cierto?

Respuesta:

Inserta el siguiente código en la parte de las declaraciones de un Form:


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hWnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Const SW_SHOWNORMAL = 1

En el sitio desde el que quieras "lanzar" el cuadro de diálogo de buscar, escribe esto otro:
(sPath será el directorio por el que quieres empezar a buscar)


Call ShellExecute(hWnd, "Find", _
    sPath, _
    vbNullString, vbNullString, _
    SW_SHOWNORMAL)

Sobre esto del ShellExecute hay más ejemplos en la sección API.


5.- ¿Cómo asignar una imagen a un campo de una base de datos? (usando el DataControl) (07/Dic)

Pregunta:

From: Lic. Alex Salinas <asalinas@montebello.unach.mx>
Date: miércoles, 02 de diciembre de 1998 02:36


tengo una duda sobre como salvar una Imagen .bmp desde codigo en VB 5 Empresarial.... estoy utilizando un DataControl y un Image Control... intente poner :
data1.recordset("Foto") = image1.picture
y no me funciono.. (tipos no coinciden me marca el error)
tambien:
data1.recordset("Foto") = Loadpicture("c:\fotos\foto1.bmp") y nada...

nunca habia tenido necesidad de grabar una imagen en la base de datos..
por eso ahora que quiero hacerlo .. se me dificulta.. que me recomiendas??

Respuesta:

Si estás usando un DataControl, lo tienes bastante fácil.
Lo primero que tendrás que hacer es insertar un control Picture o un Image y ligar este control con el campo de la base de datos que contiene o contendrá la imagen, en tu caso será el campo "Foto".
Al estar "ligado" al campo correspondiente, cada vez que te muevas a otro registro, se actualizará automáticamente la imagen, lo mismo ocurrirá si asignas una nueva imagen al Picture.
Para asignar una nueva imagen, siguiendo tu ejemplo sería:
Image1.Picture = LoadPicture("c:\fotos\foto1.bmp")

Si quieres ver un ejemplo "operativo" de esto, además de cómo hacerlo sin usar el dataControl, pásate por esta página:
Sección Bases, punto 19: Cargar Imagenes de una base de datos sin usar el DataControl

 


4.- ¿Cómo crear controles en tiempo de ejecución? (07/Dic)

Pregunta:

From: Ana Belen Parrilla González <abelen@selene.uc3m.es>
Date: jueves, 26 de noviembre de 1998 11:55


La pregunta es la siguiente: No sabemos como crear textbox y
listbox (o algo semejante para almacenar texto) en tiempo de ejecución (objeto)
sin que tenga límite en cuanto al número de objetos, es decir, en
este caso de textbox y listbox que se puedan crear.

Respuesta:

Para crear controles en tiempo de ejecución, con el VB6 hay otras posibilidades, debes tener esos controles en un array, como mínimo deberás tener uno, a partir de ahí, simplemente usando LOAD nombreControl(numeroDeElemento), tendrás nuevos controles.

Un ejemplo:
Crea un nuevo proyecto, añade un label y un textbox.
Selecciona el label, en la propiedad Index, escribe CERO, de esta forma tendrás un array creado.
Haz lo mismo con el TextBox.

Ahora escribe esto en el evento Load de formulario, se crearán nuevos controles.
Es importante notar que los nuevos controles creados tienen la propiedad Visible a FALSE, por tanto no serán visibles salvo que se cambie el estado a TRUE.

Veamos el código de ejemplo que permitirá crear controles, posicionarlos debajo de los anteriores y si se pulsa en el botón cmdElimir, eliminará el último que se haya creado...

'
'Ejemplo de creación de controles en tiempo de ejecución
Option Explicit

'Llevará la cuenta de los controles creados
Private numControles As Long


Private Sub cmdCrear_Click()
    'Crear un nuevo control de cada tipo

    'numControles está declarada a nivel de módulo
    numControles = numControles + 1
    'Crear los controles
    Load Label1(numControles)
    Load Text1(numControles)

    'Posicionarlos y hacerlos visibles
    With Label1(numControles)
        .Visible = True
        .Top = Label1(numControles - 1).Top + .Height + 120
        .Caption = "Label1(" & numControles & ")"
    End With
    With Text1(numControles)
        .Visible = True
        .Top = Text1(numControles - 1).Top + .Height + 60
        .Text = "Text1(" & numControles & ")"
    End With
End Sub


Private Sub cmdEliminar_Click()
    'Eliminar un elemento de cada control anteriormente creado

    'El control CERO no se puede eliminar
    If numControles > 0 Then
        'Descargarlos de la memoria
        Unload Label1(numControles)
        Unload Text1(numControles)
        numControles = numControles - 1
    End If
End Sub


Private Sub Form_Load()
    'Por defecto creamos un control de cada array:
    'un Label y un Textbox

    cmdCrear_Click
End Sub

  3.- ¿Qué tipo de control? (06/Nov)

Pregunta:

From: Roberto West <rwest@infovia.com.ar>
Newsgroups: microsoft.public.es.vb
Date: miércoles, 04 de noviembre de 1998 00:43
Subject: tipo de control


existe la forma de saber que tipo de control tiene cada control.

supongamos que tengo las siguientes lineas de codigo

Dim MiObject As Object
Set MiObject = Text1
Debug.Print MiObject.Name ==> Text1

Yo lo que necesito es un propiedad que me diga que MiObject es un TextBox

Existe ?

Respuesta:

Para saber el tipo de objeto, usa TypeName, (es lo que recomienda Microsoft).

MsgBox "El TypeName de MiObject es: " & TypeName(MiObject)

Aunque también puedes hacerlo mediante una serie de comparaciones TypeOf:

If TypeOf MiObject Is TextBox Then
    MsgBox MiObject.Name & " es del tipo TextBox"
End If

  2.- Activar formulario en MDI (06/Nov)

Pregunta:

From: Eldanás <eldanas@geocities.com>
Newsgroups: es.comp.lenguajes.visual-basic
Date: miércoles, 04 de noviembre de 1998 16:57
Subject: Activar formulario en MDI


¿ Como puedo activar un formulario hijo de varios en un entorno MDI ?

Es decir, tengo un MDI con 3 formularios hijos cargados y desde un Toolbar
en el MDI llamo a otro que está ya cargado, ¿ Como le Activo ?

R1:
>No lo he comprobado, pero ¿no se activa (se muestra al menos) con
>formularioHijo.SHOW?

P2:
Se Activa, pero no coge el foco, es decir si ha más de un formulario cargado
a usar show el formulario no se activa y se muestra delante de los demás.

Respuesta:

Entonces hazle un ZOrder para que se ponga al frente del resto de los
formularios.
Pero también deberás hacer el Show:

Form1.ZOrder
Form1.Show


  1.- Cómo evitar los caracteres "raros" al añadir un cambio de línea en un TextBox Multiline (06/Nov)

Pregunta:

From: Roko <koch@skema.com.ve>
To: Guillermo VB <mensaje@elguille.info>
Date: viernes, 06 de noviembre de 1998 07:26
Subject: Una preguntica


[...]
Después de llenar las casillas con los datos (Autor, copyright, descripción,
etc) las quiero mostrar utilizando un TextBox con la opción de Multiline y
un Scroll Bar (por si acaso).

Para hacer esto, voy acumulando en una variable (MetaTag) los resultados, y
para colocar cada meta tag en líneas separadas se me había ocurrido utilizar
chr$(13) al final de cada línea (sumandolo a la variable MetaTag) pero al
mostrar el resultado aparecen unos caracteres (como unos cuadritos) en vez
del "break".
[...]

Respuesta:

Es que no sólo debes añadirle al final el CHR$(13), sino el Chr$(10) también.
Usa la constante vbCrLf que es la suma de un Chr$(13) & Chr$(10)
Y así se cambiará a la siguiente línea.

'
sTmp = sTmp & "texto a añadir" & vbCrLf

Enviame un comentario sobre la nueva sección, Gracias Sobre esta página de Preguntas y Respuestas (06/Nov)

Esto es algo que llevo tiempo deseando hacer, pero son de esas cosillas que, como muchas otras, se van dejando...

Además, a pesar de pedir en reiteradas ocasiones que no me hagáis consultas, vosotros erre que erre... así que voy a ver si aprovecho las consultas que hacéis y las respuestas que os doy, tanto de forma directa, (cosa que pido por adelantado que no hagáis), como por medio de los grupos de noticias...

No se si seré capaz de seguir haciéndolo, pero hoy me ha dado por ahí y me pongo en la tarea... lo mismo que quiero crear otra página de Preguntas sin Respuestas, es decir las consultas que recibo y que no contesto, por falta de tiempo o por falta de "conocimiento", que no creas que me se todas las respuestas... pero no se cuando la pondré en línea...

Así que espero que os parezca buena idea y por supuesto se admiten críticas, siempre que sean constructivas, porque una crítica destructiva no sirve para nada, salvo para que te pongas de mala leche... je, je.

Y también se admiten más opiniones, es decir que si la respuesta dada puede ser mejorable o hacerla de otra forma, se aceptan las "contra-respuestas", pero para facilitarme la tarea, os pido que uséis el link que habrá para enviar otras "respuestas".
Si no hay un link, porque realmente no sea necesario esa otra forma de hacerlo, y quieres añadir algo, usa el título del link para usarlo como Asunto del mensaje.

Desde ya, te lo agradezco.

Nos vemos.
Guillermo


ir al índice