![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый вечер прошу помощи.
Есть статичная таблица 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. |