Автокликер Clickermann :: Форум

Основной раздел => Использование => Topic started by: Vint on April 01, 2014, 12:15:14 PM

Title: Библиотеки пользовательских подпрограмм
Post by: Vint on April 01, 2014, 12:15:14 PM
Вот решил выложить, чем пользуюсь довольно часто...
В связи с изменением вызова подпрограмм в версии 4.9 и что самое главное, появившейся возможностью передачи параметров, некоторые старые инклюды переделал в новые и немного сгруппировал по темам.
Понятно, что это делается, чтобы из скрипта в скрипт не копировать целые куски.
Пока довольно мало написано/перенесено на 4.9, но всё же когда-то нужно начинать.
Заделал себе папку Libs и из неё подключаю библиотеки.

Пока выкладываю только 4 инклюда (для самой первой версии):
[spoiler]Внутри скриптов написано, какие параметры можно передавать и пример вызова.

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


Добавляйтесь  :) 
Хотел ещё запилить отдельную библиотеку для работы с браузером:
Короче оскриптить сочетания горячих клавиш + поиск
Title: Re: Библиотеки пользовательских подпрограмм 4.9+
Post by: Луций on November 24, 2014, 10:28:37 AM
спс за либы, не знал как их прикручивать и таскал все сабы с собой

обновления есть?
Title: Re: Библиотеки пользовательских подпрограмм 4.9+
Post by: Vint on March 10, 2015, 11:20:24 AM
Был у меня симбиозик один для вывода диалоговых окон. Частично он потерял актуальность после улучшения 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 в этом (http://crapware.aidf.org/forum/index.php?topic=1147.msg36670#msg36670) сообщении.
Для варианта 'checkbox' можно задать расстояние между пунктами в px указав в своём скрипте переменную
Code: (clickermann) [Select]
$window_indent_checkbox = 10Если не указывать или переменная = 0  значение отступа по умолчанию будет 20px (bold 14+2)
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on July 17, 2015, 11:30:42 AM
Window была давно обновлена до версии 2.2
Добавлен тип окна с возможным текстом и нумерованными кнопками. Окно удобно для быстрого выбора пользователем варианта ответа по номеру.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Alekzandr on September 09, 2015, 09:38:49 AM
Хотел ещё запилить отдельную библиотеку для работы с браузером:
Очень нужны библиотеки для работы с броузером. Буду очень благодарен.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: i0 on December 14, 2015, 12:44:06 PM
2 Vint
а каков лимит пунктов у window_select?
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on December 14, 2015, 01:10:43 PM
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]
Title: Re: Библиотеки пользовательских подпрограмм
Post by: i0 on December 14, 2015, 01:28:33 PM
С ошибкой вылетает при >30
p.s. ограничил в своём скрипте, чтоб не ругалось на длинные меню
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on December 14, 2015, 06:15:19 PM
Так говорю же могу переделать на любое, 50, 100... сколько нужно. У меня больше 30 не было вот и не сделал больше.
А лучше определить длину массива из количества пунктов. Или автоматом расширять при нехватке.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on September 07, 2016, 01:50:51 PM
Новая версия 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
Title: Re: Библиотеки пользовательских подпрограмм
Post by: i0 on September 07, 2016, 04:45:14 PM
вот спасибо! пошёл прикручивать
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Cleoss on September 12, 2016, 02:49:45 PM
Во, хорошая темка, как раз я думаю нарыть скопом разные хоткеи из русской локали и перевести их заголовки+описания, а то америкосы ничего не поймут в наших кириллических буковках. Заодно можно будет добавить туда эти шорткаты, для полноты функционала. Только думаю, что это б хорошо было сделать, не в форме увесистых инклудируемых сабов, а как отдельные мелкие шаблоны для вставке в Редакторе, или они там все в одном файле? Тогда проблем ваще особо не будет, хорошо только если все хоткеи будут с заголовками.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Золотой on September 12, 2016, 05:09:17 PM
... а то америкосы ничего не поймут в наших кириллических буковках.
Так ты на Рейгана трудишься здесь? ;D
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint 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 (https://yadi.sk/d/53F0NxvH1UCq8Q)
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Cleoss on September 21, 2016, 12:11:03 AM
Так ты на Рейгана трудишься здесь? ;D

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

Title: Re: Библиотеки пользовательских подпрограмм
Post by: Золотой on September 21, 2016, 12:21:38 AM
Так ты на Рейгана трудишься здесь? ;D

Рейганы, Ротшильды, всё одно ..) А ваще прикольный факт, что самих англичан меньше двух процентов среди всех англоговорящих.
А в Premier League англичан ещё меньше, сдулись они по всем позициям, как старый футбольный мяч.  :'(
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Cleoss on October 20, 2016, 12:01:18 AM
По ходу, с привязкой нажатие Энтера не жмётся? Наверно, надо помуздыкаться с постмессиджем, найти там нужный код для передачи.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: VGK on June 01, 2017, 05:11:53 PM
Не могу разобраться с окошками, кнопками и иконками
Вы пишете
Параметр flag может быть комбинацией следующих значений:

десятичное значение      Отображаемые кнопки                     0x
                 0              Кнопка OK                               0x0
 ....
                 4              Кнопки Да и Нет                         0x4
                5              Кнопки Повтор и Отмена                  0x5
         6              Кнопки Отмена, Повторить, Продолжить    0x6
   
десятичное значение      Отображаемая иконка                     0x
     0              (Нет) 
...
а при флаге 4160 окно с кнопкой ОК и иконкой ИНФО
как это скомбинировано ?
не могу сделать окно с иконкой ИНФО и тремя кнопками
Отмена, Повторить, Продолжить
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on June 01, 2017, 06:21:43 PM
Отмена, Повторить, Продолжить  - десятичное значение 6
иконка информация                                                            64

Итоговый флаг 6+64 = 70

[spoiler]
Code: [Select]
    // десятичное значение      Отображаемые кнопки                     0x
    //           0              Кнопка OK                               0x0
    //           1              Кнопки OK и Отмена                      0x1
    //           2              Кнопки Прервать, Повтор и Пропустить    0x2
    //           3              Кнопки Да, Нет и Отмена                 0x3
    //           4              Кнопки Да и Нет                         0x4
    //           5              Кнопки Повтор и Отмена                  0x5
    //           6              Кнопки Отмена, Повторить, Продолжить    0x6
   
    // десятичное значение      Отображаемая иконка                     0x
    //           0              (Нет)                                   0x0
    //          16              Иконка "стоп"                           0x10
    //          32              Иконка "знак вопроса"                   0x20
    //          48              Иконка "предупреждение"                 0x30
    //          64              Иконка "информация", с 'i' в кружке     0x40
   
    // десятичное значение      Выделенная кнопка по умолчанию          0x
    //           0              Первая кнопка                           0x0
    //         256              Вторая кнопка                           0x100
    //         512              Третья кнопка                           0x200
   
    // десятичное значение      Модальность                             0x
    //           0              Приложение (Application)                0x0
    //        4096              Системная, поверх всех окон             0x1000
    //        8192              Блокирует родительское окно             0x2000
   
    // десятичное значение      Другое                                  0x
    //      262144          имеет атрибут "поверх всех окон"            0x40000
    //      524288     Заголовок и текст выравниваются по правому краю  0x80000
[/spoiler]

Если нужно ещё добавить параметров, например,    "Системная, поверх всех окон"  то  ещё  +4096
Title: Re: Библиотеки пользовательских подпрограмм
Post by: VGK on June 01, 2017, 07:47:25 PM
Спасибо, отлично
а фразу
Параметр flag может быть комбинацией следующих значений
лучше заменить на типа такую
Если необходима комбинация параметров то флаг должен быть равен сумме десятичных значений ... :)

Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on June 02, 2017, 12:21:12 PM
Ммм. Эта формулировка не моя, она полностью выдрана из справки.
И на самом деле она правильная, ведь параметр flag это флаговая/битовая переменная

Младшие 3 бита выделены под "Отображаемые кнопки "
5,6 и 7 биты  - "Отображаемая иконка "
9,10  - "Выделенная кнопка по умолчанию"
и т.д.
Переменная в итоге это комбинация включенных битов

В 16-ричной системе ещё наглядней, под неё и сделано. Каждый разряд свой подраздел параметров
Title: Re: Библиотеки пользовательских подпрограмм
Post by: VGK on December 01, 2017, 01:40:45 PM
Есть необходимость выбора элементов из большого списка.
Написал сценарий. Он выводит большой список элеменов с чекбоксами на экран по 10 штук, до последнего, записывает состоние чекбоксов, создает список выбранных.
1. Может я перемудрил и можно сценарий упростить ?
2. Некорректно работает режим жирного шрифта ($w_flag = 110), где ошибка ?
Code: (clickermann) [Select]
#include "Window.cms"
//==============================================================================
//LOGCLEAR
$input_file = "Buildings.txt"           // Исходные данные - большой список
$output_file = "Buildings_selected.txt" // Результат - список выбранных
TFREADARR($input_file, $items_all)
TFREADARR("item_flags_all.txt", $itemsflags_all)
TFCLEAR ("item_flags_all.txt", 1)
IF(ARRSIZE($itemsflags_all) < ARRSIZE($items_all))
   FOR($i = ARRSIZE($itemsflags_all) , $i < ARRSIZE($items_all))
      ARRPUSH($itemsflags_all, 0)
   END_CYC
END_IF
//##############################################################################
//Вывод текста на экран по 10 строк с чекбоксами
FOR($a, $a < INT ((ARRSIZE($items_all) / 10)+1))
   $n = $check * 10
   FOR($i = $n, (($i < $n+10) AND ($i < ARRSIZE($items_all)))
      ARRPUSH($items, $items_all[$i])
      ARRPUSH($itemsflags, $itemsflags_all[$i])
   END_CYC
   Window_checkbox_flags(110, "Выберите пункты :", 35)
//   Window_checkbox_flags(110, "Выберите пункты :", 35) //жирным шрифтом текст не помещается ?
   STRSEPARATE ($flags, ",", $item_flags)
   STRSEPARATE($text, "|", $selecteditems)
   $flags = $item_flags[0]
   FOR($i=0, $i < ARRSIZE($item_flags))
      $flags = STRCONCAT($flags, ",", $item_flags[$i])
      IF($item_flags[$i] = 1)                       // Запись выбранных в массив
         ARRPUSH($Selected, $selecteditems[$i])
      END_IF
   END_CYC
//==============================================================================
//  Подговка ответа
   IF(ARRSIZE($Selected) > 0)
      $otv = $Selected[0]
      FOR($i=1, $i < ARRSIZE($Selected))
         $otv = STRCONCAT($otv, "\n", $Selected[$i])
      END_CYC
      $text = STRCONCAT("Выбраны пункты:\n\n", $otv)
      IF($return = -1)
         $hint = "Состояние чекбоксов не изменено"
         HINTPOPUP($hint, "ВНИМАНИЕ")
      END_IF
   ELSE
      $text = "Вы ничего не выбрали"
   END_IF
//==============================================================================
   TFWRITEARR ($output_file, $Selected) // Запись списка выбранных
   UNDEFINE($items)
   UNDEFINE($itemsflags)
   UNDEFINE($Selected)
   INC($check)  // следующие 10 строк
END_CYC
//##############################################################################
TFWRITEARR ("item_flags_all.txt", $item_flags) // запись состояния чекбоксов
//==============================================================================
//  Вывод списка выбранных на экран
Window_2(64, "", 10)
HALT
Title: Re: Библиотеки пользовательских подпрограмм
Post by: VGK on December 02, 2017, 10:35:35 AM
Как раз я и ничего не прятал
Вопрос задан в теме, где Window.cms от Vint обсуждается
И ответить на вопрос, очевидно, сможет только автор темы.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on December 04, 2017, 01:59:29 PM
Вроде бы нормально работает. Что там упрощать.
В 16 строке только добавить значение по умолчантию
FOR($a=0, ...


С флагом 110 у меня работает (см. скрины). Здесь может влиять версия винды, а главное установленная тема, шрифты в ней и т.п.
Что происходит, как проявляется некорректная работа?

Title: Re: Библиотеки пользовательских подпрограмм
Post by: VGK on December 05, 2017, 11:00:56 AM
Спасибо
По поводу:
2. Некорректно работает режим жирного шрифта ($w_flag = 110), где ошибка ?
Извините, не правильно сформулировал, правильно:
Работает отлично !
Единственное - не полностью отображаются в окне длинные пункты при выборе жирного шрифта ($w_flag = 110)
Кстати у Вас на картинках тоже так
Еще раз спасибо, и обычный шрифт подходит, не будем тратить больше на это время.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: kamal on March 25, 2020, 11:27:13 AM
Ух подыму старую тему.
Vint спасибо пользуюсь.
Подскажи пожалуйста можно ли как нибудь указать позицию окна на экране, чтоб он не по середине открывался а к примеру справа внизу?
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Сексуальный украинец on March 25, 2020, 12:47:51 PM
Подскажи пожалуйста можно ли как нибудь указать позицию окна на экране, чтоб он не по середине открывался а к примеру справа внизу?
А навіщо це потрібно?
Є стандартні команди програми, щодо зміщення потрібного вікна в потрібний кут, скористайтеся ними.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: kamal on March 25, 2020, 12:59:09 PM
Если ты про это - WNDPOS (hwnd, x, y) , то да, как вариант, но не оч удобно.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on March 25, 2020, 03:48:27 PM
Подскажи пожалуйста можно ли как нибудь указать позицию окна на экране, чтоб он не по середине открывался а к примеру справа внизу?
Могу только переделать с заданием координат в ini.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: kamal on March 25, 2020, 06:06:01 PM
Подскажи пожалуйста можно ли как нибудь указать позицию окна на экране, чтоб он не по середине открывался а к примеру справа внизу?
Могу только переделать с заданием координат в ini.

Я был бы очень и очень признателен!
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on July 16, 2020, 02:49:30 PM
Поиск в строке адреса e-mail

основано на этом коде http://crapware.aidf.org/forum/index.php?topic=1363.msg35335#msg35335

Поддерживает многострочные входные данные.
// ищем один, первый e-mail. Результат в переменной $eo_mail
email_one($str)
// ищем все e-mail. Результат в массиве $arr_mail
email_several($str)
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Leizer on August 29, 2021, 10:38:07 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 (https://yadi.sk/d/53F0NxvH1UCq8Q)
Здрастуйте, а можно как то уменьшить растояние между вариантами? А то много вариантов не помещаются в монитор :)
(https://i.imgur.com/GsSgbxD.png)
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on August 30, 2021, 10:37:59 AM
Тогда не будут влазить двустрочные пункты.
Хочешь, я пересоберу. Какая функция нужна для не bold?
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Leizer on August 30, 2021, 11:17:37 AM
Ну мне то, не нужно 2-х строк, так-что был бы благодарен.
Не для bold: вы имеите ввиду не для жирного текста?
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Vint on August 30, 2021, 12:19:07 PM
Window была обновлена до версии 2.6

Для варианта 'checkbox' можно задать вертикальный отступ между пунктами в px указав в своём скрипте переменную
Code: (clickermann) [Select]
$window_indent_checkbox = 10Если не указывать или переменная = 0  значение отступа по умолчанию будет 20px (bold 14+2)
При значении по умолчанию в пункт влазит 2 строки. При своём значении - следить за этим придётся вам.

Т.к. пустое место на сервере закончилось, не могу добавить в первое сообщение, поэтому выложу здесь
Скачать Window_v2.6 (https://yadi.sk/d/KZ4HtLpBDIOAbw)

(https://i.ibb.co/6n8yPWs/2021-08-30-12-06-38.png) (https://imgbb.com/)



Ну мне то, не нужно 2-х строк, так-что был бы благодарен.
Не для bold: вы имеите ввиду не для жирного текста?
Не стал просто менять значение, вынес его в ini и сделал его задание.
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Leizer on August 30, 2021, 02:03:47 PM
Спасибо! <3
Title: Re: Библиотеки пользовательских подпрограмм
Post by: Hito on May 02, 2023, 10:01:06 PM
Намутил скрипт для одной игры, запущенной на виртуальной машине. Скрипт полностью сбоеустойчив и практически вечен - можно месяц не заглядывать в виртуалку, а потом открыть и "снимать сливки". Но столкнулся с одной проблемой... Чем дольше открыта игра и чем больше в ней производится действий, тем больше она раздувается и тем больше занимает рабочую память, от чего игра начинает лагать и так далее. Появилась надобность в контроле рабочей памяти и, исходя из полученных данных, решение - перезапустить игру, или даже винду. В связи с этим, намутил dll-ку...

https://disk.yandex.ru/d/0mNmOUFZ6eLDCw (https://disk.yandex.ru/d/0mNmOUFZ6eLDCw)

Исходный код dll-ки...

Code: (clickermann) [Select]
library loading_memory;

uses
  Windows,
  SysUtils;

//------------------------------------------------------------------------------
// Основное тело функции, идет на экспорт, вызывается из кликера
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
type
   pIntArr = array[0..0] of Integer;

var
   Status: TMemoryStatus;

begin
   Status.dwLength := sizeof(TMemoryStatus);
   GlobalMemoryStatus(Status);
   result :=  Status.dwMemoryLoad; // присваиваем возвращаемое значение
end;
//------------------------------------------------------------------------------

// список экспорта
exports execute;

begin
   // тело пусто
end.

Вызов dll-ки в Clickermann-е...

Code: (clickermann) [Select]
CALL("loading_memory.dll")
LOGWRITE ("Загруженность памяти = ",$_return1,"%")
WAITMS(50)