Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.15;
Скачать: CL | DM;

Вниз

прокручивание таблицы StringGrid колесиком   Найти похожие ветки 

 
Dmitry_177   (2007-05-14 20:10) [0]

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


 
Loginov Dmitry ©   (2007-05-14 20:46) [1]

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


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


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


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


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


 
{RASkov} ©   (2007-05-14 22:32) [3]

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


 
Loginov Dmitry ©   (2007-05-14 22:50) [4]

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


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


 
{RASkov} ©   (2007-05-14 23:01) [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;


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

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

Handled:=True;

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


 
{RASkov} ©   (2007-05-14 23:30) [7]

> Только я не пойму зачем нужен
>
> 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 позицию.... вообщем объяснил криво пробуй и сам все поймешь.


 
Loginov Dmitry ©   (2007-05-14 23:41) [8]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.07.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
3-1176552454
Чародей
2007-04-14 16:07
2007.07.15
Связи


2-1182427820
leonidus
2007-06-21 16:10
2007.07.15
Странное поведение TRichEdit


2-1182348433
deras
2007-06-20 18:07
2007.07.15
В какое поле записать текущую дату и время?:


2-1182338459
авыф
2007-06-20 15:21
2007.07.15
сетевая папка


15-1181638216
TUser
2007-06-12 12:50
2007.07.15
Чудище