Choose Language Hide Translation Bar
david707
Community Trekker

Script to have text boxes be a fixed size

Hi,

I need to generate a window where the top text beox is always a fixed height, with another text box below that being a different fixed height etc. 5 different text boxes are stacked this way. The idea is when the window is displayed the text boxes are always in the same positions regardless of changing text.

Any help greatly appreciated.

Here is my currently unsucessful code:

VALconv = 37.795275591;
VALwidth = 6*VALconv;
tb1 = Text Box(STRname);
tb1 << Set Font("Lucida Handwriting",18,"bold");
tb1 << Set Max Size(VALwidth,1.8*VALconv);
tb1 << Set Width(VALwidth);
tb1 << Set Height(1.8*VALconv);
tb1 << Set Wrap(VALwidth);
hb1 = H List Box(tb1);
hb1 << Set Max Size(VALwidth,1.8*VALconv);
hb1 << Set Min Size(VALwidth,1.8*VALconv);

tb2 = Text Box(STRch1);
tb2 << Set Font("Arial",12);
tb2 << Set Max Size(VALwidth,2*VALconv);
tb2 << Set Width(VALwidth);
tb2 << Set Height(2*VALconv);
tb2 << Set Wrap(VALwidth);
hb2 = H List Box(tb2);
hb2 << Set Max Size(VALwidth,2*VALconv);
hb2 << Set Min Size(VALwidth,2*VALconv);

tb3 = Text Box(STRch2);
tb3 << Set Font("Arial",12);
tb3 << Set Max Size(VALwidth,2*VALconv);
tb3 << Set Width(VALwidth);
tb3 << Set Height(2*VALconv);
tb3 << Set Wrap(VALwidth);
hb3 = H List Box(tb3);
hb3 << Set Max Size(VALwidth,2*VALconv);
hb3 << Set Min Size(VALwidth,2*VALconv);

tb4 = Text Box(STRch3);
tb4 << Set Font("Arial",12);
tb4 << Set Max Size(VALwidth,2*VALconv);
tb4 << Set Width(VALwidth);
tb4 << Set Height(2*VALconv);
tb4 << Set Wrap(VALwidth);
hb4 = H List Box(tb4);
hb4 << Set Max Size(VALwidth,2*VALconv);
hb4 << Set Min Size(VALwidth,2*VALconv);

tb5 = Text Box(STRtype);
tb5 << Set Font("Arial",12);
tb5 << Set Max Size(VALwidth,1*VALconv);
tb5 << Set Width(VALwidth);
tb5 << Set Height(1*VALconv);
tb5 << Set Wrap(VALwidth);
hb5 = H List Box(tb5);
hb5 << Set Max Size(VALwidth,1*VALconv);
hb5 << Set Min Size(VALwidth,2*VALconv);

NW = New Window("NW", hb1,hb2,hb3,hb4,hb5);

 

0 Kudos
5 REPLIES 5
pmroz
Super User

Re: Script to have text boxes be a fixed size

Not sure I understand why this code is unsuccessful.  Please explain what you want the output to look like.  BTW you don't need all of those H List boxes as you're not putting anything horizontally next to the text boxes.  If you're concerned about the width being the same you could use LINEUP BOX.

TextBoxes.png

strname = "Hello World";
strch1  = "Fubarski";
strch2  = strch1;
strch3  = strch1;
strtype = "String Type";

VALconv = 37.795275591;
VALwidth = 6*VALconv;
tb1 = Text Box(STRname);
tb1 << Set Font("Lucida Handwriting",18,"bold") << Set Max Size(VALwidth,1.8*VALconv);
tb1 << Set Width(VALwidth) << Set Height(1.8*VALconv) << Set Wrap(VALwidth);

tb2 = Text Box(STRch1);
tb2 << Set Font("Arial",12) << Set Max Size(VALwidth,2*VALconv);
tb2 << Set Width(VALwidth) << Set Height(2*VALconv) << Set Wrap(VALwidth);

tb3 = Text Box(STRch2);
tb3 << Set Font("Arial",12) << Set Max Size(VALwidth,2*VALconv);
tb3 << Set Width(VALwidth) << Set Height(2*VALconv) << Set Wrap(VALwidth);

tb4 = Text Box(STRch3);
tb4 << Set Font("Arial",12) << Set Max Size(VALwidth,2*VALconv);
tb4 << Set Width(VALwidth) << Set Height(2*VALconv) << Set Wrap(VALwidth);

tb5 = Text Box(STRtype);
tb5 << Set Font("Arial",12) << Set Max Size(VALwidth,1*VALconv);
tb5 << Set Width(VALwidth) << Set Height(1*VALconv) << Set Wrap(VALwidth);

NW = New Window("NW", lineup box(ncol(1), tb1,tb2,tb3,tb4,tb5));
0 Kudos
pmroz
Super User

Re: Script to have text boxes be a fixed size

If you want all of the text boxes to be the same height you could put a two-line text box (two LFs) next to each of the text boxes.  Try this:

strname = "Hello World";
strch1  = "Fubarski";
strch2  = strch1;
strch3  = strch1;
strtype = "String Type";

VALconv = 37.795275591;
VALwidth = 6*VALconv;
tb1 = Text Box(STRname);
tb1 << Set Font("Lucida Handwriting",18,"bold") << Set Max Size(VALwidth,1.8*VALconv);
tb1 << Set Width(VALwidth) << Set Height(1.8*VALconv) << Set Wrap(VALwidth);

tb2 = Text Box(STRch1);
tb2 << Set Font("Arial",12) << Set Max Size(VALwidth,2*VALconv);
tb2 << Set Width(VALwidth) << Set Height(2*VALconv) << Set Wrap(VALwidth);

tb3 = Text Box(STRch2);
tb3 << Set Font("Arial",12) << Set Max Size(VALwidth,2*VALconv);
tb3 << Set Width(VALwidth) << Set Height(2*VALconv) << Set Wrap(VALwidth);

tb4 = Text Box(STRch3);
tb4 << Set Font("Arial",12) << Set Max Size(VALwidth,2*VALconv);
tb4 << Set Width(VALwidth) << Set Height(2*VALconv) << Set Wrap(VALwidth);

tb5 = Text Box(STRtype);
tb5 << Set Font("Arial",12) << Set Max Size(VALwidth,1*VALconv);
tb5 << Set Width(VALwidth) << Set Height(1*VALconv) << Set Wrap(VALwidth);

tb0 = text box("

");

NW = New Window("NW", lineup box(ncol(2), tb1, tb0, tb2, tb0, tb3, tb0, tb4, tb0, tb5, tb0));
0 Kudos
david707
Community Trekker

Re: Script to have text boxes be a fixed size

Sorry I should have been more specific and less vague.

I am trying to always get the exact layout as in this image, with neccessary "white space" so text 2 always starts 1.8cm down if text 1 is short etc.

VALconv is what I believe to be the pixel to cm conversion ratio from a quick google.

They were H list boxes at first as in a future iteration I might want to mix text and images within a "box" that has a fixed size (eg 1.8cm by 6cm), but that is a want to have not a must have and my main goal is to get it to work with plain text first.

0 Kudos

Re: Script to have text boxes be a fixed size

There is a Fixed Size message available for TextBox.  Perhaps, something like the below would work for you. Note: I added BorderBoxes so that you can see the size of the TextBoxes more clearly.

 

strname = "Text1";
strch1 = "Text2";
strch2 = "Text3";
strch3 = "Text4";
strtype = "Text5";

VALconv = 37.795275591;
VALwidth = 6 * VALconv;
tb1 = Text Box( STRname );
tb1 << Set Font( "Lucida Handwriting", 18, "bold" ) << Fixed Size( 1, VALwidth, 1.8 * VALconv );

tb2 = Text Box( STRch1 );
tb2 << Set Font( "Arial", 12 ) << Fixed Size( 1, VALwidth, 2 * VALconv );

tb3 = Text Box( STRch2 );
tb3 << Set Font( "Arial", 12 ) << Fixed Size( 1, VALwidth, 2 * VALconv );

tb4 = Text Box( STRch3 );
tb4 << Set Font( "Arial", 12 ) << Fixed Size( 1, VALwidth, 2 * VALconv );

tb5 = Text Box( STRtype );
tb5 << Set Font( "Arial", 12 ) << Fixed Size( 1, VALwidth, 1 * VALconv );

NW = New Window( "NW",
	Lineup Box( N Col( 1 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb1 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb2 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb3 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb4 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb5 )
	)
);

I hope that helps!

Wendy
0 Kudos
Highlighted
vince_faller
Super User

Re: Script to have text boxes be a fixed size

Building off what @Wendy_Murphrey  said.  I will sometimes make functions return predefined objects as a fake way to subclass.  

 

Names Default to Here( 1 );
strname = "Text1";
strch1 = "Text2";
strch2 = "Text3";
strch3 = "Text4";
strtype = "Text5";

Lucida_Textbox = function({text}, 
	{DEFAULT LOCAL}, 
	VALconv = 37.795275591;
	VALwidth = 6 * VALconv;
	tb = Text Box( text );
	tb << Set Font( "Lucida Handwriting", 18, "bold" ) << Fixed Size( 1, VALwidth, 1.8 * VALconv );
	return(tb);
);

Arial_Textbox = function({text}, 
	{DEFAULT LOCAL}, 
	VALconv = 37.795275591;
	VALwidth = 6 * VALconv;
	tb = Text Box( text );
	tb << Set Font( "Arial", 12 ) << Fixed Size( 1, VALwidth, 2 * VALconv );
	return(tb);
);

tb1 = Lucida_Textbox( STRname );

tb2 = Arial_Textbox( STRch1 );

tb3 = Arial_Textbox( STRch2 );

tb4 = Arial_Textbox( STRch3 );

tb5 = Arial_Textbox( STRtype );

NW = New Window( "NW",
	Lineup Box( N Col( 1 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb1 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb2 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb3 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb4 ),
		Border Box( Left( 0 ), Right( 0 ), Top( 0 ), Bottom( 0 ), Sides( 15 ), tb5 )
	)
);
Vince Faller - Predictum