Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Clases para dx_lib32 (botón, caja de texto ...)

Iniciado por RobiHm, 29 de Agosto de 2007, 02:55:41 PM

« anterior - próximo »

RobiHm

Bueno pués vista la demanda de botones y demás para dx_lib32 voy a preparar un par de clases bases para su utilización.
*No he probado la clase 100% (la he probado en el ejemplo del MataMarcianos y funciona) xD

*Para que se vean tienen que meterse en el bucle principal
'lógica
objeto.update
'dibujo
objeto.draw


CLase C_COMMAND (clase botón)
Descargar Clase
'////////////////////////////////////////////////////////////////
'/                                                              /
'/ Proyecto dx_lib32 2.0 - Clase botón para dx_lib32            /
'/      ºººººººººººººººººººººººººººººººººººººººº                /
'/ Autor dx_lib32 :         José Miguel Sánchez Fernández       /
'/      ºººººººººººººººººººººººººººººººººººººººº                /
'/ Autor clase c_command:   Roberto H             /
'/ Versión: 1.0                                                 /
'/                                                              /
'////////////////////////////////////////////////////////////////
'REQUISITOS
'Necesario tener objeto/s:
'm_Input    -   dx_Input_Class
'm_System   -   dx_System_Class
'm_gfx      -   dx_GFX_Class
'fnt_System -   contiene identificar de fuente cargada en memoria
'
'USO
''se crea la clase
'Dim boton1 as c_command
''se inicializa
'Set boton1 = New c_command
''se le da un gráfico
'boton1.grafico=m_gfx.MAP_Load(App.Path & "\images\boton1.png", 0)
''se posiciona
'boton1.posicionar 100,200
''se da un tamaño
'boton1.dar_tamaño 64,64
''se le da un tooltiptext
'boton1.tooltiptext="Ejemplo de uso c_command"
''se activa
'boton1.activar_boton
'
'


Option Explicit
Private Const CONS_MOUSE_SOBRE = 1000   'milisegundos que el ratón debe estar para activarse el tooltiptext
Private top As Long, left As Long       'coordenada x e y
Private width As Long, height As Long   'ancho y largo
Private rec_zona_impacto As GFX_Rect    'zona de impacto del botón
Private visible As Boolean              'indica si se encuentra visible o no
Public grafico As Long                  'el gráfico utilizado para el botón
Public tooltiptext As String            'permite un mensaje al tener el mouse sobre el ratón
Private contador As Long                'contador del tooltiptext
Private m_encima As Boolean             'indica si ya estaba el ratón encima o no

'posiciona el botón
Public Sub posicionar(x As Long, y As Long)
    top = x: left = y
    nueva_zona_impacto
End Sub

'da un tamaño al botón
Public Sub dar_tamaño(ancho As Long, largo As Long)
    width = ancho: height = largo
    nueva_zona_impacto
End Sub

'ejecuta actualización/acciones
Public Sub update()
    'comprobamos si el botón es visible
    If visible Then
        'comprobamos si se encuentra en el área de cliqueo
        If m_System.MATH_PointInRect(m_Input.Mouse.x, m_Input.Mouse.y, rec_zona_impacto) Then
            'comprobamos si se ha clicado el ratón (click izquierdo/derecho)
            'ésto puede dar problemas mirar el siguiente post en el foro dx_lib32
            'http://www.stratos-ad.com/forums3/viewtopic.php?t=9312
            'izquierdo
            If m_Input.Mouse_Hit(Left_Button) Then
                'se ha clicado ejecutamos las acciones derivadas del click
               
'USER                'aqui código a ejecutar
                Call m_Gfx.DRAW_Text(fnt_System, "Click izquierdo", left, top - 10, -4, m_Gfx.ARGB_Set(255, 0, 0, 0), Align_Left)
               
                m_encima = False
            'derecho
            ElseIf m_Input.Mouse_Hit(Left_Button) Then
                'se ha clicado ejecutamos las acciones derivadas del click
               
