Visual Basic - Crear msgbox propia

Life is soft - evento anual de software empresarial
 
Vista:

Crear msgbox propia

Publicado por victor (1 intervención) el 12/03/2006 14:28:26
Buenos dias a todos. Creo que es mi primer mensaje en esta comunidad asi que queria dar primero un gran saludo a todo el foro.

Bueno a lo que vamos, queria saber o que me deis unas pequeñas pistas de como crearme un msgbox personalizado, con dos botones, una imagen y un label con el texto a poner.

Muchisimas gracias por todo de antemano. Soy nuevo en VB6 y en estos comienzos necesito ayuda para todo. Jeje.

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Crear msgbox propia

Publicado por jose carlos (340 intervenciones) el 12/03/2006 20:58:13
hazte un control OCX con lo que tú quieres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un proyecto DLL ActiveX

Publicado por Zoto (55 intervenciones) el 12/03/2006 21:26:24
Buenas Victor.

Bienvenido al foro. Ya sabes, cualquier duda o pregunta ante la cual no encuentres respuesta aparente (habiendo buscado por ti mismo antes) puedes consultarla aquí para que la gente del Foro te ayude (me incluyo).
Pues todos hemos pasado por aprendices y aun lo continuamos siendo.
Creo, personalmente, que enseñando también se aprende.

Así que voy a responder a tu primera pregunta.
Para hacer una MsgBox personalizada, como solicitas, debes iniciar un nuevo proyecto.
Pero no uno convencional (el típico EXE Estándar) sinó uno de tipo DLL ActiveX.

1-Abre el editor de Visual Basic e inicia un Nuevo Proyecto de tipo DLL ActiveX.

2-Bien, ahora que lo has abierto, aparecerá, en el explorador del Proyecto, un módulo de clase llamado "Class1".
Cámbiale el nombre a, por ejemplo, "classMyMsgBox".

3-Modifica la propiedad del módulo de clase llamada Instancing por el valor 6 - GlobalMultiUse.

4-Añade un formulario en el Proyecto (menú Proyecto - Agregar formulario) y llámalo "frmMyMsgBox".

5-Establece la propiedad BorderStyle a 1 - Fixed Single.

6-En el formulario, añade un control Label (llámalo "lblMessage"), dos CommandButtons (uno llamado "cmdOk" y el otro "cmdCancel").
Añade también, ya que así lo deseas, un control PictureBox, y llámalo pctIcon.
Coloca los controles tal y como deseas que aparezcan en tiempo de ejecución.

7-Ahora que ya has diseñado la apariencia de tu MsgBox personalizado, pasamos a escribir el código fuente.
Accede al módulo de clase classMyMsgBox.
El siguiente código, servirá para crear la función que mostrará nuestra MsgBox.
Pégalo en el módulo de clase:

'----------------------------------------------------------------------------------------------------------------
'CÓDIGO MÓDULO DE CLASE
'----------------------------------------------------------------------------------------------------------------

Public Function MyMsgBox(Msg As String, Title As String, Optional Command1 As String = "Aceptar", Optional Command2 As String = "Cancelar") As Boolean
'Esto coloca el formulario en el centro de la pantalla
frmMyMsgBox.Move Int(Screen.Width / 2) - Int(frmMyMsgBox.Width / 2), Int(Screen.Height / 2) - Int(frmMyMsgBox.Height / 2)

frmMyMsgBox.Caption = Title 'Se le asigna el título al Caption del formulario
frmMyMsgBox.lblMessage.Caption = Msg 'Se le asigna el mensaje al lblMessage del formulario
frmMyMsgBox.cmdOk.Caption = Command1 'Se le asigna el Caption del Command1 al cmdOk
frmMyMsgBox.cmdCancel.Caption = Command2 'Se le asigna el Caption del Command1 al cmdOk

frmMyMsgBox.Show vbModal 'Se muestra el formulario de formal Modal
MyMsgBox = frmMyMsgBox.Cancel 'Se asigna al valor de retorno el botón pulsado
End Function

'----------------------------------------------------------------------------------------------------------------
'CÓDIGO MÓDULO DE CLASE
'----------------------------------------------------------------------------------------------------------------

