Что нового

[Окна, Диалоги] Вывод данных переменной в окно

lazarxxx

Новичок
Сообщения
53
Репутация
2
Доброго всем времени!
skrina.png

подскажите плиз, как мне вывести данные допустим переменной $s, в окно!
надо чтоб при изменении переменой её данные постоянно менялись новые оставались вверху, а старые уходили вниз! просмотрел сайт не могу найти подходящего.

допустим такое окно
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("вывод переменной $s", 274, 125, 591, 591)
$Edit1 = GUICtrlCreateEdit("", 48, 16, 185, 89)
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1

;надо чтоб, к примеру, оно в этом окне постоянно выводило
;$s=$s+1 (или текст)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
	Exit
       
	EndSwitch
WEnd

Заранее благодарен!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
lazarxxx,
Попробуйте так.
Код:
#include <GUIConstantsEx.au3>

Global $iCount

AdlibRegister('_MyFunc', 1000)
GUICreate('вывод переменной $iCount', 274, 125)
$nEdit = GUICtrlCreateEdit('', 48, 16, 185, 89)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _MyFunc()
	$iCount += 1
	;GUICtrlSetData($nEdit, $iCount)
	GUICtrlSetData($nEdit, $iCount & @CRLF, 1)
EndFunc   ;==>_MyFunc
 
Автор
L

lazarxxx

Новичок
Сообщения
53
Репутация
2
Да то что нужно! и с функцией я полностью разобрался, как работает! ещё бы ограничение сделать, чтоб сохранённых данных, было допустим 50, а то за сутки она столько понапишет!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
lazarxxx [?]
ещё бы ограничение сделать, чтоб сохранённых данных, было допустим 50, а то за сутки она столько понапишет!
Код:
;...
Func _MyFunc()
	$iCount += 1
	If $iCount = 51 Then
		$iCount = 1
		GUICtrlSetData($nEdit, $iCount & @CRLF)
		Return
	EndIf
	GUICtrlSetData($nEdit, $iCount & @CRLF, 1)
EndFunc   ;==>_MyFunc
;...
 
Автор
L

lazarxxx

Новичок
Сообщения
53
Репутация
2
[Элементы GUI] Re: [Окна, Диалоги] Вывод данных переменной в окно

Доброго всем времени!
Хотел бы продолжить тему так как появился дополнительный вопрос!
С помощью того что здесь разобрали можно выводить любое количество сообщений, либо по одному, после чего стираем всё в ноль! А как сделать чтоб последние (допустим 5 сообщений) не стирались, а стирались ранее выведенные.
Заранее очень благодарен!!!
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Примерно так. Сообщения заносятся в массив, количество сообщений отражается в комбо слева, в комбо в права количество не удаляемых сообщений.
Код:
#include <Array.au3>

#AutoIt3Wrapper_Run_Tidy=y

Global $iCount, $aArrayMess[1]

AdlibRegister('_MyFunc', 1000)
GUICreate('вывод переменной $iCount', 274, 125)
GUICtrlCreateLabel('Количество сообщений', 10, 10, 120, 20)
GUICtrlCreateLabel('Не удалять последние', 150, 10, 150, 20)
$Combo_1 = GUICtrlCreateCombo("", 10, 36, 100, 20)
$Combo_2 = GUICtrlCreateCombo("", 150, 36, 100, 20)
GUICtrlSetData($Combo_2, '1|2|3|4|5')
$Button_1 = GUICtrlCreateButton("Показ сообщений", 10, 70)
$Button_2 = GUICtrlCreateButton("Удаление сообщений", 150, 70)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $Button_1
			AdlibUnRegister("_MyFunc")
			_ArrayDisplay($aArrayMess)
			AdlibRegister('_MyFunc', 1000)
		Case $Button_2
			AdlibUnRegister("_MyFunc")
			Local $Sum = GUICtrlRead($Combo_2)
			For $i = 1 To UBound($aArrayMess) - ($Sum + 1)
				_ArrayDelete($aArrayMess, $i)
				Sleep(100)
			Next
			$iCount = UBound($aArrayMess) - 1
			GUICtrlSetData($Combo_1, '')
			For $i = 1 To UBound($aArrayMess) - 1
				GUICtrlSetData($Combo_1, $i)
			Next
			AdlibRegister('_MyFunc', 1000)
	EndSwitch
WEnd

