Что нового

Как получить полный HTML код из Shell.Explorer.2

XpycT

Скриптер
Сообщения
380
Репутация
133
Всем привет.

Есть скрипт который генерирует HTML файл из списка ListView.

При запуска скрипта, считываться HTML файл и отображается на форме, потом при добавлении строк в ListView, эти скроки так же добавляются HTML.

Подскажите как можно получить полный HTML код после того как добавились все строки?

Код:
#NoTrayIcon
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiStatusBar.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>

Global $sOrdersHTMLTemplate = @ScriptDir & "\orders_html_template.html"

$hApp = GUICreate("HTM", 800, 500, -1, -1)

$cOrdersList_Add  = GUICtrlCreateButton("Add Order To List", 5, 5, 110, 25, BitOR($BS_CENTER,$BS_VCENTER,$BS_FLAT))
$cOrdersHTML_View = GUICtrlCreateButton("View HTML Source", 120, 5, 110, 25, BitOR($BS_CENTER,$BS_VCENTER,$BS_FLAT))

#Region Orders List
	$cOrdersList = GUICtrlCreateListView("", 5, 35, 790, 120, BitOR($LVS_REPORT, $LVS_SINGLESEL, $LVS_NOSORTHEADER), $WS_EX_STATICEDGE)
	_GUICtrlListView_SetExtendedListViewStyle($cOrdersList, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))

	_GUICtrlListView_InsertColumn($cOrdersList, 0, "#", 30, 2)
	_GUICtrlListView_InsertColumn($cOrdersList, 1, "Invoice Number", 110, 2)
	_GUICtrlListView_InsertColumn($cOrdersList, 2, "Address", 0, 0)
	_GUICtrlListView_InsertColumn($cOrdersList, 3, "Invoice Amount", 110, 2)

	Dim $iCnt = _GUICtrlListView_GetColumnCount($cOrdersList), $iColW = 770
	For $c = 0 To $iCnt
		$iColW -= _GUICtrlListView_GetColumnWidth($cOrdersList, $c)
	Next
	_GUICtrlListView_SetColumnWidth($cOrdersList, 2, $iColW)
#EndRegion Orders List

#Region Orders HTML
	$oOrdersList = ObjCreate("Shell.Explorer.2")
	GUICtrlCreateObj($oOrdersList, 5, 170, 790, 300)

	$oOrdersList.Navigate($sOrdersHTMLTemplate)
#EndRegion Orders HTML

#Region Status Bar
$cSBar = _GUICtrlStatusBar_Create($hApp)
_GUICtrlStatusBar_SetParts($cSBar, StringSplit("-1", "|", 2))
_GUICtrlStatusBar_SetText($cSBar, "Ready.", 0)
#EndRegion Status Bar

$hHTMLSourceWnd = GUICreate("HTML Source", 800, 500, -1, -1)
$cHTMLSource = GUICtrlCreateEdit("", 5, 5, 790, 490, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))

GUISetState(@SW_SHOW, $hApp)

While 1
	$aMsg = GUIGetMsg(1)
	Switch $aMsg[1]
		Case $hApp
			Switch $aMsg[0]
				Case 0
					ContinueLoop

				Case $cOrdersList_Add
					_OrdersList_Add()

				Case $cOrdersHTML_View
					_OrdersList_HTML_Source_View()

				Case $GUI_EVENT_CLOSE
					Exit
			EndSwitch

		Case $hHTMLSourceWnd
			Switch $aMsg[0]
				Case $GUI_EVENT_CLOSE
					GUISetState(@SW_HIDE, $hHTMLSourceWnd)
			EndSwitch
	EndSwitch
WEnd

Func _OrdersList_Add()
	Local $iNumner = _GUICtrlListView_GetItemCount($cOrdersList)
	Local $iInvoiceNumber = StringFormat("%05d", Random(1, 99999, 1))
	Local $iInvoiceAmount = StringFormat("%04d", Random(1, 9999, 1))

	$iNumner += 1

	$iIn = _GUICtrlListView_InsertItem($cOrdersList, $iNumner)    ; #
	_GUICtrlListView_SetItemText($cOrdersList, $iIn, $iInvoiceNumber, 1) ; Invoice Number
	_GUICtrlListView_SetItemText($cOrdersList, $iIn, "Address " & $iNumner, 2) ; Address
	_GUICtrlListView_SetItemText($cOrdersList, $iIn, $iInvoiceAmount, 3) ; Invoice Amount

	_OrdersList_HTML_View($iIn)
EndFunc

Func _OrdersList_HTML_View($_iAddedIn)
	Local $oDoc = $oOrdersList.Document
	Local $iColCount = _GUICtrlListView_GetColumnCount($cOrdersList)

	$oTBody = $oDoc.GetElementById("tbody")

	$oTRow = $oTBody.InsertRow(-1)

	For $iCol = 1 To $iColCount
		$sOrderData = _GUICtrlListView_GetItemText($cOrdersList, $_iAddedIn, $iCol - 1)
		If $sOrderData = "" Then $sOrderData = " "

		$oTRow.InsertCell($iCol - 1).InnerHTML = $sOrderData

		$oTRow.InsertCell(4).InnerHTML = " "
		$oTRow.InsertCell(5).InnerHTML = " "
	Next
EndFunc

Func _OrdersList_HTML_Source_View()

	GUICtrlSetData($cHTMLSource, "")

; 	GUICtrlSetData($cHTMLSource, $oOrdersList.Document.Body.InnerHTML) ; Показывает только Table
	GUICtrlSetData($cHTMLSource, $oOrdersList.Document.Body.OuterHTML) ; Показывает Body и Table

	GUISetState(@SW_SHOW, $hHTMLSourceWnd)
EndFunc


Код:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
	body    { padding: 0px; margin: 1px; font-family: Tahoma, Geneva, sans-serif; font-size: 10pt; text-align: center; }
	table   { padding: 0px; margin: 0px; width: 100%; table-layout: fixed; text-align: center; vertical-align: middle; border: 1px Solid #000000;}
	.tl     { text-align: left;}
	.tc     { text-align: center;}
	.tr     { text-align: right;}
</style>
<script language=jscript event=oncontextmenu for=document defer type=text/javascript>return false</script>
</head>
<body>
<table cellpadding="1" cellspacing="0" border="1">
<thead><tr height="50">
	<th width="05%">#</th>
	<th width="10%">Order / Invoice
Number</th>
	<th width="15%">Address</th>
	<th width="10%">Invoice
Amount</th>
	<th width="10%">Received
Amount</th>
	<th width="10%">Delivered
Y/N</th>
</tr></thead>
<tbody id="tbody">
</tbody>
</table>
</body></html>
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
XpycT,
Попробуйте так, у меня работает.
Код:
;...
	GUICtrlSetData($cHTMLSource, $oOrdersList.Document.GetElementsByTagName('html').item(0).OuterHTML)
	;...
 
Верх