s'en servir.
Code : Tout sélectionner
;Code SROD
;EnableExplicit
Procedure.l GetTextWidthPix(NumGadget, espace=1)
Protected result, hdc, tm.TEXTMETRIC, abc.ABC, overhang, hFont, char,lpSize.SIZE
;espace : null-terminated + pour la checkbox par exemple, il faut ajouter la largeur d'un espace au texte
hDC = GetDC_(GadgetID(NumGadget))
hFont = SendMessage_(GadgetID(NumGadget),#WM_GETFONT,0,0)
If hFont And hDC
SelectObject_(hDC,hFont)
EndIf
GetTextExtentPoint32_(hDC, GetGadgetText(NumGadget), Len(GetGadgetText(NumGadget)) + espace, lpSize)
;Ajustement qui depend du type de font; raster ou true/open type.
GetTextMetrics_(hdc, tm)
;*sz\cy=tm\tmHeight-tm\tmInternalLeading ;on peut enlever le internal leading height
If tm\tmOverhang ;Raster font.
lpSize\cx + tm\tmOverhang
Else
char = Asc(Right(GetGadgetText(NumGadget),1))
GetCharABCWidths_(hdc, char, char, abc)
overhang = abc\abcC
If overHang < 0
lpSize\cx - overHang
EndIf
EndIf
SelectObject_(hdc, hFont)
ReleaseDC_(GadgetID(NumGadget), hdc)
result=lpSize\cx
ProcedureReturn result
EndProcedure
Procedure.l GetTextHeightPix(NumGadget, espace=8)
Protected result, hdc, tm.TEXTMETRIC, abc.ABC, overhang, hFont, char, lpSize.SIZE
; pourquoi 8 ?????
hDC = GetDC_(GadgetID(NumGadget))
hFont = SendMessage_(GadgetID(NumGadget),#WM_GETFONT,0,0)
If hFont And hDC
SelectObject_(hDC,hFont)
EndIf
GetTextExtentPoint32_(hDC, GetGadgetText(NumGadget), Len(GetGadgetText(NumGadget)), lpSize)
;Ajustement qui depend du type de font; raster ou true/open type.
GetTextMetrics_(hdc, tm)
;*sz\cy=tm\tmHeight-tm\tmInternalLeading ;on peut enlever le internal leading height
If tm\tmOverhang ;Raster font.
lpSize\cx + tm\tmOverhang
Else
char = Asc(Right(GetGadgetText(NumGadget),1))
GetCharABCWidths_(hdc, char, char, abc)
overhang = abc\abcC
If overHang < 0
lpSize\cx - overHang
EndIf
EndIf
SelectObject_(hdc, hFont)
ReleaseDC_(GadgetID(NumGadget), hdc)
result=lpSize\cy + espace
ProcedureReturn result
EndProcedure
;Code Mesa 2012
Procedure.l GetHigherTextInListWidthPix(NumGadget)
Protected result, hdc, tm.TEXTMETRIC, abc.ABC, overhang, hFont, char, Max, n, i, lg, lpSize.SIZE
;espace : null-terminated + pour la checkbox par exemple, il faut ajouter la largeur d'un espace au texte
hDC = GetDC_(GadgetID(NumGadget))
hFont = SendMessage_(GadgetID(NumGadget),#WM_GETFONT,0,0)
If hFont And hDC
SelectObject_(hDC,hFont)
EndIf
n=0
Max=0
For i=0 To CountGadgetItems(NumGadget)-1
GetTextExtentPoint32_(hDC, GetGadgetItemText(NumGadget,i), Len(GetGadgetItemText(NumGadget,i)) , lpSize)
If lpSize\cy>Max
Max=lpSize\cy
n=i
EndIf
Next i
lpSize\cy=Max
SelectObject_(hdc, hFont)
ReleaseDC_(GadgetID(NumGadget), hdc)
result=lpSize\cy
ProcedureReturn result
EndProcedure
Procedure.l GetLongerTextInListWidthPix(NumGadget)
Protected result, hdc, tm.TEXTMETRIC, abc.ABC, overhang, hFont, char, Max, n, i, lg, lpSize.SIZE
;espace : null-terminated + pour la checkbox par exemple, il faut ajouter la largeur d'un espace au texte
hDC = GetDC_(GadgetID(NumGadget))
hFont = SendMessage_(GadgetID(NumGadget),#WM_GETFONT,0,0)
If hFont And hDC
SelectObject_(hDC,hFont)
EndIf
n=0
Max=0
For i=0 To CountGadgetItems(NumGadget)-1
GetTextExtentPoint32_(hDC, GetGadgetItemText(NumGadget,i), Len(GetGadgetItemText(NumGadget,i)) , lpSize)
If lpSize\cx>Max
Max=lpSize\cx
n=i
EndIf
Next i
lpSize\cx=Max
;Ajustement qui depend du type de font; raster ou true/open type.
GetTextMetrics_(hdc, tm)
;*sz\cy=tm\tmHeight-tm\tmInternalLeading ;on peut enlever le internal leading height
If tm\tmOverhang ;Raster font.
lpSize\cx + tm\tmOverhang
Else
char = Asc(Right(GetGadgetItemText(NumGadget,n),1))
GetCharABCWidths_(hdc, char, char, abc)
overhang = abc\abcC
If overHang < 0
lpSize\cx - overHang
EndIf
EndIf
SelectObject_(hdc, hFont)
ReleaseDC_(GadgetID(NumGadget), hdc)
result=lpSize\cx
ProcedureReturn result
EndProcedure
Procedure.l FitGadget(NumGadget, En_Longueur.b=#True, En_Hauteur.b=#True, Option.l=-1)
Protected DC, tm.TEXTMETRIC, abc.ABC, overhang, hFont, char, ncm.NONCLIENTMETRICS
Protected Hauteur_case_a_cocher, rc.RECT,sz.SIZE, os, bordure, marge, handleimagelist, okBOOL
Protected old$, min, max
Protected BCM_FIRST, BCM_GETIDEALSIZE, BCM_GETTEXTMARGIN, MCM_FIRST, MCM_GETCALENDARBORDER,CBEM_GETIMAGELIST
Protected pImageInfo.IMAGEINFO
Select GadgetType(NumGadget)
Case #PB_GadgetType_Button ;================
BCM_FIRST = $1600
BCM_GETIDEALSIZE = (BCM_FIRST + $0001)
If SendMessage_(GadgetID(NumGadget),BCM_GETIDEALSIZE,0,sz) = #True
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , sz\cx,sz\cy)
EndIf
Case #PB_GadgetType_Option ;================
ncm\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(NONCLIENTMETRICS), @ncm, 0)
DC = GetDC_(0)
Hauteur_case_a_cocher=Abs(ncm\lfMessageFont\lfheight); c'est aussi sa longueur
; GetDeviceCaps_(DC, #LOGPIXELSY)
ReleaseDC_(0, DC)
BCM_FIRST = $1600
BCM_GETTEXTMARGIN = BCM_FIRST + $0005
SendMessage_(GadgetID(NumGadget),BCM_GETTEXTMARGIN,0,rc)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , rc\left+rc\right+Hauteur_case_a_cocher+GetTextWidthPix(NumGadget, 1),GetTextHeightPix(NumGadget,0))
Case #PB_GadgetType_CheckBox ;================
ncm\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(NONCLIENTMETRICS), @ncm, 0)
DC = GetDC_(0)
Hauteur_case_a_cocher=Abs(ncm\lfMessageFont\lfheight); c'est aussi sa longueur
; GetDeviceCaps_(DC, #LOGPIXELSY)
ReleaseDC_(0, DC)
BCM_FIRST = $1600
BCM_GETTEXTMARGIN = BCM_FIRST + $0005
SendMessage_(GadgetID(NumGadget),BCM_GETTEXTMARGIN,0,rc)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , rc\left+rc\right+Hauteur_case_a_cocher+GetTextWidthPix(NumGadget, 1),GetTextHeightPix(NumGadget,0))
Case #PB_GadgetType_Calendar ;================
SendMessage_(GadgetID(NumGadget),#MCM_GETMINREQRECT,0,rc)
; If option= #PB_Calendar_Borderless
; ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , rc\Right,rc\bottom)
;
; Else
os=OSVersion()
If os=#PB_OS_Windows_Vista Or os=#PB_OS_Windows_Server_2008 Or os= #PB_OS_Windows_7 Or os=#PB_OS_Windows_Future
MCM_FIRST = $1000
MCM_GETCALENDARBORDER = MCM_FIRST + 31
bordure= SendMessage_(GadgetID(NumGadget),MCM_GETCALENDARBORDER,0,0)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , rc\Right+bordure,rc\bottom+bordure)
Else
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , rc\Right+4,rc\bottom+4)
EndIf
;EndIf
;========================================================================
Case #PB_GadgetType_ComboBox ;================
CBEM_GETIMAGELIST=1027
marge=4
;Image presente ?
handleimagelist= SendMessage_(GadgetID(NumGadget),CBEM_GETIMAGELIST ,0,0)
If handleimagelist
;Retrieves information about an image.
okBOOL= ImageList_GetImageInfo_(handleimagelist,1,pImageInfo)
marge+pImageInfo\rcImage\right+4
If GetTextHeightPix(NumGadget)>pImageInfo\rcImage\bottom
;longueur dropdown =26
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , 26+marge+GetLongerTextInListWidthPix(NumGadget),GetTextHeightPix(NumGadget))
Else
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , 26+marge+GetLongerTextInListWidthPix(NumGadget),0)
EndIf
Else
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , 26+marge+GetLongerTextInListWidthPix(NumGadget),0);GetTextHeightPix(NumGadget)
EndIf
Case #PB_GadgetType_Date ;================
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , 26+GetTextWidthPix(NumGadget),GetTextHeightPix(NumGadget))
Case #PB_GadgetType_Editor ;================
marge=4
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+GetLongerTextInListWidthPix(NumGadget),(CountGadgetItems(NumGadget)-1)*GetHigherTextInListWidthPix(NumGadget))
Case #PB_GadgetType_String ;================
marge=SendMessage_(GadgetID(NumGadget),#EM_GETMARGINS,0,0)
;Returns the width of the left margin in the LOWORD, And the width of the right margin in the HIWORD.
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , 4+(marge & $FFFF)+((marge >> 16) & $FFFF)+GetTextWidthPix(NumGadget),GetTextHeightPix(NumGadget))
Case #PB_GadgetType_Text ;================
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , GetTextWidthPix(NumGadget,0),GetTextHeightPix(NumGadget,0))
Case #PB_GadgetType_HyperLink ;================
If option=#PB_HyperLink_Underline
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , GetTextWidthPix(NumGadget,0),GetTextHeightPix(NumGadget))
Else
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , GetTextWidthPix(NumGadget,0),GetTextHeightPix(NumGadget,0))
EndIf
Case #PB_GadgetType_Spin ;================
old$=GetGadgetText(NumGadget)
min=GetGadgetAttribute(NumGadget, #PB_Spin_Minimum);#PB_Spin_Maximum
SetGadgetText(NumGadget, Str(min))
min=GetTextWidthPix(NumGadget,0)
max=GetGadgetAttribute(NumGadget, #PB_Spin_Maximum)
SetGadgetText(NumGadget, Str(max))
max=GetTextWidthPix(NumGadget,0)
SetGadgetText(NumGadget, old$)
marge=20
If max>=min
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+max,GetTextHeightPix(NumGadget))
Else
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+min,GetTextHeightPix(NumGadget))
EndIf
Case #PB_GadgetType_ButtonImage ;================
If option <> -1
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , ImageWidth(option),ImageHeight(option))
EndIf
;Case #PB_GadgetType_Image;no effects ;================
;Case #PB_GadgetType_IPAddress;There's a bug somewhere ;================
;old=GetGadgetState(NumGadget)
;SetGadgetState(NumGadget, MakeIPAddress(192, 192, 192, 192))
;ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , GetTextWidthPix(NumGadget),GetTextHeightPix(NumGadget))
;SetGadgetState(NumGadget, old)
Case #PB_GadgetType_ListView ;================
marge=28
min=SendMessage_(GadgetID(NumGadget),#LB_GETITEMHEIGHT,0,0)
;ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+GetLongerTextInListWidthPix(NumGadget),CountGadgetItems(NumGadget)*GetTextHeightPix(NumGadget))
If option = -1 ; all
;ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+GetLongerTextInListWidthPix(NumGadget),CountGadgetItems(NumGadget)*GetTextHeightPix(NumGadget))
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+GetLongerTextInListWidthPix(NumGadget),min*(CountGadgetItems(NumGadget)+1))
Else
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+GetLongerTextInListWidthPix(NumGadget),#PB_Ignore)
EndIf
EndSelect
ProcedureReturn #True
EndProcedure
Procedure.l FitGadgetW(NumGadget, En_Longueur.b=#True, En_Hauteur.b=#True, Option.l=-1)
Protected DC, tm.TEXTMETRIC, abc.ABC, overhang, hFont, char, ncm.NONCLIENTMETRICS
Protected Hauteur_case_a_cocher, rc.RECT,sz.SIZE, os, bordure, marge, handleimagelist, okBOOL
Protected old$, min, max
Protected BCM_FIRST, BCM_GETIDEALSIZE, BCM_GETTEXTMARGIN, MCM_FIRST, MCM_GETCALENDARBORDER,CBEM_GETIMAGELIST
Protected pImageInfo.IMAGEINFO
Protected w,h
Select GadgetType(NumGadget)
Case #PB_GadgetType_Button ;================
BCM_FIRST = $1600
BCM_GETIDEALSIZE = (BCM_FIRST + $0001)
If SendMessage_(GadgetID(NumGadget),BCM_GETIDEALSIZE,0,sz) = #True
w=sz\cx
h=sz\cy
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
EndIf
Case #PB_GadgetType_Option ;================
ncm\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(NONCLIENTMETRICS), @ncm, 0)
DC = GetDC_(0)
Hauteur_case_a_cocher=Abs(ncm\lfMessageFont\lfheight); c'est aussi sa longueur
; GetDeviceCaps_(DC, #LOGPIXELSY)
ReleaseDC_(0, DC)
BCM_FIRST = $1600
BCM_GETTEXTMARGIN = BCM_FIRST + $0005
SendMessage_(GadgetID(NumGadget),BCM_GETTEXTMARGIN,0,rc)
w=rc\left+rc\right+Hauteur_case_a_cocher+GetTextWidthPix(NumGadget, 1)
h=GetTextHeightPix(NumGadget,0)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Case #PB_GadgetType_CheckBox ;================
ncm\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(NONCLIENTMETRICS), @ncm, 0)
DC = GetDC_(0)
Hauteur_case_a_cocher=Abs(ncm\lfMessageFont\lfheight); c'est aussi sa longueur
; GetDeviceCaps_(DC, #LOGPIXELSY)
ReleaseDC_(0, DC)
BCM_FIRST = $1600
BCM_GETTEXTMARGIN = BCM_FIRST + $0005
SendMessage_(GadgetID(NumGadget),BCM_GETTEXTMARGIN,0,rc)
w=rc\left+rc\right+Hauteur_case_a_cocher+GetTextWidthPix(NumGadget, 1)
h=GetTextHeightPix(NumGadget,0)
ResizeGadget(NumGadget, #PB_Ignore, #PB_Ignore, w, h)
Case #PB_GadgetType_Calendar ;================
SendMessage_(GadgetID(NumGadget),#MCM_GETMINREQRECT,0,rc)
; If option= #PB_Calendar_Borderless
; ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , rc\Right,rc\bottom)
;
; Else
os=OSVersion()
If os=#PB_OS_Windows_Vista Or os=#PB_OS_Windows_Server_2008 Or os= #PB_OS_Windows_7 Or os=#PB_OS_Windows_Future
MCM_FIRST = $1000
MCM_GETCALENDARBORDER = MCM_FIRST + 31
bordure= SendMessage_(GadgetID(NumGadget),MCM_GETCALENDARBORDER,0,0)
w=rc\Right+bordure
h=rc\bottom+bordure
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Else
w=rc\Right+4
h=rc\bottom+4
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
EndIf
;EndIf
;========================================================================
Case #PB_GadgetType_ComboBox ;================
CBEM_GETIMAGELIST=1027
marge=4
;Image presente ?
handleimagelist= SendMessage_(GadgetID(NumGadget),CBEM_GETIMAGELIST ,0,0)
If handleimagelist
;Retrieves information about an image.
okBOOL= ImageList_GetImageInfo_(handleimagelist,1,pImageInfo)
marge+pImageInfo\rcImage\right+4
If GetTextHeightPix(NumGadget)>pImageInfo\rcImage\bottom
;longueur dropdown =26
w=26+marge+GetLongerTextInListWidthPix(NumGadget)
h=GetTextHeightPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Else
w=26+marge+GetLongerTextInListWidthPix(NumGadget)
h=0
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h )
EndIf
Else
w=26+marge+GetLongerTextInListWidthPix(NumGadget)
h=0
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h);GetTextHeightPix(NumGadget)
EndIf
Case #PB_GadgetType_Date ;================
w=26+GetTextWidthPix(NumGadget)
h=GetTextHeightPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Case #PB_GadgetType_Editor ;================
marge=4
w=marge+GetLongerTextInListWidthPix(NumGadget)
h=(CountGadgetItems(NumGadget)-1)*GetHigherTextInListWidthPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Case #PB_GadgetType_String ;================
marge=SendMessage_(GadgetID(NumGadget),#EM_GETMARGINS,0,0)
;Returns the width of the left margin in the LOWORD, And the width of the right margin in the HIWORD.
w=4+(marge & $FFFF)+((marge >> 16) & $FFFF)+GetTextWidthPix(NumGadget)
h=GetTextHeightPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Case #PB_GadgetType_Text ;================
w=GetTextWidthPix(NumGadget,0)
h=GetTextHeightPix(NumGadget,0)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Case #PB_GadgetType_HyperLink ;================
w=GetTextWidthPix(NumGadget,0)
If option=#PB_HyperLink_Underline
h=GetTextHeightPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Else
h=GetTextHeightPix(NumGadget,0)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
EndIf
Case #PB_GadgetType_Spin ;================
old$=GetGadgetText(NumGadget)
min=GetGadgetAttribute(NumGadget, #PB_Spin_Minimum);#PB_Spin_Maximum
SetGadgetText(NumGadget, Str(min))
min=GetTextWidthPix(NumGadget,0)
max=GetGadgetAttribute(NumGadget, #PB_Spin_Maximum)
SetGadgetText(NumGadget, Str(max))
max=GetTextWidthPix(NumGadget,0)
SetGadgetText(NumGadget, old$)
marge=20
h=GetTextHeightPix(NumGadget)
If max>=min
w=marge+max
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Else
w=marge+min
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
EndIf
Case #PB_GadgetType_ButtonImage ;================
If option <> -1
w=ImageWidth(option)
h=ImageHeight(option)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
EndIf
;Case #PB_GadgetType_Image;no effects ;================
;Case #PB_GadgetType_IPAddress;There's a bug somewhere ;================
;old=GetGadgetState(NumGadget)
;SetGadgetState(NumGadget, MakeIPAddress(192, 192, 192, 192))
;ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , GetTextWidthPix(NumGadget),GetTextHeightPix(NumGadget))
;SetGadgetState(NumGadget, old)
Case #PB_GadgetType_ListView ;================
marge=28
min=SendMessage_(GadgetID(NumGadget),#LB_GETITEMHEIGHT,0,0)
;ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+GetLongerTextInListWidthPix(NumGadget),CountGadgetItems(NumGadget)*GetTextHeightPix(NumGadget))
w=marge+GetLongerTextInListWidthPix(NumGadget)
If option = -1 ; all
;ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+GetLongerTextInListWidthPix(NumGadget),CountGadgetItems(NumGadget)*GetTextHeightPix(NumGadget))
h=min*(CountGadgetItems(NumGadget)+1)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Else
h=#PB_Ignore
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w,h)
EndIf
EndSelect
ProcedureReturn w
EndProcedure
Procedure.l FitGadgetH(NumGadget, En_Longueur.b=#True, En_Hauteur.b=#True, Option.l=-1)
Protected DC, tm.TEXTMETRIC, abc.ABC, overhang, hFont, char, ncm.NONCLIENTMETRICS
Protected Hauteur_case_a_cocher, rc.RECT,sz.SIZE, os, bordure, marge, handleimagelist, okBOOL
Protected old$, min, max
Protected BCM_FIRST, BCM_GETIDEALSIZE, BCM_GETTEXTMARGIN, MCM_FIRST, MCM_GETCALENDARBORDER,CBEM_GETIMAGELIST
Protected pImageInfo.IMAGEINFO
Protected w,h
Select GadgetType(NumGadget)
Case #PB_GadgetType_Button ;================
BCM_FIRST = $1600
BCM_GETIDEALSIZE = (BCM_FIRST + $0001)
If SendMessage_(GadgetID(NumGadget),BCM_GETIDEALSIZE,0,sz) = #True
w=sz\cx
h=sz\cy
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
EndIf
Case #PB_GadgetType_Option ;================
ncm\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(NONCLIENTMETRICS), @ncm, 0)
DC = GetDC_(0)
Hauteur_case_a_cocher=Abs(ncm\lfMessageFont\lfheight); c'est aussi sa longueur
; GetDeviceCaps_(DC, #LOGPIXELSY)
ReleaseDC_(0, DC)
BCM_FIRST = $1600
BCM_GETTEXTMARGIN = BCM_FIRST + $0005
SendMessage_(GadgetID(NumGadget),BCM_GETTEXTMARGIN,0,rc)
w=rc\left+rc\right+Hauteur_case_a_cocher+GetTextWidthPix(NumGadget, 1)
h=GetTextHeightPix(NumGadget,0)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Case #PB_GadgetType_CheckBox ;================
ncm\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(NONCLIENTMETRICS), @ncm, 0)
DC = GetDC_(0)
Hauteur_case_a_cocher=Abs(ncm\lfMessageFont\lfheight); c'est aussi sa longueur
; GetDeviceCaps_(DC, #LOGPIXELSY)
ReleaseDC_(0, DC)
BCM_FIRST = $1600
BCM_GETTEXTMARGIN = BCM_FIRST + $0005
SendMessage_(GadgetID(NumGadget),BCM_GETTEXTMARGIN,0,rc)
w=rc\left+rc\right+Hauteur_case_a_cocher+GetTextWidthPix(NumGadget, 1)
h=GetTextHeightPix(NumGadget,0)
ResizeGadget(NumGadget, #PB_Ignore, #PB_Ignore, w, h)
Case #PB_GadgetType_Calendar ;================
SendMessage_(GadgetID(NumGadget),#MCM_GETMINREQRECT,0,rc)
; If option= #PB_Calendar_Borderless
; ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , rc\Right,rc\bottom)
;
; Else
os=OSVersion()
If os=#PB_OS_Windows_Vista Or os=#PB_OS_Windows_Server_2008 Or os= #PB_OS_Windows_7 Or os=#PB_OS_Windows_Future
MCM_FIRST = $1000
MCM_GETCALENDARBORDER = MCM_FIRST + 31
bordure= SendMessage_(GadgetID(NumGadget),MCM_GETCALENDARBORDER,0,0)
w=rc\Right+bordure
h=rc\bottom+bordure
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Else
w=rc\Right+4
h=rc\bottom+4
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
EndIf
;EndIf
;========================================================================
Case #PB_GadgetType_ComboBox ;================
CBEM_GETIMAGELIST=1027
marge=4
;Image presente ?
handleimagelist= SendMessage_(GadgetID(NumGadget),CBEM_GETIMAGELIST ,0,0)
If handleimagelist
;Retrieves information about an image.
okBOOL= ImageList_GetImageInfo_(handleimagelist,1,pImageInfo)
marge+pImageInfo\rcImage\right+4
If GetTextHeightPix(NumGadget)>pImageInfo\rcImage\bottom
;longueur dropdown =26
w=26+marge+GetLongerTextInListWidthPix(NumGadget)
h=GetTextHeightPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Else
w=26+marge+GetLongerTextInListWidthPix(NumGadget)
h=0
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h )
EndIf
Else
w=26+marge+GetLongerTextInListWidthPix(NumGadget)
h=0
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h);GetTextHeightPix(NumGadget)
EndIf
Case #PB_GadgetType_Date ;================
w=26+GetTextWidthPix(NumGadget)
h=GetTextHeightPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Case #PB_GadgetType_Editor ;================
marge=4
w=marge+GetLongerTextInListWidthPix(NumGadget)
h=(CountGadgetItems(NumGadget)-1)*GetHigherTextInListWidthPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
Case #PB_GadgetType_String ;================
marge=SendMessage_(GadgetID(NumGadget),#EM_GETMARGINS,0,0)
;Returns the width of the left margin in the LOWORD, And the width of the right margin in the HIWORD.
w=4+(marge & $FFFF)+((marge >> 16) & $FFFF)+GetTextWidthPix(NumGadget)
h=GetTextHeightPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Case #PB_GadgetType_Text ;================
w=GetTextWidthPix(NumGadget,0)
h=GetTextHeightPix(NumGadget,0)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Case #PB_GadgetType_HyperLink ;================
w=GetTextWidthPix(NumGadget,0)
If option=#PB_HyperLink_Underline
h=GetTextHeightPix(NumGadget)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Else
h=GetTextHeightPix(NumGadget,0)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , w,h)
EndIf
Case #PB_GadgetType_Spin ;================
old$=GetGadgetText(NumGadget)
min=GetGadgetAttribute(NumGadget, #PB_Spin_Minimum);#PB_Spin_Maximum
SetGadgetText(NumGadget, Str(min))
min=GetTextWidthPix(NumGadget,0)
max=GetGadgetAttribute(NumGadget, #PB_Spin_Maximum)
SetGadgetText(NumGadget, Str(max))
max=GetTextWidthPix(NumGadget,0)
SetGadgetText(NumGadget, old$)
marge=20
h=GetTextHeightPix(NumGadget)
If max>=min
w=marge+max
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Else
w=marge+min
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
EndIf
Case #PB_GadgetType_ButtonImage ;================
If option <> -1
w=ImageWidth(option)
h=ImageHeight(option)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
EndIf
;Case #PB_GadgetType_Image;no effects ;================
;Case #PB_GadgetType_IPAddress;There's a bug somewhere ;================
;old=GetGadgetState(NumGadget)
;SetGadgetState(NumGadget, MakeIPAddress(192, 192, 192, 192))
;ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , GetTextWidthPix(NumGadget),GetTextHeightPix(NumGadget))
;SetGadgetState(NumGadget, old)
Case #PB_GadgetType_ListView ;================
marge=28
min=SendMessage_(GadgetID(NumGadget),#LB_GETITEMHEIGHT,0,0)
;ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+GetLongerTextInListWidthPix(NumGadget),CountGadgetItems(NumGadget)*GetTextHeightPix(NumGadget))
w=marge+GetLongerTextInListWidthPix(NumGadget)
If option = -1 ; all
;ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore , marge+GetLongerTextInListWidthPix(NumGadget),CountGadgetItems(NumGadget)*GetTextHeightPix(NumGadget))
h=min*(CountGadgetItems(NumGadget)+1)
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w ,h)
Else
h=#PB_Ignore
ResizeGadget(NumGadget,#PB_Ignore ,#PB_Ignore ,w,h)
EndIf
EndSelect
ProcedureReturn h
EndProcedure
Exemple.
Code : Tout sélectionner
XIncludeFile "layout.pbi"
XIncludeFile "FitGadget.pbi" ; Windows seulement tout gadget sauf IPGadget
;XIncludeFile "FitGadgetfreak.pbi"; multiplateforme mais prend en charge moins de gadgets.
Enumeration
#win
#Layout
#option_1
#option_2
#option_3
#option_4
#option_5
#option_6
#option_7
#option_8
#option_9
#option_10
#option_11
#option_12
#Frame0
#Frame1
#Frame2
#Frame3
#Frame4
#Frame5
EndEnumeration
; Changer la police
; If LoadFont(1, "Arial", 15)
; SetGadgetFont(#PB_Default, FontID(1))
; EndIf
OpenWindow(#win, 0, 0, 710, 410, "GUI-Layout-Demo Frame3D", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If IsWindow(#win)
createlayout(#Layout,#win)
If layoutInitialized
Frame3DGadget(#Frame0, 0, 0, 1, 1, "Frame 0 - Contenu Relatif")
OptionGadget(#option_1, 0, 0, 1, 1, "Option 1")
OptionGadget(#option_2, 0, 0, 1, 1, "Option 2")
OptionGadget(#option_3, 0, 0, 1, 1, "Option 3")
SetGadgetState(#option_2, 1)
Frame3DGadget(#Frame1, 0, 0, 1, 1, "Frame 1 - Contenu Fixe")
OptionGadget(#option_4, 0, 0, 1, 1, "Option 4")
OptionGadget(#option_5, 0, 0, 1, 1, "Option 5")
OptionGadget(#option_6, 0, 0, 1, 1, "Option 6")
SetGadgetState(#option_4, 1)
Frame3DGadget(#Frame2, 0, 0, 1, 1, "Frame 2 - Contenu Fixe")
OptionGadget(#option_7, 0, 0, 1, 1, "Option 7")
OptionGadget(#option_8, 0, 0, 1, 1, "Option 8")
OptionGadget(#option_9, 0, 0, 1, 1, "Option 9")
SetGadgetState(#option_7, 1)
Frame3DGadget(#Frame3, 0, 0, 1, 1, "Frame 3 - ", #PB_Frame3D_Double)
Frame3DGadget(#Frame4, 0, 0, 1, 1, "Frame 4 - ",#PB_Frame3D_Flat)
Frame3DGadget(#Frame5, 0, 0, 1, 1, "Frame 5 - Contenu Relatif")
OptionGadget(#option_10, 0, 0, 1, 1, "Option 10")
OptionGadget(#option_11, 0, 0, 1, 1, "Option 11")
OptionGadget(#option_12, 0, 0, 1, 1, "Option 12")
SetGadgetState(#option_10, 1)
; Bug sous linux
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
AWPB_GUILO_Fix_Frame3DGadget_Resize(#Frame0)
AWPB_GUILO_Fix_Frame3DGadget_Resize(#Frame1)
AWPB_GUILO_Fix_Frame3DGadget_Resize(#Frame2)
AWPB_GUILO_Fix_Frame3DGadget_Resize(#Frame3)
AWPB_GUILO_Fix_Frame3DGadget_Resize(#Frame4)
AWPB_GUILO_Fix_Frame3DGadget_Resize(#Frame5)
CompilerEndIf
s1 = VBOXLayout(#Layout,#Null,100)
fs0 = HFRAMELayout(#Layout,s1,#Frame0,20,0,0,0,0,#True,15)
AddGadgetLayout(#Layout,fs0,#option_1, 34)
AddGadgetLayout(#Layout,fs0,#option_2, 33)
AddGadgetLayout(#Layout,fs0,#option_3, 33)
fs1 = HFRAMELayout(#Layout,s1,#Frame1,20,10,10,10,10,#False)
AddGadgetLayout(#Layout,fs1,#option_4, FitGadgetW(#option_4)+10)
AddGadgetLayout(#Layout,fs1,#option_5, FitGadgetW(#option_5)+10)
AddGadgetLayout(#Layout,fs1,#option_6, FitGadgetW(#option_6)+10)
s2 = HBOXLayout(#Layout,s1,60)
fs2 = VFRAMELayout(#Layout,s2,#Frame2,50,0,0,0,0,#False)
AddGadgetLayout(#Layout,fs2,#option_7, FitGadgetH(#option_7)+5)
AddGadgetLayout(#Layout,fs2,#option_8, FitGadgetH(#option_8)+5)
AddGadgetLayout(#Layout,fs2,#option_9, FitGadgetH(#option_9)+5)
s3 = VBOXLayout(#Layout,s2,25)
fs3 = HFRAMELayout(#Layout,s3,#Frame3,50)
fs4 = HFRAMELayout(#Layout,s3,#Frame4,50)
fs5 = VFRAMELayout(#Layout,s2,#Frame5,25)
AddGadgetLayout(#Layout,fs5,#option_10, 34)
AddGadgetLayout(#Layout,fs5,#option_11, 33)
AddGadgetLayout(#Layout,fs5,#option_12, 33)
endlayout()
Repeat
Select WaitWindowEvent()
Case #PB_Event_SizeWindow
resizeLayout()
Case #PB_Event_CloseWindow
Select EventWindow()
Case win
CloseWindow(win)
win = 0
Break
EndSelect
EndSelect
ForEver
FreeLayout()
Else
MessageRequester("Erreur", "Erreur de Layout")
EndIf
Else
MessageRequester("Erreur", "Impossible de créer la fenêtre")
EndIf
End
A suivre...
Mesa.