Func _MyFunc()
	$iCount += 1
	Local $Mess = Random(65, 90, 1)
	Local $namb = $iCount
	ReDim $aArrayMess[$namb + 1]
	$aArrayMess[$namb] = $Mess
	GUICtrlSetData($Combo_1, UBound($aArrayMess) - 1)
EndFunc   ;==>_MyFunc
 
Автор
L

lazarxxx

Новичок
Сообщения
53
Репутация
2
[Элементы GUI] Re: [Окна, Диалоги] Вывод данных переменной в окно

Доброго времени!
Долго разбирался над вашей программкой так и не смог понять толком ничего !
Скорей всего я неправильно задал вопрос чего собственно я хочу получить!
Попробую корректно обьяснить.
Такая программа
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $v=0
GUICreate('вывод переменной $v',250, 140,800,100,1,$WS_EX_TOPMOST)
$nEdit = GUICtrlCreateEdit('', 3, 3, 240,105)
GUISetState()

while 1
  Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
  EndSwitch
   Sleep (1000)
  $v=$v+1
v()
  WEnd
  
Func v()
  GUICtrlSetData($nEdit, $v & @CRLF,-1)

EndFunc   ;==>_MyFunc

Всё что я от неё хочу чтоб допустим после вывода цифры 10 стиралась цифра 1 потом вывод 11 стиралась 2 и.т.д. Я должен видеть постоянно последние 10 данных переменной $v будь она числовой или другими данными.
Заранее благодарен!
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
lazarxxx [?]
после вывода цифры 10 стиралась цифра 1 потом вывод 11 стиралась 2 и.т.д.
Код:
Func v()
  GUICtrlSetData($nEdit, $v & @CRLF, 1)
  $Count = ControlCommand($gui, "", $nEdit, "GetLineCount")
  If $Count = 10+1+1 Then ; 10 строк + пустая последняя + первая удаляемая
    $Text = ""
    For $i = 2 To $Count - 1 ; со второй строки до предпоследней
      $Text &= ControlCommand($gui, "", $nEdit, "GetLine", $i) & @CRLF
    Next
    GUICtrlSetData($nEdit, $Text)
    GUICtrlSendMsg($nEdit, 0x00B7, 0, 0) ; $EM_SCROLLCARET
  EndIf
EndFunc   ;==>_MyFunc
 
Автор
L

lazarxxx

Новичок
Сообщения
53
Репутация
2
вот то что получилось!
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $v=0
GUICreate('вывод переменной $v',250, 300,800,100,1,$WS_EX_TOPMOST)
$nEdit = GUICtrlCreateEdit('', 3, 3, 240,290)
GUISetState()

while 1
  Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
  EndSwitch
   Sleep (1000)
  $v=$v+1
v()
  WEnd
  
Func v()
  GUICtrlSetData($nEdit, $v & @CRLF, 1)
  $Count = ControlCommand($gui, "", $nEdit, "GetLineCount")
  If $Count = 10+1+1 Then ; 10 строк + пустая последняя + первая удаляемая
    $Text = ""
    For $i = 2 To $Count - 1 ; со второй строки до предпоследней
      $Text &= ControlCommand($gui, "", $nEdit, "GetLine", $i) & @CRLF
    Next
    GUICtrlSetData($nEdit, $Text)
    GUICtrlSendMsg($nEdit, 0x00B7, 0, 0) ; $EM_SCROLLCARET
  EndIf
EndFunc   ;==>_MyFunc

ошибка в 20 строке!
 
Автор
L

lazarxxx

Новичок
Сообщения
53
Репутация
2
[Элементы GUI] Re: [Окна, Диалоги] Вывод данных переменной в окно

Благодарю от души!!! Два дня голову над этим ломал!


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

И последний вопрос (если несложно)
Как убрать мигающую (не знаю как она правильно называется) слеш или палочка вертикальная, чтоб глаза не мозолила!
Заранее ещё рас благодарен!
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
lazarxxx [?]
не знаю как она правильно называется
Она называется "каретка"
Код:
...
    GUICtrlSendMsg($nEdit, 0x00B7, 0, 0) ; $EM_SCROLLCARET
  EndIf
  DllCall('user32.dll', 'int', 'HideCaret', 'hwnd', GUICtrlGetHandle($nEdit)) ; <= добавить
EndFunc   ;==>_MyFunc
 
Верх