|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Скрипт создания файла данных через диологовое окно. как? |
|
[решено] Скрипт создания файла данных через диологовое окно. как?
|
Ветеран Сообщения: 2756 |
Помогите создать скрипт который бы создовал файл с расширением exp (обычный текстовый файл только с переименованным расширением). При этом нужно чтобы в файл вносились данные по определенному алгоритму.
Пример файла который нужно получить: [mm]p9=128 [mm]p10=133 [mm]p11=137 [mm]p12=25 [mm]p13=65 [mm]p14=60 [mm]p15=8 [mm]p16=89 [mm]p17=17 При запуске скрипта должно выскачить окно в котором можно ввести данные. Пример окна: То что текстом - это пояснения, а для цифр должно быть поле для их ввода. При этом каждой фразе пояснения должно автоматически подставлятся [mm]p17=. Но не по порядку как в примере. Фраза в скобках и цифра после p может быть любая, заранее мною определенная для каждой фразы пояснения. После того как все данные введены нажимаем OK и должен получится нужный файл. |
|
Отправлено: 20:50, 21-12-2009 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать Creat0R, ну да, так удобнее
![]() Creat0R, ща глянул а файл что мне нужно получить имеет большое количество параметров. В связи с этим вопрос как изменить интервал между строками и можно ли как то окно сделать в два или даже три столбца? |
------- Отправлено: 01:05, 22-12-2009 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать Creat0R, как менять разные расстояния понял а как сделать в два (три) столбца нет. Помогите пожалуйста
|
------- Отправлено: 02:50, 22-12-2009 | #12 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Pozia:
#include <GUIConstantsEx.au3> #include <EditConstants.au3> #include <WindowsConstants.au3> #include <ScrollBarConstants.au3> #include <GUIScrollBars.au3> $hGUI = GUICreate('I''m a crasy dentist', 300, 350) $hButton = GUICtrlCreateButton('Create file', 5, 317, 70, 25) Global $aLabels, $aInput_Vals, $aiInputs, $iCount, $iScroll_Max Global $sFile = @ScriptDir & '\file.ext' $aLabels &= 'Диаметр окружности впадин зубьев, df|' $aLabels &= 'Делительный диаметр, d|' $aLabels &= 'Диаметр окружности вершин зубьев, da|' $aLabels &= 'Ширина, b|' $aLabels &= 'Диаметр ступицы, dst|' $aLabels &= 'Длина ступицы, Lst|' $aLabels &= 'Толщина венца, hv|' $aLabels &= 'Диаметр расположения отверстий, dro|' $aLabels &= 'Диаметр отверстий, do|' $aInput_Vals &= '[mm]p9=|' $aInput_Vals &= '[mm]p10=|' $aInput_Vals &= '[mm]p11=|' $aInput_Vals &= '[mm]p12=|' $aInput_Vals &= '[mm]p13=|' $aInput_Vals &= '[mm]p14=|' $aInput_Vals &= '[mm]p15=|' $aInput_Vals &= '[mm]p16=|' $aInput_Vals &= '[mm]p17=|' $aLabels = StringRegExpReplace($aLabels, '\|$', '') $aLabels = StringSplit($aLabels, '|') $aInput_Vals = StringRegExpReplace($aInput_Vals, '\|$', '') $aInput_Vals = StringSplit($aInput_Vals, '|') Dim $iCount = $aInput_Vals[0] Dim $aiInputs[$iCount+1] $hData_GUI = GUICreate("Data GUI", 290, 300, 0, 0, $WS_CHILD, $WS_EX_CLIENTEDGE+$WS_EX_DLGMODALFRAME, $hGUI) For $i = 1 To $iCount $sVal = StringRegExpReplace(FileReadLine($sFile, $i), "^.*=(.*)$", "\1") If $sVal = "" Then $sVal = $i GUICtrlCreateLabel($aLabels[$i], 10, 10 + ($i-1) * 28, 180, 15) $aiInputs[$i] = GUICtrlCreateInput($sVal, 220, 10 + ($i-1) * 28, 50, 17, $ES_NUMBER) Next GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL") _GUIScrollBars_Init($hData_GUI) _GUIScrollBars_SetScrollInfoMax($hData_GUI, $SB_HORZ, 0) _GUIScrollBars_SetScrollInfoMax($hData_GUI, $SB_VERT, $iCount * 2) GUISetState(@SW_SHOW, $hData_GUI) GUISetState(@SW_SHOW, $hGUI) GUISwitch($hGUI) While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE GUIDelete($hGUI) ExitLoop Case $hButton $hWrite = FileOpen($sFile, 2) For $i = 1 To $iCount FileWriteLine($hWrite, $aInput_Vals[$i] & GUICtrlRead($aiInputs[$i])) Next FileClose($hWrite) EndSwitch WEnd Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam) #forceref $Msg, $wParam, $lParam Local $nScrollCode = BitAND($wParam, 0x0000FFFF) Local $index = -1, $yChar, $yPos Local $Min, $Max, $Page, $Pos, $TrackPos For $x = 0 To UBound($aSB_WindowInfo) - 1 If $aSB_WindowInfo[$x][0] = $hWnd Then $index = $x $yChar = $aSB_WindowInfo[$index][3] ExitLoop EndIf Next If $index = -1 Then Return 0 ; Get all the vertial scroll bar information Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT) $Min = DllStructGetData($tSCROLLINFO, "nMin") $Max = DllStructGetData($tSCROLLINFO, "nMax") $Page = DllStructGetData($tSCROLLINFO, "nPage") ; Save the position for comparison later on $yPos = DllStructGetData($tSCROLLINFO, "nPos") $Pos = $yPos $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos") Switch $nScrollCode Case $SB_TOP ; user clicked the HOME keyboard key DllStructSetData($tSCROLLINFO, "nPos", $Min) Case $SB_BOTTOM ; user clicked the END keyboard key DllStructSetData($tSCROLLINFO, "nPos", $Max) Case $SB_LINEUP ; user clicked the top arrow DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1) Case $SB_LINEDOWN ; user clicked the bottom arrow DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1) Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page) Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page) Case $SB_THUMBTRACK ; user dragged the scroll box DllStructSetData($tSCROLLINFO, "nPos", $TrackPos) EndSwitch ;~ // Set the position and then retrieve it. Due to adjustments ;~ // by Windows it may not be the same as the value set. DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) ;// If the position has changed, scroll the window and update it $Pos = DllStructGetData($tSCROLLINFO, "nPos") If ($Pos <> $yPos) Then _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos)) $yPos = $Pos EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_VSCROLL |
|
------- Отправлено: 03:18, 22-12-2009 | #13 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать Вроде все отлично. если возникнут еще вопросы спрошу.
PS Не обязательно но для удобства: Как сделать чтобы данное окно было поверх всех окон? Можно ли как то задать определенные координаты появления окна? (как пример - верхний левый угол) |
------- Отправлено: 03:58, 22-12-2009 | #14 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать Creat0R, пока спал пришла мысль. может ли автоит вытянуть параметры что я ввожу руками в Вами предложенный скрипт из файла EXCEL. Суть такова: EXCEL файл считает мне кучу параметров и потом сводит их в один столбец. В соседнем столбце могут быть:
то есть получится два столбца с параметрами и значениями. Может ли автоит скрипт залезть в EXCEL, вытянуть эти параметры и сделать файл с расширением exp? |
Отправлено: 10:58, 22-12-2009 | #15 |
Пользователь Сообщения: 143
|
Профиль | Отправить PM | Цитировать Pozia, можно:
#include <GUIConstantsEx.au3> #include <EditConstants.au3> #include <WindowsConstants.au3> #include <ScrollBarConstants.au3> #include <GUIScrollBars.au3> #include <Excel.au3> $hGUI = GUICreate('I''m a crasy dentist', 300, 350) $hButton = GUICtrlCreateButton('Create file', 5, 317, 70, 25) $hButton_excel = GUICtrlCreateButton('Из EXCEL', 225, 317, 70, 25) ;----- Для EXCEL ------------------------------------------------ Global $sFileExcel = @ScriptDir & "\book.xls" ; имя файла Global $num_row = 12 ; номер строки с которого начинаются нужные значения Global $num_col = 8 ; номер столбца в котором находятся значения ;----------------------------------------------------------------- Global $aLabels, $aInput_Vals, $aiInputs, $iCount, $iScroll_Max Global $sFile = @ScriptDir & '\file.ext' $aLabels &= 'Диаметр окружности впадин зубьев, df|' $aLabels &= 'Делительный диаметр, d|' $aLabels &= 'Диаметр окружности вершин зубьев, da|' $aLabels &= 'Ширина, b|' $aLabels &= 'Диаметр ступицы, dst|' $aLabels &= 'Длина ступицы, Lst|' $aLabels &= 'Толщина венца, hv|' $aLabels &= 'Диаметр расположения отверстий, dro|' $aLabels &= 'Диаметр отверстий, do|' $aInput_Vals &= '[mm]p9=|' $aInput_Vals &= '[mm]p10=|' $aInput_Vals &= '[mm]p11=|' $aInput_Vals &= '[mm]p12=|' $aInput_Vals &= '[mm]p13=|' $aInput_Vals &= '[mm]p14=|' $aInput_Vals &= '[mm]p15=|' $aInput_Vals &= '[mm]p16=|' $aInput_Vals &= '[mm]p17=|' $aLabels = StringRegExpReplace($aLabels, '\|$', '') $aLabels = StringSplit($aLabels, '|') $aInput_Vals = StringRegExpReplace($aInput_Vals, '\|$', '') $aInput_Vals = StringSplit($aInput_Vals, '|') Dim $iCount = $aInput_Vals[0] Dim $aiInputs[$iCount+1] $hData_GUI = GUICreate("Data GUI", 290, 300, 0, 0, $WS_CHILD, $WS_EX_CLIENTEDGE+$WS_EX_DLGMODALFRAME, $hGUI) For $i = 1 To $iCount $sVal = StringRegExpReplace(FileReadLine($sFile, $i), "^.*=(.*)$", "\1") If $sVal = "" Then $sVal = $i GUICtrlCreateLabel($aLabels[$i], 10, 10 + ($i-1) * 28, 180, 15) $aiInputs[$i] = GUICtrlCreateInput($sVal, 220, 10 + ($i-1) * 28, 50, 17, $ES_NUMBER) Next GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL") _GUIScrollBars_Init($hData_GUI) _GUIScrollBars_SetScrollInfoMax($hData_GUI, $SB_HORZ, 0) _GUIScrollBars_SetScrollInfoMax($hData_GUI, $SB_VERT, $iCount * 2) GUISetState(@SW_SHOW, $hData_GUI) GUISetState(@SW_SHOW, $hGUI) GUISwitch($hGUI) While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE GUIDelete($hGUI) ExitLoop Case $hButton $hWrite = FileOpen($sFile, 2) For $i = 1 To $iCount FileWriteLine($hWrite, $aInput_Vals[$i] & GUICtrlRead($aiInputs[$i])) Next FileClose($hWrite) Case $hButton_excel $oExcel = _ExcelBookOpen($sFileExcel) If @error = 1 Then MsgBox(0, "Error!", "Unable to Create the Excel Object") ElseIf @error = 2 Then MsgBox(0, "Error!", "File does not exist - Shame on you!") Else For $i = 1 to Ubound($aiInputs)-1 $sCellValue = _ExcelReadCell($oExcel, $i+($num_row-1), $num_col) GUICtrlSetData($aiInputs[$i], $sCellValue) Next _ExcelBookClose($oExcel) EndIf EndSwitch WEnd Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam) #forceref $Msg, $wParam, $lParam Local $nScrollCode = BitAND($wParam, 0x0000FFFF) Local $index = -1, $yChar, $yPos Local $Min, $Max, $Page, $Pos, $TrackPos For $x = 0 To UBound($aSB_WindowInfo) - 1 If $aSB_WindowInfo[$x][0] = $hWnd Then $index = $x $yChar = $aSB_WindowInfo[$index][3] ExitLoop EndIf Next If $index = -1 Then Return 0 ; Get all the vertial scroll bar information Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT) $Min = DllStructGetData($tSCROLLINFO, "nMin") $Max = DllStructGetData($tSCROLLINFO, "nMax") $Page = DllStructGetData($tSCROLLINFO, "nPage") ; Save the position for comparison later on $yPos = DllStructGetData($tSCROLLINFO, "nPos") $Pos = $yPos $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos") Switch $nScrollCode Case $SB_TOP ; user clicked the HOME keyboard key DllStructSetData($tSCROLLINFO, "nPos", $Min) Case $SB_BOTTOM ; user clicked the END keyboard key DllStructSetData($tSCROLLINFO, "nPos", $Max) Case $SB_LINEUP ; user clicked the top arrow DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1) Case $SB_LINEDOWN ; user clicked the bottom arrow DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1) Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page) Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page) Case $SB_THUMBTRACK ; user dragged the scroll box DllStructSetData($tSCROLLINFO, "nPos", $TrackPos) EndSwitch ;~ // Set the position and then retrieve it. Due to adjustments ;~ // by Windows it may not be the same as the value set. DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) ;// If the position has changed, scroll the window and update it $Pos = DllStructGetData($tSCROLLINFO, "nPos") If ($Pos <> $yPos) Then _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos)) $yPos = $Pos EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_VSCROLL |
Последний раз редактировалось HORRIBLE, 22-12-2009 в 15:23. Отправлено: 14:22, 22-12-2009 | #16 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать HORRIBLE, у меня положение двух столбцов с параметрами и значениями находятся не вверху а ниже, где то на 50 строке. Как это учесть? И можно ли сделать без запуска экселя?
|
------- Отправлено: 14:34, 22-12-2009 | #17 |
Пользователь Сообщения: 143
|
Профиль | Отправить PM | Цитировать Pozia, это учитывается здесь:
$num_row = номер строки, в вашем примере видимо это будет число 50 $num_col = номер столбца, вытащил эти строки в начала кода.... И можно ли сделать без запуска экселя? Не могу ответить, открываемое окно можно скрыть просто. Для этого нужно: $oExcel = _ExcelBookOpen($sFileExcel) заменить на $oExcel = _ExcelBookOpen($sFileExcel,0) |
Последний раз редактировалось HORRIBLE, 22-12-2009 в 16:20. Отправлено: 15:13, 22-12-2009 | #18 |
![]() Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать Цитата HORRIBLE:
|
|
------- Отправлено: 15:45, 22-12-2009 | #19 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать Цитата HORRIBLE:
Еще есть пожелание. Было бы хорошо, чтобы скрипт помимо самих значений еще и параметры типа: вытягивал из экселя. То есть в экселе у меня столбец параметров и рядом столбец чисел. Серипт должен их оттуда вытянуть и в принципе диалог мне не нужен. Просто пусть выскочит окно с кнопкой "ОК" что файл создан. А в скрипте хотелось бы только задать начало и конец столбца параметров и столбца чисел. Кстати если страниц несколько в эксель файле то как скрипт знает с какой страницы ему открыть числа? |
|
------- Отправлено: 18:33, 22-12-2009 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Как вызвать диалоговое окно открытия файла? | jaki | Скриптовые языки администрирования Windows | 4 | 30-03-2011 12:12 | |
[решено] Как написать скрипт о проверке нужного файла на съемном носителе? | Pozia | AutoIt | 12 | 05-03-2009 20:20 | |
Интернет - Диалоговое окно загрузки файла IE убрать через реестр... | 12usver12 | Microsoft Windows 2000/XP | 6 | 26-05-2008 15:41 | |
Как остановить скрипт, пока юзер не закроет всплывающее окно? | Gamover jr | Вебмастеру | 5 | 16-04-2008 20:08 | |
Как взять дату создания файла из перла? | radioamator | Вебмастеру | 2 | 30-04-2004 11:14 |
|