Что нового

[Элементы GUI] Формирование таблицы в GUI

cobra2029

Новичок
Сообщения
54
Репутация
0
Есть ли такой элемент GUI - таблица?
Если он существует прошу информацию по его использованию.

поиск юзал - не нашел.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: [Элементы GUI] Формирование таблици в GUI

cobra2029,
ИМХО, больше всего под определение "таблица" подходит ListView.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
cobra2029 [?]
Есть ли такой элемент GUI - таблица?
Что подразумевается под таблицей?


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

Впрочем есть Table UDF.
 
Автор
C

cobra2029

Новичок
Сообщения
54
Репутация
0
ListView, уже смотрел... а другого ни чего нет?


опишу задачу, возможно её решения я не правильно себе представил:


GIU окно, в котором необходимо увидеть следующее:

Код:
№     Название       Время
1       Z-4567         12:38
2       x-a1             13:01
....................................
$N       $M               $T


OffTopic:
я посчитал, что это должна быть таблица, может есть другое решение


$N - число записей в конфигурационном файле (не всегда одинаковое может изменяться в любой момент)
$M - значение n-й записей в конфигурационном файле
$T - значение n-й записей в конфигурационном файле

при выделение пользователем какой либо строки активируется кнопка "выполнить".

Я предположил, что мне достаточно будет формировать таблицу из массива полученного из конфигурационного файла.

Конфигурационный файл должен был представлять собой:
Код:
[record1]
$N1=1
$M1=Z-4567 
$T1=12:38

[record2]
$N2=2
$M2=x-a1 
$T2=13:01
........................
record"n"]
$N"n"=$N"n"
$M"n"=$M"n"" 
$T"n"=$T"n"

P.S. пока набрал сообщение мне уже ответили :smile:

CreatoR, спасибо сейчас почитаю про эту UDF.





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

OffTopic:

как вы считаете, целесообразно ли использовать для таких целей, .ini или лучше использовать xml?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
cobra2029 [?]
целесообразно ли использовать для таких целей, .ini или лучше использовать xml?
Я лично не стал бы заморачиваться с xml, для меня ini понятнее и удобнее, хотя многие считают что это забытая/древняя форма хранения данных :smile:

Код:
#include <GUIConstantsEx.au3>

$sConfig = @ScriptDir & "\Config.ini"

$hGUI = GUICreate("Test Script", 300, 220)

$nListView = GUICtrlCreateListView("№|Название|Время", 20, 20, 260, 160)
_BuildListFromConfig()

$nButton = GUICtrlCreateButton("Выполнить", 20, 190, 70, 20)
GUICtrlSetState($nButton, $GUI_DISABLE)

GUISetState(@SW_SHOW, $hGUI)
AdlibRegister('_EnableButton', 100)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			ConsoleWrite('Выполнение...' & @LF)
	EndSwitch
WEnd

Func _EnableButton()
	Local $nState = $GUI_ENABLE
	If GUICtrlRead($nListView) = "" Then $nState = $GUI_DISABLE
	
	If Not BitAND(GUICtrlGetState($nButton), $nState) Then
		GUICtrlSetState($nButton, $nState)
	EndIf
EndFunc

Func _BuildListFromConfig()
	Local $aSectNames = IniReadSectionNames($sConfig)
	Local $sItem
	
	For $i = 1 To UBound($aSectNames)-1
		$sItem = _
			IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _
			IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _
			IniRead($sConfig, $aSectNames[$i], "$T" & $i, "")
		
		GUICtrlCreateListViewItem($sItem, $nListView)
	Next
EndFunc
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
OffTopic:
CreatoR [?]
забытая/древняя форма хранения данных
дело не в старости, а в несоответствии современным требованиям. несколько недостатков ini-формата
1. только два уровня вложенности – секция-ключ.
2. не портируемость. стандартизированный способ добавления и извлечения данных из файла реализована только в Windows. есть конечно различные уже готовые инструменты для этого в других осях, но стандарта нет.

эти недостатки и решает xml. ну и более богатые возможности. с помощью xml можно даже сайты строить.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вопрос от cobra2029 (в ЛС):
cobra2029 сказал(а):
...

Ваш ответ мне очень помог, но при применение его к моему конкретному случаю, перестали активироваться кнопки.
Не могли бы Вы подсказать мне где я ошибся?

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
Global $sConfig, $nListView
$sConfig = @ScriptDir & "\Config.ini"

; Interface
$Form1 = GUICreate("Dialog manager", 427, 329, 313, 215)
$PageControl1 = GUICtrlCreateTab(8, 8, 396, 256)

$TabSheet1 = GUICtrlCreateTabItem("Прибытие")
$nListView1 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig1()

$TabSheet2 = GUICtrlCreateTabItem("Отбытие")
$nListView2 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig2()

$TabSheet3 = GUICtrlCreateTabItem("Безопасность")
$nListView3 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig3()

$TabSheet4 = GUICtrlCreateTabItem("Другие")
$nListView4 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig4()

GUICtrlSetState(-1,$GUI_SHOW)
GUICtrlCreateTabItem("")

$Play = GUICtrlCreateButton("Воспроизвести", 310, 272, 91, 25)
$Button2 = GUICtrlCreateButton("Выход", 86, 272, 75, 25)
$Button3 = GUICtrlCreateButton("&Help", 8, 272, 75, 25)
$Read = GUICtrlCreateButton("Прочитать", 232, 272, 75, 25)

GUICtrlSetState($Play, $GUI_DISABLE)
GUICtrlSetState($Read, $GUI_DISABLE)
GUISetState(@SW_SHOW, $Form1)
AdlibRegister('_EnableButton', 50)
; end interface

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Play
			ConsoleWrite('Воспроизведение...' & @LF)
		Case $Button2
			Exit
		Case $Read
			ConsoleWrite('Чтение...' & @LF)

	EndSwitch
WEnd

Func _EnableButton()
    Local $nState = $GUI_ENABLE
    If GUICtrlRead($nListView1) = "" Then $nState = $GUI_DISABLE
	If GUICtrlRead($nListView2) = "" Then $nState = $GUI_DISABLE
	If GUICtrlRead($nListView3) = "" Then $nState = $GUI_DISABLE
	If GUICtrlRead($nListView4) = "" Then $nState = $GUI_DISABLE

    If Not BitAND(GUICtrlGetState($Play), $nState) Then
        GUICtrlSetState($Play, $nState)
    EndIf

	If Not BitAND(GUICtrlGetState($Read), $nState) Then
        GUICtrlSetState($Read, $nState)
    EndIf
EndFunc

;"Прибытие"
Func _BuildListFromConfig1()
    Local $aSectNames = IniReadSectionNames($sConfig)
    Local $sItem

    For $i = 1 To UBound($aSectNames)-1
		$class =IniRead($sConfig, $aSectNames[$i], "$C" & $i, "")

		If $class="Прибытие" Then
			$sItem = _
				IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _
				IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _
				IniRead($sConfig, $aSectNames[$i], "$T" & $i, "")

			GUICtrlCreateListViewItem($sItem, $nListView1)
		EndIf
	Next
EndFunc

Func _BuildListFromConfig2()
    Local $aSectNames = IniReadSectionNames($sConfig)
    Local $sItem

    For $i = 1 To UBound($aSectNames)-1
        $sItem = _
            IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _
            IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _
            IniRead($sConfig, $aSectNames[$i], "$T" & $i, "")

        GUICtrlCreateListViewItem($sItem, $nListView2)
    Next
EndFunc

Func _BuildListFromConfig3()
    Local $aSectNames = IniReadSectionNames($sConfig)
    Local $sItem

    For $i = 1 To UBound($aSectNames)-1
        $sItem = _
            IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _
            IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _
            IniRead($sConfig, $aSectNames[$i], "$T" & $i, "")

        GUICtrlCreateListViewItem($sItem, $nListView3)
    Next
EndFunc

Func _BuildListFromConfig4()
    Local $aSectNames = IniReadSectionNames($sConfig)
    Local $sItem

    For $i = 1 To UBound($aSectNames)-1
        $sItem = _
            IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _
            IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _
            IniRead($sConfig, $aSectNames[$i], "$T" & $i, "")

        GUICtrlCreateListViewItem($sItem, $nListView4)
    Next
EndFunc

Мой ответ (тут):

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

