Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Вниз

Почему List index out of bounds(-1) ?   Найти похожие ветки 

 
kyn66 ©   (2005-08-25 10:53) [0]

Доброго всем дня! Уважаемые мастера. На форме у меня лежит StringGrid (2 строки, 10 столюцов).Я написал проседуру, которая провепяет, если ячейка пустая, то присвоить один курсор, если нет - другой.

procedure TMainFrm.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
 C, R: Longint;
begin
 with (Sender as TStringGrid) do
  begin
    MouseToCell(X, Y, C, R);
    if Cells[C, R] <> "" then
     Cursor := ClearCursor
    else
     Cursor := crHandPoint;
  end;
end;

Все вроде работает. Однако, стоит мне нажать на кнопку мышки на первой ячейке и не отпуская ее провести до последней,
с выходом за пределы сетки, сразу вылетает САБЖ. Как лечиь? Спасибо.


 
Reindeer Moss Eater ©   (2005-08-25 10:56) [1]

Как лечиь? Спасибо.

Проверять на вхождение в диапазон разумеется.
Перед тем как используешь индекс.


 
kyn66 ©   (2005-08-25 10:59) [2]

Т.е.? Проверить, водит-ли C in (0-9) и R in (0-1) ?


 
stone ©   (2005-08-25 10:59) [3]


> Однако, стоит мне нажать на кнопку мышки на первой ячейке
> и не отпуская ее провести до последней,
> с выходом за пределы сетки, сразу вылетает САБЖ

Правильно, потому что по полученным X, Y уже нет ни одной ячейки. Соответственно в добавок к Cells[C, R] <> "" нужно проверять валидность C и R


 
Reindeer Moss Eater ©   (2005-08-25 11:05) [4]

Т.е.? Проверить, водит-ли C in (0-9) и R in (0-1) ?

Ну и при чем здесь 9 и 1?
У стринггрида свойства есть, говорящие сколько у него того и сего имеется.


 
han_malign ©   (2005-08-25 11:28) [5]

Если координата "за ячейками" таблицы, то по ней возвращается (-1,-1) -  и достаточно проверять что значение неотрицательно... Хотя в документации это не регламентируется - так что лучше, на всякий пожарный, проверять вхождение в диапазон по всем границам...
Grids.pas:
procedure TCustomDrawGrid.MouseToCell(X, Y: Integer; var ACol, ARow: Longint);
var
 Coord: TGridCoord;
begin
 Coord := MouseCoord(X, Y);
 ACol := Coord.X;
 ARow := Coord.Y;
end;
..........................
function TCustomGrid.MouseCoord(X, Y: Integer): TGridCoord;
var
 DrawInfo: TGridDrawInfo;
begin
 CalcDrawInfo(DrawInfo);
 Result := CalcCoordFromPoint(X, Y, DrawInfo);
 if Result.X < 0 then Result.Y := -1
 else if Result.Y < 0 then Result.X := -1;

end;
..........................
function TCustomGrid.CalcCoordFromPoint(X, Y: Integer;
 const DrawInfo: TGridDrawInfo): TGridCoord;
 function DoCalc(const AxisInfo: TGridAxisDrawInfo; N: Integer): Integer;
 var
   I, Start, Stop: Longint;
   Line: Integer;
 begin
   with AxisInfo do
   begin
     if N < FixedBoundary then
     begin
       Start := 0;
       Stop :=  FixedCellCount - 1;
       Line := 0;
     end
     else
     begin
       Start := FirstGridCell;
       Stop := GridCellCount - 1;
       Line := FixedBoundary;
     end;
     Result := -1;
     for I := Start to Stop do
     begin
       Inc(Line, GetExtent(I) + EffectiveLineWidth);
       if N < Line then
       begin
         Result := I;
         Exit;
       end;
     end;
   end;
 end;
 function DoCalcRightToLeft(const AxisInfo: TGridAxisDrawInfo; N: Integer): Integer;
..........................
begin
 if not UseRightToLeftAlignment then
   Result.X := DoCalc(DrawInfo.Horz, X)
 else
   Result.X := DoCalcRightToLeft(DrawInfo.Horz, X);
 Result.Y := DoCalc(DrawInfo.Vert, Y);
end;

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


 
kyn66 ©   (2005-08-25 12:55) [6]

>> Reindeer Moss Eater
А вот как раз и при чем, [2] - помогло.
Может это элементарный случай , у меня конкретное кол-во строк и столбцов и я их знаю. Ошибка ликвидирована. Всем спасибо.



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

Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
1-1125085182
Василий
2005-08-26 23:39
2005.09.18
Компоненты


6-1117271373
var
2005-05-28 13:09
2005.09.18
Филтр картинок в браузере


14-1125072337
ROCKER***
2005-08-26 20:05
2005.09.18
Реинкарнация


1-1124787869
B-boy-Dimo-N
2005-08-23 13:04
2005.09.18
конфликт между JCL+JVCL 2.10 и QReport 4


5-1099298516
akvilon
2004-11-01 11:41
2005.09.18
Как реализован редактор свойства DataSource в TDBEdit?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский