powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / EhGrid
3 сообщений из 3, страница 1 из 1
EhGrid
    #32211108
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите, юзаю свою стандартную процедуру по фильтрации. На n-ной форме после ее выполнения такие баги. Закрыл открыл квери, если нажимаю мышкой на гриде - вылетает ошибка недопустимая закладка. Если двигать стрелками - все ок. Причем странно, но если фильтрую по одному другому полю - то не вылетает. Не понимаю как зависит.

Ошибка вылетает в

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
{ TDBGridEhSelectionRect }

function TDBGridEhSelectionRect.BoxRect(ALeft: Integer; ATop: TBookmarkStr;
  ARight: Integer; ABottom: TBookmarkStr): TRect;
var OldRec: Integer;
  TopGridBM, BottomGridBM: TBookmarkStr;
  TopRow, BottomRow: Integer;
  SwapCol: Integer;
  SwapBM: TBookmarkStr;

  function FindRecNumByBookmark(BM: TBookmarkStr): Integer;
  var i: Integer;
  begin
    Result := - 1 ;
    for i :=  0  to FGrid.FDataLink.RecordCount -  1  do
    begin
      FGrid.FDataLink.ActiveRecord := i;
      with FGrid.DataSource.DataSet do
        if CompareBookmarks(Pointer(BM), Pointer(Bookmark)) =  0  then
        begin
          Result := i;
          Break;
        end;
    end;
  end;
begin
  if ALeft > ARight then
  begin
    SwapCol := ALeft;
    ALeft := ARight;
    ARight := SwapCol;
  end;
  if FGrid.DataSource.DataSet.CompareBookmarks(Pointer(ATop), Pointer(ABottom)) >  0  then
  begin
    SwapBM := ATop;
    ATop := ABottom;
    ABottom := SwapBM;
  end;
  OldRec := FGrid.FDataLink.ActiveRecord;
  try
    FGrid.FDataLink.ActiveRecord :=  0 ;
    TopGridBM := FGrid.DataSource.DataSet.Bookmark;
    if FGrid.DataSource.DataSet.CompareBookmarks(Pointer(ATop), Pointer(TopGridBM)) <  0  then
      TopRow :=  0 
    else begin
      TopRow := FindRecNumByBookmark(ATop);
    end;
    if TopRow = - 1  then TopRow := FGrid.FDataLink.RecordCount;
    TopRow := TopRow + FGrid.TopDataOffset;

    FGrid.FDataLink.ActiveRecord := FGrid.FDataLink.RecordCount -  1 ;
    BottomGridBM := FGrid.DataSource.DataSet.Bookmark;

    if FGrid.DataSource.DataSet.CompareBookmarks(Pointer(ABottom), Pointer(BottomGridBM)) >  0  then
      BottomRow := FGrid.VisibleDataRowCount
    else begin
      BottomRow := FindRecNumByBookmark(ABottom);
    end;
    BottomRow := BottomRow + FGrid.TopDataOffset; // -  1 ;
  finally
    FGrid.FDataLink.ActiveRecord := OldRec;
  end;

  Result := FGrid.BoxRect(FGrid.DataToRawColumn(ALeft), TopRow,
    FGrid.DataToRawColumn(ARight), BottomRow);
//
end;

      СЫРЕЦ EHLiba




в строке
Код: plaintext
    if FGrid.DataSource.DataSet.CompareBookmarks(Pointer(ATop), Pointer(TopGridBM)) <  0  then
...
Рейтинг: 0 / 0
EhGrid
    #32211166
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри. но на той строке оказывается полсе ексепшиона, а вылетает на
предполседней строке

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
              begin
                if ssShift in Shift then
                  if Selection.SelectionType = gstRectangle then
                    Selection.Rect.Select(Cell.X - IndicatorOffset, DataSource.DataSet.Bookmark, True)
                  else
                  begin
                    Selection.Rect.Select(OldCol - IndicatorOffset, OldBM, False);
                    Selection.Rect.Select(Cell.X - IndicatorOffset, DataSource.DataSet.Bookmark, True);
                  end
                else
                  Selection.Rect.Select(Cell.X - IndicatorOffset, DataSource.DataSet.Bookmark, False);
                FDBGridEhState := dgsRectSelecting;
              end;


Функции procedure TCustomDBGridEh.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
...
Рейтинг: 0 / 0
EhGrid
    #32211220
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю как, но рассосалось. С обычным гридом не было проблем, а потом и с этим перестало
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / EhGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]