'USER                'aqui código a ejecutar
                Call m_Gfx.DRAW_Text(fnt_System, "Click derec", left, top - 10, -4, m_Gfx.ARGB_Set(255, 0, 0, 0), Align_Left)
               
                m_encima = False
            Else
                'comprobamos si se encontraba ya encima
                If m_encima Then
                    'se encontraba ya encima con anterioridad
                    'comprobamos cuanto tiempo se encuentra el cursor sobre el ratón
                    If (m_System.TIMER_GetValue(contador) >= CONS_MOUSE_SOBRE) Then
                        'si es mayor a un segundo mostramos tooltiptext
                        Call m_Gfx.DRAW_Text(fnt_System, tooltiptext, left, top - 10, -4, m_Gfx.ARGB_Set(255, 0, 0, 0), Align_Left)
                    End If
                Else
                    m_encima = True
                    m_System.TIMER_Reset (contador)
                End If
            End If
        Else
       
            'paramos el timer del tooltiptext
            m_encima = False
        End If
    End If
End Sub

'dibuja el botón
Public Sub draw()
    'si el botón se encuentra visible
    If visible Then
        'lo dibujamos
        Call m_Gfx.DRAW_MapEx(grafico, left, top, -3, width, height, 0, Blendop_Color, &HFFFFFFFF, Mirror_None, Blit_Filter.Filter_Bilinear, False)
    End If
End Sub


'crea la zona de impacto
Public Sub nueva_zona_impacto()
    rec_zona_impacto.x = left: rec_zona_impacto.y = top
    rec_zona_impacto.width = width: rec_zona_impacto.height = height
End Sub

'acciones al crearlo
Public Sub activar_boton()
    'creamos un cronómetro para el tooltiptext
    contador = m_System.TIMER_Create()
    visible = True  'lo mostramos visible
End Sub

'se destruye el objeto
Private Sub Class_Terminate()
    m_System.TIMER_Kill (contador)
End Sub

Web : Indómita
Blog : MiBlog
Evobas : Evobas
Kobox : Kobox

RobiHm

#1
CLase C_TEXTBOX (clase caja de texto)
Descargar Clase
'////////////////////////////////////////////////////////////////
'/                                                              /
'/ Proyecto dx_lib32 2.0 - Clase cajatexto para dx_lib32        /
'/      ºººººººººººººººººººººººººººººººººººººººº                /
'/ Autor dx_lib32 :         José Miguel Sánchez Fernández       /
'/      ºººººººººººººººººººººººººººººººººººººººº                /
'/ Autor clase c_textbox:   Roberto H            /
'/ Versión: 1.0                                                 /
'/                                                              /
'////////////////////////////////////////////////////////////////
'NOTAS
'No he añadido la posibilidad de cambiar color, os insto a que lo hagáis vosotros xD
'La clase es bastante básica
'REQUISITOS
'Necesario tener objeto/s:
'm_Input    -   dx_Input_Class
'm_System   -   dx_System_Class
'm_gfx      -   dx_GFX_Class
'fnt_System -   contiene identificar de fuente cargada en memoria
'
'USO
''se crea la clase
'dim caja as c_textbox
''se inicializa
'Set caja = New c_textbox
''se le da un gráfico si tiene
'caja.da_grafico m_gfx.MAP_Load(App.Path & "\images\caja1.png", 0)
''se posiciona
'caja.posicionar 100,200
''se da un tamaño
'caja.dar_tamaño 64,64
''se le da un tooltiptext
'caja.tooltiptext="Ejemplo de uso c_command"
''se le da un texto
'caja.escribe "[EXE3] es un fenómeno."
''se le da una longitud max (sino por defecto tendrá 0)
'caja.max_longitud 10
''se activa
'caja.activar_caja
'
'


