Что нового

Как получить числовое значение из TProgressBar ?

MEXAH

What if?
Сообщения
20
Репутация
1
Решил сделать костыли для програмки ABoo, которая иногда выдаёт ошибку связанную с словами конфликтующими со словарём. При работе программы в ней есть полоска прогресса (Class:TProgressBar Instance:1) в которой показан текущий прогресс обработки фрагмента текста. Сам фрагмент кстати тоже в окошке (Class:TMemo Instance:2), в момент ошибки полоска замирает.
Так вот, смысл в том чтобы выяснить точное числовое значение полоски прогресса, и потом применить найденный процент к фрагменту текста с тем чтобы найти примерное расположение строки с ошибкой в словаре. А далее уже вырезать соответствующий кусок текста с ошибкой и по нему быстро ошибку вычислить и исправить.
Раньше приходилось разбивать фрагмент на все более мелкие кусочки чтобы найти ошибку.
GuiCtrlRead выдает 0

Собственно как можно получить проценты из полоски прогресса?
5594986d8fa5f92385b919781986d640.jpg


Нашел некое промежуточное решение не без недостатков.
Код:
$h_progress = ControlGetHandle("фрагмент с косяком.txt - ABoo","","TProgressBar1")
$ret = DllCall("user32.dll","int","SendMessage","hwnd",$h_progress,"int",$PBM_GETPOS)
_ArrayDisplay($ret)


45b70d7af9aea5091194a5d3b7986740.jpg

Выяснилось что нужное значение (выделено красным) на самом деле не проценты а некое число предельный размер которого плавает в диапазоне от 100 до 400 и зависит от размера обрабатываемого в данный момент фрагмента текста. Соответственно для вычисления процента нужно выяснить предельный размер этого числа, и вот этого способа я не нашел увы.

Код:
$h_progress = ControlGetHandle($aPath3[1]&".txt - ABoo","","TProgressBar1")
$iRange = _SendMessage($h_progress, $PBM_GETRANGE, 0, 0, 0, "long", "long", "long")

Решение найдено!
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,714
Код:
_GUICtrlSlider_GetPos() / (_GUICtrlSlider_GetRangeMax() - _GUICtrlSlider_GetRangeMin()) * 100
 
Автор
MEXAH

MEXAH

What if?
Сообщения
20
Репутация
1
Yashied Спасибо, я всетаки дошел своим умом. Кстати разве _GUICtrl... не применимо только к создаваемым с помощью скрипта элементам?

Код:
$h_progress = ControlGetHandle("фрагмент с косяком.txt - ABoo","","TProgressBar1")
$iRange = _SendMessage($h_progress, $PBM_GETRANGE, 0, 0, 0, "long", "long", "long")
$ret = DllCall("user32.dll","int","SendMessage","hwnd",$h_progress,"int",$PBM_GETPOS)
tooltip($ret[0] / ( $iRange / 100) & "%")
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,714
MEXAH сказал(а):
Кстати разве _GUICtrl... не применимо только к создаваемым с помощью скрипта элементам?[/autoit]
Нет.
 
Верх