Что нового

Не могу разобраться с GUICtrlCreateLabel

edyapd

Осваивающий
Сообщения
380
Репутация
30
Кусок из программы:
Код:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)

$gui = GUICreate("Моя программа", @DesktopWidth-100, 210, 50, 50)
GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
GUISetState(@SW_SHOW)
Data1()

While 1
	Sleep(1000)
WEnd

Func Data1()
	$lvl =	 GUICtrlCreateLabel("", 82, 57)
 	GUICtrlSetData($lvl, "Level")	
EndFunc

Func Close()
	Exit
EndFunc

Вместо "Level" выводиться часть буквы. Если сделать:
Код:
$lvl =	 GUICtrlCreateLabel("00", 82, 57)

То выводиться чуть больше символов. Но я заранее не знаю сколько символов придется выводить.
Или я вообще что-то не правильно делаю.
Хотел создать несколько указателей и потом забивать через них данные, которые могут со временем меняться.
Подскажите как это можно решить.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
edyapd [?]
Или я вообще что-то не правильно делаю.
Да. не задаешь размеры Label'a. Задай хотябы 50 в длину и 20 по высоте
Код:
$lvl  =   GUICtrlCreateLabel("00", 82, 57, 50, 20)
 

Yashied

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

Код:
#Include <GUIConstantsEx.au3>
#Include <WinAPI.au3>
#Include <WindowsConstants.au3>

GUICreate('MyGUI', 400, 100)
$Label = GUICtrlCreateLabel('', 20, 20)
GUISetState()

_SetData($Label, 'This')
Sleep(400)
_SetData($Label, 'This is')
Sleep(400)
_SetData($Label, 'This is simple')
Sleep(400)
_SetData($Label, 'This is simple text')

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _SetData($CtrlID, $sText)

	Local $hWnd, $Pos, $Size

	$hWnd = GUICtrlGetHandle($CtrlID)
	$Pos = ControlGetPos($hWnd, '', '')
	$Size = _StringSize($hWnd, $sText)
	GUICtrlSetPos($CtrlID, $Pos[0], $Pos[1], $Size[0], $Size[1])
	GUICtrlSetData($CtrlID, $sText)
EndFunc   ;==>_SetData

Func _StringSize($hWnd, $sText)

	Local $hDC, $hFont, $hSv, $tSize, $Result[2]

	$hDC = _WinAPI_GetDC($hWnd)
	$hFont = _SendMessage($hWnd, $WM_GETFONT)
	$hSv = _WinAPI_SelectObject($hDC, $hFont)
	$tSize = _WinAPI_GetTextExtentPoint32($hDC, $sText)
	_WinAPI_SelectObject($hDC, $hSv)
	_WinAPI_ReleaseDC($hWnd, $hDC)
	$Result[0] = DllStructGetData($tSize, 1)
	$Result[1] = DllStructGetData($tSize, 2)
	Return $Result
EndFunc   ;==>_StringSize
 
Автор
E

edyapd

Осваивающий
Сообщения
380
Репутация
30
Спасибо. Пока буду использовать фиксированую длину. Когда разберусь с примером Yashied то может вставлю его.
 
Верх