I don't know if this helps you in your case, but here is one idea for
tabular data in a multiline Textbox.

A multiline Textbox defaults to tabs every 8 positions.  However with a
simple API call you can set the tabs to other positions.

Notes:

    * For some reason NSB/CE 8.1.2a here is not recognizing the
supposedly "built in" SendMessage call, so I had to Declare one here.   
* The tabstop values are not in character-widths since most fonts are
not monospaced.  The values you must provide are roughly in "quarter of
a character" units, so multiply the desired values in character
positions by 4.    * This works great with Courier New, but will also
work with Tahoma since the position is not actually based on character
widths but instead some screen metric that is fixed at about a "quarter
character width."

Sample code, one Form with one Textbox (named txtTable):

ShowOKButton True 'Set Close button to OK
Declare "Function SendMessage Lib ""CoreDLL""" _
       & "Alias ""SendMessageW"" (ByVal hWnd As Long, " _
       & "ByVal wMsg As Long, ByVal wParam As Long, " _
       & "ByVal lParam() As Long) As Long"
Const EM_SETTABSTOPS = &HCB

Dim Count

Sub Form1_Load
     Dim TabStops

     TabStops = Array(7 * 4, 15 * 4)
     SendMessage txtTable.Hwnd, EM_SETTABSTOPS, 2, TabStops
     txtTable.Text = _
         "Count" & vbTab & "Random" & vbTab & "Random * 2" _
       & vbNewLine
     Randomize
     txtTable.Timer = 500
End Sub

Sub txtTable_Timer
     Dim Random

     Count = Count + 1
     Random = Rnd()
     txtTable.Text = txtTable.Text _
                   & FmtNum(Count, 3, -1) & vbTab _
                   & FmtNum(Random, 6, 4) & vbTab _
                   & FmtNum(Random * 2, 8, 4) & vbNewLine
     If Count >= 10 Then txtTable.Timer = 0
End Sub

Function FmtNum(ByVal Value, ByVal Width, ByVal Places)
     If Places < 0 Then
         Value = CStr(Value) 'Integer.
     Else
         Value = FormatNumber(Value, Places) 'Fractional.
     End If
     If Len(Value) > Width Then
         FmtNum = "*" & Right(Value, Width - 1)
     Else
         FmtNum = Right(Space(Width) & Value, Width)
     End If
End Function

The result displays nicely in 3 columns.


--- In [email protected], "georgeewalters" <gwalt...@...>
wrote:
>
> I'm trying to add items to a list box which all the fields will line
up.
> The text box font is Courier New which I think is fixed pitch.
>
> Here's the code that does not line up.
>
> '-- build list box text
> tmp = Left(list(count,recBinNbr) & Space(5),5)
> tmp = tmp & Left(UCase(list(count,recDesc1)) & Space(30),30)
> tmp = tmp & Right(FormatNumber(list(count,recQtyDue),0,0,0,0),5)
> ListBox1.AddItem tmp
>
> How can I fix this, or can you give me some sample code which does.
> Thanks
>


-- 
You received this message because you are subscribed to the Google Groups 
"nsb-ce" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nsb-ce?hl=en.

Reply via email to