Seguidamente, pega este código en el formulario.
Su utilidad es para distinguir si el usuario ha pulsado el Botón 1 (cmdOk) o el Botón 2 (cmdCancel). La variable Cancel alberga el botón pulsado (True-> cmdCancel / False -> cmdOk).

'----------------------------------------------------------------------------------------------------------------
'CÓDIGO MÓDULO DE FORMULARIO
'----------------------------------------------------------------------------------------------------------------

Public Cancel As Boolean 'Contiene el botón pulsado:
'True -> cmdCancel (Botón 2)
'False -> cmdOk (Botón 1)

'El usuario pulsa el botón cmdOk (Botón 1)-Se establece la variable Cancel a False
Private Sub cmdOk_Click()
Cancel = False
Unload Me
End Sub

'El usuario pulsa el botón cmdCancel (Botón 2)-Se establece la variable Cancel a True
Private Sub cmdCancel_Click()
Cancel = True
Unload Me
End Sub

'----------------------------------------------------------------------------------------------------------------
'CÓDIGO MÓDULO DE FORMULARIO
'----------------------------------------------------------------------------------------------------------------

Ya has realizado tu propio MsgBox. Si lo deseas, puedes añadir una imagen en el control PictureBox llamado pctIcon del formulario cambiando su propiedad Picture.
Cuando creas que todo está en orden, compila el proyecto (Archivo-Generar proyecto). Llama a la DLL resultante con el siguiente nombre: MyMsgBox.DLL

Ahora solo falta probar tu propia MsgBox.
Abre un nuevo proyecto, esta vez Exe Estándar.
En el evento Load del formulario, pega el siguiente código, para testear tu MsgBox:

'----------------------------------------------------------------------------------------------------------------
'CÓDIGO DE EVENTO LOAD
'----------------------------------------------------------------------------------------------------------------

Dim r As Boolean 'Contiene el valor de retorno.
r = classMyMsgBox.MyMsgBox("Mensaje", "Título", "Botón1", "Botón2") 'Llamada a la función
If r Then 'Se comprueba el botón pulsado
MsgBox "El usuario ha pulsado el botón2"
Else
MsgBox "El usuario ha pulsado el botón1"
End If

'----------------------------------------------------------------------------------------------------------------
'CÓDIGO DE EVENTO LOAD
'----------------------------------------------------------------------------------------------------------------

Y, a continuación, lo más importante.
Ahora hay que referenciar la DLL a tu proyecto, es decir, incluirla a tu aplicación para que esta pueda ser llamada.
Esto es muy simple. Dirígete al menú Proyecto. Selecciona la entrada Referencias.
En la ventana que aparece, con una lista de DLL (referencias del proyecto), pulsa el botón "Examinar...". Localiza con el explorador tu DLL (MyMsgBox.DLL) y pulsa Abrir.
Ya tienes tu DLL referenciada. En la lista la podrás localizar ya seleccionada.
Pulsa Aceptar.
Ahora ya puedes ejecutar el proyecto.

En definitiva, para crear una MsgBox propia, debes iniciar un proyecto de tipo DLL ActiveX y añadir el código correspondiente en el módulo de clase y el formulario.
En nuestro caso, esta MsgBox toma un Mensaje y un Título necesarios, además de un texto Command1 y otro Command2 opcionales (String) que albergarán el Caption de cada uno de los 2 botones.
Si no se especifican estos 2 últimos, por defecto son Command1="Aceptar" y Command2="Cancelar".

Quizá, como principiante, veas que esto resulta un poco difícil.
Así que si tienes alguna duda o no has entendido alguno de los pasos que he marcado, me lo comentas e intentaré ayudarte.
He creído conveniente enviarte todo el código correspondiente a este "tutorial" por e-mail, así que te está esperando en tu bandeja de correo.

Espero que todo esto te haya ayudado. Si tienes dudas, coméntalas aquí.

Hasta la próxima.

Zoto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Una aclaración

