Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: lucius en Septiembre 24, 2011, 07:53:48 pm

Título: Se puede hacer un textbox transparente?
Publicado por: lucius en Septiembre 24, 2011, 07:53:48 pm
Para tal caso lo mejor seria utilizar un Label con la propiedad BackStyle = 0-transparent pero el caso es que el proyecto utiliza cajas de textos y hay muchos Text's asi que demoria mucho estar cambiandolos por label's, ademas los label utilizan .caption y no .text y se complica un poco mas. Tambien se podria poner el color de fondo igual al del form pero en los form hay una imagen de fondo.

Me hicieron esa pregunta y dije que no se podia pero quien sabe jeje? igual me anime a preguntar aqui en el foro, la idea seria crear una funcion o clase para colocarla en el load del form y evitar hacer el cambio de controles text's por label's
Título: Re:Se puede hacer un textbox transparente?
Publicado por: Virgil Tracy en Septiembre 24, 2011, 11:49:02 pm
Si lo que quieres es un textbox transparente funcional, debes subclasificar el mensaje WM_PAINT del textbox, aqui un ejemplo

http://www.vbaccelerator.com/home/vb/code/libraries/subclassing/tile_a_bitmap_into_a_textbox/article.asp (http://www.vbaccelerator.com/home/vb/code/libraries/subclassing/tile_a_bitmap_into_a_textbox/article.asp)

(http://www.vbaccelerator.com/home/vb/code/libraries/subclassing/tile_a_bitmap_into_a_textbox/BitmapDialog.png)

Pero si quieres solo cambiar los textbox por labels con este codigo lo puedes hacer  :)

Código: (vb6) [Seleccionar]
Private Sub Command1_Click()
Dim c As Control, lbl As Label
Dim i As Long

i = 1

For Each c In Me.Controls

    If TypeOf c Is TextBox Then
   
       Set lbl = Me.Controls.Add("VB.Label", "label" & i)
       
       i = i + 1
       
       With lbl
       
            Set .Container = c.Container
       
            .Top = c.Top
            .Left = c.Left
            .Height = c.Height
            .Width = c.Width
            .Caption = c.Text
            .Alignment = c.Alignment
            .Visible = True
            .BackStyle = 0
            .ForeColor = vbRed
           
            c.Visible = False
           
       End With
       
    End If
   
Next

Command1.Enabled = False

End Sub

formulario con textboxs
(http://i55.tinypic.com/2wdq1ch.png)

formulario con labels
(http://i51.tinypic.com/66atxd.png)
Título: Re:Se puede hacer un textbox transparente?
Publicado por: lucius en Septiembre 25, 2011, 12:16:57 am
Voy a probar..
Bueno haber si alguien me hecha una mano ya que tiene mas de lo que necesito y el codigo se ve algo complejo, igual voy a revisar detenidamente el 1er ejemplo cuando tenga un poco de tiempo y espero reducir el codigo para solo transparentar las cajas texto, saludos y gracias.
Título: Re:Se puede hacer un textbox transparente?
Publicado por: Lolabyte en Septiembre 25, 2011, 04:24:24 am
Aqui en psc hay un ejemplo mas sencillo  :)

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=54063&lngWId=1 (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=54063&lngWId=1)

(http://www.planet-source-code.com/Upload_PSC/ScreenShots/PIC2004528723551298.jpg)

O tambien, cambiar el textbox por un richtextbox y con apis hacerlo transparente  ;)

Código: (vb6) [Seleccionar]
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Const GWL_EXSTYLE = (-20)
Const WS_EX_TRANSPARENT = &H20&

Private Sub Form_Load()

Call SetWindowLong(RichTextBox1.hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT)

End Sub