Что нового

[Элементы GUI] Скрыть Scrollbar'ы если текст не выходит за рамки Edit

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Пример:
Вначале Edit пустой, Scrollbar'ы заблокированы (покрашены в серый цвет, балки не видно).
Когда текст в Edit выходит за его рамки, Scrollbar'ы разблокированы.
Когда текст стирается, они снова блокируются.

Так вот хотелось бы, чтобы они совсем исчезали, а не просто окрашивались серым цветом.

Код:
$hMain = GUICreate('Trololo', 640, 480)
$cEdit = GUICtrlCreateEdit('', 10, 10, 620, 460)

GUISetState()

Do
Until GUIGetMsg() = -3

For $i = 0 To 62 Step +1
	GUICtrlSetData($cEdit, 'abc', 1)
Next
For $i = 0 To 63 Step +1
	GUICtrlSetData($cEdit, 'abc' & @CRLF, 1)
Next

Do
Until GUIGetMsg() = -3

GUICtrlSetData($cEdit, '')

Do
Until GUIGetMsg() = -3
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Ставьте стиль для Edit ES_WANTRETURN.
И проверяйте, как только колличество новых в строк равно колличеству видимых строк-1, то добавляйте стиль WS_VSCROLL.
 
Автор
D

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Re: [Элементы GUI] Скрыть Scrollbar\\\'ы если текст не выходит за рамки Edit

`p r o x y сказал(а):
Ставьте стиль для Edit ES_WANTRETURN.
И проверяйте, как только колличество новых в строк равно колличеству видимых строк-1, то добавляйте стиль WS_VSCROLL.

Осталось только видимые строки посчитать.
А если шрифт и размер окна могут менятся?

Я думал, может как то можно узнать состояние Scrollbar'ов, заблокированы или нет.


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

Проблему решил с помощью _GUIScrollBars_GetScrollBarInfoEx.

После пары тестов сделаю пример.



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

Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

$hMain = GUICreate('Trololo', 640, 480, -1, -1, -1, $WS_EX_COMPOSITED)
$cEdit = GUICtrlCreateEdit('', 10, 10, 620, 460, $ES_WANTRETURN+$ES_AUTOHSCROLL+$ES_AUTOVSCROLL)
$hEdit = GUICtrlGetHandle($cEdit)

GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_COMMAND($hWnd, $MsgID, $wParam, $lParam)
	If $hWnd = $hMain And $lParam = $hEdit And _WinAPI_HiWord($wParam) = $EN_UPDATE Then
		_GUIScrollBars_ShowScrollBar($hEdit, $SB_BOTH, True)
		If BitAND(DllStructGetData(_GUIScrollBars_GetScrollBarInfoEx($hEdit, $OBJID_VSCROLL), 'rgstate', 1), 1) = 1 Then
			_GUIScrollBars_ShowScrollBar($hEdit, $SB_VERT, False)
		EndIf
		If BitAND(DllStructGetData(_GUIScrollBars_GetScrollBarInfoEx($hEdit, $OBJID_HSCROLL), 'rgstate', 1), 1) = 1 Then
			_GUIScrollBars_ShowScrollBar($hEdit, $SB_HORZ, False)
		EndIf
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc
 
Верх