Page 1 sur 1
Calendargadget Resize
Publié : mer. 01/févr./2012 11:20
par Mesa
En fonction de la police système et du pitch écran, il est impossible de trouver la taille exacte d'un calendargadget, si on y va au pif, le gadget est toujours tronqué ou trop grand.
J'ai trouvé ici
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
et là
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
MCM_SIZERECTTOMIN message
Calculates how many calendars will fit in the given rectangle, and then returns the minimum size that a rectangle needs to be to fit that number of calendars. You can send this message explicitly or by using the MonthCal_SizeRectToMin macro.
mais je n'arrive pas à envoyer le message avec sendmessage.
Une idée ?
Mesa.
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 12:10
par Mesa
Un bout de code qui ne donne fonctionne pas bien chez moi, le gadget reste tronqué

et vous ?
Code : Tout sélectionner
;#MCM_GETMINREQRECT
#cal=100
*ok.RECT2=AllocateMemory(20)
If OpenWindow(0, 0, 0, 220, 200, "CalendarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CalendarGadget(#cal, 0, 0, 20, 18)
SendMessage_(GadgetID(#cal),#MCM_GETMINREQRECT,0,*ok)
Debug *ok\left
Debug *ok\right
Debug *ok\top
Debug *ok\bottom
ResizeGadget(#cal,#PB_Ignore ,#PB_Ignore ,*ok\right,*ok\bottom)
; For i= 0 To 20
; Debug PeekB(*ok) ; ne donne rien ?
; Next i
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 13:12
par Ar-S
marche pas (structure RECT2 introuvable.
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 13:15
par MLD
Oui je confirme.
Ar-S plus rapid que moi

Re: Calendargadget Resize
Publié : mer. 01/févr./2012 13:34
par kernadec
chez moi sous seven ca marche
Code : Tout sélectionner
;#MCM_GETMINREQRECT
#cal=100
rc.RECT
If OpenWindow(0, 0, 0, 220, 200, "CalendarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CalendarGadget(#cal, 0, 0, 20, 18)
SendMessage_(GadgetID(#cal),#MCM_GETMINREQRECT,0,rc)
Debug rc\left
Debug rc\right
Debug rc\top
Debug rc\bottom
ResizeGadget(#cal,#PB_Ignore ,#PB_Ignore ,rc\right,rc\bottom)
; For i= 0 To 20
; Debug PeekB(*ok) ; ne donne rien ?
; Next i
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 14:03
par Ar-S
en 4.60 x86 sur un W7 x64 ?
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 14:29
par kernadec
bonjour Ar-s
sous seven 64 je n'ai que la 4.51 d'installée, mais cela fonctionne.
sous xp sp2 et seven 32 idem avec PB4.60
cordialement
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 14:45
par Mesa
oui, erreur frappe, il fallait remplacer RECT2 par RECT.
J'ai un léger défaut sur le côté bas et sur le côté droit, mais bon...
Uploaded with
ImageShack.us
Mesa.
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 16:21
par Mesa
ça marche si on ajoute l'option sans bordure mais le message qui calcule l'epaisseur de la bordure n'est apparemment pas défini dans PB : #MCM_GETCALENDARBORDER, dommage !
Code : Tout sélectionner
;#MCM_GETMINREQRECT
#cal=100
#cal2=101
Taille.RECT
Taille2.RECT
If OpenWindow(0, 0, 0, 550, 300, "CalendarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CalendarGadget(#cal, 0, 0, 20, 18)
CalendarGadget(#cal2, 300, 0, 20, 18, date,#PB_Calendar_Borderless )
;Debug GadgetWidth(#cal)
SendMessage_(GadgetID(#cal),#MCM_GETMINREQRECT,0,Taille)
SendMessage_(GadgetID(#cal2),#MCM_GETMINREQRECT,0,Taille2)
;Dommage !
;bordure= SendMessage_(GadgetID(#cal),#MCM_GETCALENDARBORDER,0,0)
;bordure=MonthCal_GetCurrentView_(#cal)
; Debug Taille\left
; Debug Taille\right
; Debug Taille\top
; Debug Taille\bottom
ResizeGadget(#cal,#PB_Ignore ,#PB_Ignore ,Taille\right,Taille\bottom)
ResizeGadget(#cal2,#PB_Ignore ,#PB_Ignore ,Taille2\right,Taille2\bottom)
; Debug Taille2\left
; Debug Taille2\right
; Debug Taille2\top
; Debug Taille2\bottom
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Mesa.
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 16:31
par Ar-S
Le 1er marche effectivement, le second non, pas de structure associée à "OK"
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 16:48
par Mesa
Résolu.
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 17:14
par Mesa
Je viens de me rendre compte que la prise en charge de la mesure de l'épaisseur de la bordure ne fonctionne qu'à partir de vista ! Donc pas sous Xp.
Je ne sais pas si ce code fonctionne :
Code : Tout sélectionner
;#MCM_GETMINREQRECT
#cal=100
#cal2=101
; MCM_FIRST := 0x1000
; MCM_GETCALENDARBORDER := (MCM_FIRST + 31)
MCM_GETCALENDARBORDER = #MCM_FIRST + 31 ; qu'à partir de vista ! ! !
Taille.RECT
Taille2.RECT
If OpenWindow(0, 0, 0, 550, 300, "CalendarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CalendarGadget(#cal, 0, 0, 20, 18)
CalendarGadget(#cal2, 300, 0, 20, 18, date,#PB_Calendar_Borderless )
;Debug GadgetWidth(#cal)
SendMessage_(GadgetID(#cal),#MCM_GETMINREQRECT,0,Taille)
SendMessage_(GadgetID(#cal2),#MCM_GETMINREQRECT,0,Taille2)
bordure= SendMessage_(GadgetID(#cal),MCM_GETCALENDARBORDER,0,0)
; Debug Taille\left
; Debug Taille\right
; Debug Taille\top
; Debug Taille\bottom
ResizeGadget(#cal,#PB_Ignore ,#PB_Ignore ,Taille\right + bordure,Taille\bottom + bordure)
ResizeGadget(#cal2,#PB_Ignore ,#PB_Ignore ,Taille2\right,Taille2\bottom)
; Debug Taille2\left
; Debug Taille2\right
; Debug Taille2\top
; Debug Taille2\bottom
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Les valeurs des constantes que j'ai utilisées sont ici
http://www.autohotkey.com/forum/viewtop ... 156#469156
Re: Calendargadget Resize
Publié : mer. 01/févr./2012 20:07
par Malo
Ton dernier code fonctionne sous vista, une bordure avec une apparence enfoncée entoure #cal.