none
ayuda crear teclado tactil (touch). RRS feed

  • Pregunta

  • Hola, estoy intentando crear un teclado Táctil.

    has el momento tengo el formulario que haría de teclado. (Soy Fana de Windows Metro XD. )

    me faltaría la función que iría en cada tecla. Estuve leyendo, y hay que evitar que las teclas tomen foco. agregué este componente que menciona El Maestro Marvin.

    ' ++++++++ Código ++++++++++++++
    
    
    Imports System.ComponentModel
    '<System.Diagnostics.DebuggerNonUserCode()> _
    <ProvideProperty("Selectable", GetType(Control))> _
    Public Class ChangeStyle
        Inherits Component
        Implements IExtenderProvider
    
        Private hashtable As Hashtable
        Sub New()
            Me.hashtable = New Hashtable()
        End Sub
    
        Function CanExtend(ByVal extendee As Object) As Boolean Implements IExtenderProvider.CanExtend
            If TypeOf extendee Is Button Then _
                Return True
            Return False
        End Function
    
        <DisplayName("Selectable")> _
        <Description("")> _
        <DefaultValue(True)> _
        Public Function GetSelectable(ByVal ctrl As Control) As Boolean
            If Me.hashtable.ContainsKey(ctrl) Then _
                Return CBool(Me.hashtable(ctrl))
            Return True
        End Function
        Public Sub SetSelectable(ByVal ctrl As Control, ByVal value As Boolean)
            If Me.hashtable.ContainsKey(ctrl) Then
                If value Then _
                    Me.hashtable.Remove(ctrl)
            Else
                Me.hashtable.Add(ctrl, value)
            End If
    
            Me.OnChangeStyle(ctrl, value)
        End Sub
    
        Private Sub OnChangeStyle(ByVal ctrl As Control, ByVal value As Boolean)
            Dim methodInfo As Reflection.MethodInfo = ctrl.GetType().GetMethod("SetStyle", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
            If methodInfo IsNot Nothing Then _
                methodInfo.Invoke(ctrl, New Object() {ControlStyles.Selectable, value})
        End Sub
    End Class
    
    
    ' ++++++++ Diseñador ++++++++++
    
    Partial Class ChangeStyle
        Inherits System.ComponentModel.Component
    
        <System.Diagnostics.DebuggerNonUserCode()> _
        Public Sub New(ByVal container As System.ComponentModel.IContainer)
            MyClass.New()
    
            'Requerido para la compatibilidad con el Diseñador de composiciones de clases Windows.Forms
            If (container IsNot Nothing) Then
                container.Add(Me)
            End If
    
        End Sub
        'Component reemplaza a Dispose para limpiar la lista de componentes.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
    
        'Requerido por el Diseñador de componentes
        Private components As System.ComponentModel.IContainer
    
        'NOTA: el Diseñador de componentes requiere el siguiente procedimiento
        'Se puede modificar usando el Diseñador de componentes.
        'No lo modifique con el editor de código.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            components = New System.ComponentModel.Container()
        End Sub
    
    End Class

    pero no aparece la propiedad que menciona Marvin. en Este Tema

    me faltaría:

    1- El método o función para las teclas de momento tengo este pero debido al foco no he podido probarlo.

    Private WithEvents TextoSelecion As New TextBox
    
    Private Sub SimularPulsaciones(ByVal sender As Object, ByVal e As System.EventArgs) Handles BTN_0_cero.Click, BTN_1.Click, BTN_2.Click, BTN_3.Click, BTN_4.Click, BTN_5.Click, BTN_6.Click, BTN_7.Click, BTN_8.Click, BTN_9.Click, BTN_a.Click, BTN_b.Click, BTN_c.Click, BTN_coma.Click, BTN_d.Click, btn_e.Click, BTN_enie.Click, BTN_f.Click, BTN_g.Click, BTN_guion.Click, BTN_h.Click, BTN_i.Click, BTN_interrofin.Click, BTN_interroinicio.Click, BTN_j.Click, BTN_k.Click, BTN_l.Click, BTN_m.Click, BTN_n.Click, BTN_o.Click, BTN_p.Click, BTN_punto.Click, btn_q.Click, BTN_r.Click, BTN_s.Click, BTN_t.Click, BTN_u.Click, BTN_v.Click, btn_w.Click, BTN_x.Click, BTN_y.Click, BTN_z.Click
    
            Me.TextoSelecion.Text += Me.ActiveControl.Text
    
        End Sub

    2- hacer funcionar el componente de Marvin.

    3- las funciones especial para las teclas; borrar, entrar, control, alt, tab, etc.

    bueno desde ya mucha gracias. ¡Un Abrazo psicológico Gigante!

    • Cambiado Enrique M. Montejo domingo, 11 de octubre de 2015 8:03 Pregunta relacionada con Windows Forms.
    martes, 6 de octubre de 2015 22:36

Todas las respuestas

  • Hola nuevamente, he logrado que los botones no ganen foco creando un nuevo control heredado con la siguiente clase:

    Public Class MyButton
        Inherits Button
    
        Sub New()
            Me.SetStyle(ControlStyles.Selectable, False)
            Me.UpdateStyles()
        End Sub
    
    End Class

    PERO...

    no he podido hacer que el formulario con el teclado no gane el foco al clickear alguna tecla del teclado virtual.

    he probado agregando este código que encontré en la web. pero no surge efecto.

    Protected Overrides ReadOnly Property CreateParams As System.Windows.Forms.CreateParams Get Const WS_EX_NOACTIVATE As Integer = &H8000000 Dim Result As CreateParams Result = MyBase.CreateParams Result.ExStyle = Result.ExStyle Or WS_EX_NOACTIVATE Return Result End Get End Property

    este código está colocado a nivel de formulario.

    y el formulario con el teclado lo llamo asi:

    Dim F as Teclado = Teclado

    F.Show

    Me.Focus()

    Alguna idea donde estoy fallando?

    Saludos.

    PD: Borré respuestas mías anteriores, ya que no os servían.

    lunes, 12 de octubre de 2015 0:04