Problema con este programa
Publicado: 12 Dic 2012, 18:56
Hola a todos,
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
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