kashamalasha

How to put formatted text via GUICtrlSetData to native Edit field

9 posts in this topic

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

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Insert a Console('Data: '&$YourRawDataFromSQLite&@crlf) in your script and post this line from console output.

Copy the line from edit and post it.

Edited by AutoBert

Share this post


Link to post
Share on other sites

Example:

^XA
^FX | Delete files from FLASH (E:)  | ^FS
^IDE:X5_*.*^FS
^XZ

Screenshot from ConsoleWrite:

 

1.PNG

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

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
1 person likes this

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

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

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

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

Share this post


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

Share this post


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

Share this post


Link to post
Share on other sites

Eventually I replaced GUICtrlCreateEdit with _GUICtrlRichEdit_Create.

Thanks all.

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

    • WoodGrain
      By WoodGrain
      Hi guys,
      This post was originally going to be a question on how to fix this issue but as I ended up figuring it out I thought I'd post it here for others that have the same issue.
      So you've downloaded and extracted the latest version of the SQLite dll files etc into the same directory as your SQLite script but it's failing at _SQLite_Startup()?
      What you need to do, that I couldn't see anywhere in the documentation, to fix the issue is rename the dll files from (for example) "sqlite3_301500000.dll" to "sqlite3.dll" and "sqlite3_x64_301500000.dll" to "sqlite3_x64.dll".
      Fixed my issues instantly!
      Hope it can help others too.
      Cheers.
    • rootx
      By rootx
      I hope someone explain me how to do that... well, if you run the command netstat -a inside cmd prompt he look nice( indented ) but if you try to show the output inside the GUICtrlCreateEdit he look without indentation... how can I  fix it? Thx
      $Pid = Run(@ComSpec & " /c " & "netstat -a",@ScriptDir,@SW_HIDE,$STDERR_CHILD + $STDOUT_CHILD) Dim $_StderrRead='', $_StdoutRead='', $_StdReadAll='' While ProcessExists ( $Pid ) $_StderrRead = StderrRead ( $Pid ) If Not @error And $_StderrRead <> '' Then GUICtrlSetData($Edit1, "Error: " & $_StderrRead & @Crlf ,1) EndIf $_StdoutRead = StdoutRead ( $Pid ) If Not @error And $_StdoutRead <> '' Then GUICtrlSetData($Edit1, "Log: " & $_StdoutRead & @Crlf ,1) EndIf Wend  
    • rootx
      By rootx
      How can I write a good output inside Edit control?
       4 example on notepad (windows) he looks terrible... but he looks perfect on notepad++ and cmd. THX
      GUICtrlSetData($Edit1, "Log: " & $_StdoutRead & @Crlf ,1) the log..
      <snip>
    • corgano
      By corgano
      I have a script working on a windows 7, 64 bit OS that uses SQLite. I went to transfer to to my laptop so i could work on it while on the go, but it's not running on my laptop (Windows 10, 64 bit). The script / autoit is configured to compile and run as x86 for compatibility's sake, via the option during autoit setup.

      Here is the minimal code to reproduce my problem:
       
      #include <SQLite.au3> #include <SQLite.dll.au3> ;Without this, downloading fails HttpSetUserAgent("Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0") If @CPUArch = "x86" and Not FileExists("sqlite3.dll") then InetGet("https://www.autoitscript.com/autoit3/pkgmgr/sqlite/sqlite3.dll", @ScriptDir&"\sqlite3.dll") ConsoleWrite("Error = "&@error&@CRLF) EndIf If @CPUArch = "x64" and Not FileExists("sqlite3_x64.dll") then InetGet("https://www.autoitscript.com/autoit3/pkgmgr/sqlite/sqlite3_x64.dll", @ScriptDir&"\sqlite3_x64.dll") ConsoleWrite("Error = "&@error&@CRLF) EndIf _SQLite_Startup() If @error Then MsgBox($MB_SYSTEMMODAL, "SQLite Error "&@error, "SQLite3.dll Can't be Loaded!") ConsoleWrite("https://www.autoitscript.com/autoit3/pkgmgr/sqlite/sqlite3_x64.dll"&@CRLF) ConsoleWrite(@ScriptDir&"\sqlite3_x64.dll"&@CRLF) Exit -1 EndIf Downloading works, files are downlaoded to @scriptdir properly. However no matter what I do with _SQLite_Startup() it fails with @error = 1. I've tried explicitly telling it to use both versions of the dll as well as leaving it to choose for itself and nothing works. Help?
    • kitoy
      By kitoy
      I wanted to make a countdown timer without queueing the countdown message to the next line but the previous data is removed after using GUICtrlSetData. Any thoughts on how to display the previous data/message?

      Here is an example:
      #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $_main = GUICreate("", 501, 313, -1, -1) Global $g_idMemo = GUICtrlCreateEdit("", 2, 2, 496, 274, $ES_AUTOVSCROLL + $ES_READONLY + $WS_VSCROLL) GUICtrlSetData(-1, "") GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New") GUICtrlSendMsg($g_idMemo, $EM_SETREADONLY, True, 0) GUICtrlSetBkColor($g_idMemo, 0xFFFFFF) GUICtrlSetCursor($g_idMemo, -1) GUISetState(@SW_SHOW) HotKeySet('{esc}', "_close") Func _close() Exit EndFunc ;==>_close Func MemoWrite($sMessage = "") GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1) EndFunc ;==>MemoWrite MemoWrite("test message 1") Sleep(1000) MemoWrite("test message 2") Sleep(1000) MemoWrite("test message 3") Sleep(1000) For $i = 5 to 0 Step -1 GUICtrlSetData($g_idMemo, "Program will exit in "&$i&" seconds...") Sleep(1000) Next While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd