Author Topic: Библиотеки пользовательских подпрограмм  (Read 40688 times)

0 Members and 2 Guests are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Вот решил выложить, чем пользуюсь довольно часто...
В связи с изменением вызова подпрограмм в версии 4.9 и что самое главное, появившейся возможностью передачи параметров, некоторые старые инклюды переделал в новые и немного сгруппировал по темам.
Понятно, что это делается, чтобы из скрипта в скрипт не копировать целые куски.
Пока довольно мало написано/перенесено на 4.9, но всё же когда-то нужно начинать.
Заделал себе папку Libs и из неё подключаю библиотеки.

Пока выкладываю только 4 инклюда (для самой первой версии):
[spoiler]
  • m-move.cms
     Содержит всего 2 подпрограммы
    • m-move    - плавное перемещение мыши в координаты
    • m-lclick      - клик по координатам, перемещение в координаты плавное
  • logger.cms
     Содержит 3 подпрограммы
    • LOG_ARR     - вывод в лог элементов массива
    • LOG_ARR2   - вывод в лог парных элементов массива (для массива координат X-Y)
    • logXY           - вывод в лог координат $_return1, $_return2  (шоб було)
  • Copy_Paste.cms
     Содержит 4 подпрограммы работы с буфером обмена
    • copy          - копировать Ctrl+С
    • paste        - вставить Ctrl+V
    • Selekt_All  - выделить всё Ctrl+A
    • Del_All       - выделить всё Ctrl+A и удалить DEL
  • m-click.cms
     Содержит 7 подпрограмм, клики и поиск картинок
     Подпрограммы из этого блока которые содержат клики могут использоваться совместно с плавным перемещением мыши m-move.
     За это отвечает переменная в основном скрипте $mmov. Если $mmov = 1 будет использовано плавное перемещение.
     Клики разделены на нажать-отпустить.
    • клик_return                  - КЛИК без параметров по коорд. $_return1, $_return2
    • клик                              - КЛИК по координатам
    • клик_смещение            - КЛИК со смещением относительно $_return1, $_return2
    • FIND_PIC_NW               - поиск картинки без ожидания (область, имя,%,COLORMODE)
    • FIND_PIC                       - поиск картинки с ожиданием 10 сек. (область, имя,%,COLORMODE)
    • FIND_PIC_PREDCLICK   - поиск картинки с ожиданием 20 сек. и возможностью дублирования предшествующего клика каждые 6 сек. (область, имя,%,COLORMODE,предклик да/нет,координаты клика)
    • FIND_ARR                      - поиск всех картинок в массив (область, имя,%,COLORMODE)
Внутри скриптов написано, какие параметры можно передавать и пример вызова.

И, не подпрограмма, а просто скрипт скриншотов во всех режимах COLORMODE  - "снимки в colormode.cms"[/spoiler]


Добавляйтесь  :) 
Хотел ещё запилить отдельную библиотеку для работы с браузером:
  • вперёд/назад/обновить страницу, закрыть браузер, новое окно, закрыть окно
  • работа с вкладками - открыть/закрыть/следующая/по номеру/последняя
  • поиск текста на странице/следующее-преведущее найденное
  • ...
Короче оскриптить сочетания горячих клавиш + поиск
« Last Edit: December 19, 2016, 01:46:20 PM by Vint »


Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
спс за либы, не знал как их прикручивать и таскал все сабы с собой

обновления есть?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Был у меня симбиозик один для вывода диалоговых окон. Частично он потерял актуальность после улучшения DIALOGBOX. В принципе, думаю он и подтолкнул к этому.
Жаль что в DIALOGBOX нет таймаута. Ну да ладно.

Расширил функционал. Инклюд для вывода диалоговых окон, пополнился поддержкой переноса строк по разделителю \n
и двумя типами окон выбора одного пункта из нескольких.
Вариант 1. Пронумерованные кнопки  слева и наш текст к каждому пункту.
Вариант 2. Наш текст прямо на больших кнопках.
Разделитель пунктов - вертикальная черта  |
Возможен вывод жирным шрифтом для улучшения читаемости если текста мало.