Option Explicit
Private Const CONS_MOUSE_SOBRE = 1000   'milisegundos que el ratón debe estar para activarse el tooltiptext
Private top As Long, left As Long       'coordenada x e y
Private width As Long, height As Long   'ancho y largo
Private rec_zona_impacto As GFX_Rect    'zona de impacto del textbox
Private texto As String                 'texto que contiene el text
Private l_texto As Long                 'longitud de texto permitida
Private visible As Boolean              'indica si se encuentra visible o no
Private enabled As Boolean              'indica si se encuentra activo y se puede escribir
Private foco As Boolean                 'indica si tiene el foco (necesario para poder escribir)
Private egrafico As Boolean             'indica si tiene gráfico
Private grafico As Long                 'el gráfico utilizado para el textbox
Public tooltiptext As String            'permite un mensaje al tener el mouse sobre el ratón
Private contador As Long                'contador del tooltiptext
Private m_encima As Boolean             'indica si ya estaba el ratón encima o no


'posiciona el textbox
Public Sub posicionar(x As Long, y As Long)
    top = x: left = y
    nueva_zona_impacto
End Sub

'da un tamaño al textbox
Public Sub dar_tamaño(ancho As Long, largo As Long)
    width = ancho: height = largo
    nueva_zona_impacto
End Sub

'ejecuta actualización/acciones
Public Sub update()
    'comprobamos si el textbox es visible
    If visible Then
        'comprobamos si el textbox se encuentra en enable true y tiene el foco
        If enabled And foco Then
            'comprobamos si teclea
            'guardamos sin más ya que tenemos las acciones configuradas en tecla_valida
            tecla_valida
        End If
        'comprobamos si se encuentra en el área de cliqueo
        If m_System.MATH_PointInRect(m_Input.Mouse.x, m_Input.Mouse.y, rec_zona_impacto) Then
            'comprobamos si se ha clicado el ratón (click izquierdo/derecho)
            'ésto puede dar problemas mirar el siguiente post en el foro dx_lib32
            'http://www.stratos-ad.com/forums3/viewtopic.php?t=9312
            'izquierdo
            If m_Input.Mouse_Hit(Left_Button) Then
                'se ha clicado ejecutamos las acciones derivadas del click
                'obtiene el foco (necesario para poder escribir)
                SetFocus
               
'USER                'aqui código a ejecutar
                Call m_Gfx.DRAW_Text(fnt_System, "Click izquierdo", left, top - 10, -4, m_Gfx.ARGB_Set(255, 0, 0, 0), Align_Left)
               
                m_encima = False
            'derecho
            ElseIf m_Input.Mouse_Hit(Left_Button) Then
                'se ha clicado ejecutamos las acciones derivadas del click
               
'USER                'aqui código a ejecutar
                Call m_Gfx.DRAW_Text(fnt_System, "Click derec", left, top - 10, -4, m_Gfx.ARGB_Set(255, 0, 0, 0), Align_Left)
               
                m_encima = False
            Else
                'comprobamos si se encontraba ya encima
                If m_encima Then
                    'se encontraba ya encima con anterioridad
                    'comprobamos cuanto tiempo se encuentra el cursor sobre el ratón
                    If (m_System.TIMER_GetValue(contador) >= CONS_MOUSE_SOBRE) Then
                        'si es mayor a un segundo mostramos tooltiptext
                        Call m_Gfx.DRAW_Text(fnt_System, tooltiptext, left, top - 10, -4, m_Gfx.ARGB_Set(255, 0, 0, 0), Align_Left)
                    End If
                Else
                    m_encima = True
                    m_System.TIMER_Reset (contador)
                End If
            End If
        ElseIf m_Input.Mouse_Hit(Left_Button) Or m_Input.Mouse_Hit(Left_Button) Then
            LostFocus
            'paramos el timer del tooltiptext
            m_encima = False
        Else
            'paramos el timer del tooltiptext
            m_encima = False
        End If
    End If
End Sub

'dibuja el textbox
Public Sub draw()
    'si el textbox se encuentra visible
    If visible Then
        'lo escribimos
        Call m_Gfx.DRAW_Text(fnt_System, texto, left, top, -4, m_Gfx.ARGB_Set(255, 0, 0, 0), Align_Left)
       
        'comprobamos si tiene dibujo
        If egrafico Then
            Call m_Gfx.DRAW_MapEx(grafico, left, top, -3, width, height, 0, Blendop_Color, &HFFFFFFFF, Mirror_None, Blit_Filter.Filter_Bilinear, False)
        End If
    End If
