Что нового

Отображение элементов после изменения названия Tab вкладки

Ksaan

Знающий
Сообщения
207
Репутация
15
Не могу понять как вернуть отображение элементам после изменения названия Tab вкладки.
Код:
#include <GUIConstantsEx.au3>
#include <GuiTab.au3>
#include <WindowsConstants.au3>
#include <GuiRichEdit.au3>

$Debug_TAB = False

Global $hTab

	$hGUI = GUICreate("(UDF) Создаёт Tab", 400, 300)
	$hTab = _GUICtrlTab_Create($hGUI, 2, 2, 396, 296)
	GUISetState()

	_GUICtrlTab_InsertItem($hTab, 0, "Вкладка 1")
	$hRichEdit = _GUICtrlRichEdit_Create($hTab, "Текст", 10, 30, 375, 220, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
	$btnNext = GUICtrlCreateButton("Далее", 10, 260, 60, 30)

    While 1
         Switch GUIGetMsg()
             Case $GUI_EVENT_CLOSE
                 GUIDelete()
                 Exit

             Case $btnNext
				 _GUICtrlTab_SetItemText($hTab, 0, "Новая вкладка")

         EndSwitch
     WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ksaan,
_WinAPI_RedrawWindow()?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Для создания Tab используйте нативные функции AutoIt.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Ksaan
Бессмысленно указывать $hTab для RichEdit, при многочисленных вкладках, отображение элементов созданных не нативно, придётся обрабатывать вручную...

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUITab.au3>
#include <GUIRichEdit.au3>

$hGUI = GUICreate("(UDF) Создаёт Tab", 400, 300)

$hTab = GUICtrlCreateTab(2, 2, 396, 296)
$iTabItem1 = GUICtrlCreateTabItem("Вкладка 1")
$hRichEdit = _GUICtrlRichEdit_Create($hGUI, "Текст", 10, 30, 375, 220, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
$iTabItem2 = GUICtrlCreateTabItem("Вкладка 2")
GUICtrlCreateTabItem("")

$btnNext = GUICtrlCreateButton("Далее", 10, 260, 60, 30)

GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			GUIDelete()
			Exit
		Case $btnNext
			GUICtrlSetData($iTabItem1, "Новая вкладка")
		Case $hTab
			If _GUICtrlTab_GetItemParam($hTab, GUICtrlRead($hTab)) = $iTabItem1 Then
				ControlShow($hGUI, '', $hRichEdit)
			Else
				ControlHide($hGUI, '', $hRichEdit)
			EndIf
	EndSwitch
WEnd
 
Автор
Ksaan

Ksaan

Знающий
Сообщения
207
Репутация
15
madmasles
Спасибо

CreatoR
Не все так просто как кажется, при током подходе если использовать нативную Tab в многострочном элементе RichEdit, происходит перекрытие элементов после заполнения поля. По этому и использовал UDF.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Ksaan, запомните несколько простых правил (не навязываю):
  • По возможности всегда используйте нативные функции для работы с Tab - GUICtrlCreateTab... Это обеспечит автоматический показ/скрытие элементов при переключении вкладок.
  • Все элементы, созданные с помощью нативных функций - GUICtrlCreate..., будут автоматически скрываться/показываться при переключении вкладок.
  • Элементы, созданные с помощью UDF - _GUICtrl..._Create(), привязывайте к Tab, а не к основному окну.
  • Если на вкладках присутствуют такие элементы, то нужно позаботиться о их скрытии/показе самому. Лучше всего это делать через WM_NOTIFY.
 
Верх