Ich habe die Linie 471, ist es besser, wenn Sie die Schriftgröße ändern
change this:
Code: Alles auswählen
InnerBorderTop = ____AWPB_GetGadgetTextHeight(GadgetID)
Code: Alles auswählen
InnerBorderTop = ____AWPB_GetGadgetTextHeight(GadgetID)*2
Code: Alles auswählen
InnerBorderTop = ____AWPB_GetGadgetTextHeight(GadgetID)
Code: Alles auswählen
InnerBorderTop = ____AWPB_GetGadgetTextHeight(GadgetID)*2
kein ProblemNino hat geschrieben:@cptdark:
Danke, dass Du Deine Antworten jetzt auch auf Deutsch schreibst.
Grüße, Nino
Code: Alles auswählen
;
;FitGadget.pbi
;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
Code: Alles auswählen
; guilayout_demo5.pb
; Version 0.1 [2012/05/06]
; Copyright (C) 2012 Ronny Krueger
;
; This file is part of AWPB-Tools.
;
; AWPB-Tools is free software: you can redistribute it and/or modify
; it under the terms of the GNU Lesser General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; AWPB-Tools is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU Lesser General Public License for more details.
;
; You should have received a copy of the GNU Lesser General Public License
; along with AWPB-Tools. If not, see <http://www.gnu.org/licenses/>.
;EnableExplicit
; CompilerSelect #PB_Compiler_OS
; CompilerCase #PB_OS_Windows
; IncludePath "..\include\awpbtools"
; CompilerCase #PB_OS_Linux
; IncludePath "../include/awpbtools"
; CompilerEndSelect
XIncludeFile "awguilayout.pbi"
XIncludeFile "FitGadget.pbi"
Define win, gdg0, gdg1, gdg2, gdg3, gdg4, gdg5
Define *sizer.AWPB_GUILO_Sizer, s1.i, s2.i, s3.i
Define fs0.i, fs1.i, fs2.i, fs3.i, fs4.i, fs5.i
; If LoadFont(1, "Arial", 5)
; SetGadgetFont(#PB_Default, FontID(1))
; EndIf
win = OpenWindow(#PB_Any, 542, 122, 410, 410, "GUI-Layout-Demo", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
If IsWindow(win)
*sizer = AWPB_CreateSizerObj(win)
If *sizer
gdg0 = Frame3DGadget(#PB_Any, 0, 0, 1, 1, "Frame 0 20% height, 100% width")
option_1=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 1")
option_2=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 2")
option_3=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 3")
SetGadgetState(option_2, 1)
gdg1 = Frame3DGadget(#PB_Any, 0, 0, 1, 1, "Frame 1 FIXE - with borders a 10 px, 20% height, 100% width")
option_4=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 4")
option_5=OptionGadget(#PB_Any, 60, 0, 1, 1, "Option 5")
option_6=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 6")
SetGadgetState(option_2, 1)
gdg2 = Frame3DGadget(#PB_Any, 0, 0, 1, 1, "Frame 2 FIXE - 60% height, 50% width")
option_7=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 7")
option_8=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 8")
option_9=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 9")
SetGadgetState(option_9, 1)
gdg3 = Frame3DGadget(#PB_Any, 0, 0, 1, 1, "Frame 3 - 30% height, 25% width", #PB_Frame3D_Double)
gdg4 = Frame3DGadget(#PB_Any, 0, 0, 1, 1, "Frame 4 - with borders a 5 px, 30% height, 25% width",#PB_Frame3D_Flat )
gdg5 = Frame3DGadget(#PB_Any, 0, 0, 1, 1, "Frame 5 FIXE - 60% height, 25% width")
option_10=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 10")
option_11=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 11")
option_12=OptionGadget(#PB_Any, 0, 0, 1, 1, "Option 12")
SetGadgetState(option_10, 1)
; only needed for linux, since title does not resize correctly
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
AWPB_GUILO_Fix_Frame3DGadget_Resize(gdg0)
AWPB_GUILO_Fix_Frame3DGadget_Resize(gdg1)
AWPB_GUILO_Fix_Frame3DGadget_Resize(gdg2)
AWPB_GUILO_Fix_Frame3DGadget_Resize(gdg3)
AWPB_GUILO_Fix_Frame3DGadget_Resize(gdg4)
AWPB_GUILO_Fix_Frame3DGadget_Resize(gdg5)
CompilerEndIf
s1 = *sizer\AddSizer(#Null, #AWPB_GUILO_SIZER_VBOX | #AWPB_GUILO_SIZER_REL, 100)
fs0 = *sizer\AddFramedSizer(s1, gdg0, #AWPB_GUILO_SIZER_HBOX | #AWPB_GUILO_SIZER_REL, 20)
*sizer\AddGadget(fs0, option_1, 30)
*sizer\AddGadget(fs0, option_2, 30)
*sizer\AddGadget(fs0, option_3, 30)
fs1 = *sizer\AddFramedSizer(s1, gdg1, #AWPB_GUILO_SIZER_HBOX | #AWPB_GUILO_SIZER_FIX, 20)
*sizer\AddGadget(fs1, option_4, FitGadgetW(option_4)+10)
*sizer\AddGadget(fs1, option_5, FitGadgetW(option_5)+10)
*sizer\AddGadget(fs1, option_6, FitGadgetW(option_6)+10)
s2 = *sizer\AddSizer(s1, #AWPB_GUILO_SIZER_HBOX | #AWPB_GUILO_SIZER_REL, 60)
fs2 = *sizer\AddFramedSizer(s2, gdg2, #AWPB_GUILO_SIZER_VBOX | #AWPB_GUILO_SIZER_FIX, 50)
*sizer\AddGadget(fs2, option_7, FitGadgetH(option_7)+5)
*sizer\AddGadget(fs2, option_8, FitGadgetH(option_8)+5)
*sizer\AddGadget(fs2, option_9, FitGadgetH(option_9)+5)
s3 = *sizer\AddSizer(s2, #AWPB_GUILO_SIZER_VBOX | #AWPB_GUILO_SIZER_REL, 25)
fs3 = *sizer\AddFramedSizer(s3, gdg3, #AWPB_GUILO_SIZER_VBOX | #AWPB_GUILO_SIZER_REL, 50)
fs4 = *sizer\AddFramedSizer(s3, gdg4, #AWPB_GUILO_SIZER_VBOX | #AWPB_GUILO_SIZER_REL, 50)
fs5 = *sizer\AddFramedSizer(s2, gdg5, #AWPB_GUILO_SIZER_VBOX | #AWPB_GUILO_SIZER_REL, 25)
*sizer\AddGadget(fs5, option_10, 30)
*sizer\AddGadget(fs5, option_11, 30)
*sizer\AddGadget(fs5, option_12, 30)
*sizer\Finish()
Repeat
Select WaitWindowEvent()
Case #PB_Event_SizeWindow
*sizer\Resize()
Case #PB_Event_CloseWindow
Select EventWindow()
Case win
CloseWindow(win)
win = 0
Break
EndSelect
EndSelect
ForEver
*sizer\Destroy()
Else
MessageRequester("Fehler", "Konnte Sizer nicht erstellen")
EndIf
Else
MessageRequester("Fehler", "Konnte Fenster nicht erstellen")
EndIf
End
Code: Alles auswählen
Structure AWPB_GUILO_Sizer_Gadget
ParentSizer.i ;-> ParentSizer, returned value of AddSizer / AddFramedSizer
Size.i ; -> as before, size in Percent of the Parentsizer
MinWidth.i ; -> min and max size
MaxWidth.i
MinHeight.i
MaxHeight.i
Flags.i
Align.i
GadgetID.i ; -> Gadget number of gadget to be added
BorderLeft.i ; -> Border around the Gadget
BorderTop.i
BorderRight.i
BorderBottom.i
*OnBeforeResizeCallback.AWPB_GUILO_OnBeforeResize_Proto
*OnAfterResizeCallback.AWPB_GUILO_OnAfterResize_Proto
*GetMinGadgetSize.AWPB_GUILO_GetMinGadgetSize_Proto
*GetMaxGadgetSize.AWPB_GUILO_GetMaxGadgetSize_Proto
EndStructure
Code: Alles auswählen
#AWPB_GUILO_SIZER_HAS_MINSIZE_VAL ;-> if set, you must assign a value to MinWidth / MinHeight
#AWPB_GUILO_SIZER_HAS_MAXSIZE_VAL ; -> if set you must assign a value to MaxWidth / MaxHeight
#AWPB_GUILO_SIZER_HAS_MINSIZE_FUNC ; -> if set you must assign a pointer to a callback-procedure to GetMinGadgetSize
#AWPB_GUILO_SIZER_HAS_MAXSIZE_FUNC ; -> if set you must assign a pointer to a callback-procedure to GetMaxGadgetSize
Code: Alles auswählen
PrototypeC.i AWPB_GUILO_GetMinGadgetSize_Proto(GadgetID.i, Flag.i)
PrototypeC.i AWPB_GUILO_GetMaxGadgetSize_Proto(GadgetID.i, Flag.i)
Code: Alles auswählen
ProcedureC.i MyGetMinGadgetSize(GadgetID.i, Flag.i)
;...
EndProcedure
ProcedureC.i MyGetMaxGadgetSize(GadgetID.i, Flag.i)
;...
EndProcedure