End Sub

'da un gráfico
Public Sub da_grafico(graident As Long)
    grafico = graident
    egrafico = Not IsNull(grafico)
End Sub

'texto
Public Function getTexto()
    getTexto = texto
End Function

'max longitud
Public Sub max_longitud(num As Long)
    l_texto = num
    corta_text
End Sub


'cambia el texto por el texto enviado, también cambia el max textto al texto introducido
Public Sub escribe(cadena As String)
    l_texto = Len(cadena)
    texto = cadena
End Sub

'corta el texto al l_texto especificado
Private Sub corta_text()
    texto = Mid(texto, 1, l_texto)
End Sub

'crea la zona de impacto
Public Sub nueva_zona_impacto()
    rec_zona_impacto.x = left: rec_zona_impacto.y = top
    rec_zona_impacto.width = width: rec_zona_impacto.height = height
End Sub

'gana foco
Public Sub SetFocus()
    foco = True
End Sub
'pierde foco
Public Sub LostFocus()
    foco = False
End Sub

'acciones de activación
Public Sub activar_caja()
    'creamos un cronómetro para el tooltiptext
    contador = m_System.TIMER_Create()
    visible = True  'lo mostramos visible
    enabled = True
End Sub

'se destruye el objeto
Private Sub Class_Terminate()
    m_System.TIMER_Kill (contador)
End Sub


Private Sub tecla_valida()
On Error Resume Next
    Dim tecla As String
    tecla = ""
    With m_Input
        'Teclas numericas del teclado:
        If .Key_Hit(Key_Escape) Then
            LostFocus
        ElseIf .Key_Hit(Key_BackSlash) Then
            tecla = "}"
           
        ElseIf .Key_Hit(Key_1) Then
            tecla = "1"
       
        ElseIf .Key_Hit(Key_2) Then
            tecla = "2"
       
        ElseIf .Key_Hit(Key_3) Then
            tecla = "3"
       
        ElseIf .Key_Hit(Key_4) Then
            tecla = "4"
       
        ElseIf .Key_Hit(Key_5) Then
            tecla = "5"
       
        ElseIf .Key_Hit(Key_6) Then
            tecla = "6"
       
        ElseIf .Key_Hit(Key_7) Then
            tecla = "7"
       
        ElseIf .Key_Hit(Key_8) Then
            tecla = "8"
       
        ElseIf .Key_Hit(Key_9) Then
            tecla = "9"
       
        ElseIf .Key_Hit(Key_0) Then
            tecla = "0"
       
        ElseIf .Key_Hit(Key_Equals) Then
            tecla = "¿"
       
        ElseIf .Key_Hit(Key_Apostrophe) Then
            tecla = "{"
       
        ElseIf .Key_Hit(Key_Slash) Then
            tecla = "-"
       
        ElseIf .Key_Hit(Key_Back) Then
            texto = Mid(texto, 1)
       
        'Teclas Alfabeticas:
        ElseIf .Key_Hit(Key_Tab) Then
            LostFocus
       
        ElseIf .Key_Hit(Key_Q) Then
            tecla = "Q"
       
        ElseIf .Key_Hit(Key_W) Then
            tecla = "W"
       
        ElseIf .Key_Hit(Key_E) Then
            tecla = "E"
       
        ElseIf .Key_Hit(Key_R) Then
            tecla = "R"
       
        ElseIf .Key_Hit(Key_T) Then
            tecla = "T"
       
        ElseIf .Key_Hit(Key_Y) Then
            tecla = "Y"
       
        ElseIf .Key_Hit(Key_U) Then
            tecla = "U"
       
        ElseIf .Key_Hit(Key_I) Then
            tecla = "I"
       
        ElseIf .Key_Hit(Key_O) Then
            tecla = "O"
       
        ElseIf .Key_Hit(Key_P) Then
            tecla = "P"
       
        ElseIf .Key_Hit(Key_Enter) Then
            texto = texto & vbNewLine
           
