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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2011, 18:42   #1
werrey
Форумчанин
 
Регистрация: 01.02.2011
Сообщений: 105
По умолчанию

Здравствуйте.
Подскажите пожалуйста, как сделать, чтобы при наведённом курсоре на
Listbox, при прокрутки колесика мышки, перескакивало выделение Items либо вверх, либо вниз соответственно?

Последний раз редактировалось mihali4; 17.10.2011 в 19:34.
werrey вне форума Ответить с цитированием
Старый 17.10.2011, 19:33   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Как прокрутить строки у любого визуального компонента, содержащего списки, например ListBox...
Код:
var
M: TWMScroll;
// тут что-то ваше
begin
// и тут что-то ваше
M.Msg := WM_VSCROLL;
M.ScrollCode := SB_BOTTOM;
// и тут что-то ваше
// какой-то цикл
ListBox1.Items.Add(Name);
ListBox1.Dispatch(M);
Application.ProcessMessages;
// конец цикла
mihali4 вне форума Ответить с цитированием
Старый 17.10.2011, 20:48   #3
werrey
Форумчанин
 
Регистрация: 01.02.2011
Сообщений: 105
По умолчанию

Спасибо, а что за "какой-то цикл", и как это всё применить, где это прописывать?
Пробовал в свойствах формы (FormMouseWheel) Ваш код, но не правильно работает.
Если не затруднит,можно чуть по подробнее.

Странно, около года на форуме, а до сих пор не знаете, что такое оверквотинг...
Почитайте правила раздела, там все описано.

Последний раз редактировалось mihali4; 17.10.2011 в 22:53.
werrey вне форума Ответить с цитированием
Старый 17.10.2011, 23:01   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от werrey Посмотреть сообщение
Пробовал в свойствах формы (FormMouseWheel) Ваш код, но не правильно работает.
А я исключительно редко даю ответы, которые можно использовать с помощью CTRL-C, CTRL-V. Даю возможность, так сказать, пошевелить мозгами самостоятельно.
Алгоритм "шевеления мозгами" в данном конкретном случае :
- изучаем в хэлпе параметры сообщения WM_VSCROLL (WIN32.HLP)
- обращаем внимание на наиболее подходящие для нас SB_PAGEUP и SB_PAGEDOWN
- на основе приведенного выше кода создаем два обработчика - FormMouseWheelDown и FormMouseWheelUp (отличие у них будет как раз в этих параметрах)
- выкидываем одну явно лишнюю строку
- наслаждаемся результатом...
mihali4 вне форума Ответить с цитированием
Старый 18.10.2011, 08:21   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

У листбокса(да и вроде у многих скроллабл компонентов) интересная особенность - без фокуса на них сообщение о скролле (при обычном указании обработчика Onscrollup/down для них) до них не доходит, форма его поглощает, чтобы его сделать можно использовать такую вот прокрутку листбокса
Код:
procedure TmainForm.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
var actrl: tcontrol ;
begin
actrl := ControlAtPos(ClientToScreen(MousePos), True, True);
if (actrl <> nil) and (actrl is Tlistbox) then  
    begin
    if actrl.ItemIndex <> 0
      then actrl.ItemIndex := actrl.ItemIndex - 1;
    Handled := false;
    end;
end;
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить все значения Items в ListBox? quarty Общие вопросы Delphi 4 05.05.2020 21:49
Прокрутка таблицы колесом мышки Сергей089 БД в Delphi 9 04.08.2018 13:15
Items в listbox Афанасий[vedma] Компоненты Delphi 12 14.07.2011 16:20
в ListBox Items менял текст quarty Общие вопросы Delphi 4 14.10.2010 21:07
поочередный клик на все items в listbox CraZZy RabbIt Общие вопросы Delphi 6 11.03.2009 15:13