Что нового

GUI функция GUICtrlCreateLabel

xlgrgrc

Знающий
Сообщения
91
Репутация
7
Ниже часть программы для определения координат мышки.

У меня 3 вопроса.

1. Почему обновление цифр происходит рывками.
2. Почему программа уже через 5 минут движения начинает зависать.
3. подозреваю что можно обновить данные GUICtrlCreateLabel не создавая еще один по верх уже созданой и возможно в этом проблемы 1 и 2


Код:
HotKeySet ( "0" ,"_Exit")

GUICreate("Координаты", 200, 200) 
GUISetState(@SW_SHOW)
GUICtrlCreateLabel("X=", 10, 10)
GUICtrlCreateLabel("Y=", 60, 10)

$x1=0
$y1=0
$x=0
$y=0

While 1
$pos = MouseGetPos()
$x1=$x
$y1=$y
$x = $pos[0]
$y = $pos[1]

if $x1<>$x then 
;~ GUICtrlCreateLabel("     ", 25, 10)
GUICtrlCreateLabel($x, 25, 10)
EndIf

if $y1<>$y then 
;~ GUICtrlCreateLabel("     ", 75, 10)
GUICtrlCreateLabel($y, 75, 10)
EndIf

Sleep(50)
WEnd

Func _Exit()
Exit
EndFunc
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
1. Увеличь паузу. Совсем без рывков не получится.
2. Потому что ты создаешь кучу лэйблов, просто они накладываются друг на друга, поэтому визуально это не заметно. Удаляй старые перед созданием новых
Код:
HotKeySet ( "0" ,"_Exit")

GUICreate("Координаты", 200, 200)
GUISetState(@SW_SHOW)
$l1 = GUICtrlCreateLabel("X=", 10, 10)
$l2 = GUICtrlCreateLabel("Y=", 60, 10)

$x1=0
$y1=0
$x=0
$y=0

While 1
	$pos = MouseGetPos()
	$x1=$x
	$y1=$y
	$x = $pos[0]
	$y = $pos[1]

	if $x1<>$x then
		GUICtrlDelete($l1)
		$l1 = GUICtrlCreateLabel($x, 25, 10)
	EndIf

	if $y1<>$y then
		GUICtrlDelete($l2)
		$l2 = GUICtrlCreateLabel($y, 75, 10)
	EndIf
	Sleep(100)
WEnd

Func _Exit()
	Exit
EndFunc
 
Автор
X

xlgrgrc

Знающий
Сообщения
91
Репутация
7
И ещё вопрос.
Зачем переменной присвояют:

Код:
$m_gui = GUICtrlCreateLabel ($m,  10, 25, 50)


Что это за прием такой?



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

Kaster
Все понял зачем присвояют тоже. Много вопросов решилось само собой )
 

kaster

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

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Kaster,
xlgrgrc,
А зачем удалять старые и создавать новые Label?
Не проще менять в них данные?
Код:
HotKeySet("0", "_Exit")

GUICreate("Координаты", 200, 200)
GUISetState(@SW_SHOW)
$l1 = GUICtrlCreateLabel("X=", 10, 10)
$l2 = GUICtrlCreateLabel("Y=", 60, 10)

$x1 = 0
$y1 = 0
$x = 0
$y = 0

While 1
	$pos = MouseGetPos()
	$x1 = $x
	$y1 = $y
	$x = $pos[0]
	$y = $pos[1]

	If $x1 <> $x Then
		GUICtrlSetData($l1, $x)
	EndIf

	If $y1 <> $y Then
		GUICtrlSetData($l2, $y)
	EndIf
	Sleep(100)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
madmasles
стопудоф легче :rofl:
 
Автор
X

xlgrgrc

Знающий
Сообщения
91
Репутация
7
с GUICtrlSetData все летает даже с 10 миллисекундами, проверял 15 минут все стабильно )))

Спасибо большое за помощь.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
madmasles сказал(а):
А зачем удалять старые и создавать новые Label?

Код:
...

Немного оптимизировал код (зачем создавать столько дополнительных переменных, можно обойтись двумя).

Код:
GUICreate("Координаты", 200, 200)
$L1 = GUICtrlCreateLabel("X=", 10, 10)
$L2 = GUICtrlCreateLabel("Y=", 60, 10)
GUISetState(@SW_SHOW)

$Xp = Default
$Yp = Default

Do
	$Pos = MouseGetPos()
	If $Pos[0] <> $Xp Then
		GUICtrlSetData($L1, $Pos[0])
		$Xp = $Pos[0]
	EndIf
	If $Pos[1] <> $Yp Then
		GUICtrlSetData($L2, $Pos[1])
		$Yp = $Pos[1]
	EndIf
Until GUIGetMsg() = -3
 
Верх