Jump to content
Wicked_Caty

No carriage return in label

Recommended Posts

Wicked_Caty

My program generates a huge lot of numbers that has to be displayed in a label. Usually there are around 100 thousand and 1 million numbers, so I obviously have certain problems with space. I get the data into the label, but it's all in one line and simply exceeds the label (by a couple of million pixels, but never mind that)... Of course it won't fit into a 200x200 big label either, but it'd look a lot nicer. I don't even need to scroll in it.

The only thing in need is an automatic @CRLF at the border of the label.

Something like the style $ES_MULTILINE for the input box.

Here's the most important stuff from the GUI.

Local $gui = GUICreate("Crypt", 630, 440)
    Local $in = GUICtrlCreateInput("", 10, 10, 300, 300, $ES_MULTILINE) ; need something like $ES_MULTILINE just one line later in this code
    Local $out = GUICtrlCreateLabel("", 320, 10, 300, 300) ; instead of "", please imagine a random number between 1e5 and 1e6 here please
    ; a lot of buttons that don't matter right now

    GUISetBkColor(0x111111, $gui)
    GUICtrlSetBkColor($in, 0xEEEEEE)
    GUICtrlSetBkColor($out, 0xEEEEEE)
    ; again a lot of button configuartion that's completely unnecessary right now

    GUICtrlSetColor($in, 0x111111)
    GUICtrlSetColor($out, 0x111111)
    ; same as before

    GUISetFont(13, 200, 0, "Candara", $gui)
    GUICtrlSetFont($in, 13, 200, 0, "Candara")
    GUICtrlSetFont($out, 13, 200, 0, "Candara")
    ; still configuation for the buttons

    Local $data0 = ""
    ; some unimportant variables

    GUISetState(@SW_SHOW, $gui)
    
    ; switch from GUIGetMsg() in an infinite while-loop

Thanks!

Share this post


Link to post
Share on other sites
AutoBert

Try this:

#include <GUIConstantsEx.au3>

Example()

Func Example()
    GUICreate("My GUI") ; will create a dialog box that when displayed is centered

    GUICtrlCreateLabel("Line 1 "&@CRLF&"Line 2", 10, 30, 100,59)
    GUISetState(@SW_SHOW) ; will display an empty dialog box

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

        EndSwitch
    WEnd

EndFunc   ;==>Example

 

Share this post


Link to post
Share on other sites
Wicked_Caty
1 minute ago, AutoBert said:

Try this:

#include <GUIConstantsEx.au3>

Example()

Func Example()
    GUICreate("My GUI") ; will create a dialog box that when displayed is centered

    GUICtrlCreateLabel("Line 1 "&@CRLF&"Line 2", 10, 30, 100,59)
    GUISetState(@SW_SHOW) ; will display an empty dialog box

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

        EndSwitch
    WEnd

EndFunc   ;==>Example

 

It would be nice, if I could just squeeze it in manually. Sadly, it doesn't work. I get those numbers in a huge single string, and it has to be exactly that way for further processing. There's nothing I could change about that.

The program has to detect itself when the numbers would exceed the limits of the label. Then it has to put them into the next line without adding an actual carriage return. Similar to what is done in the input box in my example.

Share this post


Link to post
Share on other sites
AutoBert

Then try this:

; *** Start added by AutoIt3Wrapper ***
#include <EditConstants.au3>
; *** End added by AutoIt3Wrapper ***
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>

Example()

Func Example()
    GUICreate("My GUI") ; will create a dialog box that when displayed is centered

    GUICtrlCreateEdit("Line 1 "&@CRLF&"Line 2", 10, 30, 100,59,BitOR($ES_MULTILINE, $ES_ReadOnly))
    GUISetState(@SW_SHOW) ;

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

        EndSwitch
    WEnd

EndFunc   ;==>Example

 

  • Like 1

Share this post


Link to post
Share on other sites
InunoTaishou

Something like this? I would have finished this sooner but I found it to be an interesting concept and wanted to make it more functional, allowing you to scroll through all the lines. A snippit I will store in my saved functions folder :)

#include <GUIConstants.au3>
#include <WinAPI.au3>
#include <Array.au3>

Global $hMain = GUICreate("Multiline", 420, 175)
Global $lblDisplay = GUICtrlCreateLabel("", 10, 10, 380, 130)
Global $btnUpateLabel = GUICtrlCreateButton("Update Label", 10, 145, 380, 20)
Global $btnUp = GUICtrlCreateButton("↑", 390, 10, 25, 25)
Global $btnDown = GUICtrlCreateButton("↓", 390, 115, 25, 25)
Global $lblTopLine = GUICtrlCreateLabel(0 & @CRLF & 0, 395, 60, 30, 30)
Global $aLines = Null
Global $iTopLine = 0

GUICtrlSetFont($btnDown, 14)
GUICtrlSetFont($btnUp, 14)

GUISetState(@SW_SHOW)

While (True)
    Local $sString = ""

    Switch (GUIGetMsg())
        Case $GUI_EVENT_CLOSE
            GUIDelete($hMain)
            Exit 0
        Case $btnUpateLabel
            Local $iRandomStop = Random(99999, 999999, 1)
            For $i = 0 To $iRandomStop
                $sString &= Random(0, 9, 1)
            Next
            $aLines = LongStringToArray($lblDisplay, $sString, $hMain)
            $iTopLine = 0
            ConsoleWrite("Total string length: " & StringLen($sString) & @CRLF & "Rows created from string: " & UBound($aLines) & @CRLF & "Current string: " & $sString & @CRLF)
            GUICtrlSetDataFromArray($lblDisplay, $aLines, $iTopLine, -1)
            GUICtrlSetData($lblTopLine, $iTopLine + 1 & @CRLF & UBound($aLines))

        Case $btnDown
            If ($iTopLine + 1 < UBound($aLines)) Then
                $iTopLine += 1
                GUICtrlSetDataFromArray($lblDisplay, $aLines, $iTopLine, -1)
                GUICtrlSetData($lblTopLine, $iTopLine + 1 & @CRLF & UBound($aLines))
            EndIf
        Case $btnUp
            If ($iTopLine - 1 >= 0) Then
                $iTopLine -= 1
                GUICtrlSetDataFromArray($lblDisplay, $aLines, $iTopLine, -1)
                GUICtrlSetData($lblTopLine, $iTopLine + 1 & @CRLF & UBound($aLines))
            EndIf
    EndSwitch
WEnd

Func GUICtrlSetDataFromArray(Const $iCtrlid, Const $aArray, $iRowStart = -1, $iRowEnd = -1)
    If (Not IsArray($aArray)) Then Return SetError(1, 0, ConsoleWrite("Array not created yet. Press the Update Label button." & @CRLF))
    If ($iRowStart < 0 Or StringLen($iRowStart) = 0 Or $iRowStart >= UBound($aArray)) Then $iRowStart = 0
    If ($iRowEnd < 0 Or StringLen($iRowEnd) = 0 Or $iRowEnd >= UBound($aArray)) Then $iRowEnd = UBound($aArray) - 1
    Local $sDataString = ""

    For $i = $iRowStart To $iRowEnd
        $sDataString &= $aArray[$i] & @CRLF
    Next

    Return GUICtrlSetData($iCtrlid, StringTrimRight($sDataString, 2))
EndFunc   ;==>GUICtrlSetDataFromArray

Func LongStringToArray(Const $iCtrlid, Const $vValue, Const $hWindow)
    If ($vValue = "") Then Return SetError(1, 0, $vValue)
    Local $hWnd = (IsHWnd($iCtrlid) ? $iCtrlid : GUICtrlGetHandle($iCtrlid))
    Local $sFinalString = ""
    Local $aSize = ControlGetPos($hWindow, "", $iCtrlid)
    Local $iStringLen = StringLen($vValue)
    Local $hDC = _WinAPI_GetDC($hWnd)
    Local $hFont = _SendMessage($hWnd, $WM_GETFONT)
    Local $hSelectObject = _WinAPI_SelectObject($hDC, $hFont)

    For $i = 1 To $iStringLen
        Local $sLine = ""
        Local $bMeasured = False
        Do
            $sLine &= StringMid($vValue, $i, 1)

            Local $tSize = _WinAPI_GetTextExtentPoint32($hDC, $sLine)

            If (DllStructGetData($tSize, 1) > $aSize[2]) Then
                $sLine = StringTrimRight($sLine, 1)
                $bMeasured = True
            Else
                $i += 1
            EndIf
            $tSize = Null

        Until ($bMeasured Or $i > $iStringLen)

        $sFinalString &= $sLine & @LF
    Next

    _WinAPI_SelectObject($hDC, $hSelectObject)
    _WinAPI_ReleaseDC($hWnd, $hDC)

    Return StringSplit(StringTrimRight($sFinalString, 2), @LF, $STR_NOCOUNT)
EndFunc   ;==>LongStringToArray

Func GUICtrlMeasureString($iCtrlid)
    Local $hWnd = (IsHWnd($iCtrlid) ? $iCtrlid : GUICtrlGetHandle($iCtrlid))
    Local $aReturn[2] = [0, 0]
    Local $sText = GUICtrlRead($iCtrlid)
    Local $aText = Null
    If ($sText = "") Then Return $aReturn

    Local $hDC = _WinAPI_GetDC($hWnd)
    Local $hFont = _SendMessage($hWnd, $WM_GETFONT)
    Local $hSelectObject = _WinAPI_SelectObject($hDC, $hFont)
    Local $tSize = _WinAPI_GetTextExtentPoint32($hDC, $sText)

    _WinAPI_SelectObject($hDC, $hSelectObject)
    _WinAPI_ReleaseDC($hWnd, $hDC)

    Return $aReturn
EndFunc   ;==>GUICtrlMeasureString

 

Share this post


Link to post
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

  • Similar Content

    • Bllee
      By Bllee
      every time i press "delete button" delete a line, but i can't add new line with info. the id line write normally but i can't change or add new info
      obs: looking at the "includes" one realizes that already tried of everything that knew
      my code
      #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiImageList.au3> #include <GuiListView.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <MsgBoxConstants.au3> #include <WinAPI.au3> #include <StringConstants.au3> #include <Array.au3> #include <GuiListBox.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 612, 480, 192, 154) $MenuItem1 = GUICtrlCreateMenu("&Arquivo") $MenuItem2 = GUICtrlCreateMenuItem("Salvar Ctrl+S", $MenuItem1, $SS_CENTER) $MenuItem4 = GUICtrlCreateMenuItem("Carregar Ctrl+O", $MenuItem1, $SS_CENTER) $MenuItem3 = GUICtrlCreateMenuItem("Salvar Como Shitft+Ctrl+S", $MenuItem1, $SS_CENTER) $Group1 = GUICtrlCreateGroup("", 21, 8, 569, 97, $SS_CENTER) $Input1 = GUICtrlCreateInput("ID COR", 122, 32, 97, 21, $SS_CENTER) $Input2 = GUICtrlCreateInput("REGIÃO", 138, 64, 249, 21, $SS_CENTER) $Input3 = GUICtrlCreateInput("Label", 264, 30, 121, 21, $SS_CENTER) $Label1 = GUICtrlCreateLabel("Label", 232, 32, 30, 17, $SS_CENTER) $Button1 = GUICtrlCreateButton("Capturar Cor", 42, 30, 75, 25, $SS_CENTER) $Button2 = GUICtrlCreateButton("Capturar Região", 42, 62, 91, 25, $SS_CENTER) $Button3 = GUICtrlCreateButton("ADD", 442, 24, 113, 33) $Button5 = GUICtrlCreateButton("Delet", 442, 64, 113, 33) $Group2 = GUICtrlCreateGroup("Editar ID selecionado", 8, 384, 601, 57, $SS_CENTER) $Input7 = GUICtrlCreateInput("ID", 10, 402, 40,21, $SS_CENTER) $Input4 = GUICtrlCreateInput("COR", 51, 402, 121, 21, $SS_CENTER) $Input5 = GUICtrlCreateInput("REGIÃO", 173, 402, 249, 21, $SS_CENTER) $Input6 = GUICtrlCreateInput("LABEL", 423, 402, 121, 21, $SS_CENTER) $Button4 = GUICtrlCreateButton("\/", 544, 400, 30, 25, $SS_CENTER) $Button6 = GUICtrlCreateButton("/\", 574, 400, 30, 25, $SS_CENTER) ; Add column Global $id = Int(0) $List1 = GUICtrlCreateListView("",5, 120, 601, 253, $SS_CENTER) _GUICtrlListView_AddColumn($List1, "ID",40) _GUICtrlListView_AddColumn($List1, "COR",100) _GUICtrlListView_AddColumn($List1, "COORDENADA",305) _GUICtrlListView_AddColumn($List1, "LABEL",150) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $MenuItem2 MsgBox($MB_SYSTEMMODAL, "ctrl + s", "Nothing Here",1) Case $MenuItem3 MsgBox($MB_SYSTEMMODAL, "shift+ctrl s", "Nothing Here",1) Case $MenuItem4 MsgBox($MB_SYSTEMMODAL, "ctrl + o", "Nothing Here",1) Case $Button1 MsgBox($MB_SYSTEMMODAL, "Capturar cor", "Aperte espaço para capturar a cor") GUICtrlSetData($Input1,MouseColor()) Case $Button2 MsgBox($MB_SYSTEMMODAL, "capturar região", "Aperte espaço para capturar a posição inicial") local $mouse = MouseGetPos() $x_init = $mouse[0] $y_init = $mouse[1] MsgBox($MB_SYSTEMMODAL, "capturar região", "Aperte espaço para capturar a posição final") local $mouse = MouseGetPos() $x_end = $mouse[0] $y_end = $mouse[1] GUICtrlSetData($Input2,$x_init&','&$y_init&' ; '&$x_end&','&$y_end) Case $Button3 _GUICtrlListView_AddItem($List1, $id, 1) ; id _GUICtrlListView_AddSubItem($List1, $id, GUICtrlRead($Input1), 1, 1) ;cor _GUICtrlListView_AddSubItem($List1, $id, GUICtrlRead($Input2), 2, 1) ;coordenada _GUICtrlListView_AddSubItem($List1, $id, GUICtrlRead($Input3), 3, 1) ;label $id= $id + 1 Case $Button4 $Item = _GUICtrlListView_GetSelectedIndices($List1) $Sid = _GUICtrlListView_GetItem($List1, Number($Item),0) $Scor = _GUICtrlListView_GetItem($List1, Number($Item),1) $Scord = _GUICtrlListView_GetItem($List1, Number($Item),2) $Slabel = _GUICtrlListView_GetItem($List1, Number($Item),3) ; get info GUICtrlSetData($Input7,$Sid[3]) GUICtrlSetData($Input4,$Scor[3]) GUICtrlSetData($Input5,$Scord[3]) GUICtrlSetData($Input6,$Slabel[3]) Case $Button5 _GUICtrlListView_DeleteItemsSelected($List1) Case $Button6 ; give back inf if GUICtrlRead($Input7) <> "ID" Then _GUICtrlListView_SetItem($List1, GUICtrlRead($Input4), GUICtrlRead($Input7),1) ;cor _GUICtrlListView_SetItem($List1, GUICtrlRead($Input5), GUICtrlRead($Input7),2) ;coordenada _GUICtrlListView_SetItem($List1, GUICtrlRead($Input6), GUICtrlRead($Input7),3) ;coordenada EndIf EndSwitch WEnd Func MouseColor() local $mouse = MouseGetPos() Return Hex(PixelGetColor($mouse[0],$mouse[1]), 6) EndFunc  
    • FrancescoDiMuro
      By FrancescoDiMuro
      Good evening everyone
      First, I want to apologize with you for the title not very clear, but I thought a little bit on which title to set at the thread, and this is the one that came in mind.
      Now, let me explain what I'm trying to understand.

      I am making an application ( with n clients ), with an SQLite Database, which has a Main form, and n sub-forms... 
      Since these sub-forms are called several times, because they are used to add or update records to the Database, I put the code that generates the GUI of these sub-forms in Functions.
      There are two sub-forms which are "treated" as two main forms, since even them have n sub-forms, which perform various tasks.
      Where am I stucked?

      For the Main form I created a Status Bar, in order to display messages ( add/delete/update/search results ), and it works perfectly with all the forms which don't have other sub-forms.
      For the two forms, which indeed have n sub-forms, I created two separated Status Bars, which are (re)created everytime I call the function that then displays the form.
      Practically, I can't set icons to these two Status Bars, and I don't know why.
      I'm really sorry that I don't feel clear enough, so, here you are an example of what I am saying.
      I recreated exactly what my script does:
      #include <GuiButton.au3> #include <GUIConstantsEx.au3> #include <GuiStatusBar.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) Global $frmSubForm, _ $txtSubFormField, _ $sbSubFormStatusBar, _ $objSB_IconError = _WinAPI_LoadShell32Icon(109), _ $objSB_IconInformation = _WinAPI_LoadShell32Icon(277) #Region ### START Koda GUI section ### Form= $frmMainForm = GUICreate("Main Form", 300, 300, -1, -1) GUISetOnEvent($GUI_EVENT_CLOSE, "ExitApplication") $sbMainStatusBar = _GUICtrlStatusBar_Create($frmMainForm) $btnCreateSubForm = GUICtrlCreateButton("Create Sub Form", 105, 110, 75, 41, BitOR($BS_CENTER,$BS_VCENTER,$BS_MULTILINE)) GUICtrlSetOnEvent(-1, "GenerateSubForm") GUICtrlSetFont(-1, 10, 400, 0, "Arial") _GUICtrlStatusBar_SetSimple($sbMainStatusBar) _GUICtrlStatusBar_SetText($sbMainStatusBar, "") GUISetState(@SW_SHOW, $frmMainForm) #EndRegion ### END Koda GUI section ### While 1 Sleep(100) WEnd Func ExitApplication() Exit EndFunc Func GenerateSubForm() #Region ### START Koda GUI section ### Form= $frmSubForm = GUICreate("Sub-Form", 300, 300, -1, -1, -1, -1, $frmMainForm) GUISetOnEvent($GUI_EVENT_CLOSE, "DeleteSubForm") $txtSubFormField = GUICtrlCreateInput("", 0, 0, 100, 20) $btnCheckSubFormField = GUICtrlCreateButton("Check Field", 105, 110, 75, 41, BitOR($BS_CENTER,$BS_VCENTER,$BS_MULTILINE)) GUICtrlSetOnEvent(-1, "CheckSubFormField") GUICtrlSetFont(-1, 10, 400, 0, "Arial") $sbSubFormStatusBar = _GUICtrlStatusBar_Create($frmSubForm) _GUICtrlStatusBar_SetSimple($sbSubFormStatusBar) _GUICtrlStatusBar_SetText($sbSubFormStatusBar, "") GUISetState(@SW_SHOW, $frmSubForm) GUISetState(@SW_DISABLE, $frmMainForm) #EndRegion ### END Koda GUI section ### EndFunc Func DeleteSubForm() ; Declared Globally => $frmSubForm GUIDelete($frmSubForm) GUISetState(@SW_ENABLE, $frmMainForm) EndFunc Func WriteToStatusBar($sbStatusBar, $objSB_Icon, $strText) _GUICtrlStatusBar_SetIcon($sbStatusBar, 0, $objSB_Icon) _GUICtrlStatusBar_SetText($sbStatusBar, $strText) ConsoleWrite("Icon Handle: " & $objSB_Icon & @CRLF) EndFunc Func CheckSubFormField() ; Declared Globally => $txtSubFormField If GUICtrlRead($txtSubFormField) = "" Then ; Declared Globally => $sbStatusBar WriteToStatusBar($sbSubFormStatusBar, $objSB_IconError, "Field NOK.") Else WriteToStatusBar($sbSubFormStatusBar, $objSB_IconInformation, "Field OK.") EndIf EndFunc The text is set, but icon is not.
      Could someone please tell me why?
      Thanks everyone in advance  

      Best Regards.
    • Reziskonh
      By Reziskonh
      Hi, everybody
      I look for GUI whose behavior similar to the message of an email client or antivirus
      In other words:
          Any PC screen able to calculate the size
          To consider the Task bar size
          To find the lower corner on the right/below and to nestle on it

      Notes:
      In GUI the GUICtrlCreateEdit field (as option) - that can be received and displayed through variable information
      Thanks a lot
      PS
      I use the translator, excuse if something is not clear
       

    • VollachR
      By VollachR
      Hi,
      I'd like to show a progress bar for an operation performed by an external program my script is running silently, I want to show it in a GUI I created using the GUICtrlCreateProgress but I have no idea how to do it.
      The important thing to point out is that there's no way of knowing how long the external program will run, as it is a file splitter and it depends on the size of file it splits and the split parts size.
      Can someone point me in the right direction or give me an example how to do so?
      This is my RunWait command:
      RunWait($MYFILES1 & '\fsplit.exe -split ' & $Size & ' mb ' & $File & " -f " & $File & "." & $extension) It uses multiple variables declared and set earlier in the script, how will I got about having the progress of that command shown using GUICtrlCreateProgress ? Is it possible?
      Thank you.
    • nacerbaaziz
      By nacerbaaziz
      Hello my friends
      I have an inquiry and I hope to find the answer here
      I want to create a graphical user interface
      but I want to hide the system menu
      I mean the window menu
      Is this possible?
      If is possible please give me how to do that
      Thanks in advance
×