Автор Тема: Вызывать функции с параметрами  (Прочитано 2540 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Атос [?]

  • Новичок
  • *
  • Сообщений: 70

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Вызывать функции с параметрами
« Ответ #15, Отправлен: Июнь 06, 2017, 10:38:02 »
Решение есть - можно использовать словарь - scripting.dictionary - в котором вы можете хранить в качестве ключей ID кнопок, а в качества параметра - вашу баварию.

inververs, спасибо. Попытаюсь реализовать это на практике.

Русское сообщество AutoIt

Re: Вызывать функции с параметрами
« Ответ #15 Отправлен: Июнь 06, 2017, 10:38:02 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2573
  • Репутация: 441
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Вызывать функции с параметрами
« Ответ #16, Отправлен: Июнь 06, 2017, 10:53:58 »
inververs предлагает отличный вариант. Огромный плюс scripting.dictionary это динамическое расширение, ну и вызов по имени.
к слову, я сейчас работаю над программой, в которой динамически создаю элементы и присваиваю им функции, стили и так далее. вот как раз использую scripting.dictionary. id элементов идет как имя, а значение это массив, в котором храню все параметры элемента и меняю когда нужно.
Правда, обработка событий идет не через event, я использую wm_command для кнопок(радио, чек) для статик-элементов регистрируется функция wm_setcursor. при этом одна глобальная переменная, которую обновляют эти функции - присваивают ей id элемента, на который кликнул пользователь. А уже в основном цикле while...wend я обрабатываю этот id, вызываю из объекта его информацию и так далее, если функции простые, то можно обработать их прямо в wm_command и wm_setcursor
надеюсь, понятно написал :)
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн Атос [?]

  • Новичок
  • *
  • Сообщений: 70

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Вызывать функции с параметрами
« Ответ #17, Отправлен: Июнь 06, 2017, 13:01:32 »
joiner, спасибо. У меня похожая задача.
Я считываю с ini-файла ключ-значение в двумерный массив.
Но как со словарями работать не совсем понятно.

Код: AutoIt [Выделить]
Local $aSect = IniReadSection(@ScriptDir & '\Settings.ini', 'My')
GUICreate(111)
Local $h = 0, $p = 0, $z = '', $v = ''
For $i = 1 To $aSect[0][0]
$oDict = ObjCreate('Scripting.Dictionary')
$oDict.CompareMode = 1

$y = $oDict.Add($aSect[$i][0], $aSect[$i][1])
; $key = $oDict.Key($v) = $aSect[$i][0]
; $item = $oDict.Item($v) = $aSect[$i][1]
$p = GUICtrlCreateButton($aSect[$i][0], 15, 20, 160, 22, 0x0100)
$oDict.Key($v) = $aSect[$i][0]
$oDict.Item($v) = $aSect[$i][1]
; $ic = $oDict.Count()
$Arr = $oDict.Items()
; MsgBox(0, '111', $key)
; MsgBox(0, '111', $ic)
Next


Помечен как лучший ответ пользователем Атос Отправлен Июнь 06, 2017, 14:46:53

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2573
  • Репутация: 441
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Вызывать функции с параметрами
« Ответ #18, Отправлен: Июнь 06, 2017, 14:37:55 »
Код: AutoIt [Выделить]
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinApi.au3>

$oDict = ObjCreate('Scripting.Dictionary')
$oDict.CompareMode = 1
Global $nID
GUICreate(111)
Local $aSect = IniReadSection('путь', 'секция')
If @error Then Exit
Local $h = 0, $p = 0
For $i = 1 To $aSect[0][0]
    $p = GUICtrlCreateButton($aSect[$i][0], 15, $h, 160, 22, 0x0100)
    $oDict.Add($p, $aSect[$i][1])
    $h += 25
Next
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
Local $gtd
While 1
    If $nID Then
        If $oDict.Exists($nID) Then
            $gtd = $oDict.Item($nID)
            MsgBox(64, 'Элемент ' & $nID, $gtd)
        EndIf
        $nID = 0
    EndIf
    Switch GUIGetMsg()
        Case -3
            Exit
    EndSwitch
WEnd

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    $nID = _WinAPI_LoWord($wParam)
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND


Русское сообщество AutoIt

Re: Вызывать функции с параметрами
« Ответ #18 Отправлен: Июнь 06, 2017, 14:37:55 »

Оффлайн Атос [?]

  • Новичок
  • *
  • Сообщений: 70

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Вызывать функции с параметрами
« Ответ #19, Отправлен: Июнь 06, 2017, 14:46:47 »
joiner, гениально. Благодаря Вам, я закончу свой скрипт. Спасибо.

Онлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 460
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Вызывать функции с параметрами
« Ответ #20, Отправлен: Июнь 06, 2017, 16:55:25 »
joiner
Вы храните массив в значении, не очень удобно, лучше вместо массива использовать тот же словарь. Тогда можно все значения прописывать явно.
Например 'color' : 0xFFDD33, 'text' : 'Нажми меня' и так далее.
Еще плюс работы объектами - то что они передаются по ссылке, можно в одном месте менять параметры  и не думать о сохранении обратно.
Ну а для удобства доступа - я написал ObjPath. Например, получим текст кнопки с ID = 15. ObjPath($oData, '15.color')

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2573
  • Репутация: 441
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Вызывать функции с параметрами
« Ответ #21, Отправлен: Июнь 06, 2017, 18:03:53 »
inververs
это пример. в моем проекте(JMPACK 3.0), да, массивы(не строка) в значениях и я вызываю по имени(id) элемента эти массивы. к тому же, у меня каждый индекс массива строго определен для значения. поэтому я знаю к какому индексу обращаться
ну и у меня страничный проект, то есть объект страниц, в каждой странице два объекта: первый - настройки окна, второй - содержит те самые контролы с их массивами. Контролы двигаю, изменяю и все сохраняется в их массивы. по факту работает все довольно быстро. к тому же, каждый контрол  имеет типа маркера в нулевом индексе массива, получая это значение, я уже знаю к какому индексу обращаться, чтобы применить функцию, закрепленную за контролом.
псевдопереход по страницам подразумевает скрытие одних контролов и появление других. я просто вызываю массив ключей объекта страницы и скрываю их. нет нужды сортировать
короче, уже оффтоп пошел.
для случая автора темы, возможно, твой совет будет как раз хорош
« Последнее редактирование: Июнь 06, 2017, 21:49:31 от joiner »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Вызывать функции с параметрами
« Ответ #22, Отправлен: Июнь 06, 2017, 19:13:51 »
OffTopicjoiner  [?]
Цитировать
короче, уже оффтоп пошел

Ошибаетесь! Это выражение своих мыслей и чем больше конструктивных мнений, тем ближе мы к истине!
Главное уметь отсекать всё лишние. ;)


Скорблю и помню.




Русское сообщество AutoIt

Re: Вызывать функции с параметрами
« Ответ #22 Отправлен: Июнь 06, 2017, 19:13:51 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
4147 Просмотров
Последний ответ Декабрь 14, 2009, 21:38:46
от CreatoR
10 Ответов
4603 Просмотров
Последний ответ Февраль 19, 2013, 20:17:44
от Viktor1703
8 Ответов
3777 Просмотров
Последний ответ Февраль 17, 2013, 22:44:48
от CreatoR
9 Ответов
2772 Просмотров
Последний ответ Июль 26, 2013, 11:47:55
от saraconor
5 Ответов
2162 Просмотров
Последний ответ Июль 22, 2013, 11:55:16
от kingmor
7 Ответов
2142 Просмотров
Последний ответ Февраль 26, 2014, 22:09:47
от Trans
9 Ответов
3383 Просмотров
Последний ответ Июнь 17, 2015, 15:18:59
от uritalex
1 Ответов
650 Просмотров
Последний ответ Август 22, 2015, 16:59:22
от madmasles
7 Ответов
2146 Просмотров
Последний ответ Август 26, 2015, 12:50:46
от uritalex
1 Ответов
705 Просмотров
Последний ответ Январь 24, 2016, 00:53:29
от InnI