Programación General > Visual Basic 6.0 e inferiores

 Boton Dibujado en un picture. Necesito una Sugerencia

(1/3) > >>

Jimbenit:
Hola amigos de solocodigo.

En esta ocasion estoy creando un "boton de comando" pero que se dibuje en un picture.

Los codigos son los siguientes:
Modulo

--- Código: Visual Basic ---Option Explicit Public Sub Boton(PictureKE As PictureBox, Formulario As Form, Ancho As Single, Alto As Single, _PosX As Single, PosY As Single, Color_Borde As Long, Optional Color_Fondo_PictureKE As Long = vbBlack, _Optional Texto As String = "", Optional Tamaño_Letra As Integer = 9, Optional Color_Texto As Long = vbWhite, _Optional X_MOV As Single = 0, Optional Y_MOV As Single = 0, Optional Color_Fondo_Boton As Long = vbBlack, _Optional Color_Fondo_Boton2 As Long = vbYellow, _Optional Color_Texto2 As Long = vbRed, Optional Color_Fondo_Boton3 As Long = vbYellow, _Optional Color_Texto3 As Long = vbMagenta, Optional Click_Down As Boolean = False) 'X_MOV y Y_MOV son las coordenadas del mouse, estas variables se activaran en el evento mouse move del picture, mientras'estaran con valor = 0'Color_Fondo_Boton2 es el color que toma el fondo del boton cuando el mouese esta sobre él'Color_Texto2 es el color que toma el texto cuando el mouese esta sobre el boton 'Color_Fondo_Boton3 es el color que toma el fondo del boton cuando se ejecuta Mouse Down'Color_Texto3 es el color que toma el texto cuando se ejecuta Mouse down  'Click_Down es True en el momento que se ejecute el evento Mouse_Down del picture'Click_Up es True en el momento que se ejecute el evento Mouse_Up del picture 'acomodando el pcicture'Call Acomodando_Picture(PictureKE, Formulario) Dim Long_Texto As Single 'Longitud del textoDim Alt_Texto As Single 'Altura del textoLong_Texto = PictureKE.TextWidth(Texto)Alt_Texto = PictureKE.TextHeight(Texto)     'Cambiando el color de fondo del boton, si el mouese esta sobre el boton    If X_MOV >= PosX And X_MOV <= (PosX + Ancho) And Y_MOV >= PosY And Y_MOV <= (PosY + Alto) Then        PictureKE.Line (PosX, PosY)-(PosX + Ancho, PosY + Alto), Color_Fondo_Boton2, BF        'escribimos el texto siempre y cuando quepa dentro del boton        If Long_Texto < Ancho And Alt_Texto < Alto Then            Call Escribir_Texto_V2(PictureKE, Color_Fondo_PictureKE, Tamaño_Letra, PosX + Ancho / 2 - Long_Texto / 2, PosY + Alto / 2 - Alt_Texto / 2, Color_Texto2, Texto)        End If        'Cambiando el color del boton si hay click    If Click_Down = True Then        PictureKE.Line (PosX, PosY)-(PosX + Ancho, PosY + Alto), Color_Fondo_Boton3, BF        'escribimos el texto siempre y cuando quepa dentro del boton        If Long_Texto < Ancho And Alt_Texto < Alto Then            Call Escribir_Texto_V2(PictureKE, Color_Fondo_PictureKE, Tamaño_Letra, PosX + Ancho / 2 - Long_Texto / 2, PosY + Alto / 2 - Alt_Texto / 2, Color_Texto3, Texto)        End If    End If        Else        'restableciendo el fondo del boton        PictureKE.Line (PosX, PosY)-(PosX + Ancho, PosY + Alto), Color_Fondo_Boton, BF        'escribimos el texto siempre y cuando quepa dentro del boton (Boton normal)        If Long_Texto < Ancho And Alt_Texto < Alto Then            Call Escribir_Texto_V2(PictureKE, Color_Fondo_PictureKE, Tamaño_Letra, PosX + Ancho / 2 - Long_Texto / 2, PosY + Alto / 2 - Alt_Texto / 2, Color_Texto, Texto)        End If    End If        'dibujando el borde exteriorPictureKE.Line (PosX, PosY)-(PosX + Ancho, PosY + Alto), Color_Borde, B  End Sub Sub Escribir_Texto_V2(PictureKE As PictureBox, Color_PictureKE As Long, TamañoLetra As Integer, _PosX As Single, PosY As Single, Color_Texto As Long, Texto As String, Optional ByRef Delta_X As Single)    Dim Delta_X_OLD As Single    Delta_X_OLD = Delta_X    'Delta_X es la coordenada X donde se termina de escribir la palabra    'Texto es la palabra escrita        PictureKE.PSet (PosX, PosY), Color_PictureKE                PictureKE.ForeColor = Color_Texto    PictureKE.FontSize = TamañoLetra    PictureKE.Print Texto;    Delta_X = PictureKE.CurrentX        If Delta_X < Delta_X_OLD Then        Delta_X = Delta_X_OLD    End If        End Sub Public Sub Acomodando_Picture(PictureKE As PictureBox, Formulario As Form)'Acomoda el picture en el formWith PictureKE    .Top = 0    .Left = 0    .Width = Formulario.ScaleWidth    .Height = Formulario.ScaleHeight    .BackColor = vbBlack    .AutoRedraw = TrueEnd WithEnd Sub  
Y para dibujar 3 botones en el formulario, hago lo siguiente en el procedimiento Load de dicho formulario:

--- Código: Visual Basic ---Public Click_Down As Boolean Public Ancho1 As Single, Alto1 As Single, X1 As Single, Y1 As SinglePublic Ancho2 As Single, Alto2 As Single, X2 As Single, Y2 As SinglePublic Ancho3 As Single, Alto3 As Single, X3 As Single, Y3 As Single  Private Sub Form_Resize()    Call Acomodando_Picture(Picture1, Me)     'Variables de tamaños de botnes    Ancho1 = Me.ScaleWidth * 0.1: Alto1 = Me.ScaleHeight * 0.05    X1 = Me.ScaleWidth * 0.1: Y1 = Me.ScaleHeight * 0.1        Ancho2 = Me.ScaleWidth * 0.1: Alto2 = Alto1    X2 = X1 + Ancho1 * 1.5: Y2 = Y1        Ancho3 = Me.ScaleWidth * 0.1: Alto3 = Alto1    X3 = X2 + Ancho2 * 1.5: Y3 = Y2        Call Boton1    Call Boton2    Call Boton3End Sub Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)    Click_Down = True    Call Boton1(X, Y)    Call Boton2(X, Y)    Call Boton3(X, Y)        Call Click(X, Y)End Sub Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)    Call Boton1(X, Y)    Call Boton2(X, Y)    Call Boton3(X, Y)End Sub Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)    Click_Down = False    Call Boton1(X, Y)    Call Boton2(X, Y)    Call Boton3(X, Y)End Sub  Private Sub Boton1(Optional ByRef X As Single, Optional ByRef Y As Single)    Call Boton(Picture1, Me, Ancho1, Alto1, X1, Y1, vbGreen, , "Text1", , , X, Y, , vbGreen, vbBlue, , , Click_Down)End Sub Private Sub Boton2(Optional ByRef X As Single, Optional ByRef Y As Single)    Call Boton(Picture1, Me, Ancho2, Alto2, X2, Y2, vbGreen, , "Text2", , , X, Y, , vbGreen, vbBlue, , , Click_Down)End Sub Private Sub Boton3(Optional ByRef X As Single, Optional ByRef Y As Single)    Call Boton(Picture1, Me, Ancho3, Alto3, X3, Y3, vbGreen, , "Text3", , , X, Y, , vbGreen, vbBlue, , , Click_Down)End Sub Private Sub Click(X As Single, Y As Single)    If X >= X1 And X <= (X1 + Ancho1) And Y >= Y1 And Y <= (Y1 + Alto1) Then        'Click del primer boton        MsgBox ("Boton1")    ElseIf X >= X2 And X <= (X2 + Ancho2) And Y >= Y2 And Y <= (Y2 + Alto2) Then        'Click del segundo boton        MsgBox ("Boton2")    ElseIf X >= X3 And X <= (X3 + Ancho3) And Y >= Y2 And Y <= (Y3 + Alto3) Then        'Click del tercer boton        MsgBox ("Boton3")    End If    End Sub   
Como resultado se visualiza los "botones" dibujados en el picture, asi:

