Jump to content

$iMemo = GUICtrlCreateEdit


Iceburg
 Share

Recommended Posts

I have a script that runs 24/7 doing a variety of automation tasks for me. I have set up a On-Click GUI to change what the script is doing, and a small logging window associated with it.

Basically the only thing that I have an issue with is my display logging in the GUI. I have the following code, which is working fine, and in the 2nd day sometime I have iMemo get to the limit of 4096 lines. I have a button that clears iMemo but I miss all that logging while its full.

Is there a way to create iMemo so as it gets to 4096 lines, the first line rolls off, and the new line is added so I can always see the past 4096 lines, and not the first 4096 lines that filled it up?

$iMemo = GUICtrlCreateEdit("",245, 5, $GUIWidth - 240, $GuiHeight - 10, $ES_READONLY + $ES_MULTILINE + $ES_AUTOVSCROLL + $WS_VSCROLL)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
GUICtrlSetData($iMemo, "(" & _Now() & ") Initializing..." & @CRLF, 2)
GUISetState(@SW_SHOW, $GUI)
Link to comment
Share on other sites

I was looking over all the built in functions with edit controls, and could not find a simple step to your problem. However after playing with it for a bit, I think I have a rudimentary solution. instead of limiting to 4096, I made mine for 10 lines to check it. here is my entire write, I hope it helps, Or someone comes up with a better solution for you.

#include<date.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include<string.au3>
#include<file.au3>
#include <GuiEdit.au3>
$GUIWidth=800
$GuiHeight=600
$GUI=GUICreate("Example",$GUIWidth,$GuiHeight)


$iMemo = GUICtrlCreateEdit("",245, 5, $GUIWidth - 240, $GuiHeight - 10, $ES_READONLY + $ES_MULTILINE + $ES_AUTOVSCROLL + $WS_VSCROLL)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
GUICtrlSetData($iMemo, "(" & _Now() & ") Initializing..." & @CRLF, 2)
GUISetState(@SW_SHOW, $GUI)

$c=0;for my testing
Do;you probably want thist to be While 1
    $count=_GUICtrlEdit_GetLineCount($iMemo)
    If $count>=10 Then ;change this to 4096, or whatever line limit you want to set it too. This will check when your control is at limit
        $file=FileOpen(@TempDir & "\Temp_file.txt",2)
        FileWrite($file,GUICtrlRead($iMemo))
        FileClose($file)
        $line=FileReadLine(@TempDir & "\Temp_file.txt",2) 
        $iMsg=$line & @CRLF
        For $i=3 to $count-1 
            $line=FileReadLine(@TempDir & "\Temp_file.txt",$i)
            $iMsg=$iMsg & $line & @CRLF
        Next
        GUICtrlSetData($iMemo, $iMsg);this will reset your edit, and skipping line 1 otherwise deleteing it.
    EndIf
    GUICtrlSetData($iMemo, "(" & _Now() & ") Initializing..." & @CRLF,2);your function to add another line
    $c+=1;for my testing purpose
Until $c=20;Wend

While 1
    Sleep(100)
WEnd

My Contributions: Unix Timestamp: Calculate Unix time, or seconds since Epoch, accounting for your local timezone and daylight savings time. RegEdit Jumper: A Small & Simple interface based on Yashied's Reg Jumper Function, for searching Hives in your registry. 

Link to comment
Share on other sites

This should work:

...
$iMemo = GUICtrlCreateEdit("",245, 5, $GUIWidth - 240, $GuiHeight - 10, $ES_READONLY + $ES_MULTILINE + $ES_AUTOVSCROLL + $WS_VSCROLL)
GUICtrlSetLimit(-1, 0x7FFFFFFF)
...

Br,

UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

This should work:

...
$iMemo = GUICtrlCreateEdit("",245, 5, $GUIWidth - 240, $GuiHeight - 10, $ES_READONLY + $ES_MULTILINE + $ES_AUTOVSCROLL + $WS_VSCROLL)
GUICtrlSetLimit(-1, 0x7FFFFFFF)
...

Br,

UEZ

You rock. I will give it a run, and we'll see in a couple days if it works. Is there anything else I need to worry about? In 60 days is my script going to crash cause its so large? I don't understand the 0x7FFFFFFF hex number. I tried to google it, and apparently we're going to die in 2038 cause of that number. =)

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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...