Global $sConfig = @ScriptDir & "\Config.ini"
Global $iActive_ListView

#Region Interface

$hForm = GUICreate("Dialog manager", 427, 329, 313, 215)
$iPageControl = GUICtrlCreateTab(8, 8, 396, 256)

$iTabSheet1 = GUICtrlCreateTabItem("Прибытие")
$iListView1 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig($iListView1, "Прибытие")

$iTabSheet2 = GUICtrlCreateTabItem("Отбытие")
$iListView2 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig($iListView2)

$iTabSheet3 = GUICtrlCreateTabItem("Безопасность")
$iListView3 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig($iListView3)

$iTabSheet4 = GUICtrlCreateTabItem("Другие")
$iListView4 = GUICtrlCreateListView("№|Название объявления|Время", 16, 40, 377, 216)
_BuildListFromConfig($iListView4)

GUICtrlSetState(-1, $GUI_SHOW)
GUICtrlCreateTabItem("")

$iPlay_Bttn = GUICtrlCreateButton("Воспроизвести", 310, 272, 91, 25)
$iExit_Bttn = GUICtrlCreateButton("Выход", 86, 272, 75, 25)
$iHelp_Bttn = GUICtrlCreateButton("&Help", 8, 272, 75, 25)
$iRead_Bttn = GUICtrlCreateButton("Прочитать", 232, 272, 75, 25)

GUICtrlSetState($iPlay_Bttn, $GUI_DISABLE)
GUICtrlSetState($iRead_Bttn, $GUI_DISABLE)

$iActive_ListView = $iListView1

GUISetState(@SW_SHOW, $hForm)
AdlibRegister('_EnableButton', 50)

#EndRegion Interface

While 1
    $iMsg = GUIGetMsg()
	
    Switch $iMsg
        Case $GUI_EVENT_CLOSE, $iExit_Bttn
            Exit
		Case $iPageControl
			$iPage = GUICtrlRead($iPageControl) + 1
			$iActive_ListView = Eval("iListView" & $iPage)
        Case $iPlay_Bttn
            ConsoleWrite('Воспроизведение...' & @LF)
        Case $iRead_Bttn
            ConsoleWrite('Чтение...' & @LF)
    EndSwitch
WEnd

Func _EnableButton()
    Local $iState = $GUI_ENABLE
    If GUICtrlRead($iActive_ListView) = "" Then $iState = $GUI_DISABLE

    If Not BitAND(GUICtrlGetState($iPlay_Bttn), $iState) Then
        GUICtrlSetState($iPlay_Bttn, $iState)
    EndIf

    If Not BitAND(GUICtrlGetState($iRead_Bttn), $iState) Then
        GUICtrlSetState($iRead_Bttn, $iState)
    EndIf
EndFunc

Func _BuildListFromConfig($iLV, $sCheckClass = '')
    Local $aSectNames = IniReadSectionNames($sConfig)
    Local $sItem
	
    For $i = 1 To UBound($aSectNames)-1
        If $sCheckClass = '' Or ($sCheckClass <> '' And IniRead($sConfig, $aSectNames[$i], "$C" & $i, "") = $sCheckClass) Then ;Правда так и не понял зачем это
			$sItem = _
                IniRead($sConfig, $aSectNames[$i], "$N" & $i, "") & "|" & _
                IniRead($sConfig, $aSectNames[$i], "$M" & $i, "") & "|" & _
                IniRead($sConfig, $aSectNames[$i], "$T" & $i, "")

            GUICtrlCreateListViewItem($sItem, $iLV)
        EndIf
    Next
EndFunc
 
Автор
C

cobra2029

Новичок
Сообщения
54
Репутация
0
CreatoR [?]
If $sCheckClass = '' Or ($sCheckClass <> '' And IniRead($sConfig, $aSectNames[$i], "$C" & $i, "") = $sCheckClass) Then ;Правда так и не понял зачем это
это для разграничения по классам: ini переменная в которой написан класс сообщения, и в зависимости от класcа в каждом из tab выводится список только тех записей которые ему соответствуют, код сообщения которое был отправлен Вам в лс, был первой попыткой, по этому там только начало, позднее это получилось сделать.
 
Верх