Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: Vint on April 01, 2014, 12:15:14 PM
-
Вот решил выложить, чем пользуюсь довольно часто...
В связи с изменением вызова подпрограмм в версии 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]
Добавляйтесь :)
Хотел ещё запилить отдельную библиотеку для работы с браузером:
- вперёд/назад/обновить страницу, закрыть браузер, новое окно, закрыть окно
- работа с вкладками - открыть/закрыть/следующая/по номеру/последняя
- поиск текста на странице/следующее-преведущее найденное
- ...
Короче оскриптить сочетания горячих клавиш + поиск
-
спс за либы, не знал как их прикручивать и таскал все сабы с собой
обновления есть?
-
Был у меня симбиозик один для вывода диалоговых окон. Частично он потерял актуальность после улучшения DIALOGBOX. В принципе, думаю он и подтолкнул к этому.
Жаль что в DIALOGBOX нет таймаута. Ну да ладно.
Расширил функционал. Инклюд для вывода диалоговых окон, пополнился поддержкой переноса строк по разделителю \n
и двумя типами окон выбора одного пункта из нескольких.
Вариант 1. Пронумерованные кнопки слева и наш текст к каждому пункту.
Вариант 2. Наш текст прямо на больших кнопках.
Разделитель пунктов - вертикальная черта |
Возможен вывод жирным шрифтом для улучшения читаемости если текста мало.
подключение:
#include "Window.cms"
использование:
диалоговое окно
Window(4144,"Заголовоке","Текст",3)
окно выбора
$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 указав в своём скрипте переменную
$window_indent_checkbox = 10
Если не указывать или переменная = 0 значение отступа по умолчанию будет 20px (bold 14+2)
-
Window была давно обновлена до версии 2.2
Добавлен тип окна с возможным текстом и нумерованными кнопками. Окно удобно для быстрого выбора пользователем варианта ответа по номеру.
-
Хотел ещё запилить отдельную библиотеку для работы с браузером:
Очень нужны библиотеки для работы с броузером. Буду очень благодарен.
-
2 Vint
а каков лимит пунктов у window_select?
-
2 Vint
а каков лимит пунктов у window_select?
Разумный предел. Сколько уместится на экране пока окно не станет вылезать за его пределы.
Встроенного лимита нет.
P.S. А нет, соврал. Давно это было, сейчас глянул 30 пунктов. Хотя прописать можно любое это всего лишь размер заданного массива. Я тогда посчитал, что больше 30 на экран всё равно не влезет.
[spoiler]#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]
-
С ошибкой вылетает при >30
p.s. ограничил в своём скрипте, чтоб не ругалось на длинные меню
-
Так говорю же могу переделать на любое, 50, 100... сколько нужно. У меня больше 30 не было вот и не сделал больше.
А лучше определить длину массива из количества пунктов. Или автоматом расширять при нехватке.
-
Новая версия 2.3, 2.4
Лимит пунктов повышен с 30 до 60.
Добавлен режим окна с чекбоксами.
Два режима 1 - обычный текст, 2 - Bold
Теперь для Window_select и нового Window_checkbox можно передавать пункты через массив $items.
Для этого к флагу прибавить 100.
Пример:
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
-
вот спасибо! пошёл прикручивать
-
Во, хорошая темка, как раз я думаю нарыть скопом разные хоткеи из русской локали и перевести их заголовки+описания, а то америкосы ничего не поймут в наших кириллических буковках. Заодно можно будет добавить туда эти шорткаты, для полноты функционала. Только думаю, что это б хорошо было сделать, не в форме увесистых инклудируемых сабов, а как отдельные мелкие шаблоны для вставке в Редакторе, или они там все в одном файле? Тогда проблем ваще особо не будет, хорошо только если все хоткеи будут с заголовками.
-
... а то америкосы ничего не поймут в наших кириллических буковках.
Так ты на Рейгана трудишься здесь? ;D
-
Версия 2.5
Добавлен Window_checkbox_flags
Передаём в массиве $items строки или в строке с разделителем $text (как обычно).
В массиве $itemsflags - значения чекбоксов 0 - выкл, 1 -вкл
Возврат:
$return_r = -1 отмена или время вышло
$return_r = 1 выбрали пункты
В массиве $itemsflags получаем значения пунктов (0 - выкл, 1 -вкл)
Пример вызова:
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)
-
Так ты на Рейгана трудишься здесь? ;D
Рейганы, Ротшильды, всё одно ..) А ваще прикольный факт, что самих англичан меньше двух процентов среди всех англоговорящих.
-
Так ты на Рейгана трудишься здесь? ;D
Рейганы, Ротшильды, всё одно ..) А ваще прикольный факт, что самих англичан меньше двух процентов среди всех англоговорящих.
А в Premier League англичан ещё меньше, сдулись они по всем позициям, как старый футбольный мяч. :'(
-
По ходу, с привязкой нажатие Энтера не жмётся? Наверно, надо помуздыкаться с постмессиджем, найти там нужный код для передачи.
-
Не могу разобраться с окошками, кнопками и иконками
Вы пишете
Параметр flag может быть комбинацией следующих значений:
десятичное значение Отображаемые кнопки 0x
0 Кнопка OK 0x0
....
4 Кнопки Да и Нет 0x4
5 Кнопки Повтор и Отмена 0x5
6 Кнопки Отмена, Повторить, Продолжить 0x6
десятичное значение Отображаемая иконка 0x
0 (Нет)
...
а при флаге 4160 окно с кнопкой ОК и иконкой ИНФО
как это скомбинировано ?
не могу сделать окно с иконкой ИНФО и тремя кнопками
Отмена, Повторить, Продолжить
-
Отмена, Повторить, Продолжить - десятичное значение 6
иконка информация 64
Итоговый флаг 6+64 = 70
[spoiler] // десятичное значение Отображаемые кнопки 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
-
Спасибо, отлично
а фразу
Параметр flag может быть комбинацией следующих значений
лучше заменить на типа такую
Если необходима комбинация параметров то флаг должен быть равен сумме десятичных значений ... :)
-
Ммм. Эта формулировка не моя, она полностью выдрана из справки.
И на самом деле она правильная, ведь параметр flag это флаговая/битовая переменная
Младшие 3 бита выделены под "Отображаемые кнопки "
5,6 и 7 биты - "Отображаемая иконка "
9,10 - "Выделенная кнопка по умолчанию"
и т.д.
Переменная в итоге это комбинация включенных битов
В 16-ричной системе ещё наглядней, под неё и сделано. Каждый разряд свой подраздел параметров
-
Есть необходимость выбора элементов из большого списка.
Написал сценарий. Он выводит большой список элеменов с чекбоксами на экран по 10 штук, до последнего, записывает состоние чекбоксов, создает список выбранных.
1. Может я перемудрил и можно сценарий упростить ?
2. Некорректно работает режим жирного шрифта ($w_flag = 110), где ошибка ?
#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
-
Как раз я и ничего не прятал
Вопрос задан в теме, где Window.cms от Vint обсуждается
И ответить на вопрос, очевидно, сможет только автор темы.
-
Вроде бы нормально работает. Что там упрощать.
В 16 строке только добавить значение по умолчантию
FOR($a=0, ...
С флагом 110 у меня работает (см. скрины). Здесь может влиять версия винды, а главное установленная тема, шрифты в ней и т.п.
Что происходит, как проявляется некорректная работа?
-
Спасибо
По поводу:
2. Некорректно работает режим жирного шрифта ($w_flag = 110), где ошибка ?
Извините, не правильно сформулировал, правильно:
Работает отлично !
Единственное - не полностью отображаются в окне длинные пункты при выборе жирного шрифта ($w_flag = 110)
Кстати у Вас на картинках тоже так
Еще раз спасибо, и обычный шрифт подходит, не будем тратить больше на это время.
-
Ух подыму старую тему.
Vint спасибо пользуюсь.
Подскажи пожалуйста можно ли как нибудь указать позицию окна на экране, чтоб он не по середине открывался а к примеру справа внизу?
-
Подскажи пожалуйста можно ли как нибудь указать позицию окна на экране, чтоб он не по середине открывался а к примеру справа внизу?
А навіщо це потрібно?
Є стандартні команди програми, щодо зміщення потрібного вікна в потрібний кут, скористайтеся ними.
-
Если ты про это - WNDPOS (hwnd, x, y) , то да, как вариант, но не оч удобно.
-
Подскажи пожалуйста можно ли как нибудь указать позицию окна на экране, чтоб он не по середине открывался а к примеру справа внизу?
Могу только переделать с заданием координат в ini.
-
Подскажи пожалуйста можно ли как нибудь указать позицию окна на экране, чтоб он не по середине открывался а к примеру справа внизу?
Могу только переделать с заданием координат в ini.
Я был бы очень и очень признателен!
-
Поиск в строке адреса 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)
-
Версия 2.5
Добавлен Window_checkbox_flags
Передаём в массиве $items строки или в строке с разделителем $text (как обычно).
В массиве $itemsflags - значения чекбоксов 0 - выкл, 1 -вкл
Возврат:
$return_r = -1 отмена или время вышло
$return_r = 1 выбрали пункты
В массиве $itemsflags получаем значения пунктов (0 - выкл, 1 -вкл)
Пример вызова:
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)
-
Тогда не будут влазить двустрочные пункты.
Хочешь, я пересоберу. Какая функция нужна для не bold?
-
Ну мне то, не нужно 2-х строк, так-что был бы благодарен.
Не для bold: вы имеите ввиду не для жирного текста?
-
Window была обновлена до версии 2.6
Для варианта 'checkbox' можно задать вертикальный отступ между пунктами в px указав в своём скрипте переменную
$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 и сделал его задание.
-
Спасибо! <3
-
Намутил скрипт для одной игры, запущенной на виртуальной машине. Скрипт полностью сбоеустойчив и практически вечен - можно месяц не заглядывать в виртуалку, а потом открыть и "снимать сливки". Но столкнулся с одной проблемой... Чем дольше открыта игра и чем больше в ней производится действий, тем больше она раздувается и тем больше занимает рабочую память, от чего игра начинает лагать и так далее. Появилась надобность в контроле рабочей памяти и, исходя из полученных данных, решение - перезапустить игру, или даже винду. В связи с этим, намутил dll-ку...
https://disk.yandex.ru/d/0mNmOUFZ6eLDCw (https://disk.yandex.ru/d/0mNmOUFZ6eLDCw)
Исходный код dll-ки...
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-е...
CALL("loading_memory.dll")
LOGWRITE ("Загруженность памяти = ",$_return1,"%")
WAITMS(50)