Что нового

Копирование значений нескольких Input в буфер обмена

joparezzz

Новичок
Сообщения
65
Репутация
0
Есть код:
Код:
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <UpdownConstants.au3>

Global $nDn1, $nDk1, $iDn1, $iDk1
Global $nDn2, $nDk2, $iDn2, $iDk2
Global $nDn3, $nDk3, $iDn3, $iDk3
Global $nDn4, $nDk4, $iDn4, $iDk4
Global $nDn5, $nDk5, $iDn5, $iDk5

Global $nInputn1, $nUDn1, $nInputk1, $nUDk1, $nCheckbox1, $nOutputTCM1, $nOutputRM1
Global $nInputn2, $nUDn2, $nInputk2, $nUDk2, $nCheckbox2, $nOutputTCM2, $nOutputRM2
Global $nInputn3, $nUDn3, $nInputk3, $nUDk3, $nCheckbox3, $nOutputTCM3, $nOutputRM3
Global $nInputn4, $nUDn4, $nInputk4, $nUDk4, $nCheckbox4, $nOutputTCM4, $nOutputRM4
Global $nInputn5, $nUDn5, $nInputk5, $nUDk5, $nCheckbox5, $nOutputTCM5, $nOutputRM5

$hGUI = GUICreate('Кабельные вводы', 980, 250, -1, -1, -1, $WS_CLIPCHILDREN)
Create($nInputn1, $nUDn1, $nInputk1, $nUDk1, $nCheckbox1, $nOutputTCM1, $nOutputRM1, 10)

GUISetState()

Dim $TCM = 	[["ТСМ 20/0+5-12", 5, 12], _
			["ТСМ 30/0+13-23", 13, 23], _
			["ТСМ 40/0+23-33", 23, 33], _
			["ТСМ 60/0+34-51", 34, 51], _
			["ТСМ 90/0+52-78", 52, 78], _
			["ТСМ 120/0+79-99", 79, 99]]
Dim $RM =   [["RM 20 (∅4-14,5)", 4, 14.5], _
            ["RM 30 (∅10-25)", 10, 25], _
            ["RM 40 (∅21,5-34,5)", 21.5, 34.5], _
            ["RM 60 (∅28-54)", 28, 54], _
            ["RM 90 (∅48-71)", 48, 71], _
            ["RM 120 (∅67,5-99)", 67.5, 99]]

Dim $RMe =  [["RM 20w40 (∅3,5-16,5)", 3.5, 16.5], _
            ["RM 40 10-32 (∅9,5-32,5)", 9.5, 32.5], _
            ["RM 60 24-54 (∅24-54)", 24, 54]]

While 1
    Fly($nDn1, $nInputn1, $nDk1, $nInputk1, $iDn1, $iDk1, $nOutputTCM1, $nOutputRM1)
	Fly($nDn2, $nInputn2, $nDk2, $nInputk2, $iDn2, $iDk2, $nOutputTCM2, $nOutputRM2)
	Fly($nDn3, $nInputn3, $nDk3, $nInputk3, $iDn3, $iDk3, $nOutputTCM3, $nOutputRM3)
	Fly($nDn4, $nInputn4, $nDk4, $nInputk4, $iDn4, $iDk4, $nOutputTCM4, $nOutputRM4)
	Fly($nDn5, $nInputn5, $nDk5, $nInputk5, $iDn5, $iDk5, $nOutputTCM5, $nOutputRM5)


    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit

        Case $nCheckbox1
            If BitAND(GUICtrlRead($nCheckbox1), $GUI_CHECKED) Then
				Create($nInputn2, $nUDn2, $nInputk2, $nUDk2, $nCheckbox2, $nOutputTCM2, $nOutputRM2, 40)
            Else
                Delete($nInputn2, $nUDn2, $nInputk2, $nUDk2, $nCheckbox2, $nOutputTCM2, $nOutputRM2)
            EndIf

        Case $nCheckbox2
            If BitAND(GUICtrlRead($nCheckbox2), $GUI_CHECKED) Then
				Create($nInputn3, $nUDn3, $nInputk3, $nUDk3, $nCheckbox3, $nOutputTCM3, $nOutputRM3, 70)
				GUICtrlSetState ($nCheckbox1,  $GUI_DISABLE)
            Else
                Delete($nInputn3, $nUDn3, $nInputk3, $nUDk3, $nCheckbox3, $nOutputTCM3, $nOutputRM3)
				GUICtrlSetState ($nCheckbox1,  $GUI_ENABLE)
            EndIf

		Case $nCheckbox3
            If BitAND(GUICtrlRead($nCheckbox3), $GUI_CHECKED) Then
				Create($nInputn4, $nUDn4, $nInputk4, $nUDk4, $nCheckbox4, $nOutputTCM4, $nOutputRM4, 100)
				GUICtrlSetState ($nCheckbox2,  $GUI_DISABLE)
            Else
                Delete($nInputn4, $nUDn4, $nInputk4, $nUDk4, $nCheckbox4, $nOutputTCM4, $nOutputRM4)
				GUICtrlSetState ($nCheckbox2,  $GUI_ENABLE)
            EndIf

		Case $nCheckbox4
            If BitAND(GUICtrlRead($nCheckbox4), $GUI_CHECKED) Then
				Create($nInputn5, $nUDn5, $nInputk5, $nUDk5, $nCheckbox5, $nOutputTCM5, $nOutputRM5, 130)
				GUICtrlSetState ($nCheckbox3,  $GUI_DISABLE)
            Else
                Delete($nInputn5, $nUDn5, $nInputk5, $nUDk5, $nCheckbox5, $nOutputTCM5, $nOutputRM5)
				GUICtrlSetState ($nCheckbox3,  $GUI_ENABLE)
            EndIf

    EndSwitch
WEnd


Func CabTCM_Index($pDn, $pDk, $pOutput)
  If Number($pDn) > Number($pDk) Or $pDn < $TCM[0][1] Or $pDk > $TCM[UBound($TCM) - 1][2] Then Return GUICtrlSetData($pOutput, "Некорректный диапазон")
  GUICtrlSetData($pOutput, '∅' & $pDn & '–' & $pDk & ':' & @TAB)
  For $i = 0 To UBound($TCM) - 1
    If $pDk <= $TCM[$i][2] Then
	  For $i = $i To 0 Step -1
		  If $pDn >= $TCM[$i][1] Then
			GUICtrlSetData($pOutput, $TCM[$i][0], 1)
		    ExitLoop 2
		  Else
			GUICtrlSetData($pOutput, $TCM[$i][0] & ', ', 1)
		  EndIf
	  Next
	  Else
	EndIf
  Next
EndFunc


Func CabRM_Index($pDn, $pDk, $pOutputRM)
  If Number($pDn) > Number($pDk) Or $pDn < $RMe[0][1] Or $pDk > $RM[UBound($RM) - 1][2] Then Return GUICtrlSetData($pOutputRM, "Некорректный диапазон")
  GUICtrlSetData($pOutputRM, '∅' & $pDn & '–' & $pDk & ':' & @TAB)
  For $i = 0 To UBound($RM) - 1
    If $pDn >= $RM[$i][1] And $pDk <= $RM[$i][2] Then Return GUICtrlSetData($pOutputRM, $RM[$i][0], 1)
  Next
  For $i = 0 To UBound($RMe) - 1
    If $pDn >= $RMe[$i][1] And $pDk <= $RMe[$i][2] Then Return GUICtrlSetData($pOutputRM, $RMe[$i][0], 1)
  Next
  For $i = 0 To UBound($RM) - 1
    If $pDk <= $RM[$i][2] Then
	  For $i = $i To 0 Step -1
		  If $pDn >= $RM[$i][1] Then
			GUICtrlSetData($pOutputRM, $RM[$i][0], 1)
		    ExitLoop 2
		  Else
			GUICtrlSetData($pOutputRM, $RM[$i][0] & ', ', 1)
		  EndIf
	  Next
	  Else
	EndIf
  Next
EndFunc


Func Fly(ByRef $nDn1, ByRef $nInputn1, ByRef $nDk1, ByRef $nInputk1, ByRef $iDn1, ByRef $iDk1, ByRef $nOutputTCM1, ByRef $nOutputRM1)
    $nDn1 = GUICtrlRead($nInputn1)
    $nDk1 = GUICtrlRead($nInputk1)
    If $nDn1 <> $iDn1 Or $nDk1 <> $iDk1 Then
		CabTCM_Index($nDn1, $nDk1, $nOutputTCM1)
		CabRM_Index ($nDn1, $nDk1, $nOutputRM1)
        $iDn1 = $nDn1
        $iDk1 = $nDk1
    EndIf
EndFunc

Func Create(ByRef $nInputn1, ByRef $nUDn1, ByRef $nInputk1, ByRef $nUDk1, ByRef $nCheckbox1, ByRef $nOutputTCM1, ByRef $nOutputRM1, $y)
	$nInputn1 = GUICtrlCreateInput('23', 10, $y, 50, 20)
	$nUDn1    = GUICtrlCreateUpdown(-1, $UDS_ALIGNLEFT)
				GUICtrlSetLimit(-1, 99, 1)
	$nInputk1 = GUICtrlCreateInput('33', 75, $y, 50, 20)
	$nUDk1    = GUICtrlCreateUpdown(-1, $UDS_ALIGNRIGHT)
				GUICtrlSetLimit(-1, 99, 1)
	$nCheckbox1 = GUICtrlCreateCheckbox('', 130, $y, 20, 20)
	$nOutputTCM1 = GUICtrlCreateInput('', 160, $y, 400, 20)
	$nOutputRM1 = GUICtrlCreateInput('', 570, $y, 400, 20)
EndFunc

Func Delete(ByRef $nInputn2, ByRef $nUDn2, ByRef $nInputk2, ByRef $nUDk2, ByRef $nCheckbox2, ByRef $nOutputTCM2, ByRef $nOutputRM2)
	GUICtrlDelete($nInputn2)
	GUICtrlDelete($nInputk2)
	GUICtrlDelete($nCheckbox2)
	GUICtrlDelete($nUDn2)
	GUICtrlDelete($nUDk2)
	GUICtrlDelete($nOutputTCM2)
	GUICtrlDelete($nOutputRM2)
EndFunc


Возможно ли одновременно скопировать значение всех Input в буфер обмена?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Зачем буфер обмена?
 
Автор
J

joparezzz

Новичок
Сообщения
65
Репутация
0
Чтобы можно было вставить в блокнот или в Excel.
Добавил кнопку, но проблема в том если отсутствую последующие Input выводит 0.
Как заранее проверить сколько всего элементов Input?

Код:
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <UpdownConstants.au3>

Global $nDn1, $nDk1, $iDn1, $iDk1
Global $nDn2, $nDk2, $iDn2, $iDk2
Global $nDn3, $nDk3, $iDn3, $iDk3
Global $nDn4, $nDk4, $iDn4, $iDk4
Global $nDn5, $nDk5, $iDn5, $iDk5

Global $nInputn1, $nUDn1, $nInputk1, $nUDk1, $nCheckbox1, $nOutputTCM1, $nOutputRM1
Global $nInputn2, $nUDn2, $nInputk2, $nUDk2, $nCheckbox2, $nOutputTCM2, $nOutputRM2
Global $nInputn3, $nUDn3, $nInputk3, $nUDk3, $nCheckbox3, $nOutputTCM3, $nOutputRM3
Global $nInputn4, $nUDn4, $nInputk4, $nUDk4, $nCheckbox4, $nOutputTCM4, $nOutputRM4
Global $nInputn5, $nUDn5, $nInputk5, $nUDk5, $nCheckbox5, $nOutputTCM5, $nOutputRM5

$hGUI = GUICreate('Кабельные вводы', 980, 250, -1, -1, -1, $WS_CLIPCHILDREN)
Create($nInputn1, $nUDn1, $nInputk1, $nUDk1, $nCheckbox1, $nOutputTCM1, $nOutputRM1, 10)

$nBtnCopy = GUICtrlCreateButton("Скопировать", 160, 210, 100, 26)

GUISetState()

Dim $TCM = 	[["ТСМ 20/0+5-12", 5, 12], _
			["ТСМ 30/0+13-23", 13, 23], _
			["ТСМ 40/0+23-33", 23, 33], _
			["ТСМ 60/0+34-51", 34, 51], _
			["ТСМ 90/0+52-78", 52, 78], _
			["ТСМ 120/0+79-99", 79, 99]]
Dim $RM =   [["RM 20 (∅4-14,5)", 4, 14.5], _
            ["RM 30 (∅10-25)", 10, 25], _
            ["RM 40 (∅21,5-34,5)", 21.5, 34.5], _
            ["RM 60 (∅28-54)", 28, 54], _
            ["RM 90 (∅48-71)", 48, 71], _
            ["RM 120 (∅67,5-99)", 67.5, 99]]

Dim $RMe =  [["RM 20w40 (∅3,5-16,5)", 3.5, 16.5], _
            ["RM 40 10-32 (∅9,5-32,5)", 9.5, 32.5], _
            ["RM 60 24-54 (∅24-54)", 24, 54]]

While 1
    Fly($nDn1, $nInputn1, $nDk1, $nInputk1, $iDn1, $iDk1, $nOutputTCM1, $nOutputRM1)
	Fly($nDn2, $nInputn2, $nDk2, $nInputk2, $iDn2, $iDk2, $nOutputTCM2, $nOutputRM2)
	Fly($nDn3, $nInputn3, $nDk3, $nInputk3, $iDn3, $iDk3, $nOutputTCM3, $nOutputRM3)
	Fly($nDn4, $nInputn4, $nDk4, $nInputk4, $iDn4, $iDk4, $nOutputTCM4, $nOutputRM4)
	Fly($nDn5, $nInputn5, $nDk5, $nInputk5, $iDn5, $iDk5, $nOutputTCM5, $nOutputRM5)


    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit

        Case $nCheckbox1
            If BitAND(GUICtrlRead($nCheckbox1), $GUI_CHECKED) Then
				Create($nInputn2, $nUDn2, $nInputk2, $nUDk2, $nCheckbox2, $nOutputTCM2, $nOutputRM2, 40)
            Else
                Delete($nInputn2, $nUDn2, $nInputk2, $nUDk2, $nCheckbox2, $nOutputTCM2, $nOutputRM2)
            EndIf

        Case $nCheckbox2
            If BitAND(GUICtrlRead($nCheckbox2), $GUI_CHECKED) Then
				Create($nInputn3, $nUDn3, $nInputk3, $nUDk3, $nCheckbox3, $nOutputTCM3, $nOutputRM3, 70)
				GUICtrlSetState ($nCheckbox1,  $GUI_DISABLE)
            Else
                Delete($nInputn3, $nUDn3, $nInputk3, $nUDk3, $nCheckbox3, $nOutputTCM3, $nOutputRM3)
				GUICtrlSetState ($nCheckbox1,  $GUI_ENABLE)
            EndIf

		Case $nCheckbox3
            If BitAND(GUICtrlRead($nCheckbox3), $GUI_CHECKED) Then
				Create($nInputn4, $nUDn4, $nInputk4, $nUDk4, $nCheckbox4, $nOutputTCM4, $nOutputRM4, 100)
				GUICtrlSetState ($nCheckbox2,  $GUI_DISABLE)
            Else
                Delete($nInputn4, $nUDn4, $nInputk4, $nUDk4, $nCheckbox4, $nOutputTCM4, $nOutputRM4)
				GUICtrlSetState ($nCheckbox2,  $GUI_ENABLE)
            EndIf

		Case $nCheckbox4
            If BitAND(GUICtrlRead($nCheckbox4), $GUI_CHECKED) Then
				Create($nInputn5, $nUDn5, $nInputk5, $nUDk5, $nCheckbox5, $nOutputTCM5, $nOutputRM5, 130)
				GUICtrlSetState ($nCheckbox3,  $GUI_DISABLE)
            Else
                Delete($nInputn5, $nUDn5, $nInputk5, $nUDk5, $nCheckbox5, $nOutputTCM5, $nOutputRM5)
				GUICtrlSetState ($nCheckbox3,  $GUI_ENABLE)
            EndIf

		Case $nBtnCopy
            $sText = ''
			$sText &= GUICtrlRead($nOutputTCM1) & @TAB & GUICtrlRead($nOutputRM1) & @CRLF
			$sText &= GUICtrlRead($nOutputTCM2) & @TAB & GUICtrlRead($nOutputRM2) & @CRLF
			$sText &= GUICtrlRead($nOutputTCM3) & @TAB & GUICtrlRead($nOutputRM3) & @CRLF
			$sText &= GUICtrlRead($nOutputTCM4) & @TAB & GUICtrlRead($nOutputRM4) & @CRLF
			$sText &= GUICtrlRead($nOutputTCM5) & @TAB & GUICtrlRead($nOutputRM5) & @CRLF
			ClipPut($sText)
            MsgBox(0, "Результат", $sText, 0, $hGui)


    EndSwitch
