Jump to content

How to put formatted text via GUICtrlSetData to native Edit field


Recommended Posts

Hello.

Could you help me find the answer for my issue. I'm trying to set fomatted data wich is selected from SQL to GUICtrlCreateEdit field.

And the GUICtrlSetData function is inserting it in one line. But when I'm trying to do the same using MsgBox the data looks fine.

I'm trying to not use _GUICtrlRichEdit UDF.

Thanks in advance. Here is my test code.

#include <GUIConstants.au3>
#include <GUIListBox.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>

Opt("GUIOnEventMode", 1)

$hMainGUI = GUICreate("Test", 520, 240)
$hListBox = _GUICtrlListBox_Create($hMainGUI, "", 10, 10, 180, 80)
$hEdit = GUICtrlCreateEdit("", 10, 80, 500, 150)

GUISetState(@SW_SHOW, $hMainGUI)
GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")

Local $hQuery, $aRow
_SQLite_Startup()
$hDB = _SQLite_Open('MyDB.sqlite')

_SQLite_Query(-1, "SELECT ID ||"". "" || Name FROM Templates ORDER BY ID;", $hQuery)

While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
    _GUICtrlListBox_AddString($hListBox, $aRow[0])
WEnd

GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE_Button")

While 1
    Sleep(100)
WEnd

Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
    $hWndFrom = $lParam
    $iIDFrom = BitAND($wParam, 0xFFFF) ; Low Word
    $iCode = BitShift($wParam, 16) ; Hi Word

    Switch $hWndFrom
        Case $hListBox, $hWndListBox
            Switch $iCode
                Case $LBN_DBLCLK
                    Select_Template(_GUICtrlListBox_GetCurSel($hListBox) + 1)
                    Return 0
            EndSwitch
    EndSwitch
EndFunc   ;==>_WM_COMMAND

Func CLOSE_Button()
    _SQLite_Close()
    _SQLite_Shutdown()
    Exit
EndFunc   ;==>CLOSE_Button

Func Select_Template($sListItem)
    _SQLite_QuerySingleRow($hDB, _
            "SELECT Content " & _
            "FROM Templates " & _
            "WHERE ID = " & $sListItem & ";", $aRow)
;~      MsgBox(64, "Test: " & $sListItem, $aRow[0])
    GUICtrlSetData($hEdit, $aRow[0])
    WinSetTitle($hMainGUI, "", "Test: " & $sListItem)
EndFunc   ;==>Select_Template

 

1.PNG

2.PNG

Link to comment
Share on other sites

Use this:

Func Select_Template($sListItem)
    #cs
    _SQLite_QuerySingleRow($hDB, _
            "SELECT Content " & _
            "FROM Templates " & _
            "WHERE ID = " & $sListItem & ";", $aRow)
;~      MsgBox(64, "Test: " & $sListItem, $aRow[0])
    #ce
    Dim $aRow[1]        ;just for test delete it
    $aRow[0]="^XA^FX | Delete files from FLASH (E:)  | ^FS^IDE:X5_*.*^FS^XZ" ;just for test delete it
    $aRow[0]=StringStripWS(StringReplace(StringReplace($aRow[0],"^",@CRLF&"^"),@CRLF&"^FS","^FS"),$STR_STRIPLEADING)
    GUICtrlSetData($hEdit, $aRow[0])
    WinSetTitle($hMainGUI, "", "Test: " & $sListItem)
EndFunc   ;==>Select_Template

Run >= once without any change, after tested with the hardcoded line, delete the 2 "just for test lines" and try with real data, this means also delete lines #cs and #ce.

Edited by AutoBert
Link to comment
Share on other sites

Yeah! That's work! Thanks a lot.

You save me from this:

If StringLen(_GUICtrlRichEdit_GetText($hRichEdit)) > 0 Then
    _GUICtrlRichEdit_SetSel($hRichEdit, 0, -1, True) 
    _GUICtrlRichEdit_ReplaceText($hRichEdit, $aRow[0])   
Else
    _GUICtrlRichEdit_InsertText($hRichEdit, $aRow[0]) 
EndIf

And other nice features of UDF like WM_SIZE.

Edited by kashamalasha
Link to comment
Share on other sites

Hi again!

I tested my script using StringStripWS and StringReplace tricks and find out that it works correct only if I don't have empty lines in my multilines text files in DB.

E.g. if I store text like this:

^XA
^FX Test script

^FD Test data
^XZ

my script will return me using

$aRow[0] = StringStripWS( _
                    StringReplace( _
                        StringReplace($aRow[0], "^", @CRLF & "^"), _
                    @CRLF & "^FS", "^FS"), _
           $STR_STRIPLEADING)

text formatted like this:

^XA
^FX Test script
^FD Test data
^XZ

Could you tell me, how can I fix it using the same trick with StringStripWS?

Thanks.

Edited by kashamalasha
Link to comment
Share on other sites

What format are you looking to have it come back as? Not really sure what you're trying to achieve with this.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

Hi! For example, as I post previously, I store a text file in my database in this format:

^XA
^FX Test script

^FD Test data
^XZ

When I am trying to read it to GUICtrlCreateEdit via function GUICtrlSetData, it will be placed like this:

^XA^FX Test script^FD Test data^XZ

The trick with function StringStripWS and StringReplace

$aRow[0] = StringStripWS( _
                    StringReplace( _
                        StringReplace($aRow[0], "^", @CRLF & "^"), _
                    @CRLF & "^FS", "^FS"), _
           $STR_STRIPLEADING)

will convert it to this;

^XA
^FX Test script
^FD Test data
^XZ

As you can see, there is no @CRLF that was there in the source file.

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...