Office 2003 II

07/09/2004 - 15:28 por Oscar | Informe spam
Hola de nuevo,

He estado mirando, y en win xp también hace un efecto parecido en el control TabControl, lo pone en
otro color... pero a mi cuando pongo un tabcontrol en .net no se me ve igual... adjunto una pequeña
imagen para que lo apreciéis:

La parte de arriba de la pestaña en sí (donde pone "General") está en el color que debería estar el
resto del tab, pero como veis, el resto del tab está en otro color. En win xp esto funciona bien,
por ejemplo, conectado a internet, le doy doble click al icono de la conexión que aparece al lado
del reloj de la barra de inicio y me aparece el estado de la conexión a internet. Bueno, pues
aparecen dos pestañas, y ambas en su totalidad son de otro color distinto al del form... cosa que no
me sale con vb.net.

Cómo lo puedo hacer?

Mil gracias, saludos,
Oscar

Preguntas similare

Leer las respuestas

#1 DJ MIA0
07/09/2004 - 17:24 | Informe spam
Tira esa piedra a ver si sale.

Private Sub FrmMain_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
Application.EnableVisualStyles()



End Sub

Miao...

Comprate un libro.





Hola de nuevo,

He estado mirando, y en win xp también hace un efecto


parecido en el control TabControl, lo pone en
otro color... pero a mi cuando pongo un tabcontrol


en .net no se me ve igual... adjunto una pequeña
imagen para que lo apreciéis:

La parte de arriba de la pestaña en sí (donde


pone "General") está en el color que debería estar el
resto del tab, pero como veis, el resto del tab está en


otro color. En win xp esto funciona bien,
por ejemplo, conectado a internet, le doy doble click al


icono de la conexión que aparece al lado
del reloj de la barra de inicio y me aparece el estado


de la conexión a internet. Bueno, pues
aparecen dos pestañas, y ambas en su totalidad son de


otro color distinto al del form... cosa que no
me sale con vb.net.

Cómo lo puedo hacer?

Mil gracias, saludos,
Oscar


.

Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MS MVP VB]
08/09/2004 - 06:06 | Informe spam
No le hagas caso. Ni siquiera sabe que para que EnableVisualStyles funcione
debe llamarse antes de cargar el formulario. Utiliza esta clase en lugar de
la clase System.Windows.Forms.TabPage para las paginas del tab:

Public Class XPTabPage
Inherits System.Windows.Forms.TabPage

Private _isXP As Boolean = False

Private Declare Function IsThemeActive Lib "uxtheme" () As Boolean

Private Declare Function DrawThemeBackground Lib "uxtheme" ( _
ByVal hTheme As IntPtr, _
ByVal hDc As IntPtr, _
ByVal iPartID As Integer, _
ByVal iStateID As Integer, _
ByRef pRect As Rectangle, _
ByRef pClipRect As Rectangle) As Integer

Private Declare Unicode Function OpenThemeData Lib "uxtheme" ( _
ByVal hwnd As IntPtr, _
ByVal pszClassList As String) As IntPtr

Private Declare Function CloseThemeData Lib "uxtheme" ( _
ByVal hTheme As IntPtr) As IntPtr

Public Sub New()

MyBase.New()

With System.Environment.OSVersion
If .Platform = PlatformID.Win32NT Then
If .Version.Major = 5 AndAlso .Version.Minor > 0 Then
_isXP = True
End If
End If
End With

End Sub

Protected Overrides Sub OnPaintBackground(ByVal pevent As
System.Windows.Forms.PaintEventArgs)

If _isXP AndAlso IsThemeActive Then

' Open theme data
Dim hTheme As IntPtr = OpenThemeData(Me.Handle, "Tab")

' Get an HDC to paint on
Dim hDC As IntPtr = pevent.Graphics.GetHdc

' Draw the tab background
DrawThemeBackground(hTheme, hDC, 10, 1, ClientRectangle,
ClientRectangle)

' Release the DC
pevent.Graphics.ReleaseHdc(hDC)

' Close theme handle
CloseThemeData(hTheme)

Else
MyBase.OnPaintBackground(pevent)
End If

End Sub

End Class

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#3 Lázaro
08/09/2004 - 09:25 | Informe spam
Muy bueno.

Salu2

"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> wrote in message
news:#
No le hagas caso. Ni siquiera sabe que para que EnableVisualStyles


funcione
debe llamarse antes de cargar el formulario. Utiliza esta clase en lugar


de
la clase System.Windows.Forms.TabPage para las paginas del tab:

Public Class XPTabPage
Inherits System.Windows.Forms.TabPage

Private _isXP As Boolean = False

Private Declare Function IsThemeActive Lib "uxtheme" () As Boolean

Private Declare Function DrawThemeBackground Lib "uxtheme" ( _
ByVal hTheme As IntPtr, _
ByVal hDc As IntPtr, _
ByVal iPartID As Integer, _
ByVal iStateID As Integer, _
ByRef pRect As Rectangle, _
ByRef pClipRect As Rectangle) As Integer

Private Declare Unicode Function OpenThemeData Lib "uxtheme" ( _
ByVal hwnd As IntPtr, _
ByVal pszClassList As String) As IntPtr

Private Declare Function CloseThemeData Lib "uxtheme" ( _
ByVal hTheme As IntPtr) As IntPtr

Public Sub New()

MyBase.New()

With System.Environment.OSVersion
If .Platform = PlatformID.Win32NT Then
If .Version.Major = 5 AndAlso .Version.Minor > 0 Then
_isXP = True
End If
End If
End With

End Sub

Protected Overrides Sub OnPaintBackground(ByVal pevent As
System.Windows.Forms.PaintEventArgs)

If _isXP AndAlso IsThemeActive Then

' Open theme data
Dim hTheme As IntPtr = OpenThemeData(Me.Handle, "Tab")

' Get an HDC to paint on
Dim hDC As IntPtr = pevent.Graphics.GetHdc

' Draw the tab background
DrawThemeBackground(hTheme, hDC, 10, 1, ClientRectangle,
ClientRectangle)

' Release the DC
pevent.Graphics.ReleaseHdc(hDC)

' Close theme handle
CloseThemeData(hTheme)

Else
MyBase.OnPaintBackground(pevent)
End If

End Sub

End Class

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo


Respuesta Responder a este mensaje
#4 Eduardo A. Morcillo [MS MVP VB]
09/09/2004 - 04:11 | Informe spam
Aqui tienes la clase arreglada para que salga bien el fondo de los labels:

http://www.mvps.org/emorcillo/dotne...page.shtml

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#5 Oscar
09/09/2004 - 07:46 | Informe spam
Gracias Eduardo!

Ahora sí se ve perfectamente... Una pregunta más, cuando paso de un TabPage a otro que tiene
bastantes controles, estos se van dibujando bastante despacio. Tengo la clase en un módulo en el
programa que estoy haciendo, para probarla. Sería mejor ponerla en un proyecto a parte, compilarla o
algo, para que fuese más rápida? O puedo jugar de alguna manera con el SuspendLayout y ResumeLayout?

Por cierto, qué haces despierto a las 4:11??

Gracias de nuevo,
Oscar


"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el mensaje
news:%
Aqui tienes la clase arreglada para que salga bien el fondo de los labels:

http://www.mvps.org/emorcillo/dotne...page.shtml

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida