![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить наличие ScrollBox у компонента
bss © (2010-06-10 16:09:00)Нужно определить - есть ли скрол бокс у компонента или нет. Конкретнее - компонент TElTree, может кто знает, у него есть Handle свойство.
Код аля:
w := GetWindowLong(ElTree1.Handle, GW_STYLE);
if (w and WS_HSCROLL) = WS_HSCROL then ...
срабатывает всегда, хотя скрола визуально не видно по крайней мере.
Еще один вариант пробовал:
GetScrollBarInfo(ElTree.Handle, OBJID_VSCROLL, sbi) ...
В Sbi.rgstate[0] проверяю флаг STATE_SYSTEM_INVISIBLE - его никогда нету.
А, допустим, флаг STATE_SYSTEM_OFFSCREEN есть всегда...
Что еще можно сделать?
bss (2010-06-10 22:01:00) [1]попробую... Хотя картинка сделана в тот момент, когда скролбаров не было, видимо, имеет смысл проверять свойство visible окна как-то...
Игорь Шевченко (2010-06-10 20:07:00) [2]
> Вот картинка
судя по картинке, там свой, а не стандартный скорллбал
тогда ищи окна класса TElScrollbar через FindWindowEx
bss (2010-06-10 19:01:00) [3]
> Могу посоветовать использовать Spy++
я там ничего не понимаю в нем. Вот картинка: http://s55.radikal.ru/i149/1006/c5/a78033e07cca.jpg
TfrmFieldsEditor - это форма, на которой лежит компонент TElTree.
Игорь Шевченко (2010-06-10 18:44:00) [4]bss (10.06.10 18:04) [5]
Я не знаю, что такое ELTree. Могу посоветовать использовать Spy++ для просмотра структуры окон и их стилей у нужного компонента.
Spy++ искать в интернете.
Стандартный неклиентский скроллбар определяется именно тем способом, который описан в [3], нестандартные или клиентские не определяются вовсе.
bss (2010-06-10 18:04:00) [5]конструкция:
(GetWindowLong(ElTree.Handle, GWL_STYLE) and WS_VSCROLL) <> 0
всегда дает true, даже когда скрола не видно.
> так ScrollBox или ScrollBar ?
я не очень в этом разбираюсь. У меня:
1) есть компонент TElTree
2) я пробовал GetWindowLong - результат выше
3) пробовал GetScrollBarInfo как показано в топике.
Игорь Шевченко (2010-06-10 17:28:00) [6]так ScrollBox или ScrollBar ?
Игорь Шевченко (2010-06-10 17:27:00) [7](GetWindowLog(hwnd, GWL_STYLE) and WS_VSCROLL) <> 0,
(GetWindowLog(hwnd, GWL_STYLE) and WS_HSCROLL) <> 0
bss (2010-06-10 17:16:00) [8]лучше тогда "Посчитайте на калькуляторе нужное вам в итоге число и введите его в поле ввода" ))
KilkennyCat (2010-06-10 16:46:00) [9]можно сделать выскакивающий мессадждиалог, с вопросом "Извините пожалуйста, Вы не подскажите, скролл есть?" и вариантами ответов "да, "нет", "не скажу"