Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: SONIC88 en Mayo 17, 2010, 11:58:57 am
-
Hola compipas del foro, necesito hacerles una consulta técnica, y que el titulo lo refleja, ¿cómo puedo dibujar sobre un hDC de una ventana en Windowless?, específicamente un Usercontrol. Necesito dibujar un texto con Drawtext (algo común, ya que no quiero usar un Label dentro del control :P).
La cosa es que estoy haciendo un playlist, pero hacer cada botón de esa lista con una ventana vi que acumula mucha memoria, quisiera saber ademas si el control sin ventana gasta mas o menos memoria, ya que si no tendría que dibujar los botones directo sobre el contenedor y no como otro usercontrol aparte.
Por otra parte "creo" haber visto por ahí pero no recuerdo donde, un control de estas características en el cual se le creaba un hDC, jaja si alguien tiene algún datito y tiempo favor me ayuda.
Gracias!! ::)
-
Hola Sonic88, fijate de esta forma, mira dentro del UserControl_Initialize que hay un par de propiedades que tenes que setear.
Option Explicit
'propiedades del usercontrol en tiempo de diseño
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Const DT_CENTER = &H1
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Sub UserControl_Initialize()
'Propiedades del usercontrol en tiempo de diseño "Windowless = True"
UserControl.BackStyle = 0 'Transparent << opcional
UserControl.ClipBehavior = 0 'none
UserControl.ScaleMode = vbPixels '<< opcional
End Sub
Private Sub UserControl_Paint()
Dim Rec As RECT
Rec.Right = UserControl.ScaleWidth
Rec.Bottom = UserControl.ScaleHeight
DrawText UserControl.hdc, "hola mundo", 10, Rec, DT_CENTER
End Sub
Private Sub UserControl_HitTest(X As Single, Y As Single, HitResult As Integer)
HitResult = 1
End Sub
En cuanto al uso de la memoria , no estoy muy seguro pero tengo entendido que consume menos, alguien mas puede afirmar esto?
en cuanto al rendimiento depende de cuanto o que dibujes, ya que esto se va a ejecutar dentro del UserControl_Paint y si tenes un rutina muy cargada te podria llegar a relantar un poco el proyecto, en ese caso creo que combiene crear un buffer de lo que queres pintar, pero repito en un caso que sea muy muy nesesario, cosa que con un DrawText o un bitblit no haria falta.
-
Hola Leo gracias por tu respuesta, aunque yo tengo ese mismo código en mi usercontrol, pero no se no me funciona me tira el:
Error "398" en tiempo de ejecución:
El sitio cliente no esta disponible. ???
Lo raro es que si pego el codigo en un nuevo usercontrol si funciona jajaja voy a tener que ver bien cual es la falla,
pedí ayuda porque pensé que lo estaba haciendo mal o me faltaba algo. ;D
Muchas gracias Leo y saludos. ;D
-
??? Bueno en vista que no encontré la cuestión que provocaba error jaja me vi en la obligación de ponerle On Error Resume Next, ;D y bueno la verdad así funcionó. Pero aun no se por qué lanzaba ese error.
Bueno gracias por su tiempo.
Saludos!! ;D