Что нового

Не могу разобраться с 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

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 то может вставлю его.
 
Верх