'USER      'lo que quieras hacer al pulsar enter

        ElseIf .Key_Hit(Key_LBracket) Then
            tecla = "["
       
        ElseIf .Key_Hit(Key_RBracket) Then
            tecla = "]"
               
        ElseIf .Key_Hit(Key_A) Then
            tecla = "A"
       
        ElseIf .Key_Hit(Key_S) Then
            tecla = "S"
       
        ElseIf .Key_Hit(Key_D) Then
            tecla = "D"
       
        ElseIf .Key_Hit(Key_F) Then
            tecla = "F"
       
        ElseIf .Key_Hit(Key_G) Then
            tecla = "G"
       
        ElseIf .Key_Hit(Key_H) Then
            tecla = "H"
       
        ElseIf .Key_Hit(Key_J) Then
            tecla = "J"
       
        ElseIf .Key_Hit(Key_K) Then
            tecla = "K"
       
        ElseIf .Key_Hit(Key_L) Then
            tecla = "L"
       
        ElseIf .Key_Hit(Key_Grave) Then
            tecla = "ª"
       
        ElseIf .Key_Hit(Key_SemiColon) Then
            tecla = "Ñ"
       
        ElseIf .Key_Hit(Key_LShift) Then
'
        ElseIf .Key_Hit(Key_MinorMajor) Then
            tecla = "<"
           
        ElseIf .Key_Hit(Key_Minus) Then
            tecla = "?"
       
        ElseIf .Key_Hit(Key_Z) Then
            tecla = "Z"
       
        ElseIf .Key_Hit(Key_X) Then
            tecla = "X"
       
        ElseIf .Key_Hit(Key_C) Then
            tecla = "C"
       
        ElseIf .Key_Hit(Key_V) Then
            tecla = "V"
       
        ElseIf .Key_Hit(Key_B) Then
            tecla = "B"
       
        ElseIf .Key_Hit(Key_N) Then
            tecla = "N"
       
        ElseIf .Key_Hit(Key_M) Then
            tecla = "M"
       
        ElseIf .Key_Hit(Key_Comma) Then
            tecla = ","
       
        ElseIf .Key_Hit(Key_Period) Then
            tecla = "."
       
        ElseIf .Key_Hit(Key_SysRQ) Then
'            tecla= "Impr pant/Pet Sis"
               
        ElseIf .Key_Hit(Key_Space) Then
            tecla = " "
               
        ElseIf .Key_Hit(Key_Delete) Then
            'suprimir
            texto = Mid(texto, 1, Len(texto) - 1)
        ElseIf .Key_Hit(Key_Back) Then
            'retroceso
            texto = Mid(texto, 1, Len(texto) - 1)
        End If
   
    End With
   
    'guardamos el resultado
    texto = Mid(texto + tecla, 1, l_texto)
End Sub
Web : Indómita
Blog : MiBlog
Evobas : Evobas
Kobox : Kobox

[EX3]

Yo esperaria a la nueva version de la libreria por la incursion de una funcion que te devuelve el ASCII de la ultima tecla presionada, lo que te ahorrara el tocho de codigo mediante Key_Hit que he visto arriba en el textBox xDDD

Cuando tenga un ratejo esta tarde si me es posible los pruebo y si me lo permites les hare un par de modificaciones ;)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

RobiHm

Cita de: "[EX3"]Yo esperaria a la nueva version de la libreria por la incursion de una funcion que te devuelve el ASCII de la ultima tecla presionada, lo que te ahorrara el tocho de codigo mediante Key_Hit que he visto arriba en el textBox xDDD

Cuando tenga un ratejo esta tarde si me es posible los pruebo y si me lo permites les hare un par de modificaciones ;)

Salu2...

lo de las teclas lo pillé del ejemplo1 del input (una tanda seguidita de replaces y medio trabajo exo xD), la verdad que es un coñazo que no exista la función para el cambio a ascii ... xD

las modificaciones serán de agradecer xD

los controles son muy básicos pero ya sirven de base para ir añadiendo cosillas,
el verdadero problema esta en que VB6 no tiene herencia y por cada botón que queramos que haga una cosa diferente habrá que tener una clase diferente (o una muy tocha y con un switch enorme xD)
Web : Indómita
Blog : MiBlog
Evobas : Evobas
Kobox : Kobox

[EX3]

Cita de: "RobiHm"las modificaciones serán de agradecer xD

los controles son muy básicos pero ya sirven de base para ir añadiendo cosillas
ferPecto pues :) La verdad al menos como base me vendran de lujo ya que mas adelante (dentro de eones me temo :P) tendre que implementar algo similar para los menus del juego.

Cita de: "RobiHm"el verdadero problema esta en que VB6 no tiene herencia y por cada botón que queramos que haga una cosa diferente habrá que tener una clase diferente (o una muy tocha y con un switch enorme xD)
Una y no mas :P Yo en la campus ya sufri (no mas que SiPoX y Shephiroth xDD) la falta de herencia y la flexibilidad que brinda la orientacion a objetos (hasta que programas en serio y de forma compleja no lo hechas en falta) cuando la compo 72h que se hizo y en algunas ocasiones desarrollando algun modulo concreto de mi juego. Por ello finalmente lo estoy desarrollando en Visual Basic .NET (me hubiera gustado C# pero dx_lib32 no se lleva bien con el :?).

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

RobiHm

yo de momento no tengo grandes problemas con la librería y poco a poco voy tomandole el pulso, el proyecto que ando haciendo es ya bastante decentillo y aunque tiene sus limitaciones va dando sus frutos xD


uno de los problemas que más quebraderos de cabeza me ha dado  dx_lib32 es el tema de que los gráficos  deban de ser potencias de a 2 o se ven borrosos, he estado pensando en hacer un módulo que filtre los gráficos a cargar y según sus dimensiones lo divida en gráficos más pequeños (potencias de 2) y subirlos por separado, no se si tenías pensado solventarlo en la próxima versión me gustaría saberlo para hacer o no hacer el módulo
Web : Indómita
Blog : MiBlog
Evobas : Evobas
Kobox : Kobox

[EX3]

Cita de: "RobiHm"uno de los problemas que más quebraderos de cabeza me ha dado dx_lib32 es el tema de que los gráficos deban de ser potencias de a 2 o se ven borrosos, he estado pensando en hacer un módulo que filtre los gráficos a cargar y según sus dimensiones lo divida en gráficos más pequeños (potencias de 2) y subirlos por separado
A mi me viene de lujo que haga suavizados ya que es algo que buscaba en su dia hacer desde DirectDraw y que aparte yo suelo trabajar con graficos de tamaño regular a excepciones de fondos y poco mas, generalmente si uso tiles estos son de potencia de 2 al igual que los sprites.

La idea o metodo que propones es justo el que Loover sabiamente implemento en su libreria, que solventa a la perfeccion este tema de los tamaños irregulares (esta hecho un crack :)). La verdad es que si te acabas haciendo un modulo para esto seria interesante como plugin o añadido para trabajar la libreria, todo lo que sean mejoras aunque sean externas son siempre bienvenidas.

Cita de: "RobiHm"no se si tenías pensado solventarlo en la próxima versión me gustaría saberlo para hacer o no hacer el módulo
Va a ser que no :P La proxima release, la 2.2.0, es final de trayecto del proyecto y solo se limita a dejar resuelto los pequeños bugs que quedan y optimizando dentro lo posible lo ya implementado (de ahi que lleve un año de demora en sacar esta version, no quiero dejar bugs sueltos). Practicamente desde que salio la version 2.0 no se han desarrollado grandes implementaciones en la libreria, mas bien pulir lo existente con pequeños añadidos para dejarla lo mas funcional posible (sinceramente, llevo cerca de 5 años dedicados exclusivamente a la libreria cuando en verdad yo que pretendo desde hace 7 es hacer un juego, no mas motores ni librerias por hoy, gracias xD)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

edu27

Hola, el segundo elnace, el de los textbox no esta disponible, es decir dice que el servidor a donde lo has subido lo ha borrado por inactividad.

Lo que subistes, el el codigo exactamente puesto en el segundo post?

Muchas gracias por el trabajo que has hecho






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.