подключение:
Code: (clickermann) [Select]
#include "Window.cms"
использование:
диалоговое окно
Code: (clickermann) [Select]
Window(4144,"Заголовоке","Текст",3)окно выбора
Code: (clickermann) [Select]
$text= "Текст 1 |Текст 2 |Текст 3 |..."
Window_select(1,"Заголовок",7)

Длинный текст пока приходится передавать через глобальную переменную $text, а не параметром из-за ошибки в кликере (параметром можно передать строку не дленее 254 символа.). Как исправят можно переделать.


Состав (кинуть в папку своего скрипта):
Window.cms скрипт подключаемый по #include
Window.ini   файл для обмена данными
Window_ini.exe приблуда отображающая окна

Демонстрация.cms  - скрипт демонстрации. В нём же можно посмотреть примеры.
Window_ini v2.1.au3  - исходник, для антипараноидал exe с возможностью самостоятельной компиляции  ;)


Добавлена версия Window_v2.6 в этом сообщении.
Для варианта 'checkbox' можно задать расстояние между пунктами в px указав в своём скрипте переменную
Code: (clickermann) [Select]
$window_indent_checkbox = 10Если не указывать или переменная = 0  значение отступа по умолчанию будет 20px (bold 14+2)
« Last Edit: August 30, 2021, 12:22:51 PM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Window была давно обновлена до версии 2.2
Добавлен тип окна с возможным текстом и нумерованными кнопками. Окно удобно для быстрого выбора пользователем варианта ответа по номеру.


Alekzandr

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Хотел ещё запилить отдельную библиотеку для работы с браузером:
Очень нужны библиотеки для работы с броузером. Буду очень благодарен.

i0

  • Оплот сообщества
  • ****
  • Posts: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • View Profile
2 Vint
а каков лимит пунктов у window_select?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
2 Vint
а каков лимит пунктов у window_select?
Разумный предел. Сколько уместится на экране пока окно не станет вылезать за его пределы.
Встроенного лимита нет.

P.S. А нет, соврал. Давно это было, сейчас глянул  30 пунктов. Хотя прописать можно любое это всего лишь размер заданного массива. Я тогда посчитал, что больше 30 на экран всё равно не влезет.

[spoiler]
Code: (php) [Select]
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icon\window_list3.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_requestedExecutionLevel=None
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <FontConstants.au3>
#include <StaticConstants.au3>
#include <WinAPI.au3>

Global $section, $result

FileInstall("Window.ini", @ScriptDir & "\Window.ini")

If @Compiled Then
; Скрипт завершается, если нет каких-нибудь параметров командной строки
If $CmdLine[0] = 0 Then Exit(1)
$section = $CmdLine[1]
Else
;$section = 'Window'
;$section = 'Window_select'
$section = 'Window_number'
EndIf

;MsgBox (0,"сообщение",$section,0)
$flag = IniRead ('Window.ini', $section, 'flag', '0' )

Select
Case $section = 'Window_select' And ($flag = 1 Or $flag = 10)
$result = Window_select1($section)
Case $section = 'Window_select' And ($flag = 2 Or $flag = 20)
$result = Window_select2($section)
Case $section = 'Window'
$result = Window($section)
Case $section = 'Window_number'
$result = Window_number($section)
Case Else
Exit
EndSelect
IniWrite ("Window.ini", $section, "return", $result )
Exit


Func Window_number($section)
Local $title, $text, $count, $timeout, $result = -1, $aArray, $text_out, $row_text, $num = 0, $hTimerWait
Local $hGUI, $htext, $winX, $winY, $winX = 585, $row, $col
;Local $Lmax = '', $iFont_Size = 8.3, $iFont_Weight = -1, $sFont_Attrib = -1, $sFont_Name = 'MS Sans Serif'

$title = IniRead ('Window.ini', $section, 'title', 'Сообщение')
$text = IniRead ('Window.ini', $section, 'text', '')
$count = IniRead ('Window.ini', $section, 'count', '0')
$timeout = IniRead ('Window.ini', $section, 'timeout', '3')
;If $count = 0 Then Return $result
Local $hButton[$count]

$aArray = StringSplit ($text, '\n', 1)
$text_out = $aArray[1]
;$Lmax = $aArray[1]
For $n = 2 To $aArray[0]
$text_out &= @LF & $aArray[$n]
;If StringLen($aArray[$n]) > StringLen($Lmax) Then $Lmax = $aArray[$n]
Next
;$aData_Width = __GUICtrlTFLabel_GetTextSize($Lmax, $iFont_Size, $iFont_Weight, $sFont_Attrib, $sFont_Name)


Switch $count
Case 0
Return $result
Case 1 To 5
$row = 1
$col = $count
Case 6 To 10
$row = 2
$col = 5
Case Else
If ($count/10) - Int($count/10) = 0 Then
$row = Int($count/10)
Else
$row = Int($count/10) + 1
EndIf
;MsgBox(4096, "", "$row " & $row, 3)
$col = 10
EndSwitch

If $text = '' Then
$row_text = 0
Else
$row_text = $aArray[0]
EndIf
$winY = 125 + $row_text * 20 + ($row-1)*50

$hGUI = GUICreate($title, $winX, $winY, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), $WS_EX_TOPMOST)

If $row_text > 0 Then
$htext = GUICtrlCreateLabel($text_out, 50, 32, 485, $row_text * 20, $SS_CENTER)
EndIf


For $r = 0 To $row-1
For $c = 0 To $col-1
$num += 1
If $num > $count Then ExitLoop(2)
;~ MsgBox(4096, "", "номер " & $num-1, 1)
$hButton[$num-1] = GUICtrlCreateButton($num, 550/($col+1) * ($c+1), (50 + $row_text*20) + $r*50, 35, 25, BitOR($BS_CENTER, $BS_VCENTER))
Next
Next

GUISetState(@SW_SHOW, $hGUI)

$hTimerWait = TimerInit()
While 1
If $timeout <> 0 And TimerDiff($hTimerWait) > $timeout*1000 Then ExitLoop

$nMsg = GUIGetMsg()
If $nMsg = $GUI_EVENT_CLOSE Then ExitLoop
For $n = 1 To $count
If $nMsg = $hButton[$n-1] Then
$result = $n
ExitLoop(2)
EndIf
Next
WEnd
Return $result
EndFunc

Func Window_select1($section)
Local $flag, $title, $text, $timeout, $Lmax = '', $result = -1, $hWin = 126, $aPunct[31][2], $hTimerWait
Local $podstrmax = 0, $sdvig = 0, $Allsdvig = 0, $gold = Int(@DesktopWidth*0.618), $h1 = 20, $h2 = 16, $h3 = 14
Local $hGUI, $winX, $winY, $hButton[31], $iFont_Size = 8.3, $iFont_Weight = -1, $sFont_Attrib = -1, $sFont_Name = 'MS Sans Serif'

$aPunct[0][1] = 0
$gold = 793

; $aPunct[0][0] - всего пунктов
; $aPunct[0][1] - всего подстрок
; $aPunct[1][0] - количество подстрок в пункте
; $aPunct[1][1] - весь текст пункта

$flag = IniRead ('Window.ini', $section, 'flag', '0')
$title = IniRead ('Window.ini', $section, 'title', 'Сообщение')
$text = IniRead ('Window.ini', $section, 'text', '77')
$timeout = IniRead ('Window.ini', $section, 'timeout', '3')
;MsgBox (0,"$text ", $text, 0)

If $flag = 10 Then
$iFont_Weight = 800
$h1 = 22
$h2 = 24
$h3 = 14
EndIf

