Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2014, 20:31   #1
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
Печаль Получить состояние чужого ScrollBar

Приветствую, есть необходимость считывать положение ползунков ScrollBar с чужого окна и соответствующим образом перемещать ползунки в моей форме.

На данный момент вижу решение таким образом:
(ScrollBar горизонтальный)

По hendel и ClassName я нахожу нужный мне ScrollBar в чужом окне.

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

Беру цвет пикселя (эталонный цвет) фона ScrollBar и в цикле с верху в низ прогоняю по полученной высоте на равенство цвета с эталонным пикселем.

Если на протяжение всего этого пути проверки на равенство в цвете появляется не соответствие в цвете, то считаем что это и есть наш ползунок и в итоге у нас есть значение в пикселях от верха до крайнего с верху пикселя ползунка. (Допустим это будет 20px).

На нашей форме, так как у нас ScrollBar имеет такие же размеры и внешний вид, мы проделываем все тоже самое с нашим ScrollBar на поиск ползунка и ... ну тут наверное эмуляция клика мыши.

Помогите, то что я описал вполне осуществимо, но может быть есть иной способ, не через такие костыли.
N0iD вне форума Ответить с цитированием
Старый 02.06.2014, 20:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Беру цвет пикселя (эталонный цвет) фона ScrollBar
Дай угадаю - скролл не стандартный. Либо в игре либо доправленный скинами, и сообщения винды как таковой не отрабатывает. Так?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2014, 20:56   #3
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
По умолчанию

Нет, не в игре но со скином. Первоначальный осмотр — вроде как обычный ScrollBar.

На какие сообщения его проверить? Что ему послать?

Да и цвет пикселя эталонного предложил лишь как способ от чего отталкиваться что бы узнать положение бегунка.

Последний раз редактировалось N0iD; 02.06.2014 в 21:06.
N0iD вне форума Ответить с цитированием
Старый 02.06.2014, 21:21   #4
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
По умолчанию

Stilet - спасибо, натолкнули на мысль.

function GetScrollPos(Wnd: HWnd; Bar:Integer): Integer;
Параметры:
Wnd: Окно, содержащее полосу прокрутки.
Bar: Одна из констант sb_Ctl, sb_Horz, sb_Vert.
Возвращаемое значение: Текущее положение указателя полосы прокрутки.
Считывает минимальное и максимальное положения указателя прокрутки.

function GetScrollRange(Wnd: HWnd; Bar:Integer, var MinPos, MaxPos: Integer);
Параметры:
Wnd: Окно, содержащее полосу прокрутки.
Bar: Одна из констант sb_Ctl, sb_Horz, sb_Vert.
MinPos: Целое для приема минимального положения.
MaxPos: Целое для приема максимального положения.

Буду пробовать.
N0iD вне форума Ответить с цитированием
Старый 02.06.2014, 21:26   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Буду пробовать.
Угу. Они родимые.
Главное сам хендл скролла найти. Если не ошибаюсь бывает и так что месседжи скролла на самом деле отрабатывает его родительское окно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2014, 21:45   #6
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
По умолчанию

Stilet - спасибо еще раз, все получилось.
N0iD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получить картинку чужого окна (типа PrintScreen) Smogg Win Api 2 04.03.2014 14:08
Получить данные с ListView чужого приложения BarsDG Общие вопросы Delphi 2 08.08.2012 13:59
Получить дескрипторы открытых сокетов чужого приложения GRA1N Работа с сетью в Delphi 1 03.11.2011 09:21
Получить содержимое чужого окна, возможно? jihot Общие вопросы Delphi 13 23.07.2011 16:39
Получить переменную из чужого приложения Djanius Общие вопросы Delphi 6 31.05.2011 22:42