tengo esta pequeña aplicación en la que, en un list view voy insertando número y después exporto haciendo una transformación numérica (de pies a metros o viceversa) El caso es que antes me funcionaba sin problemas pero después de formatear el equipo e instlar de nuevo autoit (version 3.3.8.1) me encuentro con que introduzco un número le doy al intro y me desaparece ese número o introduzco un nnúmero, hago clic en cualquier parte de la aplicación y me desaparece ese número. ¿Alguien puede ayudarme?
Ahí va el código
Código: Seleccionar todo
#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <Constants.au3>
#Include <Excel.au3>
#include <ListViewConstants.au3>
;Opt('MustDeclareVars', 1)
$Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work
Global $hListView
Global $gLabelUnidadMedida
Global $gComboUnidadMedida
Global $gLabelUnidadExportar
Global $gComboUnidadExportar
Global $gLabelPielesIntroducidas
Global $gInputPielesIntroducidas
Global $gLabelUnidadesIntroducidas
Global $gInputUnidadesIntroducidas
Global $gBotonNuevo
Global $gBotonExportar
Global $gBotonSalir
Global $gBotonComprobar
Global $gBotonTemporal
Global $gBotonCargaTemporal
Global $gLabelUnidadUsada
Global $gInputPietajeActual
Global $gFicheroTemporal =  @ScriptDir & "\" & "tmp.txt" ;Fichero temporal donde almacenamos los pietajes que el usuario incluya
Global $gIconos = @SystemDir & "\shell32.dll"
Global $gBotonSeparar
Global $gLabelUnidadesGrupo
Global $gInputUnidadesGrupo
Global $gTituloVentana = "Creador ficheros de metrajes v.1.4"
_Main()
Func _Main()
	Local $vMsg
	HotKeySet("{UP}", "pSubir")
	HotKeySet("{DOWN}", "pBajar")
	HotKeySet("{ENTER}","pInsertar")
	GUICreate($gTituloVentana, 500, 500)
	$hListView = fCreaListView(1)
	; Seleccionamos la unidad de medida en la que vamos a insertar los datos
	$gLabelUnidadMedida = GuiCtrlCreateLabel("Unidad de medida: ", 120, 10)
	$gComboUnidadMedida = GuiCtrlCreatecombo("", 250, 8, 120, 100)
	GUICtrlSetData($gComboUnidadMedida,"m2|cm2|p2","m2")
	; Seleccionamos la unidad de medida en la que vamos a exportar los datos
	$gLabelUnidadExportar = GuiCtrlCreateLabel("Exportar en: ", 120, 50)
	$gComboUnidadExportar = GuiCtrlCreatecombo("", 250, 48, 120, 100)
	GUICtrlSetData($gComboUnidadExportar,"m2|cm2|p2","m2")
	$gLabelPielesIntroducidas = GuiCtrlCreateLabel("Nº Pieles introducidas: ", 120, 90)
	$gInputPielesIntroducidas = GUICtrlCreateInput("0", 250, 88, 50, 20,BitOR(0X2000,0X0800,$ES_NUMBER,$ES_RIGHT))
	$gLabelUnidadesIntroducidas = GuiCtrlCreateLabel("Unidades introducidas: ", 120, 130)
	$gInputUnidadesIntroducidas = GUICtrlCreateInput("", 250, 128, 50, 20,BitOR(0X2000,0X0800,$ES_NUMBER,$ES_RIGHT))
	$gLabelUnidadUsada = GUICtrlCreateLabel(GUICtrlRead($gComboUnidadMedida),305,130)
	; Definimos los campos para indicar si los pietajes van agrupados o no
	;$gLabelUnidadesGrupo = GuiCtrlCreateLabel("Unidades por grupo: ", 120, 160)
	;$gInputUnidadesGrupo = GUICtrlCreateInput("", 250, 160, 50, 20)
	$gInputPietajeActual = GUICtrlCreateInput("", 250, 200, 150, 50,BitOR(0X2000,0X0800,$ES_NUMBER,$ES_RIGHT))
	GUICtrlSetFont($gInputPietajeActual, 24, 800, "", "Comic Sans MS")
	$gBotonNuevo = GuiCtrlCreateButton("Nuevo", 110, 450, 65, 40,$BS_CENTER)
	;GUICtrlSetImage($gBotonNuevo, $gIconos, -100)
	GUICtrlSetTip($gBotonNuevo, "Nuevo packing")
	$gBotonTemporal = GuiCtrlCreateButton("Guard. temp.", 175, 450, 65, 40)
	;GUICtrlSetImage($gBotonTemporal, $gIconos, -126)
	GUICtrlSetTip($gBotonTemporal, "Guardar en fichero temporal")
	$gBotonCargaTemporal = GuiCtrlCreateButton("Carg. Temp.", 240, 450, 65, 40)
	;GUICtrlSetImage($gBotonCargaTemporal, $gIconos, 46)
	GUICtrlSetTip($gBotonCargaTemporal, "Cargar fichero temporal")
	$gBotonExportar = GuiCtrlCreateButton("Exportar", 305, 450, 65, 40)
	;GUICtrlSetImage($gBotonExportar, $gIconos, -259)
	GUICtrlSetTip($gBotonExportar, "Exportar a csv")
	$gBotonComprobar = GuiCtrlCreateButton("Comprobar",370,450,65,40)
	;GUICtrlSetImage($gBotonComprobar, $gIconos, -172)
	GUICtrlSetTip($gBotonComprobar, "Comprobar packing")
	$gBotonSalir = GuiCtrlCreateButton("Salir", 435, 450, 65, 40)
	;GUICtrlSetImage($gBotonSalir, $gIconos, -147)
	GUICtrlSetTip($gBotonSalir, "Salir")
	$gBotonSeparar = GuiCtrlCreateButton("Separar", 435, 400, 65, 40)
	;GUICtrlSetImage($gBotonSalir, $gIconos, -147)
	GUICtrlSetTip($gBotonSeparar, "Separar")
	; Edit item 0 label with time out
	;GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
	_GUICtrlListView_EditLabel($hListView, 0)
	GUISetState()
	; Loop until user exits
	while 1
		$vMsg = GUIGetMsg()
		Select
			Case $vMsg = 0
				ContinueLoop
			Case $vMsg = $gBotonNuevo
				pNuevoPacking()
			Case $vMsg = $gBotonExportar
				pExportarFichero($hListView,0)
			Case $vMsg = $gBotonComprobar
				pComprobar()
			Case $vMsg = $gBotonTemporal
				pCopiaTemporal()
			Case $vMsg = $gBotonCargaTemporal
				pCargaTemporal()
			Case $vMsg = $gComboUnidadMedida
				GUICtrlSetData($gLabelUnidadUsada,GUICtrlRead($gComboUnidadMedida))
			Case $vMsg = $gBotonSeparar
				pSeparar()
			Case $vMsg = $gBotonSalir or $vMsg = $GUI_EVENT_CLOSE
				ExitLoop
		EndSelect
	wend
	GUIDelete()
EndFunc   ;==>_Main
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
	#forceref $hWnd, $iMsg, $iwParam
	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo, $hWndListView = $hListView
	If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
	$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	$iCode = DllStructGetData($tNMHDR, "Code")
	Switch $hWndFrom
		Case $hWndListView
			Switch $iCode
				Case $LVN_BEGINLABELEDITA, $LVN_BEGINLABELEDITW ; Start of label editing for an item
					$tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
					_DebugPrint("$LVN_BEGINLABELEDIT" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode & @LF & _
							"-->Mask:" & @TAB & DllStructGetData($tInfo, "Mask") & @LF & _
							"-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _
							"-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
							"-->State:" & @TAB & DllStructGetData($tInfo, "State") & @LF & _
							"-->StateMask:" & @TAB & DllStructGetData($tInfo, "StateMask") & @LF & _
							"-->Image:" & @TAB & DllStructGetData($tInfo, "Image") & @LF & _
							"-->Param:" & @TAB & DllStructGetData($tInfo, "Param") & @LF & _
							"-->Indent:" & @TAB & DllStructGetData($tInfo, "Indent") & @LF & _
							"-->GroupID:" & @TAB & DllStructGetData($tInfo, "GroupID") & @LF & _
							"-->Columns:" & @TAB & DllStructGetData($tInfo, "Columns") & @LF & _
							"-->pColumns:" & @TAB & DllStructGetData($tInfo, "pColumns"))
					Return False ; Allow the user to edit the label
;~ 					;Return True  ; Prevent the user from editing the label
				Case $LVN_COLUMNCLICK ; A column was clicked
					$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
					_DebugPrint("$LVN_COLUMNCLICK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode & @LF & _
							"-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _
							"-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
							"-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
							"-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
							"-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
							"-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
							"-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
							"-->Param:" & @TAB & DllStructGetData($tInfo, "Param"))
					; No return value
				Case $LVN_BEGINLABELEDITA, $LVN_ENDLABELEDITW ; The end of label editing for an item
					$tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
					If (DllStructGetData($tInfo, "Text") <> 0) Then
						Local $tBuffer = DllStructCreate("char Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
						_DebugPrint("$LVN_ENDLABELEDIT" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
								"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
								"-->Code:" & @TAB & $iCode & @LF & _
								"-->Mask:" & @TAB & DllStructGetData($tInfo, "Mask") & @LF & _
								"-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _
								"-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
								"-->State:" & @TAB & DllStructGetData($tInfo, "State") & @LF & _
								"-->StateMask:" & @TAB & DllStructGetData($tInfo, "StateMask") & @LF & _
								"-->Text:" & @TAB & DllStructGetData($tBuffer, "Text") & @LF & _
								"-->TextMax:" & @TAB & DllStructGetData($tInfo, "TextMax") & @LF & _
								"-->Image:" & @TAB & DllStructGetData($tInfo, "Image") & @LF & _
								"-->Param:" & @TAB & DllStructGetData($tInfo, "Param") & @LF & _
								"-->Indent:" & @TAB & DllStructGetData($tInfo, "Indent") & @LF & _
								"-->GroupID:" & @TAB & DllStructGetData($tInfo, "GroupID") & @LF & _
								"-->Columns:" & @TAB & DllStructGetData($tInfo, "Columns") & @LF & _
								"-->pColumns:" & @TAB & DllStructGetData($tInfo, "pColumns"))
						; If Text is not empty, return True to set the item's label to the edited text, return false to reject it
						Return True
					EndIf
					; If Text is empty the return value is ignored
				Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
					_DebugPrint("$NM_CLICK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode & @LF & _
							"-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
							"-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
							"-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
							"-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
							"-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
							"-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
							"-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
							"-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
							"-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
					; No return value
				Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
					_DebugPrint("$NM_DBLCLK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode & @LF & _
							"-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
							"-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
							"-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
							"-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
							"-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
							"-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
							"-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
							"-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
							"-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
					; No return value
				Case $NM_KILLFOCUS ; The control has lost the input focus
					_DebugPrint("$NM_KILLFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode)
					; No return value
				Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
					_DebugPrint("$NM_RCLICK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode & @LF & _
							"-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
							"-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
							"-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
							"-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
							"-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
							"-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
							"-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
							"-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
							"-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
					;Return 1 ; not to allow the default processing
					Return 0 ; allow the default processing
				Case $NM_RDBLCLK ; Sent by a list-view control when the user double-clicks an item with the right mouse button
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
					_DebugPrint("$NM_RDBLCLK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode & @LF & _
							"-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
							"-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
							"-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
							"-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
							"-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
							"-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
							"-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
							"-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
							"-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
					; No return value
				Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key
					_DebugPrint("$NM_RETURN" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode)
					; No return value
				Case $NM_SETFOCUS ; The control has received the input focus
					_DebugPrint("$NM_SETFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode)
					; No return value
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
Func _DebugPrint($s_text, $line = @ScriptLineNumber)
	ConsoleWrite( _
			"!===========================================================" & @LF & _
			"+======================================================" & @LF & _
			"-->Line(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
			"+======================================================" & @LF)
EndFunc   ;==>_DebugPrint
; ====================================================================================================================
; Name...........: pBajar()
; Description ...: Procedimiento para bajar de línea en el listview
; Syntax.........: pBajar()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pBajar()
	Local $vIndice
	If WinActive("Creador ficheros de metrajes") Then
		$vIndice = _GUICtrlListView_GetNextItem($hListView,-1,0)
		If $vIndice < _GUICtrlListView_GetItemCount($hListView) Then
			_GUICtrlListView_SetItemSelected($hListView, $vIndice,false )
			$vIndice = $vIndice + 1
			_GUICtrlListView_EditLabel($hListView, $vIndice)
			GUICtrlSetData($gInputPietajeActual,_GUICtrlListView_GetItemText($hListView,$vIndice))
			pActualizaContadores($hListView,$gInputUnidadesIntroducidas,$gInputPielesIntroducidas,0)
		EndIf
	Else
		HotKeySet("{DOWN}")
		Send("{DOWN}")
		HotKeySet("{DOWN}","pBajar")
	EndIf
EndFunc
; ====================================================================================================================
; Name...........: pSubir()
; Description ...: Procedimiento para subir de línea en el listview
; Syntax.........: pSubir()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pSubir()
	Local $vIndice
	If WinActive("Creador ficheros de metrajes") Then
		$vIndice = _GUICtrlListView_GetNextItem($hListView,-1,0)
		If $vIndice > 0 Then
			_GUICtrlListView_SetItemSelected($hListView, $vIndice,false )
			$vIndice = $vIndice - 1
			_GUICtrlListView_EditLabel($hListView, $vIndice)
			GUICtrlSetData($gInputPietajeActual,_GUICtrlListView_GetItemText($hListView,$vIndice))
			pActualizaContadores($hListView,$gInputUnidadesIntroducidas,$gInputPielesIntroducidas,0)
		EndIf
	Else
		HotKeySet("{UP}")
		Send("{UP}")
		HotKeySet("{UP}","pSubir")
	EndIf
EndFunc
; ====================================================================================================================
; Name...........: pInsertar()
; Description ...: Procedimiento para insertar una nueva línea en el listview
; Syntax.........: pInsertar()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pInsertar()
	Local $vIndice=0
	If WinActive($gTituloVentana) Then
		$vIndice = _GUICtrlListView_GetNextItem($hListView,-1,0) ; Sacamos la posición del item actual
		_GUICtrlListView_SetItemSelected($hListView, $vIndice,false) ; Deseleccionamos el elemento
		$vIndice = $vIndice + 1 ; Incrementamos el índice para ahora acceder a la siguiente posición
		; Comprobamos si el item siguiente al actual (vIndice + 1) Está vacio o no. Sino está vacio añadimos un nuevo item.
		If _GUICtrlListView_GetItemText($hListView,$vIndice,0) = "" Then
			_GUICtrlListView_AddItem($hListView,"")			
		EndIf
		_GUICtrlListView_AddSubItem($hListView,$vIndice,($vIndice + 1),1)
		_GUICtrlListView_EditLabel($hListView, $vIndice)
		pActualizaContadores($hListView,$gInputUnidadesIntroducidas,$gInputPielesIntroducidas,0)
	Else
		HotKeySet("{ENTER}")
		Send("{ENTER}")
		HotKeySet("{ENTER}","pInsertar")
	EndIf
EndFunc
; ====================================================================================================================
; Name...........: pActualizaContadores()
; Description ...: Procedimiento para actualizar los contadores de unidades y de pieles
; Syntax.........: pActualizaContadores()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pActualizaContadores($pListView,$pInputSuma,$pInputPieles,$pTipo)
	Local $vIndice = 0
	Local $vContador = 0
	Local $vSuma = 0
	Local $vValorActual = 0
	;MsgBox(0,"los valores",_GUICtrlListView_GetItemText($pListView,$vIndice,$pTipo))
	For $vIndice = 0 to _GUICtrlListView_GetItemCount($pListView)
		$vValorActual = _GUICtrlListView_GetItemText($pListView,$vIndice,$pTipo)
		If $vValorActual <> "" Then
			$vContador = $vContador + 1
			$vSuma = $vSuma + $vValorActual
		EndIf
	Next
	GUICtrlSetData($pInputPieles,$vContador)
	GUICtrlSetData($pInputSuma,$vSuma)
EndFunc
; ====================================================================================================================
; Name...........: pNuevoPacking()
; Description ...: Procedimiento para inicializar el listview
; Syntax.........: pNuevoPacking()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pNuevoPacking()
	If MsgBox(36,"ATENCION","¿Está seguro de que desea crear un nuevo packing?") = 6 Then
		if fBorraListView(1) = 1 Then
			GUICtrlSetData($gInputPielesIntroducidas,0)
			GUICtrlSetData($gInputUnidadesIntroducidas,0)
			; Primera línea
			_GUICtrlListView_AddItem($hListView, "", 0)
			_GUICtrlListView_EditLabel($hListView, 0)
		Else
			MsgBox(16,"ERROR","Hubo un error al limpiar la lista, por favor, cierre y abra de nuevo")
		EndIf
	EndIf
EndFunc
; ====================================================================================================================
; Name...........: fBorraListView()
; Description ...: Procedimiento para borrar las líneas de un listview
; Syntax.........: fBorraListView()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func fBorraListView($pOpcion)
	$hListView = fCreaListView($pOpcion)
	return 1
EndFunc
; ====================================================================================================================
; Name...........: pExportarFichero()
; Description ...: Procedimimiento para exportar el contenido del listview a un fichero de texto con los camops separados por ;
; Syntax.........: pExportarFichero()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pExportarFichero($pListView,$pTipo)
	Local $vRutaFichero = FileOpenDialog("Seleccione directorio y nombre para el fichero","c:\pck","All(*.*)",4) ; Mostamos el cuadro de diálogo al usuario para que elija lugar y nombre
	Local $vMultiplicador = fDameMultiplicador()
	Local $vFile
	Local $vIndice = 1
	Local $vMultiplicando = 0
	Local $vExcel
	Local $vIntroducido = 0
	Local $vMensajeError
	Local $vCabecera[18] = ["CUSTOMER","ADDRESS  ","POSTAL_CODE","CITY ","REGION","COUNTRY","DATE      ","INVOICE","INVOICE_POS","PURCHASE_ORDER","UM","ID_HANDLING","ID_BOUNDLE","ID_HIDES        ","DESCRIPTION","Q_TY_M2                ","Q_TY_SF                ","HIDES_NR"]
	If $vRutaFichero = "" Then
		MsgBox(48,"RUTA INCORRECTA","La ruta seleccionada no es válidad. La exportación ha sido cancelada")
	Else
	; Primero intentamos pasar el fichero a excel para evitar pasos
	$vExcel = _ExcelBookNew(0) ;Create new book, make it visible
	If $vExcel <> 0 Then ; Si se encuentra el objeto excel instalado directamente lo exporta en un fichero excel.
		; Insertamos la cabecera
		For $vI = 0 to 17
			_ExcelWriteCell($vExcel,$vCabecera[$vI],1,$vI + 1)
		Next
		For $vIndice = 0 to _GUICtrlListView_GetItemCount($pListView)-1 ; es contador - 1 porque el contador lo hemos iniciado en 0
			If _GUICtrlListView_GetItemText($pListView,$vIndice,$pTipo) <> "" Then ; Controlamos que la celda tenga valor para no introducir lineas en blanco
				$vIntroducido = Number(_GUICtrlListView_GetItemText($pListView,$vIndice,$pTipo))
				$vMultiplicando = Round(($vIntroducido * $vMultiplicador),2) ; Redondeamos los digitos
				$vMultiplicando = StringReplace($vMultiplicando,".",",") ; Cambiamos los puntos por comas para que no haya problemas al cargarlo en la excel
				Local $vArrayLinea[18] = ["cliente","direccion","30510","yecla","murcia","espana" ,"01/01/1900","1553","10","10","m2","1","1",$vIndice,"piel",$vMultiplicando,StringReplace($vIntroducido,".",","),($vIndice + 1)]
				;Local $vArrayLinea[18] = ["CUSTOMER","ADDRESS  ","POSTAL_CODE","CITY ","REGION","COUNTRY","DATE      ","INVOICE","INVOICE_POS","PURCHASE_ORDER","UM","ID_HANDLING","ID_BOUNDLE","ID_HIDES        ","DESCRIPTION","Q_TY_M2                ","Q_TY_SF                "                ,"HIDES_NR"]
				_ExcelWriteArray($vExcel, $vIndice + 2, 1, $vArrayLinea)
				If @error Then
					Switch @error
						case 1
							$vMensajeError = "El objeto especificado no existe"
						case 2
							$vMensajeError = "Parametro fuera de rango"
						case 3
							$vMensajeError = "El array no existe o la variable no es un array"
						case 4
							$vMensajeError = "Dirección de parámetro incorrecta"
					EndSwitch
					MsgBox(16,"ERROR AL EXPORTAR",$vMensajeError)
				EndIf
			EndIf
		Next
		If @error Then ; Si hay algún error cancelamos la exportación
		Else
			_ExcelBookSaveAs($vExcel, $vRutaFichero & ".xls", "xls", 0, 1) ; Now we save it into the temp directory; overwrite existing file if necessary
		EndIf
		_ExcelBookClose($vExcel) ; And finally we close out
	Else ;Sino encuentra el objeto excel lo exporta en formato csv. Posteriormente el usuario debe abrir el fichero con excel y guardarlo como .xls
		$vFile = FileOpen($vRutaFichero, 2)
		; Check if file opened for writing OK
		If $vFile = -1 Then
			MsgBox(0, "Error", "Imposible crear el fichero")
			Exit
		EndIf
		; Insertamos primero la cabecera
		FileWriteLine($vFile,"CUSTOMER;ADDRESS  ;POSTAL_CODE;CITY ;REGION;COUNTRY;DATE      ;INVOICE;INVOICE_POS;PURCHASE_ORDER;UM;ID_HANDLING;ID_BOUNDLE;ID_HIDES        ;DESCRIPTION;Q_TY_M2                ;Q_TY_SF                ;HIDES_NR")
							;"cliente ;direccion;30510      ;yecla;murcia;espana ;01/01/1900;1553   ;10         ;10            ;m2;1          ;1         ;" & $vIndice & ";piel       ;" & $vMultiplicando & ";" & $vMultiplicando & ";" & $vIndice)
		; Recorremos el listview para ir insertando las líneas en el fichero
		For $vIndice = 0 to _GUICtrlListView_GetItemCount($pListView)-1 ; es contador - 1 porque el contador lo hemos iniciado en 0
			If _GUICtrlListView_GetItemText($pListView,$vIndice) <> "" Then ; Controlamos que la celda tenga valor para no introducir lineas en blanco
				$vIntroducido = Number(_GUICtrlListView_GetItemText($pListView,$vIndice,$pTipo))
				$vMultiplicando = Round(($vIntroducido * $vMultiplicador),2) ; Redondeamos los digitos
				$vMultiplicando = StringReplace($vMultiplicando,".",",") ; Cambiamos los puntos por comas para que no haya problemas al cargarlo en la excel
				FileWriteLine($vFile,"cliente;direccion;30510;yecla;murcia;espana;01/01/1900;1553;10;10;m2;1;1;" & $vIndice & ";piel;" & $vMultiplicando & ";" & StringReplace($vIntroducido,".",",") & ";" & ($vIndice + 1))
			EndIf
		Next
		FileClose($vFile)
	EndIf
	MsgBox(64,"PROCESO FINALIZADO","La exportación ha sido finalizada")
	EndIf
EndFunc
; ====================================================================================================================
; Name...........: pCopiaTemporal()
; Description ...: Procedimimiento para guardar temporalmente el contenido del list view
; Syntax.........: pCopiaTemporal()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pCopiaTemporal()
	Local $vRutaFichero = $gFicheroTemporal
	Local $vFile
	Local $vIndice = 1
	Local $vIntroducido = 0
	$vFile = FileOpen($vRutaFichero, 2)
	; Check if file opened for writing OK
	If $vFile = -1 Then
		MsgBox(0, "Error", "Imposible crear el fichero")
		Exit
	EndIf
	; Recorremos el listview para ir insertando las líneas en el fichero
	For $vIndice = 0 to _GUICtrlListView_GetItemCount($hListView)-1 ; es contador - 1 porque el contador lo hemos iniciado en 0
		If _GUICtrlListView_GetItemText($hListView,$vIndice) <> "" Then ; Controlamos que la celda tenga valor para no introducir lineas en blanco
			$vIntroducido = Number(_GUICtrlListView_GetItemText($hListView,$vIndice))
			FileWriteLine($vFile,$vIntroducido)
		EndIf
	Next
	FileClose($vFile)
	MsgBox(64,"PROCESO FINALIZADO","Copia en fichero temporal finalizada")
EndFunc
; ====================================================================================================================
; Name...........: pCargaTemporal()
; Description ...: Procedimiento para cargar el contenido del fichero temporal en un listview
; Syntax.........: pCargaTemporal()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pCargaTemporal()
	Local $vFile = FileOpen($gFicheroTemporal, 0)
	Local $vLinea = ""
	Local $vIndice = 0
	If MsgBox(36,"ATENCION","¿Está seguro de que desea cargar el contenido del fichero temporal?") = 6 Then
		if fBorraListView(0) = 1 Then
			GUICtrlSetData($gInputPielesIntroducidas,0)
			GUICtrlSetData($gInputUnidadesIntroducidas,0)
		EndIf
		;Comprobamos que el fichero existe
		If $vFile = -1 Then
			MsgBox(0, "Error", "Imposible abrir el fichero")
			Exit
		EndIf
		;Leemos el fichero
		While 1
			$vLinea = FileReadLine($vFile)
			If @error = -1 Then ExitLoop
			_GUICtrlListView_AddItem($hListView, $vLinea, $vIndice)
			_GUICtrlListView_AddSubItem($hListView,$vIndice,($vIndice + 1),1)
			$vIndice = $vIndice + 1
		Wend
		FileClose($vFile)
		pActualizaContadores($hListView,$gInputUnidadesIntroducidas,$gInputPielesIntroducidas,0)
		_GUICtrlListView_AddItem($hListView, "", 0)
		_GUICtrlListView_EditLabel($hListView, $vIndice)
	EndIf
EndFunc
; ====================================================================================================================
; Name...........: fDameMultiplicador()
; Description ...: Devuelve el multplicador para convertirlo todo a la unidad de exportación
; Syntax.........: fDameMultiplicador()
; Parameters ....:
; Return values .: Multplicador
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func fDameMultiplicador()
	Local $vUnidadMedida = GUICtrlRead($gComboUnidadMedida)
	Local $vUnidadExportar = GUICtrlREad($gComboUnidadExportar)
	Local $vMultiplicador = ""
	;Local $vIndice = 0
	Select
		Case $vUnidadMedida = "m2"
			Select
				case $vUnidadExportar = "m2"
					$vMultiplicador = 1
				case $vUnidadExportar = "cm2"
					$vMultiplicador =  100
				case $vUnidadExportar = "p2"
					$vMultiplicador = 10.764
			EndSelect
		Case $vUnidadMedida = "cm2"
			Select
				case $vUnidadExportar = "m2"
					$vMultiplicador = 0.01
				case $vUnidadExportar = "cm2"
					$vMultiplicador = 1
				case $vUnidadExportar = "p2"
					$vMultiplicador = ((1/100)*10.764)
			EndSelect
		Case $vUnidadMedida = "p2"
			Select
				case $vUnidadExportar = "m2"
					$vMultiplicador = (1/10.764)
				case $vUnidadExportar = "cm2"
					$vMultiplicador = (1/10.764)*100
				case $vUnidadExportar = "p2"
					$vMultiplicador = 1
			EndSelect
	EndSelect
	return $vMultiplicador
EndFunc
; ====================================================================================================================
; Name...........: pComprobar()
; Description ...: Procedmiento que desglosa por grupos los pietajes introducidos
; Syntax.........: pComprobar()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pComprobar()
	Local $vMsg
	Local $vListView
	Local $vInputPielesPorGrupo
	Local $vBotonSalir
	Local $vBotonAgrupar
	Local $vIndice = 0
	Local $vInputPietajeActual
	GUICreate("Comprobación", 500, 600)
	$vListView = GUICtrlCreateListView("", 2, 2, 150, 590, BitOR($LVS_EDITLABELS, $LVS_REPORT))
	_GUICtrlListView_SetExtendedListViewStyle($vListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
	_GUICtrlListView_SetUnicodeFormat($vListView, False)
	GuiCtrlCreateLabel("Pieles por grupo: ", 180, 20)
	$vInputPielesPorGrupo = GUICtrlCreateInput("0", 270, 18, 50, 20,BitOR($ES_NUMBER,$ES_RIGHT))
	$vBotonAgrupar = GUICtrlCreateButton("Agrupar",290,550,70,30)
	$vBotonSalir = GuiCtrlCreateButton("Salir", 360, 550, 70, 30)
	$vInputPietajeActual = GUICtrlCreateInput("", 250, 200, 150, 50,BitOR(0X2000,0X0800,$ES_NUMBER,$ES_RIGHT))
	GUICtrlSetFont($vInputPietajeActual, 24, 800, "", "Comic Sans MS")
	; Add columns
	_GUICtrlListView_AddColumn($vListView, "Cont", 50)
	_GUICtrlListView_AddColumn($vListView, "Unidades",100)
	;GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
	_GUICtrlListView_EditLabel($vListView, $vIndice)
	GUISetState()
	; Loop until user exits
	while 1
		$vMsg = GUIGetMsg()
		Select
			Case $vMsg = 0
				ContinueLoop
			Case $vMsg = $vBotonAgrupar
				pAgrupar(GUICtrlRead($vInputPielesPorGrupo),$vListView)
			Case $vMsg = $vBotonSalir or $vMsg = $GUI_EVENT_CLOSE
				ExitLoop
		EndSelect
	wend
	GUIDelete()
EndFunc
; ====================================================================================================================
; Name...........: pAgrupar()
; Description ...: Hace las agrupaciones para comprobar los subtotales
; Syntax.........: pAgrupar($pCantidad,$pListView)
;					- $pCantidad: Cantidad para realizar los subtotales
;					- $pListView: list view donde se realizarán los subtotales
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pAgrupar($pCantidad,$pListView)
	Local $vContador = 0
	Local $vContadorParcial = 0
	Local $vIndice = 0
	Local $vSuma = 0
	Local $vPosicionTotal
	; Borramos el pListView
	;If fBorrarListView($pListView) Then
		For $vIndice = 0 to _GUICtrlListView_GetItemCount($hListView)-1
			If _GUICtrlListView_GetItemText($hListView,$vIndice) <> "" Then ; Controlamos que la celda tenga valor para no introducir lineas en blanco
				_GUICtrlListView_AddItem($pListView, $vIndice + 1, 0)
				_GUICtrlListView_AddSubItem($pListView, $vContador, _GUICtrlListView_GetItemText($hListView,$vIndice), 1)
				$vSuma = $vSuma + _GUICtrlListView_GetItemText($hListView,$vIndice)
				$vContadorParcial = $vContadorParcial + 1
				$vContador = $vContador + 1
				If $vContadorParcial = $pCantidad Then
					;_GUICtrlListView_AddItem($pListView, "Total unidades: ", 0)
					$vPosicionTotal = GUICtrlCreateListViewItem("Total unidades: ",$pListView)
					GUICtrlSetBkColor($vPosicionTotal,0x00ff00)
					_GUICtrlListView_AddSubItem($pListView, $vContador, $vSuma, 1)
					$vSuma = 0
					$vContadorParcial = 0
					$vContador = $vContador + 1
				EndIf
			EndIf
		Next
		; Comprobamos el caso en el que queden registro sin agrupar. Es decir, $vContadorParcial < $pCantidad
		If $vContadorParcial <> 0 Then
			$vPosicionTotal = GUICtrlCreateListViewItem("Total unidades: ",$pListView)
			GUICtrlSetBkColor($vPosicionTotal,0x00ff00)
			_GUICtrlListView_AddSubItem($pListView, $vContador, $vSuma, 1)
		EndIf
	;Else
	;	MsgBox(16,"Error","Error al limpiar las listas, salga y vuelva a entrar")
	;EndIf
EndFunc
; ====================================================================================================================
; Name...........: fCreaListView()
; Description ...: Crea listview
; Syntax.........: fCreaListView($pOpcion)
; Parameters ....: $pOpcion: Si opcion es igual 1 creamos una línea 1
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func fCreaListView($pOpcion)
	MsgBox(0,"creamos el list view",$pOpcion)
	_GUICtrlListView_Destroy($hListView)
	$hListView = GUICtrlCreateListView("Unid|Cont", 2, 2, 100, 498, BitOR($LVS_EDITLABELS, $LVS_REPORT))
	_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
	_GUICtrlListView_SetUnicodeFormat($hListView, False)
	If $pOpcion = 1 Then
		;Primera línea
		_GUICtrlListView_AddItem($hListView, "", 0)
	EndIf
	_GUICtrlListView_AddSubItem($hListView, 0, "1", 1, 1)
	_GUICtrlListView_SetColumnOrder($hListView, "1|0")
	Return $hListView
EndFunc
; ====================================================================================================================
; Name...........: pSeparar()
; Description ...: Procedmiento para separar en dos el packing list introducido
; Syntax.........: pSeparar()
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pSeparar()
	Local $vMsg
	Local $vListView1
	Local $vListView2
	Local $vInputCantidad
	Local $vBotonSalir
	Local $vBotonSeparar
	Local $vBotonExportar
	Local $vIndice = 0
	Local $vInputMetros1
	Local $vInputPieles1
	Local $vInputMetros2
	Local $vInputPieles2
	GUICreate("Comprobación", 500, 600)
	GuiCtrlCreateLabel("Cantidad: ", 160, 20)
	$vInputCantidad = GUICtrlCreateInput("0", 230, 18, 50, 20,$ES_RIGHT)
	; Creamos el list view 1
	$vListView1 = GUICtrlCreateListView("", 2, 2, 150, 530, BitOR($LVS_EDITLABELS, $LVS_REPORT))
	_GUICtrlListView_SetExtendedListViewStyle($vListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
	_GUICtrlListView_SetUnicodeFormat($vListView1, False)
	; Añadimos las columnas al primer listview1
	_GUICtrlListView_AddColumn($vListView1, "Cont", 50)
	_GUICtrlListView_AddColumn($vListView1, "Unidades",100)
	GuiCtrlCreateLabel("Total metros: ", 2, 542)
	$vInputMetros1 = GUICtrlCreateInput("0", 75, 540, 75, 20,$ES_RIGHT)
	GuiCtrlCreateLabel("Total Pieles: ", 2, 572)
	$vInputPieles1 = GUICtrlCreateInput("0", 75, 570, 75, 20,$ES_RIGHT)
	; Creamos el list view 2
	$vListView2 = GUICtrlCreateListView("", 340, 2, 150, 530, BitOR($LVS_EDITLABELS, $LVS_REPORT))
	_GUICtrlListView_SetExtendedListViewStyle($vListView2, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
	_GUICtrlListView_SetUnicodeFormat($vListView2, False)
	;Add columns
	_GUICtrlListView_AddColumn($vListView2, "Cont", 50)
	_GUICtrlListView_AddColumn($vListView2, "Unidades",100)
	GuiCtrlCreateLabel("Total metros: ", 340, 542)
	$vInputMetros2 = GUICtrlCreateInput("0", 415, 540, 75, 20,$ES_RIGHT)
	GuiCtrlCreateLabel("Total Pieles: ", 340, 572)
	$vInputPieles2 = GUICtrlCreateInput("0", 415, 570, 75, 20,$ES_RIGHT)
	; Botones
	$vBotonSeparar = GUICtrlCreateButton("Separar",210,450,70,30)
	$vBotonExportar = GuiCtrlCreateButton("Exportar", 210, 500, 70, 30)
	$vBotonSalir = GuiCtrlCreateButton("Salir", 210, 550, 70, 30)
	;GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
	_GUICtrlListView_EditLabel($vListView1, $vIndice)
	_GUICtrlListView_EditLabel($vListView2, $vIndice)
	GUISetState()
	; Loop until user exits
	while 1
		$vMsg = GUIGetMsg()
		Select
			Case $vMsg = 0
				ContinueLoop
			Case $vMsg = $vBotonSeparar
				pPartir(GUICtrlRead($vInputCantidad),$hListView,$vListView1,$vListView2)
				pActualizaContadores($vListView1,$vInputMetros1,$vInputPieles1,1)
				pActualizaContadores($vListView2,$vInputMetros2,$vInputPieles2,1)
			Case $vMsg = $vBotonExportar
				pExportarFichero($vListView1,1)
				pExportarFichero($vListView2,1)
			Case $vMsg = $vBotonSalir or $vMsg = $GUI_EVENT_CLOSE
				ExitLoop
		EndSelect
	wend
	GUIDelete()
EndFunc
; ====================================================================================================================
; Name...........: pPartir($pCantidad,$pListViewOrigen,$pListView1,$pListView2)
; Description ...: Divide los lista de pietajes en dos ficheros en base a una cantidad indicada
; Syntax.........: pPartir($pCantidad,$pListViewOrigen,$pListView1,$pListView2)
;					- $pCantidad: Cantidad para realizar los subtotales
;					- $pListViewOrigen: list view origen
;					- $pListView1: list view 1
;					- $pListView2: list view 2
; Parameters ....:
; Return values .:
; Author ........: [email protected]
; Remarks .......:
; ====================================================================================================================
Func pPartir($pCantidad,$pListViewOrigen,$pListView1,$pListView2)
	Local $vIndice = 0
	Local $vSuma = 0
	Local $vPosicion = 0
	Local $vListView = $pListView1 ;Primero insertamos en la primera listview
	;if fBorrarListView($pListView1) & fBorrarListView($pListView2) Then
		For $vIndice = 0 to _GUICtrlListView_GetItemCount($pListViewOrigen)-1
			If _GUICtrlListView_GetItemText($pListViewOrigen,$vIndice) <> "" Then ; Controlamos que la celda tenga valor para no introducir lineas en blanco
				$vPosicion = _GUICtrlListView_AddItem($vListView, _GUICtrlListView_GetItemText($pListViewOrigen,$vIndice,1), 0)
				_GUICtrlListView_AddSubItem($vListView, $vPosicion,_GUICtrlListView_GetItemText($pListViewOrigen,$vIndice), 1)
				$vSuma = $vSuma + _GUICtrlListView_GetItemText($pListViewOrigen,$vIndice)
				If $vSuma >= $pCantidad Then
					$vListView = $pListView2 ;Una vez que hemos rellenado el listview1 rellenamos el segundo.
				EndIf
			EndIf
		Next
	;Else
	;	MsgBox(16,"Error","Error al limpiar las listas, salga y vuelva a entrar")
	;EndIf
EndFunc
;Func fBorrarListView($pListView)
;_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($pListView))
;EndFunc


 
  
 .
 .