|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
StringGrid и прокрутка колесиком мыши
Добрый вечер прошу помощи.
Есть статичная таблица 14х14. Пользователю запрещено по ней кликать. Но если крутить колесико над Гридом, то через некоторое время вылазит ошибка Grid index out of range. Как это побороть? вылезает только при прокрутки. Код:
object SGBB: TStringGrid AlignWithMargins = True Left = 5 Top = 64 Width = 382 Height = 269 Margins.Left = 1 Margins.Top = 1 Margins.Right = 1 Margins.Bottom = 1 BiDiMode = bdRightToLeftReadingOnly Color = clWhite ColCount = 14 DefaultColWidth = 26 DefaultRowHeight = 18 DrawingStyle = gdsGradient RowCount = 14 Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -9 Font.Name = 'Tahoma' Font.Style = [fsBold] GradientEndColor = clWhite Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine] ParentBiDiMode = False ParentFont = False TabOrder = 0 ColWidths = ( 26 26 26 27 26 26 26 26 26 26 26 26 26 26) end Код:
procedure TMF.OnSelectCell(Sender: TObject;ACol,ARow:Integer; var CanSelect:Boolean); begin CanSelect:=False; end; Код:
//r:TGridRect; r.Left:=-1; r.Top:=-1; r.Bottom:=-1; r.Right:=-1; SGBB.Selection:=r; |
#2
|
||||
|
||||
Код:
type TStringGrid = class(Grids.TStringGrid) protected procedure WMMOUSEWHEEL(var Msg: TMessage); message WM_MOUSEWHEEL; end; procedure TStringGrid.WMMOUSEWHEEL(var Msg: TMessage); begin Msg.Result:=0; end; Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
nixon232 (29.01.2014)
|
#3
|
|||
|
|||
Цитата:
Код:
TStringGrid = class(Vcl.Grids.TStringGrid) protected procedure WMMOUSEWHEEL(var Msg: TMessage); message WM_MOUSEWHEEL; end; Код:
procedure PaintHand( S:TStringGrid ); |
#4
|
||||
|
||||
Цитата:
Тот код который написал NumLock нужно вставить в новый модуль (unit) и потом этот модуль добавить через uses в нужные модули (только это нужно сделать после Grids). |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
nixon232 (29.01.2014)
|
#5
|
|||
|
|||
Большое спасибо за помощь, все как надо работает.
|
#6
|
|||
|
|||
Поторопился я радоваться. Выдает туже ошибку в этом обработчике
Код:
procedure TPForm.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); const SC_DragMove = $F012; begin ReleaseCapture; Perform(WM_SYSCOMMAND, SC_DragMove, 0); end; Код:
procedure TPForm.WMSysCommand(var Msg: TWMSysCommand); begin inherited; if (Msg.CmdType and $FFF0) = SC_MOVE then begin FForm.Left:=FForm.Left+(MF.Left-mX); FForm.Top:=FForm.Top+(MF.Top-mY); PForm.Left:=PForm.Left+(MF.Left-mX); PForm.Top:=PForm.Top+(MF.Top-mY); mX:=MF.Left; mY:=MF.Top; end; end; Последний раз редактировалось nixon232, 29.01.2014 в 20:54. |
#7
|
||||
|
||||
Цитата:
Т.е. тот новый модуль который ты создал расширится до примерно такого варианта: Код:
unit HackGridsUnit; interface uses Windows, Messages, Grids; type TStringGrid = class(Grids.TStringGrid) protected procedure WMMOUSEWHEEL(var Msg: TMessage); message WM_MOUSEWHEEL; procedure WMNCHITTEST(var Msg: TMessage); message WM_NCHITTEST; end; implementation procedure TStringGrid.WMMOUSEWHEEL(var Msg: TMessage); begin Msg.Result := 0; end; procedure TStringGrid.WMNCHITTEST(var Msg: TMessage); begin Msg.Result := HTTRANSPARENT; end; end. |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
nixon232 (29.01.2014)
|
#8
|
|||
|
|||
То, что и нужно, но работает на 2х из 3х гридах, хотя в тоже время колесико не крутиться на 3х, как и должно. Теряюсь в дагадках. Спасибо всем еще раз.
|
#9
|
|||
|
|||
удалите пост, пожалуйста. форум что-то виснет.
Последний раз редактировалось nixon232, 29.01.2014 в 23:44. |
#10
|
||||
|
||||
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
nixon232 (30.01.2014)
|
#11
|
|||
|
|||
Цитата:
А вообще, было бы интересно узнать, что все-таки вызывает в моем случае выход за индекс грида? Если с колесиком еще можно допустить, что идет пррокрутка, а grid.selection у меня -1, то что вызывает ошибку в обработчике OnMouseDown? Последний раз редактировалось nixon232, 30.01.2014 в 11:23. |