$aArray = StringSplit ($text, '|', 1)
$aPunct[0][0] = $aArray[0]
For $n = 1 To $aArray[0]
$aArray2 = StringSplit ($aArray[$n], '\n', 1)
If $aArray2[0] > $podstrmax Then $podstrmax = $aArray2[0]
$aPunct[0][1] += $aArray2[0]
$aPunct[$n][0] = $aArray2[0]
$aPunct[$n][1] = $aArray[$n]
For $i = 1 To $aArray2[0]
If StringLen($aArray2[$i]) > StringLen($Lmax) Then $Lmax = $aArray2[$i]
Next
Next

$aData_Width = __GUICtrlTFLabel_GetTextSize($Lmax, $iFont_Size, $iFont_Weight, $sFont_Attrib, $sFont_Name)
;~ _ArrayDisplay( $aPunct, "Все данные" )
;~ MsgBox (0,'Самая длинная строка', 'Самая длинная строка ' & StringLen($Lmax)& ' символов' & @CRLF & 'Длина строки: ' & $aData_Width[0] & ' пикс.' & @CRLF & "Высота: " & $aData_Width[1]& @CRLF & $Lmax, 0)
;~ MsgBox (0,'Максимум подстрок', 'Максимум подстрок ' & $podstrmax, 0)

For $n = 1 To $aPunct[0][0]
$Allsdvig += $aPunct[$n][0]-1
Next

If $aData_Width[0] < 188 Then
$winX = 188
ElseIf $aData_Width[0] + 60 +17 <= $gold Then
$winX = $aData_Width[0] + 60 + 17
Else
$winX = $gold
EndIf
$winY = 18+($h1+$h3)*$aPunct[0][0] + $h3*$Allsdvig

$hGUI = GUICreate($title, $winX, $winY, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), $WS_EX_TOPMOST)
For $n = 1 To $aPunct[0][0]
$hButton[$n] = GUICtrlCreateButton($n, 17, 14+($h1+$h3)*($n-1) + $sdvig, 30, 20, $BS_CENTER)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")

$aArray2 = StringSplit ($aPunct[$n][1], '\n', 1)
For $p = 1 To $aPunct[$n][0] ; $aArray2[0]
$temp = GUICtrlCreateLabel($aArray2[$p], 60, 18+($h1+$h3)*($n-1) + $h3*($p-1) + $sdvig, $winX - 77)
;~ GUICtrlSetBkColor(-1, 0xf5cccc)
If $flag = 10 Then GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Next
$sdvig += $h3*($aPunct[$n][0]-1)
Next

GUISetState(@SW_SHOW, $hGUI)

$hTimerWait = TimerInit()
While 1
If $timeout <> 0 And TimerDiff($hTimerWait) > $timeout*1000 Then ExitLoop

$nMsg = GUIGetMsg()
If $nMsg = $GUI_EVENT_CLOSE Then ExitLoop
For $n = 1 To $aPunct[0][0]
If $nMsg = $hButton[$n] Then
$result = $n
ExitLoop(2)
EndIf
Next
WEnd
Return $result
EndFunc

Func Window_select2($section)
Local $flag, $title, $text, $timeout, $Lmax = '', $result = -1, $hWin = 126, $aPunct[31][2], $hTimerWait
Local $podstrmax = 0, $text_out, $sdvig = 0, $Allsdvig = 0, $gold = Int(@DesktopWidth*0.618), $h1 = 20, $h2 = 16, $h3 = 14
Local $hGUI, $winX, $winY, $hButton[31], $iFont_Size = 8.3, $iFont_Weight = -1, $sFont_Attrib = -1, $sFont_Name = 'MS Sans Serif'

$aPunct[0][1] = 0
$gold = 793

; $aPunct[0][0] - всего пунктов
; $aPunct[0][1] - всего подстрок
; $aPunct[1][0] - количество подстрок в пункте
; $aPunct[1][1] - весь текст пункта

$flag = IniRead ('Window.ini', $section, 'flag', '0' )
$title = IniRead ('Window.ini', $section, 'title', 'Сообщение' )
$text = IniRead ('Window.ini', $section, 'text', '77' )
$timeout = IniRead ('Window.ini', $section, 'timeout', '3' )
;MsgBox (0,"$text ", $text, 0)

If $flag = 20 Then
$iFont_Weight = 800
$h1 = 22
$h2 = 24
$h3 = 16
EndIf

$aArray = StringSplit ($text, '|', 1)
$aPunct[0][0] = $aArray[0]
For $n = 1 To $aArray[0]
$aArray2 = StringSplit ($aArray[$n], '\n', 1)
If $aArray2[0] > $podstrmax Then $podstrmax = $aArray2[0]
$aPunct[0][1] += $aArray2[0]
$aPunct[$n][0] = $aArray2[0]
$aPunct[$n][1] = $aArray[$n]
For $i = 1 To $aArray2[0]
If StringLen($aArray2[$i]) > StringLen($Lmax) Then $Lmax = $aArray2[$i]
Next
Next

$aData_Width = __GUICtrlTFLabel_GetTextSize($Lmax, $iFont_Size, $iFont_Weight, $sFont_Attrib, $sFont_Name)
;~ _ArrayDisplay( $aPunct, "Все данные" )
;~ MsgBox (0,'Самая длинная строка', 'Самая длинная строка ' & StringLen($Lmax)& ' символов' & @CRLF & 'Длина строки: ' & $aData_Width[0] & ' пикс.' & @CRLF & "Высота: " & $aData_Width[1]& @CRLF & $Lmax, 0)
;~ MsgBox (0,'Максимум подстрок', 'Максимум подстрок ' & $podstrmax, 0)

For $n = 1 To $aPunct[0][0]
$Allsdvig += $aPunct[$n][0]-1
Next

If $aData_Width[0] < 188 Then
$winX = 188
ElseIf $aData_Width[0] + 60 +17 <= $gold Then
$winX = $aData_Width[0] + 60 + 17
Else
$winX = $gold
EndIf
$winY = 18+($h1+$h3)*$aPunct[0][0] + $h2*$Allsdvig + 10

$hGUI = GUICreate($title, $winX, $winY, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), $WS_EX_TOPMOST)
For $n = 1 To $aPunct[0][0]
$aArray2 = StringSplit ($aPunct[$n][1], '\n', 1)
$text_out = $aArray2[1]
For $p = 2 To $aPunct[$n][0] ; $aArray2[0]
$text_out &= @CRLF & $aArray2[$p]
Next

$hButton[$n] = GUICtrlCreateButton($text_out, 17, 18+($h1+$h3)*($n-1) + $sdvig, $winX-34, $h2*$aPunct[$n][0] + 10, $BS_MULTILINE)
If $flag = 20 Then GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$sdvig += $h2*($aPunct[$n][0]-1)
Next

GUISetState(@SW_SHOW, $hGUI)

$hTimerWait = TimerInit()
While 1
If $timeout <> 0 And TimerDiff($hTimerWait) > $timeout*1000 Then ExitLoop

$nMsg = GUIGetMsg()
If $nMsg = $GUI_EVENT_CLOSE Then ExitLoop
For $n = 1 To $aPunct[0][0]
If $nMsg = $hButton[$n] Then
$result = $n
ExitLoop(2)
EndIf
Next
WEnd
Return $result
EndFunc

Func Window($section)
Local $flag, $title, $text, $timeout, $text_out, $result

$flag = IniRead ('Window.ini', $section, 'flag', '0' )
$title = IniRead ('Window.ini', $section, 'title', 'Сообщение' )
$text = IniRead ('Window.ini', $section, 'text', '' )
$timeout = IniRead ('Window.ini', $section, 'timeout', '3' )

$aArray = StringSplit ($text, '\n', 1)
$text_out = $aArray[1]
For $n = 2 To $aArray[0]
$text_out &= @LF & $aArray[$n]
Next
$result = MsgBox ($flag,$title,$text_out,$timeout)
Return $result
EndFunc

; #HELPER FUNCTION - Get text size for the label control#
Func __GUICtrlTFLabel_GetTextSize($sData, $iFontSize = 8.5, $iFontWeight = $FW_NORMAL, $iFontAttribs = 0, $sFontName = 'Arial', $iFixTabs = 0)
Local $sTabs, $sAdd, $bFItalic, $bFUnderline, $bFStrikeout, $h_GDW_GUI, $hDC, $intDeviceCap, $intFontHeight, $hFont, $tSIZE, $aRet

If $iFixTabs Then
$sData = StringReplace($sData, @TAB, '     ')

If @extended Then
For $i = 1 To @extended + 1
$sTabs &= '    ' & $sAdd
$sAdd &= ' '
Next
EndIf

$sData &= $sTabs
EndIf

$bFItalic = BitAND($iFontAttribs, 2) = 2
$bFUnderline = BitAND($iFontAttribs, 4) = 4
$bFStrikeout = BitAND($iFontAttribs, 8) = 8

$h_GDW_GUI = GUICreate("Get Data Width", 10, 10, -100, -100, 0x80880000, 0x00000080)
$hDC = _WinAPI_GetDC($h_GDW_GUI)
$intDeviceCap = _WinAPI_GetDeviceCaps($hDC, $LOGPIXELSY)
$intFontHeight = _WinAPI_MulDiv($iFontSize, $intDeviceCap, 72)
;$hFont = _SendMessage($h_GDW_GUI, $WM_GETFONT) ; Возвращает дескриптор шрифта, используемого для создания текста.
$hFont = _WinAPI_CreateFont(-$intFontHeight, 0, 0, 0, $iFontWeight, $bFItalic, $bFUnderline, $bFStrikeout, $DEFAULT_CHARSET, $OUT_CHARACTER_PRECIS, $CLIP_DEFAULT_PRECIS, $PROOF_QUALITY, $FIXED_PITCH, $sFontName)
_WinAPI_SelectObject($hDC, $hFont)
$tSIZE = _WinAPI_GetTextExtentPoint32($hDC, $sData)

Dim $aRet[2] = [DllStructGetData($tSIZE, 'X'), DllStructGetData($tSIZE, 'Y')]

GUIDelete($h_GDW_GUI)
Return $aRet
EndFunc
[/spoiler]
« Last Edit: December 14, 2015, 01:23:37 PM by Vint »


i0

  • Оплот сообщества
  • ****
  • Posts: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • View Profile
С ошибкой вылетает при >30
p.s. ограничил в своём скрипте, чтоб не ругалось на длинные меню
« Last Edit: December 14, 2015, 01:31:57 PM by i0 »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Так говорю же могу переделать на любое, 50, 100... сколько нужно. У меня больше 30 не было вот и не сделал больше.
А лучше определить длину массива из количества пунктов. Или автоматом расширять при нехватке.
« Last Edit: December 14, 2015, 06:16:53 PM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Новая версия 2.3, 2.4

Лимит пунктов повышен с 30 до 60.
Добавлен режим окна с чекбоксами.
Два режима 1 - обычный текст, 2 - Bold

Теперь для Window_select и нового Window_checkbox можно передавать пункты через массив $items.
Для этого к флагу прибавить 100.

Пример:
Code: (clickermann) [Select]
        UNDEFINE($items)
        ARRPUSH($items, "- Означает что-то там. Это 1-я тестовая строка")
        ARRPUSH($items, "- Означает что-то там. Это 2-я тестовая строка")
        ARRPUSH($items, "- Означает что-то там. Это 3-я тестовая строка")
        Window_checkbox(101, "Выбор пунктов чекбоксом", 10)

Результат возвращается как всегда в переменную $return.
В версии 2.3
-1 если не выбрано ничего или нажали Отмена
"3,5,9" строка с отмеченными пунктами через запятую
В версии 2.4
-1 если не выбрано ничего или нажали Отмена
массив чисел с номерами выбранных пунктов

В итоге:
У Window_select флаг может быть
1 - вариант 1 (кнопки слева)
2 - вариант 2 (текст на кнопках)
10 - вариант 1 + Bold
20 - вариант 2 + Bold
101 - вариант 1 + текст в массиве $items
102 - вариант 2 + + текст в массиве $items
110 - вариант 1 + Bold + текст в массиве $items
120 - вариант 2 + Bold + текст в массиве $items

Для чекбоксов Window_checkbox:
1, 10, 101, 110
« Last Edit: September 08, 2016, 09:58:15 AM by Vint »


i0

  • Оплот сообщества
  • ****
  • Posts: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • View Profile
Re: Библиотеки пользовательских подпрограмм
« Reply #10 on: September 07, 2016, 04:45:14 PM »
вот спасибо! пошёл прикручивать

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Re: Библиотеки пользовательских подпрограмм
« Reply #11 on: September 12, 2016, 02:49:45 PM »
Во, хорошая темка, как раз я думаю нарыть скопом разные хоткеи из русской локали и перевести их заголовки+описания, а то америкосы ничего не поймут в наших кириллических буковках. Заодно можно будет добавить туда эти шорткаты, для полноты функционала. Только думаю, что это б хорошо было сделать, не в форме увесистых инклудируемых сабов, а как отдельные мелкие шаблоны для вставке в Редакторе, или они там все в одном файле? Тогда проблем ваще особо не будет, хорошо только если все хоткеи будут с заголовками.

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Библиотеки пользовательских подпрограмм
« Reply #12 on: September 12, 2016, 05:09:17 PM »
... а то америкосы ничего не поймут в наших кириллических буковках.
Так ты на Рейгана трудишься здесь? ;D

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Библиотеки пользовательских подпрограмм
« Reply #13 on: September 12, 2016, 07:00:09 PM »
Версия 2.5

Добавлен Window_checkbox_flags
Передаём в массиве $items строки или в строке с разделителем $text (как обычно).
В массиве $itemsflags - значения чекбоксов 0 - выкл, 1 -вкл

Возврат:
     $return_r = -1 отмена или время вышло
     $return_r = 1  выбрали пункты
     В массиве $itemsflags получаем значения пунктов (0 - выкл, 1 -вкл)

Пример вызова:
Code: (clickermann) [Select]
        UNDEFINE($items)
        UNDEFINE($itemsflags)
        ARRPUSH($items, "- Означает что-то там. Это 1-я тестовая строка")
        ARRPUSH($items, "- Означает что-то там. Это 2-я тестовая строка")
        ARRPUSH($items, "- Означает что-то там. Это 3-я тестовая строка")
        ARRPUSH($items, "- Означает что-то там. Это 4-я тестовая строка")
        ARRPUSH($items, "- Второй раздел, тоже не маленький/ Выбери, ну выбери этот пункт...")
        ARRPUSH($items, "- Последняя коротенькая запись,\nно двухстрочная. Тоже хочет чтоб её выбрали")
        STRSEPARATE("0,1,0,1,1,0", ",", $itemsflags)
        Window_checkbox_flags(101, "Выбор пунктов чекбоксом и предустановками", 10)

Window_v2.5 исправленная.7z
« Last Edit: November 12, 2019, 05:02:31 PM by Oraven »


Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Re: Библиотеки пользовательских подпрограмм
« Reply #14 on: September 21, 2016, 12:11:03 AM »
Так ты на Рейгана трудишься здесь? ;D

Рейганы, Ротшильды, всё одно ..) А ваще прикольный факт, что самих англичан меньше двух процентов среди всех англоговорящих.