Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить наличие 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]

можно сделать выскакивающий мессадждиалог, с вопросом "Извините пожалуйста, Вы не подскажите, скролл есть?" и вариантами ответов "да, "нет", "не скажу"


Наверх

Титульная страница Поиск, карта сайта Написать письмо