WEnd


Func CabTCM_Index($pDn, $pDk, $pOutput)
  If Number($pDn) > Number($pDk) Or $pDn < $TCM[0][1] Or $pDk > $TCM[UBound($TCM) - 1][2] Then Return GUICtrlSetData($pOutput, "Некорректный диапазон")
  GUICtrlSetData($pOutput, '∅' & $pDn & '–' & $pDk & ':' & @TAB)
  For $i = 0 To UBound($TCM) - 1
    If $pDk <= $TCM[$i][2] Then
	  For $i = $i To 0 Step -1
		  If $pDn >= $TCM[$i][1] Then
			GUICtrlSetData($pOutput, $TCM[$i][0], 1)
		    ExitLoop 2
		  Else
			GUICtrlSetData($pOutput, $TCM[$i][0] & ', ', 1)
		  EndIf
	  Next
	  Else
	EndIf
  Next
EndFunc


Func CabRM_Index($pDn, $pDk, $pOutputRM)
  If Number($pDn) > Number($pDk) Or $pDn < $RMe[0][1] Or $pDk > $RM[UBound($RM) - 1][2] Then Return GUICtrlSetData($pOutputRM, "Некорректный диапазон")
  GUICtrlSetData($pOutputRM, '∅' & $pDn & '–' & $pDk & ':' & @TAB)
  For $i = 0 To UBound($RM) - 1
    If $pDn >= $RM[$i][1] And $pDk <= $RM[$i][2] Then Return GUICtrlSetData($pOutputRM, $RM[$i][0], 1)
  Next
  For $i = 0 To UBound($RMe) - 1
    If $pDn >= $RMe[$i][1] And $pDk <= $RMe[$i][2] Then Return GUICtrlSetData($pOutputRM, $RMe[$i][0], 1)
  Next
  For $i = 0 To UBound($RM) - 1
    If $pDk <= $RM[$i][2] Then
	  For $i = $i To 0 Step -1
		  If $pDn >= $RM[$i][1] Then
			GUICtrlSetData($pOutputRM, $RM[$i][0], 1)
		    ExitLoop 2
		  Else
			GUICtrlSetData($pOutputRM, $RM[$i][0] & ', ', 1)
		  EndIf
	  Next
	  Else
	EndIf
  Next
EndFunc


Func Fly(ByRef $nDn1, ByRef $nInputn1, ByRef $nDk1, ByRef $nInputk1, ByRef $iDn1, ByRef $iDk1, ByRef $nOutputTCM1, ByRef $nOutputRM1)
    $nDn1 = GUICtrlRead($nInputn1)
    $nDk1 = GUICtrlRead($nInputk1)
    If $nDn1 <> $iDn1 Or $nDk1 <> $iDk1 Then
		CabTCM_Index($nDn1, $nDk1, $nOutputTCM1)
		CabRM_Index ($nDn1, $nDk1, $nOutputRM1)
        $iDn1 = $nDn1
        $iDk1 = $nDk1
    EndIf
EndFunc

Func Create(ByRef $nInputn1, ByRef $nUDn1, ByRef $nInputk1, ByRef $nUDk1, ByRef $nCheckbox1, ByRef $nOutputTCM1, ByRef $nOutputRM1, $y)
	$nInputn1 = GUICtrlCreateInput('23', 10, $y, 50, 20)
	$nUDn1    = GUICtrlCreateUpdown(-1, $UDS_ALIGNLEFT)
				GUICtrlSetLimit(-1, 99, 1)
	$nInputk1 = GUICtrlCreateInput('33', 75, $y, 50, 20)
	$nUDk1    = GUICtrlCreateUpdown(-1, $UDS_ALIGNRIGHT)
				GUICtrlSetLimit(-1, 99, 1)
	$nCheckbox1 = GUICtrlCreateCheckbox('', 130, $y, 20, 20)
	$nOutputTCM1 = GUICtrlCreateInput('', 160, $y, 400, 20)
	$nOutputRM1 = GUICtrlCreateInput('', 570, $y, 400, 20)
EndFunc

Func Delete(ByRef $nInputn2, ByRef $nUDn2, ByRef $nInputk2, ByRef $nUDk2, ByRef $nCheckbox2, ByRef $nOutputTCM2, ByRef $nOutputRM2)
	GUICtrlDelete($nInputn2)
	GUICtrlDelete($nInputk2)
	GUICtrlDelete($nCheckbox2)
	GUICtrlDelete($nUDn2)
	GUICtrlDelete($nUDk2)
	GUICtrlDelete($nOutputTCM2)
	GUICtrlDelete($nOutputRM2)
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
создать массив и в него вносить ID новых элементов, а при удалении элементов, удалять их ID из массива. для чтения содержимого или состояния элементов использовать этот массив
хотя, у тебя ограничено количество создаваемых элементов, можно проще. объявляешь глобальный счетчик(переменную). при создании плюсуешь к счетчику, при удалении - минусуешь. получишь текущее количество элементов. по умолчанию у тебя он один


Добавлено:
Сообщение автоматически объединено:

вообще лучше оптимизировать весь код. тогда можно создавать не фиксированное число элементов как у тебя
но опять же, нужен будет массив, куда будут помещаться данные новых элементов. в принципе, достаточно их ID. как и писал выше
к тому же, сократишь код


Добавлено:
Сообщение автоматически объединено:

если ничего не менять то через проверку

Код:
Case $nBtnCopy
			$sText = ''
			Local $tmpText
			$tmpText = GUICtrlRead($nOutputTCM1)
			If $tmpText Then $sText &= $tmpText & @TAB & GUICtrlRead($nOutputRM1) & @CRLF
			$tmpText = GUICtrlRead($nOutputTCM2)
			If $tmpText Then $sText &= $tmpText & @TAB & GUICtrlRead($nOutputRM2) & @CRLF
			$tmpText = GUICtrlRead($nOutputTCM3)
			If $tmpText Then $sText &= $tmpText & @TAB & GUICtrlRead($nOutputRM3) & @CRLF
			$tmpText = GUICtrlRead($nOutputTCM4)
			If $tmpText Then $sText &= $tmpText & @TAB & GUICtrlRead($nOutputRM4) & @CRLF
			$tmpText = GUICtrlRead($nOutputTCM5)
			If $tmpText Then $sText &= $tmpText & @TAB & GUICtrlRead($nOutputRM5) & @CRLF
			ClipPut($sText)
			MsgBox(0, "Результат", $sText, 0, $hGUI)
 
Верх