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é :cry: 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 :cry:

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...

Image
Image

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.