Publicado por Esteban (1144 intervenciones) el 13/03/2006 18:44:23
Compañero, creo que cada uno hemos aprendido en forma muy diferente las cosas, en lo personal, creo que es mejor seguir un esquema tal como por ejemplo las DLL's son para proceso, funciones, procedimientos que no despliegen ventanas, sino que solo procesen información y los componentes OCX sean los que muestren ventanas y demás, no es una regla inquebrantable, cada uno tiene la potestad de hacer lo que quieran hacer, pero cuando me hicieron la recomendación que doy, me pareció más profesional, bueno, no sé si a ustedes les parezca, ya que en mi caso he trabajado con DLL's para realizar diversas funcionalidades sin interfaz de usuario, tal como desarrollo N-Capas en las capas de negocios y datos, o bien, procesos de encripción o cálculos, entre otras cosas, y los OCX a pesar que los uso también para cálculos, son las interfaces de usuario que a su vez utilizan esas DLL's, y si uno observa un poco muchos de los componentes de Windows, hacen eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un proyecto DLL ActiveX

Publicado por Mario Navarrete (1 intervención) el 14/02/2013 03:02:50
Muy bueno creeme que no tenía idea de como hacerlo y lo necesitaba de urgencia y como tu dices todos somos aprendices muy buen aporte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un proyecto DLL ActiveX

Publicado por Andres (1 intervención) el 07/11/2013 04:23:04
perfecto me quedo el proyecto , pero tengo una duda, como inserto lo que me mostraba el msgbox en este nuevo formato , es decir mi msgbox me mostraba un tikect de venta ...


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
first1 = vbCrLf & "                         Los Guajiros         " & vbCrLf
first2 = "              RUC No.:  H0000000089123" & vbCrLf
first3 = "             Km18  1/2 Carretera Masaya" & vbCrLf
first4 = "                  Telefono   8294-9061" & vbCrLf
first5 = "            Email:cafehabana@hotmail.es" & vbCrLf & vbCrLf
first6 = vbCrLf & "                " & Date & "    " & Time & vbCrLf
first7 = vbCrLf
first8 = vbclrf & "  Cliente :    " & cadena & cadena1
first9 = vbCrLf & "  Mesero :     " & cadena2
first10 = vbCrLf & "  No Tikect :  " & g
first11 = vbclrf
first12 = vbCrLf
first13 = vbCrLf
 
 
 
 
 
For counter1 = 0 To 7
    newValue = CStr(lblAmount(counter1).Caption)
    If newValue > 0 Then
     Dim tempstring As String
    OutputMessage = OutputMessage & newValue & "    " & lblentraditasType(counter1).Caption & vbCrLf
    End If
 
Next counter1
 
For counter1 = 0 To 11
    SidesTotal = CStr(lblPlatosAmount(counter1).Caption)
    If SidesTotal > 0 Then
    OutputMessage = OutputMessage & SidesTotal & "    " & lblPlatosItem(counter1).Caption & vbCrLf
    End If
Next counter1
 
For counter1 = 0 To 9
    bevstotal = CStr(lblBevSums(counter1).Caption)
    If bevstotal > 0 Then
    OutputMessage = OutputMessage & bevstotal & "    " & lblBevitem(counter1).Caption & vbCrLf
    End If
Next counter1
    OutputMessage = OutputMessage & vbCrLf
 
For counter1 = 0 To 3
    SidesTotal = CStr(lblPostresAmount(counter1).Caption)
    If SidesTotal > 0 Then
    OutputMessage = OutputMessage & SidesTotal & "    " & LblpostresItem(counter1).Caption & vbCrLf
    End If
Next counter1
 
   OutputMessage = OutputMessage + vbCrLf
    last = "=========================" & vbCrLf & "      Subtotal                            c$  " & TotalCost & vbCrLf & "      " & "          IVA" & "                           c$   " & CStr(lblOutput.Caption) * iva & vbCrLf & "     " & vbCrLf & "=========================" & vbCrLf & vbCrLf & "  "
 
 
 
Dim moneydue As Currency
 
 
moneydue = TotalCost * 0.15
moneydue = Int(moneydue * 100) / 100
moneydue = CStr(lblOutput.Caption) + moneydue
 
 
 
part1 = "      Total                                c$   " & moneydue
 
 
first14 = vbCrLf & vbCrLf & "           GRACIAS POR SU VISITA" & vbCrLf & vbCrLf
finalmessage = first1 & first2 & first3 & first4 & first5 & first6 & first7 & first8 & first9 & first10 & first11 & first12 & first13 & OutputMessage & last & vbCrLf & part1 & first14
 
 
MsgBox finalmessage
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar