Jump to content

List Box Static Word Wrap and Indent


Go to solution Solved by dreamzboy,

Recommended Posts

I have a list box control that allows me to see the output as the script runs.  Since I control those outputs, I want the message to display neatly inside the list box without scrolling all the way to the right to read the text.  I don't need anything fancy that calculates the length as I can just send a message from a new line.  Sound simple enough but I'm having trouble getting the function to issue @CRLF and indent properly.  I've already read through >this thread but it's not what I was looking for.

This line did not enter a new line.

GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  Error - One or more fields doesn't match!" & @CRLF & "  Remove white space and/or extra entry before trying again." & @CRLF)

While this line only gave me 1 tab.

GUICtrlSetData ($log_label, @TAB & @TAB & @TAB & "  Remove white space and/or extra entry before trying again." & @CRLF)

Also tried the below but no help either.  It complained about the $aTabs.  I declared $aTabs[1] = [100] at the top (commented out) when trying this method.

GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  Error - One or more fields doesn't match!" & @CRLF)
_GUICtrlListBox_SetTabStops ($log_label, $aTabs)
_GUICtrlListBox_AddString ($log_label, @TAB & "  Remove white space and/or extra entry before trying again." & @CRLF)

Here's my code.  All you have to do is click on the "Generate" button and you'll see what I mean.

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <GuiListBox.au3>
#include <array.au3>
#include <constants.au3>

Opt ("TrayIconDebug", 1)

Local $ribcl_temp = '', $xml_temp, $i, $j
Local $hn_input, $ip_input, $pw_input
Local $host_Count, $ip_Count, $pw_Count
Local $msg, $success, $password, $hostname, $ip_address
Local $log_label, $generate_btn, $clrLog_btn
Local $test_str0 = "dl360g7-25" & @CRLF & "dl360g7-26"
Local $test_str1 = "10.112.15.22" & @CRLF & "10.112.15.23" & @CRLF & "10.112.15.24"
Local $test_str2 = "pass1" & @CRLF & "pass2" & @CRLF & "pass3"
;Local $aTabs[1] = [100]

GUICreate ("Test", 600, 450)

GUICtrlCreateLabel ("1.  Enter hostname (ex: dl360g7-25):", 30, 70, 250, 20)
GUICtrlSetFont (-1, 10)
$hn_input = GUICtrlCreateEdit ("", 30, 90, 215, 70)
GUICtrlSetData ($hn_input, $test_str0)
GUICtrlCreateLabel ("2.  Enter iLO static IP address:", 30, 180, 250, 20)
GUICtrlSetFont (-1, 10)
$ip_input = GUICtrlCreateEdit ("", 30, 200, 215, 70)
GUICtrlSetData ($ip_input, $test_str1)
GUICtrlCreateLabel ("3.  Enter iLO default password:", 30, 290, 200, 20)
GUICtrlSetFont (-1, 10)
$pw_input = GUICtrlCreateEdit ("", 30, 310, 215, 70)
GUICtrlSetData ($pw_input, $test_str2)
$log_label = GUICtrlCreateList ("", 300, 90, 270, 292, BitOR($WS_BORDER, $WS_VSCROLL, $WS_HSCROLL))
$generate_btn = GUICtrlCreateButton ("Generate XML File", 55, 400, 150, 30)
GUICtrlSetFont (-1, 10)
GUICtrlCreateLabel ("version 2.0", 530, 425, 70)
GUICtrlSetColor (-1, 0x0000cd)
$clrLog_btn = GUICtrlCreateButton ("Clear Log", 385, 400, 100, 30)
GUICtrlSetFont (-1, 10)

GUISetState ()

Do
   $msg = GUIGetMsg()

   Select
    Case $msg = $GUI_EVENT_CLOSE
        Exit
    Case $msg = $generate_btn

        ; Check entry simliarity on all fields
        $hostname = StringSplit (GUICtrlRead ($hn_input), @CRLF, 3)
        ;MsgBox (0, "Before", $hostname)
        $hostname = StringStripWS ($hostname, 3)
        ;MsgBox (0, "After", $hostname)
        $host_Count = UBound ($hostname)
        $ip_address = StringSplit (GUICtrlRead ($ip_input), @CRLF, 3)
        $ip_Count = UBound ($ip_address)
        $password = StringSplit (GUICtrlRead ($pw_input), @CRLF, 3)
        $pw_Count = UBound ($password)

        If ($host_Count = $ip_Count And $ip_Count = $pw_Count And $host_Count = $pw_Count) Then
            ;Msgbox($mb_ok,'TRUE', $ip_Count & @crlf & $host_Count & @crlf & $pw_Count)
            GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  It works!")
            For $i = 0 To $host_Count - 1
                ;MsgBox (0, "", $hostname[$i]
                GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  " & $hostname[$i] & @CRLF)
                GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  " & $ip_address[$i] & @CRLF)
                GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  " & $password[$i] & @CRLF)
            Next
        Else
            ;Msgbox($mb_ok,'FALSE', $ip_Count & @crlf & $host_Count & @crlf & $pw_Count)
            GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  Error - One or more fields doesn't match!" & @CRLF & "  Remove white space and/or extra entry before trying again." & @CRLF)
            GUICtrlSetData ($log_label, @TAB & @TAB & @TAB & "  Remove white space and/or extra entry before trying again." & @CRLF)
        Endif

#cs
        Else
            GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  Error - One or more fields doesn't match!")
            MsgBox (48, "Error", "One or more fields does not match!  Please check the entries and try again.")
        EndIf
#ce

        _GUICtrlListBox_UpdateHScroll ($log_label)
        Sleep (1000)

    Case $msg = $clrLog_btn
        GUICtrlSetData ($log_label, "") ; Clear log file
   EndSelect
Until 0

Cheers,

Dreamzboy

Edited by dreamzboy
Link to comment
Share on other sites

  • Moderators

dreamzboy,

Listbox is a single line control - you need to use an Edit control if you want multiple line entries. And if a line is too long for the control you need scrollbars to see it. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Doh!  :mad2:

If you can elaborate on how to use these 2 codes, it would do what I need.  I'm mainly interested in getting the tab to work.  I can manually enter a new line by coding another "_GuiCtrlListBox_AddString" or "GuiCtrlSetData".

From the GUICtrlListBox example, the columns are evenly distributed by the tab stop.  I'd like to set up that tab stop.

Edit:  I already have my horizontal and vertical scroll in place and that is working.

_GUICtrlListBox_SetTabStops ($log_label, $aTabs)
_GUICtrlListBox_AddString ($log_label, @TAB & " Remove white space and/or extra entry before trying again." & @CRLF)
Edited by dreamzboy
Link to comment
Share on other sites

I somewhat figured it out.

I need to declare 4 elements array to be used with _GUICtrlListBox_SetTabStops; however, when that function is called, it looks like this:

Local $aTabs[4] = [3, 30, 0, 0]

_GUICtrlListBox_SetTabStops ($log_label, $aTabs)
_GUICtrlListBox_AddString ($log_label, @HOUR & ":" & @MIN & ":" & @SEC  & "  Error - One or more fields doesn't match!")
_GUICtrlListBox_AddString ($log_label, @TAB & "  Remove white space and/or extra entry before trying again.")

- Output -

 

Remove white space and/or extra entry before trying again.

12:16:52  Error - One or more fields doesn't match!

I wonder why the order flipped?

Edited by dreamzboy
Link to comment
Share on other sites

  • Solution

Figured it out.  Here's a working code in case anyone need to refer to it in the future.

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <GuiListBox.au3>
#include <array.au3>
#include <constants.au3>

Opt ("TrayIconDebug", 1)

Local $ribcl_temp = '', $xml_temp, $i, $j
Local $hn_input, $ip_input, $pw_input
Local $host_Count, $ip_Count, $pw_Count
Local $msg, $success, $password, $hostname, $ip_address
Local $log_label, $generate_btn, $clrLog_btn
Local $test_str0 = "dl360g7-25" & @CRLF & "dl360g7-26" & @CRLF & "dl360g7-27"
Local $test_str1 = "10.112.15.22" & @CRLF & "10.112.15.23" & @CRLF & "10.112.15.24"
Local $test_str2 = "pass1" & @CRLF & "pass2" & @CRLF & "pass3"
Local $aTabs[4] = [3, 29, 0, 0] ; Define your tab stop

GUICreate ("Test", 600, 450)

GUICtrlCreateLabel ("1.  Enter hostname (ex: dl360g7-25):", 30, 70, 250, 20)
GUICtrlSetFont (-1, 10)
$hn_input = GUICtrlCreateEdit ("", 30, 90, 215, 70)
GUICtrlSetData ($hn_input, $test_str0)
GUICtrlCreateLabel ("2.  Enter iLO static IP address:", 30, 180, 250, 20)
GUICtrlSetFont (-1, 10)
$ip_input = GUICtrlCreateEdit ("", 30, 200, 215, 70)
GUICtrlSetData ($ip_input, $test_str1)
GUICtrlCreateLabel ("3.  Enter iLO default password:", 30, 290, 200, 20)
GUICtrlSetFont (-1, 10)
$pw_input = GUICtrlCreateEdit ("", 30, 310, 215, 70)
GUICtrlSetData ($pw_input, $test_str2)
$log_label = GUICtrlCreateList ("", 300, 90, 270, 292, BitOR($WS_BORDER, $WS_VSCROLL, $WS_HSCROLL, $LBS_USETABSTOPS)) ; Add option $LBS_USETABSTOPS to enable tab stop
$generate_btn = GUICtrlCreateButton ("Generate XML File", 55, 400, 150, 30)
GUICtrlSetFont (-1, 10)
GUICtrlCreateLabel ("version 2.0", 530, 425, 70)
GUICtrlSetColor (-1, 0x0000cd)
$clrLog_btn = GUICtrlCreateButton ("Clear Log", 385, 400, 100, 30)
GUICtrlSetFont (-1, 10)

GUISetState ()

Do
   $msg = GUIGetMsg()

   Select
    Case $msg = $GUI_EVENT_CLOSE
        Exit
    Case $msg = $generate_btn

        ; Check entry simliarity on all fields
        $hostname = StringSplit (GUICtrlRead ($hn_input), @CRLF, 3)
        $host_Count = UBound ($hostname)
        ; MsgBox (0, "", $host_Count)
        $ip_address = StringSplit (GUICtrlRead ($ip_input), @CRLF, 3)
        $ip_Count = UBound ($ip_address)
        ; MsgBox (0, "", $ip_Count)
        $password = StringSplit (GUICtrlRead ($pw_input), @CRLF, 3)
        $pw_Count = UBound ($password)
        ; MsgBox (0, "", $pw_Count)

        If ($host_Count = $ip_Count And $ip_Count = $pw_Count And $host_Count = $pw_Count) Then
            ;Msgbox($mb_ok,'TRUE', $ip_Count & @crlf & $host_Count & @crlf & $pw_Count)
            GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  It works!")
            For $i = 0 To $host_Count - 1
                ;MsgBox (0, "", $hostname[$i]
                GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  " & $hostname[$i] & @CRLF)
                GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  " & $ip_address[$i] & @CRLF)
                GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  " & $password[$i] & @CRLF)
            Next
        Else
            ;Msgbox($mb_ok,'FALSE', $ip_Count & @crlf & $host_Count & @crlf & $pw_Count)
            ;_GUICtrlListBox_SetTabStops ($log_label, $aTabs)
            GUICtrlSetData ($log_label, @HOUR & ":" & @MIN & ":" & @SEC & "  Error - One or more fields doesn't match!" & @CRLF)
            _GUICtrlListBox_SetTabStops ($log_label, $aTabs)
            _GUICtrlListBox_AddString ($log_label, @TAB & "  Remove white space and/or extra entry ")
            _GUICtrlListBox_AddString ($log_label, @TAB & "  before trying again.")
            ;GUICtrlSetData ($log_label, @TAB & "  Remove white space and/or extra entry before trying again." & @CRLF)
        Endif

        _GUICtrlListBox_UpdateHScroll ($log_label)
        Sleep (1000)

    Case $msg = $clrLog_btn
        GUICtrlSetData ($log_label, "") ; Clear log file
   EndSelect
Until 0
Edited by dreamzboy
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...