Что нового

[Элементы GUI] Не могу понять, как сделать строки в GUICtrlCreateEdit "уходящими" в никуда

zero_1632

Новичок
Сообщения
15
Репутация
0
Есть цель сделать что-то вроде лога последних действий
Важно чтобы старые строки при получении новых "уезжали" совсем, то есть не жрали память.
Сейчас - несмотря на отсутствие вертикального скролла, можно "промотать" стрелками вверх-вниз на старые записи. Можно ли сделать свойствами контрола или надо считыватать его каждый раз, удалять старый, очищать весь и вносить уже с новым значением?
А еще, несмотря на $ES_READONLY, можно поставить курсор на произвольную часть старых строк, и оттуда начнется новое заполнение.
Как запретить контролу вообще реагировать на мышку или клаву?

Код:
#include <EditConstants.au3>
$Form1 = GUICreate("", 623, 285, 192, 114)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 601, 233, BitOR($ES_AUTOVSCROLL,$ES_READONLY))
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW,$Form1)
While 1
	GUICtrlSetData($Edit1, Random(1,100) & @CRLF,-1)
	sleep(300)
Wend
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
zero_1632 [?]
Как запретить контролу вообще реагировать на мышку или клаву?
Код:
; как вариант
GUICtrlSetState(-1,$GUI_DISABLE)

Или можно поверх элемента прозрачный Label создать, но в таком случае клавишей TAB всё-равно можно будет сфокусироваться на этом элементе, если нет стиля READONLY
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Код:
#include <EditConstants.au3>
#include <WindowsConstants.au3>

GUICreate('My Program', 250, 260)
$iEdit = GUICtrlCreateEdit('', 10, 10, 240, 250, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_NOHIDESEL + $ES_WANTRETURN)
GUISetState()
For $i = 1 To 1000
	_Added($iEdit, $i, 3)
	Sleep(300)
Next

Func _Added($iEdit, $sNewString, $iK)
	GUICtrlSetData($iEdit, $sNewString & @CRLF & StringRegExpReplace(GUICtrlRead($iEdit), '(?s)((?:.*?\r\n){'&$iK&'})(.*)', '\1'))
EndFunc
 
Верх