Конференция "WinAPI" » Как определить наличие ScrollBox у компонента
 
  • bss (10.06.10 16:09) [0]
    Нужно определить - есть ли скрол бокс у компонента или нет. Конкретнее - компонент 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 есть всегда...

    Что еще можно сделать?
  • KilkennyCat © (10.06.10 16:46) [1]
    можно сделать выскакивающий мессадждиалог, с вопросом "Извините пожалуйста, Вы не подскажите, скролл есть?" и вариантами ответов "да, "нет", "не скажу"
  • bss (10.06.10 17:16) [2]
    лучше тогда "Посчитайте на калькуляторе нужное вам в итоге число и введите его в поле ввода" ))
  • Игорь Шевченко © (10.06.10 17:27) [3]
    (GetWindowLog(hwnd, GWL_STYLE) and WS_VSCROLL) <> 0,
    (GetWindowLog(hwnd, GWL_STYLE) and WS_HSCROLL) <> 0
  • Игорь Шевченко © (10.06.10 17:28) [4]
    так ScrollBox или ScrollBar ?
  • bss (10.06.10 18:04) [5]
    конструкция:

    (GetWindowLong(ElTree.Handle, GWL_STYLE) and WS_VSCROLL) <> 0

    всегда дает true, даже когда скрола не видно.


    > так ScrollBox или ScrollBar ?

    я не очень в этом разбираюсь. У меня:

    1) есть компонент TElTree
    2) я пробовал GetWindowLong - результат выше
    3) пробовал GetScrollBarInfo как показано в топике.
  • Игорь Шевченко © (10.06.10 18:44) [6]
    bss   (10.06.10 18:04) [5]

    Я не знаю, что такое ELTree. Могу посоветовать использовать Spy++ для просмотра структуры окон и их стилей у нужного компонента.

    Spy++ искать в интернете.

    Стандартный неклиентский скроллбар определяется именно тем способом, который описан в [3], нестандартные или клиентские не определяются вовсе.
  • bss (10.06.10 19:01) [7]

    > Могу посоветовать использовать Spy++

    я там ничего не понимаю в нем. Вот картинка: http://s55.radikal.ru/i149/1006/c5/a78033e07cca.jpg

    TfrmFieldsEditor - это форма, на которой лежит компонент TElTree.
  • Игорь Шевченко © (10.06.10 20:07) [8]

    >  Вот картинка


    судя по картинке, там свой, а не стандартный скорллбал

    тогда ищи окна класса TElScrollbar через FindWindowEx
  • bss (10.06.10 22:01) [9]
    попробую... Хотя картинка сделана в тот момент, когда скролбаров не было, видимо, имеет смысл проверять свойство visible окна как-то...
 
Конференция "WinAPI" » Как определить наличие ScrollBox у компонента
Есть новые Нет новых   [134431   +11][b:0][p:0.001]