Что нового

Обработка HTML кода в AutoIt'e

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Viktor1703 [?]
и так не плохо получается
А я и не говорю что плохо, наоборот :ok:
Я просто хотел сказать, что не всеми веб вкусностями получится воспользоваться.
а для более красивых эффектов буду изворачиваться как смогу
Могу подкинуть идею, если конечно хотите?
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Везде есть свои плюсы и минусы, и иногда приходится выкручиваться очень изощрёнными способами :smile:
На счёт идеи, буду рад и благодарен :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Идея заключается в использование JScript библиотек JQuery, JQueryUI, ExtJS
Что это нам даёт? Ну, во-первых, порядок в коде, а во-вторых удобную работу с DOM :smile:
Структура проекта будет выглядеть так:
Код:
\css
\js
project.au3
JScript библиотеки будут подключаться автоматом, на стадии загрузки html шаблона интерфейса, благодаря объектной модели IE. Далее вызывая функции JScript библиотек в Autoit, строим динамику интерфейса.
Во всём этом есть и подводные камни, ну а где их не бывает. :smile:
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Re: Обработка HTML кода в AutoIt\'e

Очень интересно Garrett :smile:
Но проблема ещё заключается в том что я совершенно не знаю Web программирования, не знаю даже как правильно написать html страницу, я учту ваш совет и попробую разобраться, единственное из-за чего мне будет легче, только из-за того что я знаю что такое CSS и Jscript и как ими пользоваться :smile:


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

А мне понравилась ExtJS, особенно пример интерфейса элементов!!!! я теперь ещё больше хочу написать эту UDF, только знаний и опыта нету.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Viktor1703 [?]
А мне понравилась ExtJS, особенно пример интерфейса элементов!!!!
Не сомневался :smile:

я теперь ещё больше хочу написать эту UDF
:ok:
я совершенно не знаю Web программирования
Чем смогу, помогу :beer:

P.S. Я тоже сторонник разумного использования Autoit + Web технологии, Но не всё так гладко как хотелось бы.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Да, просто ни чего не бывает :smile:, на счёт помощи, заранее Вам огромное спасибо, но я ещё не знаю в чём мне нужна помощь, потихоньку отхожу от шока, наверное надо сильно углубится в Web программирование чтобы написать достойную UDF, я думаю пока что нужно рассудить как это должно выглядеть, какой стартовый html код писать, и как вообще всё это лучше сделать :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
IMHO на первых порах нужно:
1. Продумать концепцию UDF. Она должна быть легка для использования и понимания другими программистами.
2. Продумать систему динамического создания HTML шаблонов элементов и интерфейса в целом. К примеру _CreateButton("Кнопка", ".class_1")
и т.д.

Я бы вам советовал сначала обратить внимание на JQuery, потому как ExtJS более сложная библиотека.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Re: Обработка HTML кода в AutoIt\'e

С Jquery я когда-то имел дело, да и примеров в интернете полно, я думаю на форме AutoIt создать всего 1 объект Sell.Explorer.2 во всё окно, а делее просто добавлять готовый код между тэгами <Body>, <div> и т.д. только я мало понимаю как генерировать код, для примера кнопка:

1. Создаём кнопку _GUIHtml_CreateButton(Params)
2. Установить стили для кнопки (цвет, шрифт...)
3. После всего проделанного собрать этот код в один и добавить в <body>

Пока не знаю как лучше такое реализовать, да и на счёт Class - к сожалению ни когда с ними не сталквивался :(


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

До меня дошло что Вы имели ввиду под .Class_1, это CSS шаблон кнопки, надеюсь правильно понял, опять же встаёт вопрос как быть с CSS, писать его собственноручно либо проделывать это всё программно, на счёт Class это отличная идея :smile:
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Re: Обработка HTML кода в AutoIt\'e

Решил делать в таком виде:

Код:
Global $__obj_Control[1][2] = [[0, 0]]

Func _GUIHtml_Create($iLeft, $iTop, $iWidth, $iHeight)
	Local $oIE = ObjCreate('Shell.Explorer.2')
	If (Not IsObj($oIE)) Then
		Return SetError(-1, 0, 0)
	EndIf	
	$__obj_Control[0][0] += 1
	ReDim $__obj_Control[$__obj_Control[0][0] + 1][UBound($__obj_Control, 2)]
	$__obj_Control[$__obj_Control[0][0]][0] = $oIE
	$__obj_Control[$__obj_Control[0][0]][1] = GUICtrlCreateObj($oIE, $iLeft, $iTop, $iWidth, $iHeight)
	
	$oIE.Navigate('about:blank')
	Return $oIE
EndFunc


Чтобы можно было обращаться к объекту Shell.Explorer.2 и возвращать id контрола GUICtrlCreateObj, это позволит создавать более одного такого элемента на форме, и ещё, как сделать обработку ошибок объекта, учитывая ещё то что обрабатывать ошибки нужно будет не только в этой функции, но и во всех остальных?


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

Я полагаю делается это так?

Код:
Global $__obj_Control[1][2] = [[0, 0]], $__obj_Error = 0, $__obj_Event = ObjEvent('AutoIt.Error', '__com_getError')

Func _GUIHtml_Create($iLeft, $iTop, $iWidth, $iHeight)
	Local $oIE = ObjCreate('Shell.Explorer.2')
	If (Not IsObj($oIE)) Then
		Return SetError(-1, 0, 0)
	EndIf	
	$__obj_Control[0][0] += 1
	ReDim $__obj_Control[$__obj_Control[0][0] + 1][UBound($__obj_Control, 2)]
	$__obj_Control[$__obj_Control[0][0]][0] = $oIE
	$__obj_Control[$__obj_Control[0][0]][1] = GUICtrlCreateObj($oIE, $iLeft, $iTop, $iWidth, $iHeight)
	$oIE.Navigate('about:blank')
	If $__obj_Error Then
		Return SetError(-2, 0, 0)
	EndIf	
	Return $oIE
EndFunc	

Func __com_getError()
	$__obj_Error = $__obj_Event.Number
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Viktor1703,
А не надо обнулять $__obj_Error?
Код:
;...
If $__obj_Error Then
	$__obj_Error = 0
	Return SetError(-2, 0, 0)
EndIf
;...
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Благодарю madmasles, не обратил внимания :smile: Теперь необходимо разобратся со структурой Html, что в ней должно быть прежде чем она загрузится в объект, имеется ввиду дополнительные функции JScript, CSS и подключение библиотеки JQuery.js
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Viktor1703 [?]
имеется ввиду дополнительные функции JScript, CSS и подключение библиотеки JQuery.js
Вот две функции для подключения CSS и JScript файлов в tag HEAD на стадии загрузки документа.

Пример:
Код:
#include <IE.au3>

$sJQuery = "../js/jquery/jquery.js"
$sCSS = "../css/style.css"

$oIE = _IECreateEmbedded()
; или
;~ 	$oIE = ObjCreate('Shell.Explorer.2')
;...
_IENavigate($oIE, $sURL)
; или
;~ 	$oIE .Navigate($sURL)
_GUIHtml_HeadInsertCssFile($oIE , $sCSS)
_GUIHtml_HeadInsertScriptFile($oIE , $sJQuery)


Функции:
Код:
Func _GUIHtml_HeadInsertScriptFile(ByRef $o_Obj, $s_ScriptFile)

	If Not IsObj($o_Obj) Then
		Return SetError(1, 1, 0) ; Invalid data type (object)
	ElseIf Not IsString($s_ScriptFile) Then
		Return SetError(1, 2, 0) ; Invalid data type (string)
	EndIf
	
	Local $o_Head = $o_Obj.document.getElementsByTagName("head")(0)
	Local $o_Script = $o_Obj.document.createElement("script")
	
	With $o_Script
		.defer = True
		.language = "jscript"
		.type = "text/javascript"
		.src = $s_ScriptFile
	EndWith
	$o_Head.appendChild($o_Script)
	Return SetError(0, 0, 1)
EndFunc   ;==>_GUIHtml_HeadInsertScriptFile
Код:
Func _GUIHtml_HeadInsertCssFile(ByRef $o_Obj, $s_CssFile)
	
	If Not IsObj($o_Obj) Then
		Return SetError(1, 1, 0) ; Invalid data type (object)
	ElseIf Not IsString($s_CssFile) Then
		Return SetError(1, 2, 0) ; Invalid data type (string)
	EndIf
	
	Local $o_Head = $o_Obj.document.getElementsByTagName("head")(0)
	Local $o_Css = $o_Obj.document.createElement("link")
	
	With $o_Css
		.type = "text/css"
		.rel = 'stylesheet'		
		.href = $s_CssFile
		.media = 'screen'
	EndWith
	$o_Head.appendChild($o_Css)
	Return SetError(0, 0, 1)
EndFunc   ;==>_GUIHtml_HeadInsertCssFile

Функция для выполнения JS на стороне браузера.
Код:
; Example
; Добавляем "голую" кнопку в документ
; _GUIHtml_JScriptRun($o_Obj, "$('body').append('<input id=\'target\' type=\'submit\' value=\'I would like to say:\' />');")
; выполнение функций JS на стороне браузера
Func _GUIHtml_JScriptRun($o_Obj, $s_Cod)
	
    If Not IsObj($o_Obj) Then
        Return SetError(1, 1, 0) ; Invalid data type (object)
    ElseIf Not IsString($s_Cod) Then
        Return SetError(1, 2, 0) ; Invalid data type (string)
    EndIf
	; нужно продумать проверку синтаксиса кода. пока идей нет :(
	$o_Obj.document.parentWindow.execScript($s_Cod)
	Return SetError(0, 0, 1)
EndFunc
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Спасибо Garrett :smile:

А как должна выглядеть страница Html? я пока что такое надумал:

Код:
<html>
  <head>
    <title>0</title>
    <style type="text/css">
      body {
        border: 0px;
        padding: 0px;
        margin: 0px;
      }
    </style>
  </head>
  <body scroll="no">

  </body>
</html>

Что ещё требуется сюда добавить ?

И ещё, я полагаю должно выглядеть так:

Код:
$o_Obj.document.getElementsByTagName("head").Item(0)


я не переходил на новую версию AutoIt и мне выдаёт ошибку при использовании такого приёма

Код:
$o_Obj.document.getElementsByTagName("head")(0)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Viktor1703 [?]
Что ещё требуется сюда добавить ?
Шаблон может наполняться динамически или быть уже готовым.
Код:
<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
</body>
</html>

И ещё, я полагаю должно выглядеть так:
Можно так.
Код:
$o_Obj.document.all.tags("head").Item(0)


я не переходил на новую версию AutoIt и мне выдаёт ошибку
У меня первый вариант работает на Autoit v 3.3.8.1
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
OffTopic:
у html тэг для кода [code=html5][/code]
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kaster
Ok. :thanks:
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Вот так получается:

GUIHtml.au3
Код:
Global $__obj_Control[1][2] = [[0, 0]], $__obj_Error = 0, $__obj_Event = ObjEvent('AutoIt.Error', '__com_getError')

Func _GUIHtml_Create($iLeft, $iTop, $iWidth, $iHeight)
	Local $oIE = ObjCreate('Shell.Explorer.2')
	If (Not IsObj($oIE)) Then
		Return SetError(1, 1, 0)
	EndIf	
	$__obj_Control[0][0] += 1
	ReDim $__obj_Control[$__obj_Control[0][0] + 1][UBound($__obj_Control, 2)]
	$__obj_Control[$__obj_Control[0][0]][0] = $oIE
	$__obj_Control[$__obj_Control[0][0]][1] = GUICtrlCreateObj($oIE, $iLeft, $iTop, $iWidth, $iHeight)
	$oIE.Navigate('about:blank')
	$oIE.Document.Write(__com_HtmlPage())
	$oIE.Document.Close()
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 2, 0)
	EndIf	
	Return $oIE
EndFunc	

Func _GUIHtml_HeadInsertScriptFile(ByRef $oObj, $sScriptFile)
    If (Not IsObj($oObj)) Then
        Return SetError(1, 1, 0) 
    ElseIf (Not IsString($sScriptFile)) Then
        Return SetError(1, 2, 0)
    EndIf
    Local $oHead = $oObj.document.all.tags('head').Item(0)
    Local $oScript = $oObj.document.createElement('script')
    With $oScript
        .defer = True
        .language = "jscript"
        .type = "text/javascript"
        .src = $sScriptFile
    EndWith
    $oHead.appendChild($oScript)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 3, 0)
	EndIf
    Return SetError(0, 0, 1)
EndFunc

Func _GUIHtml_HeadInsertCssFile(ByRef $oObj, $sCSSFile)
    If (Not IsObj($oObj)) Then
        Return SetError(1, 1, 0)
    ElseIf (Not IsString($sCSSFile)) Then
        Return SetError(1, 2, 0)
    EndIf
    Local $oHead = $oObj.document.all.tags('head').Item(0)
    Local $oCSS = $oObj.document.createElement('link')
    With $oCSS
        .type = 'text/css'
        .rel = 'stylesheet'     
        .href = $sCSSFile
        .media = 'screen'
    EndWith
    $oHead.appendChild($oCSS)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(-2, 0, 0)
	EndIf
    Return SetError(0, 0, 1)
EndFunc

Func _GUIHtml_JScriptRun($oObj, $sCod)
    If (Not IsObj($oObj)) Then
        Return SetError(1, 1, 0)
    ElseIf (Not IsString($sCod)) Then
        Return SetError(1, 2, 0)
    EndIf
    $oObj.document.parentWindow.execScript($sCod)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 3, 0)
	EndIf
    Return SetError(0, 0, 1)
EndFunc

Func _GUIHtml_SetBorder($hObj, $iSize, $iColor = 0xFFFFFF)
    $hObj.document.body.style.border = $iSize & 'px solid #' & Hex($iColor, 6)
    If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc

Func _GUIHtml_SetBkColor($hObj, $iColor)
	$hObj.document.bgcolor = '#' & Hex($iColor, 6)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf	
	Return 1
EndFunc

Func _GUIHtml_SetGradient($hObj, $iStartColor, $iEndColor, $iType = 0)
	$hObj.document.body.style.filter = 'progid:DXImageTransform.Microsoft.gradient(startColorstr="#' & Hex($iStartColor, 6) & '", endColorstr="#' & Hex($iEndColor, 6) & '", gradientType="' & $iType & '")'
    If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf	
	Return 1
EndFunc

Func _GUIHtml_SetCursor($hObj, $sCursor)
	Switch $sCursor
	    Case 0
		    $sCursor = 'default'
	    Case 1
		    $sCursor = 'crosshair'
		Case 2
            $sCursor = 'help'	
        Case 3
            $sCursor = 'move'				
	    Case 4
			$sCursor = 'pointer'
		Case 5
            $sCursor = 'progress'
		Case 6
			$sCursor = 'text'
		Case 7 
            $sCursor = 'wait'	
        Case 8
			$sCursor = 'n-resize'
		Case 9
			$sCursor = 'ne-resize'
		Case 10
			$sCursor = 'e-resize'
		Case 11
			$sCursor = 'se-resize'	
		Case 12
			$sCursor = 's-resize'	
		Case 13
			$sCursor = 'sw-resize'		
		Case 14
			$sCursor = 'w-resize'
		Case 15
			$sCursor = 'nw-resize'
		Case Else
            $sCursor = 'url(' & $sCursor & ')'	
    EndSwitch			
			
	$hObj.document.body.style.cursor = $sCursor
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc

Func _GUIHtml_SetScroll($hObj, $iFlag = True)
	If (Not $iFlag) Then
		$hObj.document.body.scroll = 'no'
	ElseIf $iFlag Then
		$hObj.document.body.scroll = 'yes'
	EndIf	
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc	

Func _GUIHtml_SetEvent($hObj, $sHtmlFor, $sEvent, $sScript)
	Local $oScript = $hObj.document.CreateElement('script')
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	With $oScript
		.Defer = True
		.Language = 'jscript'
		.Type = 'text/javascript'
		.HtmlFor = $sHtmlFor
		.Event = $sEvent
		.Text = $sScript
	EndWith
	$hObj.document.all.tags('head').Item(0).AppendChild($oScript)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 2, 0)
	EndIf	
	Return 1
EndFunc

Func _GUIHtml_CreateImage($hObj, $sImage, $iLeft, $iTop, $iWidth, $iHeight, $iContainer = 0)
    Local $tIMG = '<img src="' & $sImage & '" id="' & '1' & '" style="position: absolute; left: ' & $iLeft & 'px; top:' & $iTop & 'px; width: ' & $iWidth & 'px; height: ' & $iHeight & 'px;" onclick="document.title=1"></img>'
    If (Not $iContainer) Then
	    Local $sHtml = $hObj.document.body.InnerHTML
	Else
		Local $sHtml = $hObj.document.getElementById($iContainer).InnerHTML
	EndIf
	If ($sHtml == 0) Then $sHtml = ''
    If (Not $iContainer) Then
        $hObj.Document.Body.InnerHTML = $sHtml & $tIMG
	Else
		$hObj.document.getElementById($iContainer).InnerHTML = $sHtml & $tIMG
	EndIf
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return '1' ; Идентификатор элемента
EndFunc

Func __com_HtmlPage()
	Local $sHtml = ''
	    $sHtml &= '<html>' & @CRLF
	    $sHtml &= '  <head>' & @CRLF
		$sHtml &= '    <META Http-equiv="MSThemeCompatible" content="yes">' & @CRLF
		$sHtml &= '    <title>0</title>' & @CRLF
        $sHtml &= '    <style type="text/css">' & @CRLF
 	    $sHtml &= '      body {' & @CRLF
		$sHtml &= '        border: 0px;' & @CRLF
		$sHtml &= '        padding: 0px;' & @CRLF
        $sHtml &= '        margin: 0px;' & @CRLF
	    $sHtml &= '      }' & @CRLF
	    $sHtml &= '    </style>' & @CRLF
	    $sHtml &= '  </head>' & @CRLF
	    $sHtml &= '  <body scroll="no">' & @CRLF
        $sHtml &= '  </body>' & @CRLF
        $sHtml &= '</html>'
	Return $sHtml
EndFunc	

Func __com_getError()
	$__obj_Error = $__obj_Event.Number
EndFunc

Test script
Код:
#include <GUIConstantsEX.au3>
#include <WindowsConstants.au3>
#Include <GUIHtml.au3>

$hForm = GUICreate('Test AutoIt+Html', 500, 330)
$oHtml = _GUIHtml_Create(0, 0, 500, 330)
_GUIHtml_SetEvent($oHtml, 'document', 'oncontextmenu', 'return false')
_GUIHtml_CreateImage($oHtml, @ScriptDir & '\скриншот.jpg', 20, 20, 100, 100)
GUISetState()

While 1
	If $oHtml.document.title = 1 Then
		MsgBox(0, 'Image', 'Test Event')
		$oHtml.document.title = 0
	EndIf
	Switch GUIGetMsg()
	    Case $GUI_EVENT_CLOSE
		    Exit
	EndSwitch	
Wend

Как идентифицировать элемент _GUIHtml_CreateImage, делать массив с сохранением идентификаторов, или есть другие способы?
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Добавил тень для элемента и прозрачность

Пример:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GUIHtml.au3>

$hForm = GUICreate('Test AutoIt+Html', 500, 300)
$oHtml = _GUIHtml_Create(0, 0, 500, 300)
_GUIHtml_SetGradient($oHtml, 0x000000, 0x404040)
_GUIHtml_SetContextMenu($oHtml, False)
$iDiv = _GUIHtml_CreateDiv($oHtml, 20, 20, 200, 200)
_GUIHtml_SetElementShadow($oHtml, $iDiv, 10, 0x303030)
$iImage = _GUIHtml_CreateImage($oHtml, @ScriptDir & '\скриншот.jpg', 0, 0, 200, 200, $iDiv)
_GUIHtml_SetElementAlpha($oHtml, $iImage, 50)
_GUIHtml_SetElementCursor($oHtml, $iImage, 4)
GUISetState()

While 1
	Switch _GUIHtml_Event($oHtml)
	    Case __event_Click($iImage)
		    _GUIHtml_JScriptExec($oHtml, 'alert("Клик по элементу: ' & $iImage & '")')
		Case __event_DbClick($iImage)
			;_GUIHtml_JScriptExec($oHtml, 'alert("Двойной клик по элементу: ' & $iImage & '")')	
		Case __event_Over($iImage)
			_GUIHtml_SetElementAlpha($oHtml, $iImage, 100)
		Case __event_Out($iImage)	
			_GUIHtml_SetElementAlpha($oHtml, $iImage, 50)
		Case __event_Blur($iImage)
            ConsoleWrite('! Элемент потерял фокус: ' & $iImage & @CRLF)	
        Case __event_Focus($iImage)
			ConsoleWrite('> Элемент получил фокус: ' & $iImage & @CRLF)
	EndSwitch
	
	Switch GUIGetMsg()
	    Case $GUI_EVENT_CLOSE
		    Exit
	EndSwitch	
Wend

GUIHtml.au3
Код:
Global Const $HTML_ELEMENT_CLICK   = 0x10
Global Const $HTML_ELEMENT_DBCLICK = 0x20
Global Const $HTML_ELEMENT_OVER    = 0x30
Global Const $HTML_ELEMENT_OUT     = 0x40
Global Const $HTML_ELEMENT_BLUR    = 0x50
Global Const $HTML_ELEMENT_FOCUS   = 0x60

Global $__obj_Control[1][2] = [[0, 0]], $__obj_ElementId = 0, $__obj_Error = 0, $__obj_Event = ObjEvent('AutoIt.Error', '__com_getError')

Func _GUIHtml_Create($iLeft, $iTop, $iWidth, $iHeight)
	Local $oIE = ObjCreate('Shell.Explorer.2')
	If (Not IsObj($oIE)) Then
		Return SetError(1, 1, 0)
	EndIf	
	$__obj_Control[0][0] += 1
	ReDim $__obj_Control[$__obj_Control[0][0] + 1][UBound($__obj_Control, 2)]
	$__obj_Control[$__obj_Control[0][0]][0] = $oIE
	$__obj_Control[$__obj_Control[0][0]][1] = GUICtrlCreateObj($oIE, $iLeft, $iTop, $iWidth, $iHeight)
	$oIE.Navigate('about:blank')
	$oIE.Document.Write(__com_HtmlPage())
	$oIE.Document.Close()
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 2, 0)
	EndIf	
	Return $oIE
EndFunc	

Func _GUIHtml_HeadInsertScriptFile(ByRef $oObj, $sScriptFile)
    If (Not IsObj($oObj)) Then
        Return SetError(1, 1, 0) 
    ElseIf (Not IsString($sScriptFile)) Then
        Return SetError(1, 2, 0)
    EndIf
    Local $oHead = $oObj.document.all.tags('head').Item(0)
    Local $oScript = $oObj.document.createElement('script')
    With $oScript
        .defer = True
        .language = "jscript"
        .type = "text/javascript"
        .src = $sScriptFile
    EndWith
    $oHead.appendChild($oScript)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 3, 0)
	EndIf
    Return SetError(0, 0, 1)
EndFunc

Func _GUIHtml_HeadInsertCssFile(ByRef $oObj, $sCSSFile)
    If (Not IsObj($oObj)) Then
        Return SetError(1, 1, 0)
    ElseIf (Not IsString($sCSSFile)) Then
        Return SetError(1, 2, 0)
    EndIf
    Local $oHead = $oObj.document.all.tags('head').Item(0)
    Local $oCSS = $oObj.document.createElement('link')
    With $oCSS
        .type = 'text/css'
        .rel = 'stylesheet'     
        .href = $sCSSFile
        .media = 'screen'
    EndWith
    $oHead.appendChild($oCSS)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(-2, 0, 0)
	EndIf
    Return SetError(0, 0, 1)
EndFunc

Func _GUIHtml_JScriptExec($oObj, $sCod)
    If (Not IsObj($oObj)) Then
        Return SetError(1, 1, 0)
    ElseIf (Not IsString($sCod)) Then
        Return SetError(1, 2, 0)
    EndIf
    $oObj.document.parentWindow.execScript($sCod)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 3, 0)
	EndIf
    Return SetError(0, 0, 1)
EndFunc

Func _GUIHtml_SetBorder($hObj, $iSize, $iColor = 0xFFFFFF)
    $hObj.document.body.style.border = $iSize & 'px solid #' & Hex($iColor, 6)
    If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc

Func _GUIHtml_SetBkColor($hObj, $iColor)
	$hObj.document.bgcolor = '#' & Hex($iColor, 6)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf	
	Return 1
EndFunc

Func _GUIHtml_SetGradient($hObj, $iStartColor, $iEndColor, $iType = 0)
	$hObj.document.body.style.filter = 'progid:DXImageTransform.Microsoft.gradient(startColorstr="#' & Hex($iStartColor, 6) & '", endColorstr="#' & Hex($iEndColor, 6) & '", gradientType="' & $iType & '")'
    If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf	
	Return 1
EndFunc

Func _GUIHtml_SetCursor($hObj, $sCursor)
	Switch $sCursor
	    Case 0
		    $sCursor = 'default'
	    Case 1
		    $sCursor = 'crosshair'
		Case 2
            $sCursor = 'help'	
        Case 3
            $sCursor = 'move'				
	    Case 4
			$sCursor = 'pointer'
		Case 5
            $sCursor = 'progress'
		Case 6
			$sCursor = 'text'
		Case 7 
            $sCursor = 'wait'	
        Case 8
			$sCursor = 'n-resize'
		Case 9
			$sCursor = 'ne-resize'
		Case 10
			$sCursor = 'e-resize'
		Case 11
			$sCursor = 'se-resize'	
		Case 12
			$sCursor = 's-resize'	
		Case 13
			$sCursor = 'sw-resize'		
		Case 14
			$sCursor = 'w-resize'
		Case 15
			$sCursor = 'nw-resize'
		Case Else
            $sCursor = 'url(' & $sCursor & ')'	
    EndSwitch			
			
	$hObj.document.body.style.cursor = $sCursor
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc

Func _GUIHtml_SetScroll($hObj, $iFlag = True)
	$hObj.document.body.scroll = __if($iFlag, 'yes', 'no')
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc	

Func _GUIHtml_SetContextMenu($hObj, $iState = True)
	Local $oScript = $hObj.document.CreateElement('script')
	With $oScript
		.Defer = True
		.Language = 'jscript'
		.Type = 'text/javascript'
		.HtmlFor = 'document'
		.Event = 'oncontextmenu'
		.Text = 'return ' & __if($iState, 'true', 'false')
	EndWith
	$hObj.document.all.tags('head').Item(0).AppendChild($oScript)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 2, 0)
	EndIf	
	Return 1
EndFunc

Func _GUIHtml_CreateImage($hObj, $sImage, $iLeft, $iTop, $iWidth, $iHeight, $iBlock = 0)
	$__obj_ElementId += 1
    Local $tIMG = '<img src="' & $sImage & '" id="' & $__obj_ElementId & '" style="position: absolute; left: ' & $iLeft & 'px; top:' & $iTop & 'px; width: ' & $iWidth & 'px; height: ' & $iHeight & 'px;" ' & _
	              'onclick="document.title=' & BitOR($HTML_ELEMENT_CLICK, $__obj_ElementId) & '" ' & _
				  'ondblclick="document.title=' & BitOR($HTML_ELEMENT_DBCLICK, $__obj_ElementId) & '" ' & _
				  'onmouseover="document.title=' & BitOR($HTML_ELEMENT_OVER, $__obj_ElementId) & '" ' & _
				  'onmouseout="document.title=' & BitOR($HTML_ELEMENT_OUT, $__obj_ElementId) & '" ' & _
				  'onblur="document.title=' & BitOR($HTML_ELEMENT_BLUR, $__obj_ElementId) & '" ' & _
				  'onfocus="document.title=' & BitOR($HTML_ELEMENT_FOCUS, $__obj_ElementId) & '"></img>'
	__block($hObj, $iBlock, __Inner($hObj, $iBlock) & $tIMG)
	If @error Then
		$__obj_ElementId -= 1
		Return SetError(1, 1, 0)
	EndIf
	Return $__obj_ElementId
EndFunc

Func _GUIHtml_CreateDiv($hObj, $iLeft, $iTop, $iWidth, $iHeight, $iBlock = 0)
	$__obj_ElementId += 1
    Local $tDIV = '<div id="' & $__obj_ElementId & '" style="position: absolute; left: ' & $iLeft & 'px; top:' & $iTop & 'px; width: ' & $iWidth & 'px; height: ' & $iHeight & 'px;"></div>'
    __block($hObj, $iBlock, __Inner($hObj, $iBlock) & $tDIV)
	If @error Then
		$__obj_ElementId -= 1
		Return SetError(1, 1, 0)
	EndIf
	Return $__obj_ElementId
EndFunc

Func _GUIHtml_SetElementShadow($hObj, $Id, $iSize, $iColor)
	$hObj.document.getElementById($Id).style.filter = 'progid:DXImageTransform.Microsoft.Shadow(color=#' & Hex($iColor, 6) & ', direction=25,  strength=' & $iSize & ')' & _
	                                                  'progid:DXImageTransform.Microsoft.Shadow(color=#' & Hex($iColor, 6) & ', direction=125, strength=' & $iSize & ')' & _
	                                                  'progid:DXImageTransform.Microsoft.Shadow(color=#' & Hex($iColor, 6) & ', direction=225, strength=' & $iSize & ')' & _
	                                                  'progid:DXImageTransform.Microsoft.Shadow(color=#' & Hex($iColor, 6) & ', direction=325, strength=' & $iSize & ')'
													  

	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc	

Func _GUIHtml_SetElementAlpha($hObj, $Id, $iAlpha)
	$hObj.document.getElementById($Id).style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' & $iAlpha & ')'
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc	

Func _GUIHtml_SetElementCursor($hObj, $Id, $sCursor)
	Switch $sCursor
	    Case 0
		    $sCursor = 'default'
	    Case 1
		    $sCursor = 'crosshair'
		Case 2
            $sCursor = 'help'	
        Case 3
            $sCursor = 'move'				
	    Case 4
			$sCursor = 'pointer'
		Case 5
            $sCursor = 'progress'
		Case 6
			$sCursor = 'text'
		Case 7 
            $sCursor = 'wait'	
        Case 8
			$sCursor = 'n-resize'
		Case 9
			$sCursor = 'ne-resize'
		Case 10
			$sCursor = 'e-resize'
		Case 11
			$sCursor = 'se-resize'	
		Case 12
			$sCursor = 's-resize'	
		Case 13
			$sCursor = 'sw-resize'		
		Case 14
			$sCursor = 'w-resize'
		Case 15
			$sCursor = 'nw-resize'
		Case Else
            $sCursor = 'url(' & $sCursor & ')'	
    EndSwitch			
			
	$hObj.document.getElementById($Id).style.cursor = $sCursor
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc

Func _GUIHtml_SetElementBgColor($hObj, $Id, $iColor)
	$hObj.document.getElementById($Id).style.backgroundColor = '#' & Hex($iColor, 6)
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc	

Func _GUIHtml_Event($hObj)
    $iEvent = $hObj.document.title
    If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(-1, $hObj.document.title = -1, 0)
	EndIf
    Return SetError(0, $hObj.document.title = -1, $iEvent)	
EndFunc

Func __event_Click($Id)
	Return BitOR($HTML_ELEMENT_CLICK, $Id)
EndFunc	

Func __event_DbClick($Id)
	Return BitOR($HTML_ELEMENT_DBCLICK, $Id)
EndFunc	

Func __event_Over($Id)
	Return BitOR($HTML_ELEMENT_OVER, $Id)
EndFunc	

Func __event_Out($Id)
	Return BitOR($HTML_ELEMENT_OUT, $Id)
EndFunc	

Func __event_Blur($Id)
	Return BitOR($HTML_ELEMENT_BLUR, $Id)
EndFunc	

Func __event_Focus($Id)
	Return BitOR($HTML_ELEMENT_FOCUS, $Id)
EndFunc	

Func __com_HtmlPage()
	Local $sHtml = ''
	    $sHtml &= '<html>' & @CRLF
	    $sHtml &= '  <head>' & @CRLF
		$sHtml &= '    <META Http-equiv="MSThemeCompatible" content="yes">' & @CRLF
		$sHtml &= '    <title>-1</title>' & @CRLF
        $sHtml &= '    <style type="text/css">' & @CRLF
 	    $sHtml &= '      body {' & @CRLF
		$sHtml &= '        border: 0px;' & @CRLF
		$sHtml &= '        padding: 0px;' & @CRLF
        $sHtml &= '        margin: 0px;' & @CRLF
	    $sHtml &= '      }' & @CRLF
	    $sHtml &= '    </style>' & @CRLF
	    $sHtml &= '  </head>' & @CRLF
	    $sHtml &= '  <body scroll="no">' & @CRLF
        $sHtml &= '  </body>' & @CRLF
        $sHtml &= '</html>'
	Return $sHtml
EndFunc	

Func __com_getError()
	$__obj_Error = $__obj_Event.Number
EndFunc

Func __if($iCondition, $sTrue, $sFalse)
    If $iCondition Then
		Return $sTrue
	Else
        Return $sFalse
    EndIf
EndFunc	
		
Func __Inner($hObj, $iBlock)
	Local $sHtml
	If $iBlock Then
		$sHtml = $hObj.document.getElementById($iBlock).InnerHTML
		If $__obj_Error Then
		    $__obj_Error = 0
		    Return SetError(1, 1, 0)
	    EndIf
	Else
		$sHtml = $hObj.document.body.InnerHTML
		If $__obj_Error Then
		    $__obj_Error = 0
		    Return SetError(1, 1, 0)
	    EndIf
	EndIf
	If ($sHtml == 0) Then
		Return ''
	EndIf	
	Return $sHtml
EndFunc	

Func __block($hObj, $iBlock, $sValue)
	If $iBlock Then
		$hObj.document.getElementById($iBlock).InnerHTML = $sValue
	Else
		$hObj.document.body.InnerHTML = $sValue
	EndIf
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 1, 0)
	EndIf
	Return 1
EndFunc

По моему тень можно сделать через JQuery.js и она получится с закруглёнными углами, но я не знаю как воспользоватся библиотекой.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Это же отличные скины на html можно делать, которые не будут моргать и им не нужна будет прорисовка, в которых можно элементы передвигать и они не будут моргать, в которых можно любую картинку отображать, в которых можно всё. :shok:

Код:
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>

$hObj = ObjCreate('Shell.Explorer.2')
$hForm = GUICreate('', 400, 300, -1, -1, -1, $WS_EX_LAYERED)
GUISetBkColor(0xFF00DC)
GUICtrlCreateObj($hObj, 0, 0, 400, 300)
$hObj.Navigate('about:blank')
$hObj.document.write(__com_HtmlPage())
$hObj.document.close()
$hObj.document.BgColor = '#FF00DC'
$iDiv = _GUIHtml_CreateDiv($hObj, 1, 100, 50, 200, 200)
$hObj.document.getElementById($iDiv).style.backgroundColor = '#404040'
_WinAPI_SetLayeredWindowAttributes($hForm, 0xFF00DC, 255)
GUISetState()

While 1
	Switch GUIGetMsg()
	    Case -3
		    Exit
	EndSwitch
Wend

Func __com_HtmlPage()
	Local $sHtml = ''
	    $sHtml &= '<html>' & @CRLF
	    $sHtml &= '  <head>' & @CRLF
		$sHtml &= '    <META Http-equiv="MSThemeCompatible" content="yes">' & @CRLF
		$sHtml &= '    <title>-1</title>' & @CRLF
        $sHtml &= '    <style type="text/css">' & @CRLF
 	    $sHtml &= '      body {' & @CRLF
		$sHtml &= '        border: 0px;' & @CRLF
		$sHtml &= '        padding: 0px;' & @CRLF
        $sHtml &= '        margin: 0px;' & @CRLF
	    $sHtml &= '      }' & @CRLF
	    $sHtml &= '    </style>' & @CRLF
	    $sHtml &= '  </head>' & @CRLF
	    $sHtml &= '  <body scroll="no">' & @CRLF
        $sHtml &= '  </body>' & @CRLF
        $sHtml &= '</html>'
	Return $sHtml
EndFunc

Func _GUIHtml_CreateDiv($hObj, $Id, $iLeft, $iTop, $iWidth, $iHeight, $iBlock = 0)
    Local $tDIV = '<div id="' & $Id & '" style="position: absolute; left: ' & $iLeft & 'px; top:' & $iTop & 'px; width: ' & $iWidth & 'px; height: ' & $iHeight & 'px;"></div>'
	$sHtml = $hObj.document.body.InnerHTML
	If ($sHtml == 0) Then $sHtml = ''
	$hObj.document.body.InnerHTML = $sHtml & $tDIV
	Return $Id
EndFunc
 
Верх