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)*2Code: Alles auswählen
InnerBorderTop = ____AWPB_GetGadgetTextHeight(GadgetID)Code: Alles auswählen
InnerBorderTop = ____AWPB_GetGadgetTextHeight(GadgetID)*2kein 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	
EndStructureCode: 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