En el codigo pueden ver que cuando el mouse pasa por encima del boton, este cambia de color, lo mismo cuando se ejecuta el evento Mouse_Down del picture.

Mi pregunta es la siguiente:
Hay alguna manera de hacer esto sin que se coloque tanto codigo en el Form_Load ?
Necesito sugerencias.


Un saludo y de verdad, muchas gracias.

Nebire:
Creando un control OCX.
Ahora estoy de vacaciones así que sólo me pao de tanto en tanto por el foro ni puedo dedicarle tiempo.
Para finales de agosto regreso, si no tienes mucha prisa para entonces te pongo un ejemplo...

Jimbenit:

--- Cita de: "Nebire" ---Creando un control OCX.
Ahora estoy de vacaciones así que sólo me pao de tanto en tanto por el foro ni puedo dedicarle tiempo.
Para finales de agosto regreso, si no tienes mucha prisa para entonces te pongo un ejemplo...
--- Fin de la cita ---
Perfecto... disfruta de las vacaciones amigo...  ^_^   :good:

Nebire:
Bueno una vez acabadas las vacaciones, como te señale, vamos a construir un control de usuario.

Como es largo (de explicar) lo haré en partes.
En esta primera parte vamos a describir todo lo necesario para poder desarollar los proyectos y crear los archivos necesarios para crear el control y probarlo. ncluyendo la primera prueba del control, sin código alguno, listo para la siguiente parte en que iré exponiendo código y las razones de qué, cómo, cuándo y porqué de cada cosa.

______________________________
Para empezar es conveniente saber que un control deusaurio se crea cuando necesitamos exponer una interfaz de usuario, es decir algo gráfico. Desde este punto de vista estos controles deberían mejor llamarse 'control gráfico de usuario' frente a las clases que podrían llamarse 'control no gráfico de usuario', como el orden de suceso de las cosas fueron de una manera cada cosa se llamó como en su momento se consideró oportuno. También es importante señalar que quien ya ha trabajado con clases encontrará bastante asequible trabajar con controles de usuario.

Ahora crearemos todos los archivos y proyectos que necesitamos para empezar, se creará un proyecto para elcontrol y un proyecto para probarlo y ambos proyectos serán controlados por lo que en el entorno VB se llama 'grupo de proyectos' . Así abramos el entorno de desarrollo y elegimos eltipo de proyecto 'control Activex'.  Ahora cambiamos el nombre del proyecto (para no perdernos en explicaciones conviene que le des el mismo nombre que sugiero, luego en tu desarrollo dale el nombre que prefieras, éste nombre elegido es por comodidad en la didáctica, nada más) desde 'proyecto1' a 'PryBoton'. Ahora igualmente cambiamos el nombre del control de usuario desde 'UserControl1' a 'CtlBoton'. finalmente le damos al botón guardar para guardar el proyecto, la ruta elígela como prefieras yo sugiero algo como: 'C:Mis proyectoscontrolesBotón simple'.

Una vez creado el proyecto del control, podremos cerrar el entorno y volverlo a abrir o bien desde el menú 'archivo' elegir 'crear nuevo proyecto', ahora elegimos un proyecto de tipo 'exe estándar'. Igualmente que con el anterior a este proyecto le renombramos desde 'proyecto1' a 'Probar_ctlBoton' . el nombre del formulario no importa. Ahora guardamos el proyecto, la ruta será la misma que elegimos para el control pero creamos una carpeta llamada 'pruebas' y lo guardamos dentro de esa carpeta ('C:Mis proyectoscontrolesBotón simplePruebas'). Este proyecto está destinado a probar el control mientras lo estamos diseñando e incluso para probarlo una vez hayamos compilado el control.

Para que ambos proyecto trabajen juntos ambos deben estar dentro de un grupo de proyectos, así ahora vamos al menú 'archivo' y elegimos 'añadir proyecto' y desde la ficha 'recientes' elegimos el proyecto 'pryBoton' (o bien lo localizamos desde la ficha existente, también podríamos haber creado en este momento el proyecto del botón) y lo abrimos. Si nos fijamos bien en el cuadro de herramientas se nos ha añadido el icono para el control que hemos añadido (más adelante se indicará como proporcionar un icono personalizado para el control). Seleccionamos dicho icono del control (veremos que el tooltip del icono señala el tipo de control que es (ctlBoton) . Bien pués ahora pongamos una instancia del control en el formulario del proyecto de prueba.
Ahora pulsamos el botón de guardar proyecto, el archivo del grupo de proyectos 'grupo1.vbg' (vb-Group ) lo guardamos también donde el proyecto de prueba, no es necesario cambiarle el nombre. Si ahora cerramos el entorno cuando volvamos a abrir el entorno ahora buscaremos abrir el archivo de proyectos, 'grupo1.vbg', ya que si sólo abrimos uno de los proyectos se abrirán sólo los archivos concerniente a ese proyecto, este archivo de 'grupo' es el que vincula 2 o más proyectos entre sí. Mas adelante se darán las indicaciones oportunas a la hora de compilar el control.

Bien ahora ya tenemos todo listo para empezar. Vayamos al control de usaurio y abramos el control, sobre las propiedades del control busquemos la propiedad backcolor cambiémosla por cualquier color que no sea gris... rojo, negro va bien. Si apartamos la ventana del control lo suficiente para ver el formulario veremos que el control aparece 'rayado', esto es indicativo de que el control está en 'modo diseño' . Cerremos la ventana del control (la ventana no el proyecto) veremos que inmediatamente nuestro control en el formulario cambia, no sólo desaparece el rayado sino que ahora aparece del color que le elegimos para el fondo, se dice que ahora el control está en 'modo de ejecución'. Esto es importante tenerlo en cuenta, ya que un poyecto de vb estaba en ejecución cuando pulsábamos f5 y aquí aún no lo hemos pulsado.

Podemos proceder, pero primero damos al botón paa guardar todos los cambios operados (yo en mis opciones de vb tengo por defecto que cuando ejecute un proyecto me pida si se guardan o no los cambios así, yo no necesito pulsar el botón, pero hay que acostumbrarse a guardar los cambios antes de ejecutar (el proyecto deprueba). Pulsemos la tecla F5 y veremos nuestro control en ejecución, aunque de momento no hace nada, sin embargo se ve y (en mi caso aparece rojo).

Ya estamos listos para empezar a diseñar nuestro botón. Esta es la primera parte, los preparativos iniciales, realmente lleva más tiempo explicarlo que hacerlo... y bastante más si además se tiene que teclear las indicaciones así que ruego paciencia.

Mañana empezaremos a diseñar el botón y explicaremos el ciclo de vida de un control de usuario.

Jimbenit:
Estare en primera fila siguiendo este pequeño curso que preparas para mi.  B)
Ufff, no sabes cuanto te lo agradezco !!

Leyendoooo  y aprendiendo mas ^_^
Y claro que tendré paciencia, creo que soy el que la pide amigo !!!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa