---Zak---
Скриптер
- Сообщения
- 455
- Репутация
- 120
Добрый всем день или вечер.
Версия AutoIt: 3.3.8.0
Описание:
Как-то давным давно писал программу с GUICtrlCreateListView. Но решил пойти дальше, т.к. хорошая вещь и которую можно редактировать прям по двум кликам. В итоге вот в какую сторону копать не знаю.
Есть пример (см. "Примечание"), в котором с помощью двух кликов можно редактировать поля в GUICtrlCreateListView, с помощью скрытого Input... но как такое все добро сохранить желательно в БД не представляет возможности.
В следствии чего прошу у Вас помощи =) по созданию кнопочки, через которую все элементы из GUICtrlCreateListView сохранятся в файл, ну а в БД я сам переведу, если что =)
Примечания:
Взято от сюда: http://pastebin.com/WhPLnjRN
Версия AutoIt: 3.3.8.0
Описание:
Как-то давным давно писал программу с GUICtrlCreateListView. Но решил пойти дальше, т.к. хорошая вещь и которую можно редактировать прям по двум кликам. В итоге вот в какую сторону копать не знаю.
Есть пример (см. "Примечание"), в котором с помощью двух кликов можно редактировать поля в GUICtrlCreateListView, с помощью скрытого Input... но как такое все добро сохранить желательно в БД не представляет возможности.
В следствии чего прошу у Вас помощи =) по созданию кнопочки, через которую все элементы из GUICtrlCreateListView сохранятся в файл, ну а в БД я сам переведу, если что =)
Примечания:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiHeader.au3>
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)
Global $sTitle = "Двойной клик на элементе", $aElement[2], $hActive
$GUI=GUICreate($sTitle, 650, 660)
GUISetOnEvent(-3, '_Exit')
Global $hInput = GUICtrlCreateInput("", 0, 0, 0, 0, 0x280)
GUICtrlSetState(-1, $GUI_HIDE)
Global $hLV = GUICtrlCreateListView('колонка 1|колонка 2', 11, 25, 622, 615, $LVS_SHOWSELALWAYS, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
Global $hListView = GUICtrlGetHandle(-1)
$item1=GUICtrlCreateListViewItem('Пример|Редактирования', $hLV) ; создаём пункты
$item2=GUICtrlCreateListViewItem('текста|в итемах', $hLV )
$item3=GUICtrlCreateListViewItem('Списка|на основе' , $hLV)
$item4=GUICtrlCreateListViewItem('скрытого|инпута' , $hLV)
Global $dummy1 = GUICtrlCreateDummy()
GUICtrlSetOnEvent(-1, "_Exit")
Global $dummy2 = GUICtrlCreateDummy()
GUICtrlSetOnEvent(-1, "_SaveChange")
Global $AccelKeys[2][2] = [["{ESC}", $dummy1],["{ENTER}", $dummy2]]
GUISetAccelerators($AccelKeys)
GUISetState ()
GUIRegisterMsg(0x4E, "_WM_NOTIFY")
While 1
Sleep(100000)
WEnd
Func _SaveChange()
Local $sText = GUICtrlRead($hInput)
If StringInStr($sText, @CR) Or StringInStr($sText, @LF) Then
If StringLeft($sText, 1) <> '"' And StringInStr(StringMid($sText, 2, StringLen($sText) - 2), '"') Then $sText = StringReplace($sText, '"', "'")
$sText = '"' & StringReplace($sText, '"', '') & '"'
EndIf
_GUICtrlListView_BeginUpdate($hActive)
_GUICtrlListView_SetItemText($hActive, $aElement[0], $sText, $aElement[1])
GUICtrlSetState($hInput, $GUI_HIDE)
_GUICtrlListView_SetColumnWidth($hListView, $aElement[1], -2) ;$LVSCW_AUTOSIZE_USEHEADER
_GUICtrlListView_EndUpdate($hActive)
EndFunc
Func _GUICtrlListView_EditItem($hWnd, $iIndex, $iSubItem)
;funkey 19.02.2010
If $iIndex < 0 Then Return
Local $aPos, $aRect, $iSum = 0
Local $x, $y, $w, $h
For $i = 0 To $iSubItem - 1
$iSum += _GUICtrlListView_GetColumnWidth($hWnd, $i)
Next
$aRect = _GUICtrlListView_GetItemRect($hWnd, $iIndex)
$aPos = ControlGetPos($sTitle, "", $hWnd)
$x = $iSum + $aPos[0] + $aRect[0]
$y = $aPos[1] + $aRect[1]
$w = _GUICtrlListView_GetColumnWidth($hWnd, $iSubItem)
$h = $aRect[3] - $aRect[1]
GUICtrlSetPos($hInput, $x + 3, $y + 1, $w, $h + 4)
GUICtrlSetData($hInput, _GUICtrlListView_GetItemText($hWnd, $iIndex, $iSubItem))
GUICtrlSetState($hInput, $GUI_SHOW)
GUICtrlSetState($hInput, $GUI_FOCUS)
$aElement[0] = $iIndex
$aElement[1] = $iSubItem
EndFunc
Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hLV ; ID des LV
If Not IsHWnd($hWndListView) Then $hWndListView = GUICtrlGetHandle($hWndListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_DBLCLK ; двойной клик - редактируем пункт ListView
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
_GUICtrlListView_EditItem($hWndListView, DllStructGetData($tInfo, "Index"), DllStructGetData($tInfo, "SubItem"))
$hActive = $hWndListView
Case $NM_CLICK ; одинарный клик - получаем индексы выделенных пунтков ListView
GUICtrlSetState($hInput, $GUI_HIDE)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func _Exit()
Exit
EndFunc