Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: ViSiToR
Дата сообщения: 01.12.2007 13:03
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
Автор: Baloven1
Дата сообщения: 01.12.2007 14:02
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
; ===============================================================================================================================
Автор: Koppew
Дата сообщения: 02.12.2007 10:44
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
Автор: Baloven1
Дата сообщения: 02.12.2007 15:12
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)
Автор: ViSiToR
Дата сообщения: 02.12.2007 15:42
Baloven1
Спасибо за сравнительный анализ... список


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

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

Koppew

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

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


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

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

Baloven1

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

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


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

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

А что конкретно ожидается тут получить? какая задача?
Автор: Dobrii
Дата сообщения: 03.12.2007 09:45
Прошу не пинать за идиотский вопрос.
Есть строка вида G0X5.000Y-3.123F500.0
Как перед буквами пробелы поставить? Что бы строка приняла вид G0 X5.000 Y-3.123 F500.0
Автор: Baloven1
Дата сообщения: 03.12.2007 09:50
ViSiToR
логика - то понятна (я про пример) ... но вот как бы в хелпе не сказано что только Sring!!!! из этих соображения я и хотел этим условием выловить не единичный случай, а несколько вариантов ошибок (пример - это контроль отлова введенных в форму пользователем данных и преоброзования их для заброски в SQL, а так же проверка данных на валидность) просто в БД есть например номера квартир (ранее писал в форуме) и в поле их операторы как попало вводят с пробелами и без, а в БД все же нужно закинуть сам номер без всяких премудростей и в том числе при отображении данных сделать аналогичную проверку на ранее внесенные подобные баги... и дело в том что иногда имеет место значение быть нулевым (числом для квартир это не применимо, а вот для подъездов или этажей родной клиентский модуль при создании адреса проставляет их в 0) вот и столкнулся я с тем что неправильно у меня отлавливалась подобная ситуация....

ViSiToR
и еще раз на прошлой странице уже спрашивал: как подключится к SQL используюя доменные имя и пароль, при этом взяв их из системных данных, т.е. если юзер сидит в системе под доменной учетной записью - у него на спрашивается имя и пароль, а выдать ему простой запрос наподобыии: "вы хотите подключится под текущими учетными данными?" при "Да" коннектимся с текущими данными (НО ГДЕ ИХ ВЗЯТЬ???) при нет активируем стандартный логин с запросом и логина и пароля. Ведь стандартные проги винды под текущими данными подключаются и к серверу и к ресурсам сети...
Автор: ViSiToR
Дата сообщения: 03.12.2007 10:19
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)
Автор: Kauffman
Дата сообщения: 04.12.2007 11:34
Короче, дайте кто-нибудь пример, в котором в ListView'е отображалась бы файловая система (см. как в FileOpenDialog), т.е. отображается содержимое одной папки (а не как TreeView всё сразу, от сюда и тормоза), а когда шелкаешь по папке внутри той - переходишь к содерж. её.
И ещё, FileSaveDialog не возвращает расширения файла (т.е файл сохр. вообще без расширения, когда в фильтре четко указано например .txt). Может кто знает что делать?
Автор: CAD_tester
Дата сообщения: 05.12.2007 09:09
Извините за ОФ ТОП, а программа платная? или ФриВарная?
Автор: Maza Faka
Дата сообщения: 05.12.2007 09:42
CAD_tester
Действительно
Шапку бы почитал для начала:
Цитата:
Умеет он очень и очень многое! Бесплатный.
Автор: gregaz
Дата сообщения: 05.12.2007 13:26
Можно ли выполнять редактирование по месту в текстах элементов ListView ?
В новой версии вроде есть, но только при создании ListView с помощью UDF
Как это осуществить на ListView , созданном внутренним языком AutoIT ?
Никак не сопрягаются UDF-ский и внутренний ListView
Прошу помочь
Автор: Maza Faka
Дата сообщения: 05.12.2007 16:37
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
Автор: gregaz
Дата сообщения: 05.12.2007 20:51
Maza Faka,спасибо,но этого видимо недостаточно
Стиль $LVS_EDITLABELS наверно только допускает возможность редактирования
Попытка реализовать простыми средствами вроде позволяет редактировать ,но результат не фиксируется и восстанавливается прежнее значение : (твой пример)
Требуется еще специальная функция-обработчик события
Не получается использование ф-ии : _ListView_EditLabel из UDF новой версии и Lib старой без ф-ии обработчика

Автор: ViSiToR
Дата сообщения: 05.12.2007 21:31
gregaz

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

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

Кстати, оно было возможно и в старой версии
Автор: Maza Faka
Дата сообщения: 06.12.2007 09:07
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
Автор: Baloven1
Дата сообщения: 06.12.2007 09:14
народ, помогите с такой проблемой, вот примерный код (навая версия):

Код: #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
Автор: ViSiToR
Дата сообщения: 06.12.2007 10:11
Maza Faka

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

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


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

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


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

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

Baloven1

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

Это не глюк ... кто сказал что нотификация (уведомление) должно улавливать клавиатурные нажатия?

Когда мы кликаем по элементу в ListView, в наш GUI посылается сообщение, GuiRegisterMsg позволяет улавливать его, вот также нужно улавливать нажатые клавиши.
Автор: Baloven1
Дата сообщения: 06.12.2007 12:55
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
Автор: ViSiToR
Дата сообщения: 06.12.2007 14:08
Baloven1

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

Мне тяжело так в слепую сказать, но мне кажется простая проверяка соответствия общего количества элементов с полученным числом функцией (уведомлением) поможет вычеслить текущий элеменет... а вообще была функция _GUICtrlListViewGetCurSel(), её в новой версии нету?
Автор: Tipulatoid
Дата сообщения: 06.12.2007 14:48
ViSiToR
Ну Вы маг! Спасибо за скрипт по авторазмещению постов на форуме. Его надо теперь немного доработать, чтоб умел и через IE и Firefox работать. Почитаю мануалы, надеюсь справлюсь. Если что, обращусь за помощью, ОК?
Автор: Dobrii
Дата сообщения: 06.12.2007 15:16
Всем привет!
Создаю радиокнопку
$Radio1 = GUICtrlCreateRadio("0 град.", 180, 40)
Текст она пишет справа от кнопки, можно ли написать текст сверху(снизу,слева) от кнопки?
Заранее благодарю.
Автор: Maza Faka
Дата сообщения: 06.12.2007 16:05
Dobrii
Можно так:

Код: #include <GuiConstants.au3>

$GUI = GUICreate("TestGui", 200, 100)

$Label = GUICtrlCreateLabel("0 град.", 10, 35, 100, 17)
GUICtrlSetColor(-1, 0x804040)

$Radio_Btn = GUICtrlCreateRadio("", 20, 50, 50, 20)

GUISetState()

While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
Автор: ViSiToR
Дата сообщения: 06.12.2007 16:51
Tipulatoid

Цитата:
Если что, обращусь за помощью, ОК?

ОК

Dobrii

Цитата:
можно ли написать текст сверху(снизу,слева) от кнопки?

Только через собственный Label и массивы..


Код: #include <GuiConstants.au3>

$Gui = GuiCreate("Test")

$Radio_1 = _GUICtrlCreateRadio("My Custom Radio at the Right", "Right", 20, 30)
$Radio_2 = _GUICtrlCreateRadio("My Custom Radio at the Buttom", "Buttom", 20, 80)
$Radio_3 = _GUICtrlCreateRadio("My Custom Radio at the Left", "Left", 20, 150, 150)
$Radio_4 = _GUICtrlCreateRadio("My Custom Radio at the top", "Top", 20, 200)

GUISetState()

While 1
$Msg = GUIGetMsg()
Switch $Msg
Case -3
Exit
Case
$Radio_1[1]
ControlClick($Gui, "", $Radio_1[0])
Case $Radio_2[1]
ControlClick($Gui, "", $Radio_2[0])
Case $Radio_3[1]
ControlClick($Gui, "", $Radio_3[0])
Case $Radio_4[1]
ControlClick($Gui, "", $Radio_4[0])
EndSwitch
WEnd

Func
_GUICtrlCreateRadio($Text, $sDirection, $Left, $Top, $Width=Default, $Height=Default, $Style=-1, $exStyle=-1)
Local $RetArr[2]
Local $rLeft = $Left, $rTop = $Top

Switch $sDirection
Case "Buttom"
$Top += 20
Case "Top"
$rTop += 18
Case "Left"
If $Width = Default Then $Width = StringLen($Text) * (StringLen($Text) / 3) + StringLen($Text)
$rLeft += $Width
$Top
+= 3
Case Else
$Left += 22
$Top += 3
EndSwitch

$RetArr[0] = GUICtrlCreateRadio(" ", $rLeft, $rTop, 20, 20, $Style, $exStyle)
$RetArr[1] = GUICtrlCreateLabel($Text, $Left, $Top, $Width, $Height, $Style, $exStyle)
Return $RetArr
EndFunc
Автор: gregaz
Дата сообщения: 06.12.2007 17:35
ViSiToR,спасибо за толчок в сторону форума Autoit.com в вопросе редактирования поместу в ListView . попробую разобраться с их разработками

Maza Faka

Цитата:
В новой версии кол-во UDF увеличилось, что не может не радовать

По моему они просто перенесли в UDF ф-ии,которые были в LIB , изменив их синтаксис

ViSiToR
Может и правда проще выводить свое окошко EDIT и редактировать там
Всем спасибо


Автор: Maza Faka
Дата сообщения: 07.12.2007 06:39
gregaz

Цитата:
в вопросе редактирования поместу в ListView

Если поставил новую версию, то какие проблемы с редактированием? В справке есть примеры.

Цитата:
По моему они просто перенесли в UDF ф-ии,которые были в LIB , изменив их синтаксис

Это понятно, радует то, что они включены в дистрибутив и описаны в справке.
Автор: Baloven1
Дата сообщения: 07.12.2007 08:35
ViSiToR
_GUICtrlListViewGetCurSel() - есть такая и зовется она нынче _GUICtrlListView_GetNextItem($hWnd[, $iStart = -1[, $iSearch = 0[, $iState = 8]]])
(выше на прошлой странице приводил сопоставление старых новым функциям), но при ее использовании абсолютно то же самое...
я уж было подумал, какой-то глюк на компе... попробовал на другом - то же самое т.е. получается "запаздывание фокуса"
Автор: Maza Faka
Дата сообщения: 07.12.2007 09:03
Baloven1

Цитата:
т.е. получается "запаздывание фокуса"

Видимо событие обрабатывается как при нажатии на элемент Button, т.е. если мы нажимаем кнопку, то она срабатывает не сразу, а только после того, как мы её отпустим, соответсвенно нужно найти способ при котором событие будет происходить при установке фокуса на элемент и считывание именно этого элемента.

P.S.
Ты не ответил на мои вопросы
Автор: Baloven1
Дата сообщения: 07.12.2007 11:28
Maza Faka
я то это понял, но вот как отследит окончание действия, то бишь нажатие-отпускание...??? и только потом обчитать фокус? - вот это мне и не понятно... я же и обчитываю по событию $tagNMLVKEYDOWN то есть можно по названию предположить что именно когда клавиша нажата, НО нет константы что она опущена
насчет констант (извини что-то пропустил их ): читай на предыдущей страницы мои посты
ладно... я в основном все что написал на 2х страницах - это разбор примера @ProgramFiles\AutoIt3\Examples\_GUICtrlListView_GetHotItem.au3
а уже от него плясал в файлы с константами, которые подгружаются в начале файла, те что были непонятны выловил поиском по тексту в папке @ProgramFiles\AutoIt3\Include\ (могу ошибаться но по мойму они определены в ... в общем поискал щас константа $LVN_KEYDOWN находится в файлах ListViewConstants.au3 и StructureConstants.au3)
а что касается фильтрации по кодам клавишь - так все простозапустил указанный выше пример и он при выполнении событий все пишет в консоль - там и посмотрел, НО пишет при нажатии клавиши, и при отпускании ничего нет

Добавлено:
Tipulatoid
ViSiToR
Полный оффтопик (сорри)...
а что если его (скрипт раскраски постов) доработать и приклеить в код формы? так сделано на форуме AI там есть дополнительный код [autoit][/autoit] (если мне память не изменяет) естественно что на борде пишут не только на AI но ведь теоретически можно подобным образом сделать коды и раскраску и под остальные языки, весь вопрос в реализации кодов (их группировки)... и я в этом не шибко силен
Автор: Tipulatoid
Дата сообщения: 07.12.2007 12:53
Я с легкой руки ViSiToR решил изучать AutoIt, ибо он крут. Разрешите несколько вопросов ньюба:
1. С помощью какого элемента Gui можно нарисовать информационую панель, куда скрипт будет выводить сообщения о том, чем он в данный момент занимается?

2. Можно попросить вас набросать пример создания мастера (wizard)? Т.е. 2-3 связанных между собой диалога, с кнопками "Назад" "Далее" "Отмена", чтоб при нажати Назад диалог отображал уже введеную в него инфу. Хочу посмотреть как грамотно это делать.

3. Как раскрыть переменную, заключенную в кавычки?
Например, мне нужно запустить консольную утилиту zip.exe и передать ей 2 параметра - имя архива (обязательно в переменной) и файл(ы) для добавления в архив

Код: $arch_name = "test"
Run("zip.exe $arch_name pop3recv.exe")

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.