Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 1)

Модерирует : gyra, Maz

Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

   

AddXL

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

AutoIt3

 
Домашняя страница: http://www.autoitscript.com
Страница загрузки: http://www.autoitscript.com/autoit3/downloads.php
 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя - симуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши и управления окнами и его визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
Помощь по AutoIT:
  • Справку на русском (и не только) вы всегда(?) сможете найти тут
  • Справочник по командам rundll32
  • Русский справочник по API-функциям
  • Помощь по Регулярным выражениям
  • AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf)
     
    Инструметы для AutoIt:
  • AutoIt3Wrapper [Страница закачки] - Программа для компилляции скрипта с дополнительными возможностями (добавление иконки, описании и т.п).
  • Koda (724 Kb) - Визуализация работы с GUI - аналог Visual Basic.
  • CodeWizard (400 Kb) - нечто простенькое на вариант Koda.
  • AutoItMacroGenerator (34 Kb) - Записывает в реальном времени действия пользователя в AutoIt код.
  • ScriptWriter (78 Kb) - Аналог AutoItMacroGenerator.
  • API Constants (1042 Kb) - Утилита для просмотра всех констант API-Функции и не только.
  • Страница закачки утилит которые идут в отдельной поставке редактора SciTE.
  • AutoIt меню для браузера Opera
     
    Готовые скрипты и программы с открытым кодом на AutoIt:
  • Коллекция AutoIt скриптов от Sanja Alone
  • Коллекция скриптов на http://msfn.org
  • Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
  • Desktop Icons Restorator - Скрипт-Программа для сохранения/восстановления позиции иконок р.стола.
  • CaptureIt - Утилита предназначена для захвата изображений с вашего экрана.
  • SwitchIt - Скрипт для конвертирования выделенного текста
  • Скрипт расскраски кода AutoIt для публикации в форумах
     
    Общие вопросы и решения на Autoit:
  • Обработчик скриптов добавляющий отладчик (debugger)
  • Интеракция между несколькими скриптами
  • Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
  • Копирование большого файла с отображением данных прогресса
  • Создание динамического меню в Tray Icon (значёк в области уведомления)
  • Пример создания своего мастера (Wizard)
  • Метод позволяющий запускать код VBS не создавая временных файлов
  • Описание функции GUIRegisterMsg()
  • Пример перехвата вводимых символов с клавиатуры
  • Пример деактивирования TabItem
  • Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
  • Пример остановки/начало выполнения скрипта + Слежение за б.обмена с заменой неподдерживаемых в имени файла символов
  • Пример использования меню с иконками (ModernMenu.au3) -> Список программ в меню значка в системном трее
     
  • Как по PID процесса вычислить путь запускаемого файла
  • Получение IP по подключенному сокету
     
    Отдельные функции (UDF):
  • Функции Отключения/Подключения к Интернету
  • Функция проверки подключения к Интернету
  • Функция для получения структуры директории включая подкаталоги
  • Функция для поиска в файлах
  • Функция для смены разрешения экрана
  • Функция для смены раскладки клавиатуры в определённом окне
  • Функция для получения списка процессов с допол. инфой (путь к исполняемому файлу и др.)
  • Функции и пример для отображения детального процесса закачки файла
  • Функция (и пример использования) для отображения стильного диалога “О Программе” - [Усовершенствованная версия]
  • Функция возвращает пронумерованный список всех классов определённого окна + функция получения хендлов для этих классов
  • Функция для получения заголовка окна (или его идентификатора) по ID процесса (PID)
  • Функция _StringIsUTF8Format() + _StringToUTF() - Первая проверяет если строка содержится в UTF-8 формате, вторая преобразовывает строку в UTF-8 формат
  • Функция _FileOpenDialogEx - Возвращает массив (или строку) с полными путями к выбранным файлам
  • _AU3_Lib* Функции - Предназначены для обработки подключаемых библиотек через #include
  • Функция транслитерации строки
  • Расширенная библиотека для работы с реестром
     
    За шапкой следит ViSiToR  

  • Всего записей: 6 | Зарегистр. 24-11-2005 | Отправлено: 13:20 24-11-2005 | Исправлено: Maz, 11:50 17-04-2017
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Baloven1

    Цитата:
    по сути у меня форма на которой наверху список (ListView) внизу поля того Input нужно чтобы в полях ввода были данные текущей строки...

    Я по сути только из за этой строки затрудняюсь что либо понять  
     
    Вот пример как получить текст выделенного Item в ListView (для AutoIt 3.2.8.1) :
     

    Код:
    #include <GuiConstants.au3>
    #include <GuiListView.au3>
    Opt("GuiOnEventMode", 1)
     
    $Gui = GuiCreate("ListView Test", 340, 300)
    GUISetOnEvent(-3, "MainEvents")
     
    $ListView = GUICtrlCreateListView("Column", 20, 20, 300, 220)
     
    For $i = 1 To 20
        GUICtrlCreateListViewItem("Item " & $i, $ListView)
        GUICtrlSetOnEvent(-1, "MainEvents")
    Next
     
    $Input = GUICtrlCreateInput("", 20, 260, 300, 20)
     
    GUISetState()
     
    While 1
        Sleep(100)
    WEnd
     
    Func
    MainEvents()
        Switch @GUI_CtrlId
            Case -3
                Exit
            Case Else
                Local
    $GetText = _GUICtrlListViewGetItemText($ListView)
                GUICtrlSetData($Input, $GetText)
        EndSwitch
    EndFunc


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:03 01-12-2007
    Baloven1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    за пример спасибо, щас попробую...
    я накопал все-таки кой что и в примерах (почему-то сразу не понял как их к себе применить)
    _GUICtrlListView_GetHotItem.au3
    здесь я так понял обчитываются все события из LV и соответственно из них я получил индекс текущей строки...
    еще если интересно... накопал
    _GUICtrlListView_SimpleSort.au3
    отсюда можно почерпнуть примеры сортировки строк при клике на заголовке.
     
    как видно из названий версия у меня уже последняя... кой что пришлось переделать, но не так много как остальным ... нет желания переделывать скрипты в дальнейшем
     
    Добавлено:
    _GUICtrlListViewGetItemText($h_listview[, $i_Item=-1[, $i_SubItem=-1[, $h_WindowTitle=""[, $h_WindowText=""]]]])
    из старой версии и синтаксис у них различный, в новой версии индекс - обязательный параметр - так что буду юзать то что из примеров раскопал... но все равно спасибо...
    вот новый синтаксис:
    _GUICtrlMenu_GetItemText($hMenu, $iItem[, $fByPos = True])
    это из файла GuiListView.au3 (ИЗ НОВОЙ ВЕРСИИ!!!)

    Код:
    ; #OLD_FUNCTIONS#================================================================================================================
    ; Old Function/Name                      ; --> New Function/Name/Replacement(s)
    ; ===============================================================================================================================
    ;_GUICtrlListViewCopyItems                ; --> _GUICtrlListView_CopyItems
    ;_GUICtrlListViewDeleteAllItems           ; --> _GUICtrlListView_DeleteAllItems
    ;_GUICtrlListViewDeleteColumn             ; --> _GUICtrlListView_DeleteColumn
    ;_GUICtrlListViewDeleteItem               ; --> _GUICtrlListView_DeleteItem
    ;_GUICtrlListViewDeleteItemsSelected      ; --> _GUICtrlListView_DeleteItemsSelected
    ;_GUICtrlListViewEnsureVisible            ; --> _GUICtrlListView_EnsureVisible
    ;_GUICtrlListViewFindItem                 ; --> _GUICtrlListView_FindInText, _GUICtrlListView_FindItem, _GUICtrlListView_FindNearest, _GUICtrlListView_FindParam, _GUICtrlListView_FindText
    ;_GUICtrlListViewGetBackColor             ; --> _GUICtrlListView_GetBkColor
    ;_GUICtrlListViewGetCallbackMask          ; --> _GUICtrlListView_GetCallbackMask
    ;_GUICtrlListViewGetCheckedState          ; --> _GUICtrlListView_GetItemChecked
    ;_GUICtrlListViewGetColumnOrder           ; --> _GUICtrlListView_GetColumnOrder
    ;_GUICtrlListViewGetColumnWidth           ; --> _GUICtrlListView_GetColumnWidth
    ;_GUICtrlListViewGetCounterPage           ; --> _GUICtrlListView_GetCounterPage
    ;_GUICtrlListViewGetCurSel                ; --> _GUICtrlListView_GetNextItem
    ;_GUICtrlListViewGetExtendedListViewStyle ; --> _GUICtrlListView_GetExtendedListViewStyle
    ;_GUICtrlListViewGetHeader                ; --> _GUICtrlListView_GetHeader
    ;_GUICtrlListViewGetHotCursor             ; --> _GUICtrlListView_GetHotCursor
    ;_GUICtrlListViewGetHotItem               ; --> _GUICtrlListView_GetHotItem
    ;_GUICtrlListViewGetHoverTime             ; --> _GUICtrlListView_GetHoverTime
    ;_GUICtrlListViewGetItemCount             ; --> _GUICtrlListView_GetItemCount
    ;_GUICtrlListViewGetItemTextArray         ; --> _GUICtrlListView_GetItemTextArray
    ;_GUICtrlListViewGetItemText              ; --> _GUICtrlListView_GetItemTextString
    ;_GUICtrlListViewGetNextItem              ; --> _GUICtrlListView_GetNextItem
    ;_GUICtrlListViewGetSelectedCount         ; --> _GUICtrlListView_GetSelectedCount
    ;_GUICtrlListViewGetSelectedIndices       ; --> _GUICtrlListView_GetSelectedIndices
    ;_GUICtrlListViewGetSubItemsCount         ; --> _GUICtrlListView_GetColumnCount
    ;_GUICtrlListViewGetTopIndex              ; --> _GUICtrlListView_GetTopIndex
    ;_GUICtrlListViewGetUnicodeFormat         ; --> _GUICtrlListView_GetUnicodeFormat
    ;_GUICtrlListViewGetView                  ; --> _GUICtrlListView_GetView
    ;_GUICtrlListViewHideColumn               ; --> _GUICtrlListView_HideColumn
    ;_GUICtrlListViewInsertColumn             ; --> _GUICtrlListView_InsertColumn
    ;_GUICtrlListViewInsertItem               ; --> _GUICtrlListView_InsertItem
    ;_GUICtrlListViewJustifyColumn            ; --> _GUICtrlListView_JustifyColumn
    ;_GUICtrlListViewScroll                   ; --> _GUICtrlListView_Scroll
    ;_GUICtrlListViewSetColumnHeaderText      ; --> _GUICtrlListView_SetColumn
    ;_GUICtrlListViewSetColumnWidth           ; --> _GUICtrlListView_SetColumnWidth
    ;_GUICtrlListViewSetColumnOrder           ; --> _GUICtrlListView_SetColumnOrder
    ;_GUICtrlListViewSetCheckState            ; --> _GUICtrlListView_SetItemChecked
    ;_GUICtrlListViewSetHotItem               ; --> _GUICtrlListView_SetHotItem
    ;_GUICtrlListViewSetHoverTime             ; --> _GUICtrlListView_SetHoverTime
    ;_GUICtrlListViewSetItemCount             ; --> _GUICtrlListView_SetItemCount
    ;_GUICtrlListViewSetItemSelState          ; --> _GUICtrlListView_SetItemSelected
    ;_GUICtrlListViewSetItemText              ; --> _GUICtrlListView_SetItemText
    ;_GUICtrlListViewSort                     ; --> _GUICtrlListView_SimpleSort
     
    ; #NO_DOC_FUNCTION# =============================================================================================================
    ; Not working/documented/implimented at this time
    ; ===============================================================================================================================
    ;_GUICtrlListView_GetInsertMark
    ;_GUICtrlListView_GetInsertMarkColor
    ;_GUICtrlListView_GetInsertMarkRect
    ;_GUICtrlListView_InsertMarkHitTest
    ;_GUICtrlListView_MoveGroup
    ;_GUICtrlListView_SetHotCursor
    ;_GUICtrlListView_SetInfoTip
    ;_GUICtrlListView_SetInsertMark
    ;_GUICtrlListView_SetInsertMarkColor
    ; ===============================================================================================================================

     
    OFF TOPIC
    ViSiToR
    а чем раскрашивать код? (не вручную имеется ввиду)
     
    спасибо програмку нашел:
    ViSiToR
    скрипт - полезный так как все же не все пользуют новую версию и наоборот...
    строку 658
    Код:
    _GUICtrlEditSetSel($ScriptContent, 0, StringLen(GUICtrlRead($ScriptContent)))
    имело бы смысл поставить проверку на текущую версию и выполнить либо старую команду, либо новую _GUICtrlEdit_SetSel (синтаксис не помянелся)

    Всего записей: 186 | Зарегистр. 16-09-2004 | Отправлено: 15:02 01-12-2007 | Исправлено: Baloven1, 17:35 01-12-2007
    Koppew



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR

    Цитата:
    Это говорит о том, что обьект не поддерживает этот вызов (.Open)

    как исходя из этого объяснить, что этот же скрипт работает на другой машине?
     
    вобщем-то, как я говорил, проблема это не AutoIt...
     
    вот например какое решение предлагается:
    "День добрый! Проблема с развертыванием приложения на стороне клиента. При попытке подключиться к БД выдает сообщение типа: Не найдена точка входа в процедуру в msdart.dll. Переустановка MSFramework 1.1 и MDAC 2.7 не помогает. На других аналогичных машинах все работает норм. При этом могу заметить, что на машине разработчика стоит XP SP2, на машине клиента XP SP1 и данные dll действительно разные. При этом клиент по каким-то соображениям отказывается ставить SP2. Такая вот БЕДА... Может кто сталкивался?
     
    Отвечаю сам себе: http://download.microsoft.com/download/f/0/a/f0a344ec-c6bf-4273-9162-062c7974b114/RUS_Q832483_MDAC_x86.EXE" ©
     
    но у меня это обновление не хочет вставать, жалуется, что не может определить версию установленного MDAC

    Всего записей: 36 | Зарегистр. 14-09-2005 | Отправлено: 11:44 02-12-2007
    Baloven1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    вот такой баг обнаружил... долго ломал голову, пока не сделал, так:

    Код:
    $String = 'rs  dd'
    $Text = ''
     
    Select
        Case
    StringLen (StringStripWS ($String,8)) = 0
            $Text = $Text & '1.'
        Case StringStripWS ($String,8) = 't'
            $Text = $Text & '2.'
        Case StringStripWS ($String,8) = '3'
            $Text = $Text & '3.'
        Case StringStripWS ($String,8) = 0
            $Text = $Text & '4.'
    EndSelect
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Text = ' & $Text & @crlf & '>Error code: ' & @error & @crlf)

    Результат выполения данного скрипта... весьма интересен, НО.... на последней версии AI в консоли вы получите 4 результат...
    изначально у меня было все зделано через IF... Then....Endif и все равно результат тот же
    смысл в том что я по идее хотел обмануть судьбу и хотел убрать лишнее условие, так как $String мне нужно по этому условию отловить и =0 и = " 0" (в вариациях)... вот так и осеял

    Всего записей: 186 | Зарегистр. 16-09-2004 | Отправлено: 16:12 02-12-2007 | Исправлено: Baloven1, 16:19 02-12-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Baloven1
    Спасибо за сравнительный анализ... список
     

    Цитата:
    имело бы смысл поставить проверку на текущую версию

    Ну это не столь важно, каждый скриптер всегда что-то меняет под себя.. в данном случае изменении слишком много в новой версии, так что нужно найти смелость и поставить её, и начать всё переписывать (у меня лично это весьма приличная куча скриптов ).
     
    Koppew

    Цитата:
    как исходя из этого объяснить, что этот же скрипт работает на другой машине?

    На другой машине другая конфигурация, другие обьекты поддерживаются/не поддерживаются и т.п.
     

    Цитата:
    проблема это не AutoIt...

    Если задача на AutoIt, то и проблема (хоть и косвенная в данном случае) для AutoIt
     
    Baloven1

    Цитата:
    вот такой баг обнаружил

    Я если честно не вижу багу..
     

    Цитата:
    на последней версии AI в консоли вы получите 4 результат

    Я и на своей (3.2.8.1) получаю 4., и это логично, в первом случае проверяется длина строки после удаления с неё всех пробелов (остаётся rsdd), во втором случае проверяется не ровняется ли строка символу r (также после удаления всех пробелов), в третьем случае проверяется не равна ли строка "3", а далее сравнивается результат выполнения функции StringStripWS() - она возвращает String, а если сравнивать с числовым значением, то это ровно нулю (тоже самое что If 0 = 0 ...).
     
    А что конкретно ожидается тут получить? какая задача?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 16:42 02-12-2007
    Dobrii

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прошу не пинать за идиотский вопрос.
    Есть строка вида G0X5.000Y-3.123F500.0
    Как перед буквами пробелы поставить? Что бы строка приняла вид G0 X5.000 Y-3.123 F500.0

    Всего записей: 137 | Зарегистр. 15-03-2006 | Отправлено: 10:45 03-12-2007
    Baloven1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    логика - то понятна (я про пример) ... но вот как бы в хелпе не сказано что только Sring!!!! из этих соображения я и хотел этим условием выловить не единичный случай, а несколько вариантов ошибок (пример - это контроль отлова введенных в форму пользователем данных и преоброзования их для заброски в SQL, а так же проверка данных на валидность) просто в БД есть например номера квартир (ранее писал в форуме) и в поле их операторы как попало вводят с пробелами и без, а в БД все же нужно закинуть сам номер без всяких премудростей и в том числе при отображении данных сделать аналогичную проверку на ранее внесенные подобные баги... и дело в том что иногда имеет место значение быть нулевым (числом для квартир это не применимо, а вот для подъездов или этажей родной клиентский модуль при создании адреса проставляет их в 0) вот и столкнулся я с тем что неправильно у меня отлавливалась подобная ситуация....
     
    ViSiToR
    и еще раз на прошлой странице уже спрашивал: как подключится к SQL используюя доменные имя и пароль, при этом взяв их из системных данных, т.е. если юзер сидит в системе под доменной учетной записью - у него на спрашивается имя и пароль, а выдать ему простой запрос наподобыии: "вы хотите подключится под текущими учетными данными?" при "Да" коннектимся с текущими данными (НО ГДЕ ИХ ВЗЯТЬ???) при нет активируем стандартный логин с запросом и логина и пароля. Ведь стандартные проги винды под текущими данными подключаются и к серверу и к ресурсам сети...

    Всего записей: 186 | Зарегистр. 16-09-2004 | Отправлено: 10:50 03-12-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Baloven1

    Цитата:
    как подключится к SQL используюя доменные имя и пароль, при этом взяв их из системных данных

    Я никогда не работал с SQL, но мне кажется такие данные не так то просто получить, система их получает потому что у неё есть доступ (при введении имени и пароля), а у внешней программы - нет . Но могу ошибаться, у меня очень смутные знания в этой сфере.
     
    Dobrii

    Цитата:
    Как перед буквами пробелы поставить?

    Через RegExp...
     

    Код:
     
    $String = "G0X5.000Y-3.123F500.0"
    $DestString = "G0 X5.000 Y-3.123 F500.0"
     
    $RetStr = StringRegExpReplace($String, "(?i)([a-z])", " \1")
    $RetStr = StringStripWS($RetStr, 3)
     
    ConsoleWrite($RetStr & @LF & $DestString & @LF)


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 11:19 03-12-2007 | Исправлено: ViSiToR, 11:20 03-12-2007
    Kauffman

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Короче, дайте кто-нибудь пример, в котором в ListView'е отображалась бы файловая система (см. как в FileOpenDialog), т.е. отображается  содержимое одной папки (а не как TreeView всё сразу, от сюда и тормоза), а когда шелкаешь по папке внутри той - переходишь к содерж. её.
    И ещё, FileSaveDialog не возвращает расширения файла (т.е файл сохр. вообще без расширения, когда в фильтре четко указано например .txt). Может кто знает что делать?

    Всего записей: 33 | Зарегистр. 02-10-2007 | Отправлено: 12:34 04-12-2007
    CAD_tester

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Извините за ОФ ТОП, а программа платная? или ФриВарная?

    Всего записей: 474 | Зарегистр. 18-01-2005 | Отправлено: 10:09 05-12-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    CAD_tester
    Действительно
    Шапку бы почитал для начала:
    Цитата:
    Умеет он очень и очень многое! Бесплатный.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:42 05-12-2007
    gregaz



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли  выполнять редактирование по месту в текстах элементов ListView ?
    В новой версии вроде есть, но только при создании ListView  с помощью UDF
    Как это осуществить на ListView , созданном внутренним языком AutoIT ?
    Никак не сопрягаются UDF-ский и внутренний ListView
    Прошу помочь

    Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 14:26 05-12-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    gregaz
    Используй стиль $LVS_EDITLABELS

    Код:
    #include <GuiConstants.au3>
     
    GUICreate("Test", 200, 100)
     
    $listview = GUICtrlCreateListView("List                         ", 10, 10, 180, 80, $LVS_EDITLABELS)
    $ListItem1 = GUICtrlCreateListViewItem("Item1", $listview)
     
    GUISetState()
     
    While 1
        $msg = GUIGetMsg()
        Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        EndSwitch
    WEnd

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:37 05-12-2007
    gregaz



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka,спасибо,но этого видимо недостаточно
    Стиль $LVS_EDITLABELS наверно только допускает возможность редактирования
     Попытка реализовать простыми средствами вроде позволяет редактировать ,но результат не фиксируется и восстанавливается прежнее значение : (твой пример)
     Требуется еще специальная функция-обработчик события  
    Не получается использование ф-ии : _ListView_EditLabel из UDF новой версии и  Lib старой без ф-ии обработчика  
     
     

    Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 21:51 05-12-2007 | Исправлено: gregaz, 22:04 05-12-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    gregaz

    Цитата:
    В новой версии вроде есть, но только при создании ListView  с помощью UDF

    UDF 'ы по сути используют встроенные средства Аутоита , т.ч решение только через них (ну или использовать их методы напрямую - улавливание сообщений и т.п.).
     
    Кстати, оно было возможно и в старой версии

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 22:31 05-12-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR
    В новой версии кол-во UDF увеличилось, что не может не радовать, но увеличилось также кол-во вопросов.
    Взять к примеру
    Цитата:
    Можно ли  выполнять редактирование по месту в текстах элементов ListView ?
    , я и не думал, что это сложная задача, пока сам не столкнулся с ней. Пример из справки (немного отредактированный):

    Код:
    #include <GuiConstants.au3>
    #include <GuiListView.au3>
     
    $Gui = GUICreate("Test", 300, 200)
     
    $hListView = _GUICtrlListView_Create($GUI, "Items|SubItems", 2, 2, 296, 196, BitOR($LVS_EDITLABELS, $LVS_REPORT))
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
    $ListItem1 = _GUICtrlListView_AddItem($hListView, "Item1")
    $ListItem2 = _GUICtrlListView_AddItem($hListView, "Item2")
     
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
     
    GUISetState()
     
    While 1
        $msg = GUIGetMsg()
        Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        EndSwitch
    WEnd
     
    Func
    WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
        $hWndListView
    = $hListView
        If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
     
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
     
        Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
            Case $LVN_BEGINLABELEDIT
                Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
                Return False
            Case
    $LVN_ENDLABELEDIT
                Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
                Local $tBuffer = DllStructCreate("char Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
                If StringLen(DllStructGetData($tBuffer, "Text")) Then Return True
                EndSwitch
            EndSwitch
            Return
    $GUI_RUNDEFMSG
        EndFunc

    Я смутно понимал, что для этой задачи нужно применить GuiRegisterMsg(), но не думал, что это будет довольно таки сложная конструкция, для казалось простой задачи. Вот если бы кто-нибудь разжевал её (
    Код:
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    ), было- бы вообще здорово. В идеале хотелось бы научиться решать подобные задачи самостоятельно, без справки, но к сожалению уровень моих знаний далёк от этого .

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:07 06-12-2007
    Baloven1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    народ, помогите с такой проблемой, вот примерный код (навая версия):

    Код:
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiStatusBar.au3>
     
    Opt('MustDeclareVars', 1)
     
    $Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work
     
    Global $hListView, $hStatus
     
    Example_Internal()
     
    Func Example_Internal()
        Local $hGUI
     
        $hGUI
    = GUICreate("(Internal) ListView Get Hot Item", 392, 322)
     
        $hListView = GUICtrlCreateListView("", 2, 2, 394, 268)
        $hListView = GUICtrlGetHandle($hListView)
        _GUICtrlListView_SetExtendedListViewStyle ($hListView, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_TRACKSELECT))
        GUISetState()
     
        ; Add columns
        _GuiCtrlListView_AddColumn ($hListView, "Column 1", 100)
        _GuiCtrlListView_AddColumn ($hListView, "Column 2", 100)
        _GuiCtrlListView_AddColumn ($hListView, "Column 3", 100)
     
        ; Add items
        _GuiCtrlListView_AddItem ($hListView, "Row 1: Col 1")
        _GuiCtrlListView_AddSubItem ($hListView, 0, "Row 1: Col 2", 1)
        _GuiCtrlListView_AddSubItem ($hListView, 0, "Row 1: Col 3", 2)
        _GuiCtrlListView_AddItem ($hListView, "Row 2: Col 1")
        _GuiCtrlListView_AddSubItem ($hListView, 1, "Row 2: Col 2", 1)
        _GuiCtrlListView_AddItem ($hListView, "Row 3: Col 1")
     
        ;Register WM_NOTIFY  events
        GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
     
        ; Loop until user exits
        Do
        Until
    GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
    EndFunc   ;==>Example_Internal
     
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
        $hWndListView
    = $hListView
        If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
     
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
            Case $hWndListView
                Switch $iCode
                    Case $LVN_KEYDOWN ; A key has been pressed
                        Local $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
                                    For $i = 0 to _GUICtrlListView_GetItemCount ($hListView)
                                        If _GUICtrlListView_GetItemSelected ($ListView, $i) = True Then
                                            $Item = _GUICtrlListView_GetItemTextArray ($ListView, _GUICtrlListView_GetHotItem ($ListView))
                                            ExitLoop
                                        EndIf
                                    Next
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY

    смысл весь в том что скрипт возвращает предыдущую выбранную строку, а не текущую и никак не могу сообразить как получить именно текущуюю.
    если клацать мышкой по полям - то все ОК (обчитываемтся код $NM_CLICK приводить его не стал так как он корректно отрабатывается) а вот при перемещении по LVI на клавиатуре.... глюкс, например если стоит курсор на 0 итеме и нажмем клавишу стрелку вниз, то в результате в $Item получаем строку с нулевым индексом, все бы ничего по идее можно смотреть какая клавиша нажата и к индексу +1 или -1, НО ситуация еще и в том что допустим стоим на последнем итеме нажимаем клавишу вниз... и получаем последний итем, нажимаем вверх... получаем опять последний, еще раз вверх - предпоследний... все это конечно можно описать, но может есть решение проще?

    Всего записей: 186 | Зарегистр. 16-09-2004 | Отправлено: 10:14 06-12-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka

    Цитата:
    В новой версии

    Увы, но помочь ничем не могу, я не ставил (и не планирую вскоре) новую версию.
     

    Цитата:
    я и не думал, что это сложная задача

    Я тоже удивился когда мне это понадобилось, но решил для себя не мучаться, и просто выводить InputBox (самодельный) при двойном клике на элементе.
     

    Цитата:
    В идеале хотелось бы научиться решать подобные задачи самостоятельно, без справки

    Время+опыт - пока сам не столкнешься, не научишься.
     
    Baloven1

    Цитата:
    при перемещении по LVI на клавиатуре.... глюкс

    Это не глюк ... кто сказал что нотификация (уведомление) должно улавливать клавиатурные нажатия?
     
    Когда мы кликаем по элементу в ListView, в наш GUI посылается сообщение, GuiRegisterMsg позволяет улавливать его, вот также нужно улавливать нажатые клавиши.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 11:11 06-12-2007
    Baloven1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    так ведь им я и пользуюсь????.... вообще-то это пример из справки (_GUICtrlListView_GetHotItem.au3), я его попросту урезал... а что касается улавливать нажатия клавишь - так я и улавливаю $LVN_KEYDOWN этой глобальной переменной, через нее можно получить коды клавишь (стрелки вверх и вниз соответственно код получим этого раздела в реалии у меня выглядит так:

    Код:
                    Case $NM_CLICK, $LVN_KEYDOWN ; Sent by a list-view control when the user clicks an item with the left mouse button
                        $switches = 0
                        Switch $iCode
                            Case $LVN_KEYDOWN
                                Local $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
                                If DllStructGetData($tInfo, "VKey") = 22020136 Or DllStructGetData($tInfo, "VKey") = 21495846 Then
                                    $switches = 1
                                    For $i = 0 to _GUICtrlListView_GetItemCount ($ListView) - 1
                                        If _GUICtrlListView_GetItemSelected ($ListView, $i) = True Then
                                            $Item = _GUICtrlListView_GetItemTextArray ($ListView, _GUICtrlListView_GetHotItem ($ListView))
                                            ExitLoop
                                        EndIf
                                    Next
                                EndIf
                            Case $NM_CLICK
                                $switches = 1
                                Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                                $Item = _GUICtrlListView_GetItemTextArray ($ListView, DllStructGetData($tInfo, "Index"))
                        EndSwitch
                        Switch $switches
                            Case 0
                            Case 1
    НО это равнозначный код и в нем как раз фильтруются клавиши "стрелка вверх" и "стрелка вниз" (ссответственно вот этой строкой
    Код:
    DllStructGetData($tInfo, "VKey") = 22020136 Or DllStructGetData($tInfo, "VKey") = 21495846
    ) однако как и писал здесь имеет место неправильная фокусировка

    Всего записей: 186 | Зарегистр. 16-09-2004 | Отправлено: 13:55 06-12-2007 | Исправлено: Baloven1, 14:45 06-12-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Baloven1

    Цитата:
    неправильная фокусировк

    Мне тяжело так в слепую сказать, но мне кажется простая проверяка соответствия общего количества элементов с полученным числом функцией (уведомлением) поможет вычеслить текущий элеменет... а вообще была функция _GUICtrlListViewGetCurSel(), её в новой версии нету?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:08 06-12-2007
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 1)
    Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru