Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/07/2009, 03:46
truskyvb
 
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Fuentes Windows y VB

En cierto modo lo he conseguido, y digo en cierto modo porque solo funciona con formulario al uso, es decir, con formularios que tengan areas transparentes, no lo he conseguido.

Módulo:
Option Explicit

Public OldWindowProc As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As WINDOWPOS) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)

Type WINDOWPOS
hwnd As Long
hWndInsertAfter As Long
x As Long
y As Long
cx As Long
cy As Long
flags As Long
End Type
Public Const WM_WINDOWPOSCHANGING = &H46
Public Const WM_WINDOWPOSCHANGED = &H47
' *********************************************
' Process messages.
' *********************************************
Public Function NewWindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As WINDOWPOS) As Long
' Size bounds in pixels.
Const MIN_WIDTH = 200
Const MAX_WIDTH = 500
Const MIN_HEIGHT = 100
Const MAX_HEIGHT = 300

' Keep the dimensions in bounds.
If msg = WM_WINDOWPOSCHANGING Then
If lParam.cx < MIN_WIDTH Then lParam.cx = MIN_WIDTH
If lParam.cx > MAX_WIDTH Then lParam.cx = MAX_WIDTH
If lParam.cy < MIN_HEIGHT Then lParam.cy = MIN_HEIGHT
If lParam.cy > MAX_HEIGHT Then lParam.cy = MAX_HEIGHT
End If

' Continue normal processing. VERY IMPORTANT!
NewWindowProc = CallWindowProc( _
OldWindowProc, hwnd, msg, wParam, _
lParam)
End Function


Form:

Private Sub Form_Load()
OldWindowProc = SetWindowLong( _
hwnd, GWL_WNDPROC, _
AddressOf NewWindowProc)
End Sub


Nota:
En el Form, ScaleMode= 3 Pixel
Las medidas del Form las coges de los valores ScaleHeigt y ScaldeWidth


Supongo que tiene que haber otros metodos. Si a alguien se le ocurre algo... Si logro alguna otra solución, ya lo pongo en el foro.

Gracias y un saludo