Hi Chip,

I pasted some code below you might be interested in. It is from a method I 
named LB_Header_SplitLabels. You can run it after setting up a listbox, 
whenever you add/remove columns from a listbox, whenever you change the label 
in a listbox column header, and whenever a listbox column width is changed. It 
works especially nice in v16 in On Column Resize since it is run continuously 
now.

Basically what it does is split each header label at spaces so that it will fit 
inside the column width. It even takes into account the sort indicator which 
takes up some room. It then adjusts the height of the listbox header to fit the 
label with the most lines in it.

Even though it is working on the entire listbox each time it is called, it is 
surprisingly fast. It is kind of fun to watch when running in v16—to see the 
header height dynamically change as you resize a column.

Two caveats:

1. The $lExtraWidth variable should work on macOS. I haven’t tested on Windows 
yet which may need a bit more nudge room.
2. There is currently a bug (ACI0096187) in v16 where 4D will give a series of 
stack space errors (or even crash) when this method runs. I find it doesn’t 
happen very often, but you may see it.

Anyway, feel free to use the method if it can add to what you’re doing.

--
Cannon Smith
Synergy Farm Solutions Inc.
Hill Spring, AB Canada
403-626-3236
<can...@synergyfarmsolutions.com>
<www.synergyfarmsolutions.com>


  //Given a listbox and a column, this method will split a header label at 
spaces when the column width becomes
  //too small. It also resizes the header height to accomodate the header with 
the most lines. It works no matter
  //the font, size, style, or how high the header is. It will simply split on 
spaces when necessary and put as
  //much of the label as possible in the header area.

  //This can be called when setting up a listbox. It can also be called during 
On Column Resize..

C_POINTER($1;$pLB)  //A pointer to the listbox

$pLB:=$1

C_TEXT($tLabel;$tFont)
C_LONGINT($x;$y;$lWidth;$lSize;$lStyle;$lMaxLines;$lExtraWidth)
ARRAY TEXT($atColNames;0)
ARRAY TEXT($atHeadNames;0)
ARRAY POINTER($apColVars;0)
ARRAY POINTER($apHeadVars;0)
ARRAY BOOLEAN($afVisible;0)
ARRAY POINTER($apStyles;0)
ARRAY TEXT($atLines;0)

  //Loop through every visible column in the listbox, splitting the label into 
lines based on the current
  //width of the column. Also, keep track of the column with the greatest 
number of lines.
$lMaxLines:=1
LISTBOX GET 
ARRAYS($pLB->;$atColNames;$atHeadNames;$apColVars;$apHeadVars;$afVisible;$apStyles)
For ($x;1;Size of array($atColNames))
        If ($afVisible{$x}=True)
                $lExtraWidth:=Choose($apHeadVars{$x}->>0;15;5)  //Need extra 
room, more if there is a sort indicator
                $lWidth:=LISTBOX Get column 
width(*;$atColNames{$x})-$lExtraWidth
                $tLabel:=Replace string(OBJECT Get 
title(*;$atHeadNames{$x});"\r";" ")
                $tFont:=OBJECT Get font(*;$atHeadNames{$x})
                $lSize:=OBJECT Get font size(*;$atHeadNames{$x})
                $lStyle:=OBJECT Get font style(*;$atHeadNames{$x})
                TEXT TO ARRAY($tLabel;$atLines;$lWidth;$tFont;$lSize;$lStyle)
                
                $tLabel:=""
                For ($y;1;Size of array($atLines))
                        $tLabel:=$tLabel+$atLines{$y}+Choose($y<Size of 
array($atLines);"\r";"")
                End for 
                OBJECT SET TITLE(*;$atHeadNames{$x};$tLabel)
                
                $lMaxLines:=Choose(Size of 
array($atLines)<=$lMaxLines;$lMaxLines;Size of array($atLines))
                
        End if 
End for 

  //Change the listbox header height if it needs to be different than it is
If (LISTBOX Get headers height($pLB->;lk lines)#$lMaxLines)
        LISTBOX SET HEADERS HEIGHT($pLB->;$lMaxLines;lk lines)
End if 

**********************************************************************
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**********************************************************************

Reply via email to