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 <[email protected]>
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
[email protected]

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 <[email protected]>
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. <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
To: Guillermo VB <[email protected]>
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