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.