Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Psyke1

#441
Os dejo mi ultima clase que sirve para justificar texto en un ListBox, la novedad es que puedes actuar sobre especificamente con cada Item, dejo el código:

Código (vb) [Seleccionar]
Option Explicit
'==================================================================================================
' º Class     : MultiAlignListBox.cls
' º Version   : 1.1
' º Author    : Mr.Frog ©
' º Country   : Spain
' º Mail      : vbpsyke1@mixmail.com
' º Date      : 14/12/2010
' º Twitter   : http://twitter.com/#!/PsYkE1
' º Tested on : WinXp & Win7
' º Greets    : LaVolpe & Raul338 & BlackZer0x & Karmany
' º Reference : http://www.elguille.info/colabora/vb2006/karmany_centrartextolistbox.htm
' º Recommended Websites :
'       http://visual-coders.com.ar
'       http://InfrAngeluX.Sytes.Net
'==================================================================================================

Private Declare Function GetDialogBaseUnits Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hDC As Long, ByVal lpString As String, ByVal cbString As Long, lpSize As SIZE) As Long

Private Type RECT
   Left    As Long
   Top     As Long
   Right   As Long
   Bottom  As Long
End Type

Private Type SIZE
   cX      As Long
   cY      As Long
End Type

Private Const LB_SETTABSTOPS                        As Long = &H192&
Private Const WM_GETFONT                            As Long = &H31&

Private Const CHARS_LIST                            As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
Private Const CHARS_LEN                             As Long = &H3E&

Private myListBox                                   As ListBox
Private lListhWnd                                   As Long
Private lWidth                                      As Long

Public Sub SetListBox(myList As ListBox)
   If Not (myList Is Nothing) Then
       Set myListBox = myList
       lListhWnd = myListBox.hwnd
       SetRightTab
   End If
End Sub

Public Sub AddAlignItem(ByVal Item As String, ByVal Align As AlignmentConstants, Optional ByVal Index As Long = (-1))
Dim lCenterAlign                                    As Long

   With myListBox
       lCenterAlign = Int(.Width - PixelsPerUnit(Item))
       If lCenterAlign < 0 Then Align = vbLeftJustify
       
       If Index = (-1) Then Index = .ListCount
       
       Select Case Align
           Case vbRightJustify
               .AddItem vbTab & Item, Index
               If Not (lWidth = GetListSize) Then SetRightTab
           Case vbCenter
               .AddItem Space$(Abs(Int(lCenterAlign / PixelsPerUnit(Space$(1)) / 2) - 1.5)) & Item, Index
           Case Else
               .AddItem Item, Index
       End Select
   End With
End Sub

Public Sub ChangeListBoxAlign(Optional ByVal Index As Long = (-1), Optional ByVal Align As AlignmentConstants = vbAlignLeft)
Dim Q                                               As Long

   If Index > -1 Then
       SetAlign Index, Align
   Else
       For Q = 0 To (myListBox.ListCount - 1)
           SetAlign Q, Align
       Next Q
   End If
End Sub

Public Function GetItem(ByVal Index As Long) As String
   GetItem = LTrim$(myListBox.List(Index))
   
   If (GetItem Like (vbTab & "*")) Then
       GetItem = Right$(GetItem, (Len(GetItem) - 1))
   End If
End Function

Private Sub SetAlign(ByVal Index As Long, ByVal Align As AlignmentConstants)
Dim sItem                                           As String

   With myListBox
       sItem = GetRealItem(Index)
       If Not (.List(Index) = sItem) Then
           .RemoveItem (Index)
           AddAlignItem sItem, Align, Index
       End If
   End With
End Sub

Private Sub SetRightTab()
Dim lRightAlignTab                                  As Long

   lWidth = GetListSize
   lRightAlignTab = -(lWidth / PixelsPerUnit)
   
   SendMessage lListhWnd, LB_SETTABSTOPS, &H0&, ByVal &H0&
   SendMessage lListhWnd, LB_SETTABSTOPS, &H1&, lRightAlignTab
   
   myListBox.Refresh
End Sub

Private Function GetListSize() As Long
Dim RCT                                             As RECT

   GetClientRect lListhWnd, RCT
   With RCT
       GetListSize = (.Right - .Left)
   End With
End Function


Private Function PixelsPerUnit(Optional ByVal sText As String) As Single
Dim hDC                                             As Long
Dim hFont                                           As Long
Dim hFontOld                                        As Long
Dim SZ                                              As SIZE

   hDC = GetDC(lListhWnd)
   If CBool(hDC) = True Then
       hFont = SendMessage(lListhWnd, WM_GETFONT, &H0&, ByVal &H0&)
       hFontOld = SelectObject(hDC, hFont)
       
       If sText = vbNullString Then
           If GetTextExtentPoint32(hDC, CHARS_LIST, CHARS_LEN, SZ) Then
               PixelsPerUnit = CSng((2 * CLng(SZ.cX / CHARS_LEN)) / (GetDialogBaseUnits And &HFFFF&))
           End If
       Else
           If GetTextExtentPoint32(hDC, sText, Len(sText), SZ) Then
               PixelsPerUnit = (SZ.cX * Screen.TwipsPerPixelX)
           End If
       End If
       
       SelectObject hDC, hFontOld
       ReleaseDC lListhWnd, hDC
   End If
End Function

Private Sub Class_Initialize()
   Debug.Print "--> cListBoxMultiAlign.cls By Mr.Frog © <--"
End Sub


Una imagen vale mas que 1000 palabras:

DoEvents! :P
#442
Jajajajaja :laugh:
Lo clavaste! :D
Pensé algo asi hace tiempo, pero usando SetPixel(), y más simple. :silbar:
A mi si que me sirve, gracias pollo! :-*

DoEvents! :P
#444
De nada... ;)
Ahora estoy acabando una cosa similar de una manera NUNCA vista. :)
Cita de: agus0 en 13 Diciembre 2010, 03:14 AM
Gracias por compartir Mr. Frog... Te diste por venisido con mi programa???  :laugh:
:xD
Ya lo hable con Dessa, eso solo te pasa a ti, no tengo W7 para probarlo, en Wxp ya te dije que me va bien. :silbar:

DoEvents! :P
#445
Me encontre con estas constantes para alinear un ListBox e hice esta sencilla función, poner en un módulo:
Solo incluyo alineamiento de items a la derecha e izquierda, porque para centrarlos hay que hacerlo de forma diferente. :silbar:
Posteado en http://www.visual-coders.com.ar/

Código (vb) [Seleccionar]
Option Explicit
'=========================================================
' º Function : AlignListBox
' º Author   : Mr. Frog ©
' º Mail     : vbpsyke1@mixmail.com
' º Recommended Websites :
'       http://visual-coders.com.ar
'       http://InfrAngeluX.Sytes.Net
'       http://twitter.com/#!/PsYkE1
'=========================================================

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const GWL_EXSTYLE                       As Long = (-20)
Private Const WS_EX_RIGHT                       As Long = &H1000&
Private Const WS_EX_LEFT                        As Long = &H0&
Private Const WS_EX_LEFTSCROLLBAR               As Long = &H4000&
Private Const WS_EX_RIGHTSCROLLBAR              As Long = &H0&

Public Enum AlignConstants
  aLeft = 0
  aRight = 1
End Enum

Public Enum OptionAlign
  Items = 0
  ScollBar = 1
End Enum

Public Function AlignListBox(ByVal myListBox As ListBox, _
                              ByVal ThingToAlign As OptionAlign, _
                              Optional ByVal Align As AlignConstants = aLeft) As Long
Dim lStyle                                              As Long
Dim lHwnd                                               As Long
   If Not (myListBox Is Nothing) Then
       lHwnd = myListBox.hwnd
       lStyle = GetWindowLong(lHwnd, GWL_EXSTYLE)
       If Align = aRight Then
           If ThingToAlign = Items Then
               lStyle = lStyle Or WS_EX_RIGHT
           Else
               lStyle = lStyle And WS_EX_RIGHTSCROLLBAR
           End If
       Else
           If ThingToAlign = Items Then
               lStyle = lStyle And WS_EX_LEFT
           Else
               lStyle = lStyle Or WS_EX_LEFTSCROLLBAR
           End If
       End If
       AlignListBox = SetWindowLong(lHwnd, GWL_EXSTYLE, lStyle)
   End If
End Function


Ejemplo:

Código (vb) [Seleccionar]
Option Explicit

Private Sub Form_Load()
Dim Q                               As Long
   For Q = 0 To (Screen.FontCount - 1)
       List1.AddItem Screen.Fonts(Q)
   Next Q
   
   AlignListBox List1, Items, aRight
   'AlignListBox List1, Items, aLeft
   AlignListBox List1, ScollBar, aLeft
   'AlignListBox List1, ScollBar, aRight
End Sub


Resultado:

DoEvents! :P
#446
Dudas Generales / Re: 72 minutos...
10 Diciembre 2010, 22:02 PM
Mira, te lo saltas así:
CitarDejar la película cargando y darle al pause (o al menos no reproducir 72 minutos porque nos saltaría el mensaje del límite). Una vez que se cargue entera (que la barra gris llegue al final), le damos al navegador a la opción de "Trabajar sin conexión" y ya le podemos dar al play y verla completa. Esta opción está en el menú "Archivo" como podéis ver a continuación:
fuente http://www.sincortespublicitarios.com/faq-de-sincortespublicitarioscom-contenido-de-ayuda/saltar-limitaciones-de-tiempo-de-megavideo-5-maneras-de-hacerlo/

DoEvents! :P
#447
Revisa el codigo, seguro que solo copiaste mi funcion...
Fijate en esto:
Citar
Código (vb,1) [Seleccionar]

Private Sub Form_Activate()
   Call BorderStyleNone(True)
End Sub
Cada vez que se activa la ventana quita el borde, de este modo si se minimiza al activar la ventana vuelves a quitarlo.

LINK ACTUALIZADO

Un ejemplo:
http://www.mediafire.com/?vr444098o7ndn02

DoEvents! :P
#448
.
Sorry :silbar:
Lo actualicé... de nuevo.  ;)
Mira a ver si así funciona... :rolleyes:

DoEvents! :P
#449
Ya verás Raul!!  :(  :laugh:
Tenia la funcion hecha dde otro proyecto, de ahi lo de SetWindowsPos. :silbar:

Ya edité el post... :P

DoEvents! :P
#450
.
Yo uso WinXP y creo que me iva bien... :-\

Respuesta definitiva que soluciona el tema :  :xD
Código (vb) [Seleccionar]
Option Explicit

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const GWL_STYLE                 As Long = (-16)
Private Const WS_CAPTION                As Long = &HC00000

Private Function BorderStyleNone(ByVal bValue As Boolean) As Long
Dim lStyle                              As Long
   lStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
   If bValue Then
       lStyle = lStyle Xor WS_CAPTION
   Else
       lStyle = lStyle Or WS_CAPTION
   End If
   BorderStyleNone = SetWindowLong (Me.hWnd, GWL_STYLE, lStyle)
End Function

Private Sub Form_Activate()
   Call BorderStyleNone(True)
End Sub


DoEvents! :P