Code : Tout sélectionner
;Code SROD
;Code Mesa
;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
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
Code : Tout sélectionner
XIncludeFile "FitSizeGadget.pbi"
Enumeration
#gadget0
#gadget1
#gadget2
#gadget3
#gadget4
#gadget5
#gadget6
#gadget7
#gadget8
#gadget9
#gadget10
#gadget11
#gadget12
#gadget13
#gadget14
#gadget15
#gadget16
#gadget17
EndEnumeration
; GetTextWidthPix(NumGadget, espace=1)
; GetTextHeightPix(NumGadget, espace=8)
; FitGadget(NumGadget, En_Longueur.b=#True, En_Hauteur.b=#True)
UsePNGImageDecoder()
UseJPEGImageDecoder()
LoadImage(#gadget0, #PB_Compiler_Home + "examples/sources/Data/Geebee2.bmp")
If OpenWindow(100, 0, 0, 800, 600, "ButtonGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
;font1=LoadFont(0,"Arial",18)
;SetWindowColor(100, $ffffff)
ScrollAreaGadget(#gadget17, 0, 0, 800,600, 800, 3000, 30)
SetGadgetColor(#Gadget17, #PB_Gadget_BackColor, $ffffff)
ButtonGadget(#gadget1, 10, 0, 0 , 0, "Bouton standard"):FitGadget(#gadget1)
ButtonImageGadget(#gadget2, 10, 0, 0, 0, ImageID(#gadget0)):FitGadget(#gadget2,#True,#True,#gadget0)
OptionGadget(#gadget3, 10, 0, 0, 0, "Option 1"):FitGadget(#gadget3)
CalendarGadget(#gadget4, 10, 0, 0, 0):FitGadget(#gadget4)
CheckBoxGadget(#gadget5, 10, 0, 0, 0, "Case à cocher standard"):FitGadget(#gadget5)
ComboBoxGadget(#gadget6, 10, 0, 0, 0)
For i = 1 To 15
AddGadgetItem(#gadget6, -1,"Elément de liste déroulante " + Str(i))
Next i
AddGadgetItem (#gadget6,-1,"ok")
FitGadget(#gadget6)
ComboBoxGadget(#gadget7, 10, 0, 0, 0, #PB_ComboBox_Image)
AddGadgetItem(#gadget7, -1, "Liste déroulante avec une image", ImageID(#gadget0))
FitGadget(#gadget7)
StringGadget(#gadget8, 10, 0, 0, 0, "Gadget saisie de texte normal..."):FitGadget(#gadget8)
TextGadget(#gadget9, 10, 0, 0, 0,"Gadget texte standard (texte aligné à gauche)"):FitGadget(#gadget9)
DateGadget(#gadget10, 10, 0, 0, 0, "Date : %dd/%mm/%yyyy Heure : %hh:%ii"):FitGadget(#gadget10)
EditorGadget(#gadget11, 10, 0, 0, 0)
For i = 0 To 5
AddGadgetItem(#gadget11, -1, "Ligne "+Str(i))
Next i
AddGadgetItem (#gadget11,-1,"ok")
FitGadget(#gadget11)
HyperLinkGadget(#gadget12, 10, 0, 0, 0,"Lien rouge", RGB(255,0,0)):FitGadget(#gadget12)
HyperLinkGadget(#gadget13, 10, 0, 0, 0,"Lien vert souligné (Police Arial)", RGB(0,255,0), #PB_Font_Underline)
SetGadgetFont(#gadget13, LoadFont(0, "Arial", 12))
FitGadget(#gadget13,#True,#True,#PB_Font_Underline)
SpinGadget(#gadget14, 10, 0, 0, 0, 0, 1000)
SetGadgetState (#gadget14, 5) : SetGadgetText(#gadget14, "5")
FitGadget(#gadget14)
ListViewGadget(#gadget15,10,10,0,0)
For a=1 To 12
AddGadgetItem (#gadget15,-1,"Elément "+Str(a)+" de la boîte de liste") ; défini le contenu de la boîte de liste
Next
AddGadgetItem (#gadget15,-1,"azertyuiopqsdfghjklmwxcvbnazertyuiop")
AddGadgetItem (#gadget15,-1,"a")
FitGadget(#gadget15)
ListViewGadget(#gadget16,10,10,0,50)
For a=1 To 12
AddGadgetItem (#gadget16,-1,"Elément "+Str(a)+" de la boîte de liste") ; défini le contenu de la boîte de liste
Next
AddGadgetItem (#gadget16,-1,"azertyuiopqsdfghjklmwxcvbnazertyuiop")
AddGadgetItem (#gadget16,-1,"a")
FitGadget(#gadget16,#True,#True,0)
CloseGadgetList()
; For i=#gadget1 To #gadget17
; FitGadget(i)
; Next i
;
dy=10
y=GadgetY(#gadget1)
y=y+GadgetHeight(#gadget1)
y=y+dy
For i=#gadget2 To #gadget16
ResizeGadget(i, #PB_Ignore, y, #PB_Ignore, #PB_Ignore)
y=GadgetY(i)
y=y+GadgetHeight(i)
y=y+dy
Next i
;ResizeGadget(0,#PB_Ignore,#PB_Ignore,133,#PB_Ignore)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
; ok #PB_GadgetType_Button : ButtonGadget()
; ok #PB_GadgetType_ButtonImage : ButtonImageGadget()
; ok #PB_GadgetType_Option : OptionGadget()
; ok #PB_GadgetType_Calendar : CalendarGadget()
; ok #PB_GadgetType_CheckBox : CheckBoxGadget()
; ok #PB_GadgetType_ComboBox : ComboBoxGadget()
; ok #PB_GadgetType_String : StringGadget()
; ok #PB_GadgetType_Text : TextGadget()
; ok #PB_GadgetType_Date : DateGadget()
; ok*#PB_GadgetType_Editor : EditorGadget()
; ok #PB_GadgetType_HyperLink : HyperLinkGadget()
; ok #PB_GadgetType_Spin : SpinGadget()
; bug #PB_GadgetType_IPAddress : IPAddressGadget()
; ok #PB_GadgetType_ListView : ListViewGadget()
;
;=========================================================
; #PB_GadgetType_Container : ContainerGadget()
; #PB_GadgetType_ExplorerCombo : ExplorerComboGadget()
; #PB_GadgetType_ExplorerList : ExplorerListGadget()
; #PB_GadgetType_ExplorerTree : ExplorerTreeGadget()
; #PB_GadgetType_Frame3D : Frame3DGadget()
; #PB_GadgetType_Image : ImageGadget()
; #PB_GadgetType_ListIcon : ListIconGadget()
; #PB_GadgetType_MDI : MDIGadget()
; #PB_GadgetType_Panel : PanelGadget()
; #PB_GadgetType_ProgressBar : ProgressBarGadget()
; #PB_GadgetType_Scintilla : ScintillaGadget()
; #PB_GadgetType_ScrollArea : ScrollAreaGadget()
; #PB_GadgetType_ScrollBar : ScrollBarGadget()
; #PB_GadgetType_Splitter : SplitterGadget()
; #PB_GadgetType_TrackBar : TrackBarGadget()
; #PB_GadgetType_Tree : TreeGadget()
; #PB_GadgetType_Web : WebGadget()
; #PB_GadgetType_Unknown : Type inconnu, problablement pas un gadget PureBasic.