Must AutoIt
Сообщения: 3054
Благодарности: 1009
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
Цитата Pozia:
В связи с этим вопрос как изменить интервал между строками и можно ли как то окно сделать в два или даже три столбца? »
|
Как раз для таких случаев есть _GUIScrollBars*:
Код: 
#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
|