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

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

прокручивание таблицы StringGrid колесиком [D7, WinXP]


Dmitry_177 ©   (2007-05-14 20:10:00) 

Как можно сделать так чтобы при крокрутке колесика мышки прокручивалась сама таблица StringGrid-а, т.е. сам Scroll прокручивался, а не строка выделялась следующая или предшедствующая выделенной? Это когда выделяется полностью вся строка, т.е. goRowSelect = true;


Dmitry_177   (2007-05-15 00:37:00) [1]

спасибо большое =) С Handled:=True; даже прикольней =)


Loginov Dmitry   (2007-05-14 23:41:00) [2]

Я че-то как всегда про DBGrid подумал. Сорри.


{RASkov}   (2007-05-14 23:30:00) [3]

> Только я не пойму зачем нужен
>
> Handled:=True;

А ты попробуй с ним и без него.... разницу увидешь, точно. ;)
Handled is whether or the control handled the event. (Set handled to false to have the object’s parent handle the event.)
Т.е. если False то сообщение пойдет дальше и StringGrid переместит/сменит Row позицию.... вообщем объяснил криво пробуй и сам все поймешь.


Dmitry_177   (2007-05-14 23:25:00) [4]

Работает =)))) Спасибо =)))
Только я не пойму зачем нужен

Handled:=True;

и без него вроде нормально работает...


{RASkov}   (2007-05-14 23:01:00) [5]

> [4] Loginov Dmitry ©   (14.05.07 22:50)
> Дак требуется ж прокрутка, а не нажатие :)

> Как можно сделать так чтобы при крокрутке колесика мышки
> прокручивалась сама таблица StringGrid-а, т.е. сам Scroll
> прокручивался, а не строка выделялась следующая или предшедствующая
> выделенной

Я что-то не пойму....

> [2] Dmitry_177   (14.05.07 21:36)

На всяк еще вот вариант, помоему как раз то что надо:
procedure TForm1.StringGrid1MouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
StringGrid1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
Handled:=True; // Это же и на OnMouseWheelUp
end;


Loginov Dmitry   (2007-05-14 22:50:00) [6]

> Попробуй так:
> на OnMouseWheelDown:
> StringGrid.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
> на OnMouseWheelUp:
> StringGrid.Perform(WM_VSCROLL, SB_LINEUP, 0);


Дак требуется ж прокрутка, а не нажатие :)


{RASkov}   (2007-05-14 22:32:00) [7]

Попробуй так:
на OnMouseWheelDown:
StringGrid.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
на OnMouseWheelUp:
StringGrid.Perform(WM_VSCROLL, SB_LINEUP, 0);


Dmitry_177   (2007-05-14 21:36:00) [8]


procedure TForm1.StringGrid1MouseWheelDown(Sender: TObject; Shift: TShiftState;
 MousePos: TPoint; var Handled: Boolean);
begin
 StringGrid1.Perform(WM_VSCROLL, SB_PAGEDOWN, 0);
end;


Есть такой cпособ, но только есть один небольшой глюк.. если крутить например вниз, то та строка которая была выделена(например самая нижняя) сразу оказывается в самом верху и то что ниже ее потом нормально прокручивается.. так же и если прокручивать вверх.. что-то как-то мне это не очень нравится..


Loginov Dmitry   (2007-05-14 20:46:00) [9]

> Это когда выделяется полностью вся строка, т.е. goRowSelect
> = true;


goRowSelect тут непричем. Видимо когда делали Delphi7, ее разработчики не подозревали, что бывают мыши с колесиками. Ну а решить проблему не сложно. Один из вариантов - в обработчике Application.OnMessage обработать сообщения о скролле мышки (насколько помню - WM_MOUSEWHEEL). В последних версиях Дельфи эту ошибку исправили.


Наверх

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