none
Redimensionar formulario en tiempo de ejecucion en vb.net RRS feed

  • Pregunta

  • hola a todos, estoy haciendo un proyecto en vb.net y quisiera hacer un metodo para redimencionar un form en tiempo de ejecucion....actualemte lo tengo en c# pero quiero pasarlo a vb.net.....el codigo en c# es>

                                                    

      //METODO PARA REDIMENCIONAR/CAMBIAR TAMAÑO A FORM

    ULARIO  TIEMPO DE EJECUCION ----------------------------------------------------------
            private int tolerance = 15;
            private const int WM_NCHITTEST = 132;
            private const int HTBOTTOMRIGHT = 17;
            private Rectangle sizeGripRectangle;

            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case WM_NCHITTEST:
                        base.WndProc(ref m);
                        var hitPoint = this.PointToClient(new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16));
                        if (sizeGripRectangle.Contains(hitPoint))
                            m.Result = new IntPtr(HTBOTTOMRIGHT);
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }
            }
            //----------------DIBUJAR RECTANGULO / EXCLUIR ESQUINA PANEL 
            protected override void OnSizeChanged(EventArgs e)
            {
                base.OnSizeChanged(e);
                var region = new Region(new Rectangle(0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height));

                sizeGripRectangle = new Rectangle(this.ClientRectangle.Width - tolerance, this.ClientRectangle.Height - tolerance, tolerance, tolerance);

                region.Exclude(sizeGripRectangle);
                this.panel1ContenedorPrincipal.Region = region;
                this.Invalidate();
            }

            private void BarraTitulo_Click(object sender, EventArgs e)
            {

            }

            //----------------COLOR Y GRIP DE RECTANGULO INFERIOR
            protected override void OnPaint(PaintEventArgs e)
            {

                SolidBrush blueBrush = new SolidBrush(Color.FromArgb(55, 61, 69));
                e.Graphics.FillRectangle(blueBrush, sizeGripRectangle);

                base.OnPaint(e);
                ControlPaint.DrawSizeGrip(e.Graphics, Color.Transparent, sizeGripRectangle);
            }

            private void button5_Click(object sender, EventArgs e)
            {
                AbrirFormEnPanel(new Form1());
            }

    si hay alguien que me puede ayudar, le agrade-seria.

    jueves, 11 de octubre de 2018 18:02

Respuestas

Todas las respuestas

  • No parece que en ese código haya nada "raro", en principio cualquiera de las herramientas automáticas de traducción de C# a VB te lo debería convertir sin problema. ¿Puedes concretar qué dificultad específica has encontrado?
    jueves, 11 de octubre de 2018 19:37
  • traducir el codigo de c# a vb.net fue mi primer OPCION..PERO no me traduce de forma corecta  quisas tu me puedas recomendar algun traductor que quizas sea exacto, pero q no sea DEVELOPERFUCION pues este ultimo nunca me cargo la conversion.....

    gracias.

    jueves, 11 de octubre de 2018 20:59
  • ya logre una traduccion mas exacta , pero tengo problema con este pedaso de codigo>

     Protected Overrides Sub WndProc(ByRef m As Message)
            Select Case m.Msg
                Case WM_NCHITTEST
                    MyBase.WndProc(ref m)
                    Dim hitPoint = Me.PointToClient(New Point(m.LParam.ToInt32() And 0xffff, m.LParam.ToInt32() >> 16))
                    If sizeGripRectangle.Contains(hitPoint) Then
                        m.Result = New IntPtr(HTBOTTOMRIGHT)
                    End If
                    ' break;
                Case Else
                    MyBase.WndProc(refm)
                    ' break;

            End Select

        End Sub

    lo que esta subrayado y con negrita en vb.net me da erro ....no me reconoce esas palabras

    que sera_

    jueves, 11 de octubre de 2018 22:07
  • 0xffff quiere decir "todo unos en hexadecimal". El equivalente en VB es &Hffff. También puedes escribir el equivalente en base 10 que es 65536.

    El "ref" indica que el parámetro se pasa por referencia. En VB no hay que poner nada, el compilador ya infiere que el parámetro debe pasarse por referencia a partir del "ByRef" que ya debe existir en la declaración de la función a la que llamas si se ha traducido correctamente. Por lo tanto, basta con que suprimas la palabra "ref".


    viernes, 12 de octubre de 2018 6:07
  • NO me funciono...lo que estoy haciendo es un formulario sin BorderStyle  y quiero programar esa funcion de redimencionarlo en tiempo de ejecucion....
    viernes, 12 de octubre de 2018 14:08
  • Deleted
    viernes, 12 de octubre de 2018 16:54
  • Buenos días estimados, muchas gracias por sus aporte la verdad que me han ayudado de gran manera y estoy muy agradecido este foro es de gran utilidad para los que andamos en la curva de aprendizaje, bueno Estimado WALTER tu aporte ha sido muy bueno de hecho me funciono muy bien solo agregue unos detalles al código que me dejaste y funciono a la perfección tal y a como lo quería ver, mi proyecto trataba de tomar un formulario quitarle los bordes dejarle la propiedad FormBordestyle en NONE ustedes saben que al hacer eso debemos personalizarlo simulando una barra superior en donde pondremos button cerrar, minimizar y maximizar y en mi caso también agregue un panel a la izquierda q simula un menú vertical y otro panel en la parte superior(abajo) que ahí pongo quien esta conectado algo asu como un statusbar, entonces el Form queda totalmente cubierto por paneles y por eso el código que me envistes WALTER no es de gran utilidad porque en tiempo de ejecución igual no se logra dimensionar por que tenemos paneles adelante del FORM, asi que le agregue un fragmento de código al que me mandaste para que este código lo que hace es dibujar en la esquina derecha abajo un rectángulo permitiendo-le al usuario final poder dimensionar el form en tiempo de ejecución.....abajo les dejo todo el código , quizás alguien mas lo pueda utilizar...muchas gracias por sus aporte.

    Imports System.Runtime.InteropServices
    Public Class Practicar
        Private Const WM_NCHITTEST As Integer = 132
        Private Const HTBOTTOMRIGHT As Integer = 17
        Private sizeGripRectangle As Rectangle
        Private tolerance As Integer = 15
        Private Sub Practicar_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Call CalculaGrip()
        End Sub
        Protected Overrides Sub WndProc(ByRef m As Message)
            Select Case m.Msg
                Case WM_NCHITTEST
                    MyBase.WndProc(m)
                    Dim hitPoint = Me.PointToClient(New Point(m.LParam.ToInt32() And &HFFFF, m.LParam.ToInt32() >> 16))
                    If sizeGripRectangle.Contains(hitPoint) Then
                        m.Result = New IntPtr(HTBOTTOMRIGHT)
                    End If
                    ' break;
                Case Else
                    MyBase.WndProc(m)
                    ' break;
    
            End Select
    
        End Sub
    
        Private Sub CalculaGrip()
            sizeGripRectangle = ClientRectangle
            sizeGripRectangle.X = sizeGripRectangle.Width - SystemInformation.FrameBorderSize.Width
            sizeGripRectangle.Y = sizeGripRectangle.Height - SystemInformation.FrameBorderSize.Height
        End Sub
    
        '----------------DIBUJAR RECTANGULO / EXCLUIR ESQUINA PANEL 
        Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs)
            MyBase.OnSizeChanged(e)
            Dim region = New Region(New Rectangle(0, 0, Me.ClientRectangle.Width, Me.ClientRectangle.Height))
            Me.sizeGripRectangle = New Rectangle((Me.ClientRectangle.Width - Me.tolerance), (Me.ClientRectangle.Height - Me.tolerance), Me.tolerance, Me.tolerance)
            region.Exclude(Me.sizeGripRectangle)
            Me.PanelContenedorPrincipal.Region = region
            Me.Invalidate()
        End Sub
    
    
        '----------------COLOR Y GRIP DE RECTANGULO INFERIOR
        Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
            Dim blueBrush As SolidBrush = New SolidBrush(Color.FromArgb(55, 61, 69))
            e.Graphics.FillRectangle(blueBrush, Me.sizeGripRectangle)
            MyBase.OnPaint(e)
            ControlPaint.DrawSizeGrip(e.Graphics, Color.Transparent, Me.sizeGripRectangle)
        End Sub
    
    End Class
    


    viernes, 12 de octubre de 2018 18:06