Что нового

Фреймворк, концепция для GUI

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Маленький фреймворк который может устанавливать данные в контролы и менять им цвет.
Он скромный, но с большим потенциалом для развития.

Вот вариант синтаксиса:

Подключаем фреймворк:
Код:
#include 'framework.au3'

Устанавливаем свойства для контрола $label1
Код:
GUI($Label1,array('data','AutoIT','color',0xFF0000))

или так, т.к порядок не имеет никакого значение, выбираются только необходимые свойства.
Код:
GUI($Label1,array('color',0xFF0000,'data','AutoIT'))


Вот так можно задать события для контролов:
Код:
GUI($Label1,array('data','Нажмите для выхода','onclick',__labelClick)) ;Требуется бета версия AutoIT, иначе заключить  в ковычки '__labelClick'

Func __labelClick()
	Exit
EndFunc


Код фреймворка:
Код:
#include-once
Opt('GUIOnEventMode',1)
Func GUI($v1 = 0,$v2 = 0,$v3 = 0)
	For $i = 0 To UBound($v2) - 1
		Switch StringLower($v2[$i][0])
			Case 'data'
				GUICtrlSetData($v1,$v2[$i][1])
			Case 'color'
				GUICtrlSetColor($v1,$v2[$i][1])
			Case 'onclick'
				GUICtrlSetOnEvent($v1,$v2[$i][1])
		EndSwitch
	Next
EndFunc
Func array($v1 = 0, $v2 = 0,$v3 = 0,$v4 = 0)
	Local $at[2][2]
	$at[0][0] = $v1
	$at[0][1] = $v2
	$at[1][0] = $v3
	$at[1][1] = $v4
	Return $at
EndFunc

Небольшая демонстрация
Код:
$Form1 = GUICreate("Framework Test", 212, 116, 192, 124)
$Label1 = GUICtrlCreateLabel("Label1", 24, 8, 172, 17)
GUISetState(@SW_SHOW)

#include 'framework.au3'

GUI($Label1,array('data','Нажмите для выхода','onclick',__labelClick))

Func __labelClick()
	ConsoleWrite('Кликнули Выходим' & @LF)
	Exit
EndFunc

While 1
	Sleep(100)
WEnd

Как вам идея? Можно сообществом сделать из этого что то серьезное.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Если framework будет иметь хоть 1/3 возможностей WPF (писать свои контролы, изменять их стиль и цвет, тень, прозрачные окна на которых можно создавать элементы окна, (все окна и контролы рисуются с помощью DirectX или OpenGL, а не с помощью скудного WinAPI)), то я только за, если же нет, то думаю и смысла нет.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Вот например рисуют с помощью Direct2D с аппаратным ускорением, но библиотека D2D1.dll к сожалению не работает в Windows XP, а так было бы не плохо на нём Framework накидать....
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Есть ещё вариант, рисовать с помощью GDIPlus, конечно будет подтормаживать, но ради красоты придётся чем - то пожертвовать :IL_AutoIt_1: , идеи такие:

1. Создаём пустуй GUI
2. Сделать функцию которая будет создавать на GUI графический контекст типа _GDIPlus_GraphicsCreateFromHWND, а handle будет заноситься в отведённую для этого структуру, в структуре будут так же находится такие параметры как handle окна, его размеры и очередь сообщений (не знаю, нужны ли все сообщения, но сообщения связанные с мышью обязательны)
3. Сделать функцию которая будет очищать контекст и снова его перерисовывать, поставить эту функцию на такие сообщения как WM_PAIN, WM_ERASEBKGND и т.д.
4. После этого можно делать функции для создания контролов, все их параметры так же будут хранится в струтуре отведённая определённому контролу, при создании контрола он должен передать handle структуры в массив который будет обрабатывать функция перерисовки, если изменился размер окна, то функция перерисовки должна сработать и перерисовать все контролы на новые места
5. Конечно всё это сложно и очень туго будет работать, но это будет первый и огромный шаг к кастомному UI в AutoIt

Кстати, ни кто не знает нормальной UI библиотеки для AutoIt кроме GTK+ без дополнительного хвоста?

P.S. перепробовал много всякий фрэймворков и движков (GTK, Qt, Tk, Fox ToolKit, WPF, wxWidget и т.д.) на разных язык и с большой уверенностью могу сказать что наиболее удобный из всех оказался .NET C# WPF, как ни странно но здесь M$ постаралась что бы разработчику было максимально удобно писать графический интерфейс.
 
Верх