Что нового

Нужен пример создания GUI-окна для вывода потока текста.

Minek

Новичок
Сообщения
10
Репутация
0
При отладке скриптов регулярно хочется посмотреть на состояние некоторых переменных. Возникла идея выпихивать их в некое окошко типа edit, но с заблокированным вводом и вертикальным + горизонтальным скролом. Этакая консоль. Как это лучше сделать правильно?
И некоторые особо важные переменные в этом же окошке хотелось бы прибить на почетное место где нить сверху или снизу - т.е. выводить их как текст (label?) на определенных координатах. Как перерисовать выведенное? Убивать и создавать окошко снова как то неправильно...
 

killbond

Осваивающий
Сообщения
96
Репутация
32
Как перерисовать выведенное? Убивать и создавать окошко снова как то неправильно...
После каждого GUI окна идет свой цикл:
Код:
#include <GUIConstants.au3>

GUICreate("My GUI")  ; will create a dialog box that when displayed is centered
GUISetState (@SW_SHOW)       ; will display an empty dialog box

; Run the GUI until the dialog is closed
While 1
    $msg = GUIGetMsg()
    
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend


Я бы сделал так: в этом цикле забил выполнение функции, которая будет обновлять выведенное...
вообщет это пример из справки, но по-моему такой вариант по-лучше:
Код:
#include <GUIConstants.au3>

GUICreate("My GUI")  ; will create a dialog box that when displayed is centered
GUISetState (@SW_SHOW)       ; will display an empty dialog box

; Run the GUI until the dialog is closed
Do
sleep(10)
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Кстати, sleep(10) здесь задает частоту обновления...

Возникла идея выпихивать их в некое окошко типа edit, но с заблокированным вводом и вертикальным + горизонтальным скролом. Этакая консоль. Как это лучше сделать правильно?

Это либо интеракция, либо Win API но ни того, ни другого я толком не знаю, так что ничего дельного посоветовать не могу ((
Хотя... смотря что ты имеешь ввиду - сделать отдельную прогу или же прикреплять сей "механизм" к каждому скрипту...


Добавлено:
Сообщение автоматически объединено:

http://autoit-script.ru/index.php/topic,332.0.html

Вот здесь посмотри... можно использовать данный принцип...
 
Автор
M

Minek

Новичок
Сообщения
10
Репутация
0
Частично разобрался сам. :smile:

Код:
#include <GUIConstants.au3>

GUICreate("Контроль", 300, 500,900,100,-1,$WS_EX_TOPMOST)
$myedit=GUICtrlCreateEdit ("Стартуем"& @CRLF, 10,10,290,490,$ES_AUTOVSCROLL+$WS_VSCROLL)

GUISetState ()

; will be append dont' forget 3rd parameter
GUICtrlSetData ($myedit, "Second line",1)

; Run the GUI until the dialog is closed
While 1
    $msg = GUIGetMsg()
    
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend


Вот кусок примера, от которого я отталкивался.
А вот такой командой в окошко выпихиваются нужные тексты
GUICtrlSetData ($myedit,$raund&' '&$health&@CRLF,1)

Один косяк уже нашел. :-[
 

killbond

Осваивающий
Сообщения
96
Репутация
32
Проще прописать свою библу, в которой выполняются следующие действия:

1. при запуске "сканирует" скрипт и ищет объявления переменных
2. объявления переменных записываются в виде двухмерного массива:
Array [n] [2]
где
Array [n] [0] - будет имя переменной считанное при шаге 1
Array [n] [1] - ее значение
а n - количество объявленных переменных
3. С помощью ConsoleWrite вывести массив в прогу-монитор переменных, обозначить это действие циклом (вот только тогда будет ли выполнятся основной код скрипта? надо проверить)
4. Монитор, получив массив, будет производить обновления переменных и т.д. ну тут се понятно..

а далее при написании каждого скрипта придется включать эту библу... этакий DebugTool.au3 )))

могу попробовать реализовать подобное, но нужно время...
 

palub

Новичок
Сообщения
32
Репутация
3
Код:
#include <nomadmemory.au3> ;подключаем необходимую библиотеку
GUICreate("Хп",220,50) ;создаем интерфейс
$gui_ph=GUICtrlCreateLabel("",10,10,200,20) ;создаём элемент интерфейса
GUISetState() ;показываем интерфейс
$proces_name="nksp.exe" ;задаём имя процесса
$adres_base=0x10722f08 ;задаём базовый адрес
$adres_ofset=0x109688 ;задаём офсет (смещение)

$PID=ProcessExists($proces_name) ;получаем PID по имяни процесса
$proces_memory = _MemoryOpen($PID) ;открываем память
While 1 ;создаём бесконечный цикл
$base=_MemoryRead($adres_base, $proces_memory) ;читаем значение базового адреса
$hp=_MemoryRead($base+$adres_ofset, $proces_memory) ;читаем значение конечного адреса которое получили суммируя значение базового адреса и офсета
GUICtrlSetData($gui_ph,$hp) ;записываем в элемент интерфейса значение
$msg=GUIGetMsg()
if $msg=-3 Then Exit
WEnd
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
palub
как твой код связан с данной темой?
 
Верх