Форум: "Базы";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];
ВнизПроблема с DBGrid ( Прыгает курсор ) Найти похожие ветки
← →
cdaDmitriy (2002-05-07 17:38) [0]При выполненнии кода тестовый пример
Var FirstEnt:TBookMark;
begin
TabProc.DisableControls;
FirstEnt:=TabProc.GetBookMark;
TabProc.EnableControls;
DBGrid1.SetFocus;
TabProc.GotoBookmark(FirstEnt);
TabProc.FreeBookmark(FirstEnt);
end;
Если ( Пример условия )
DBGrid1.ROW > ( DBGrid1.VisibleROW / 2 ) и TabProc.recNO=1 ,, N
N > DBGrid1.VisibleROW
Курсор прыгает на середину DBGrid1.ROW=(DBGrid1.VisibleROW / 2 )
КТО НИБУДЬ ЗНАЕТ КАК ЭТО ЛЕЧИТЬ
← →
cdaDmitriy (2002-05-07 18:26) [1]???????
← →
cdaDmitriy (2002-05-07 20:30) [2]????
← →
cdaDmitriy (2002-05-08 08:33) [3]НУ хоть кто нибудь может посмотреть
← →
deleon (2002-05-08 08:47) [4]Так оно и есть...смирись, сын мой :)))
← →
cdaDmitriy (2002-05-08 08:57) [5]НЕ хочу с этим мириться скролинг не коректный
НУЖНО ИСПРАВЛЯТЬ ....
← →
Lusha (2002-05-08 09:04) [6]>cdaDmitriy © (07.05.02 17:38)
Вот так...
procedure ScrollActiveToRow(Grid : TDBGrid; ARow : Integer);
var FTitleOffset, SDistance : Integer;
NewRect : TRect;
RowHeight : Integer;
NewRow : Integer;
begin
with TMyDBGrid(Grid) do
begin
NewRow := Row;
FTitleOffset := 0;
if dgTitles in Options then inc(FTitleOffset);
if ARow = NewRow then Exit;
with DataLink, DataSet do
try
BeginUpdate;
Scroll(NewRow - ARow);
if (NewRow - ARow) < 0 then ActiveRecord := 0
else ActiveRecord := VisibleRowCount - 1;
SDistance := MoveBy(NewRow - ARow);
NewRow := NewRow - SDistance;
MoveBy(ARow - ActiveRecord - FTitleOffset);
RowHeight := DefaultRowHeight;
if dgRowLines in Options then Inc(RowHeight, GridLineWidth);
NewRect := BoxRect(0, FTitleOffset, ColCount - 1, 1000);
ScrollWindowEx(Handle, 0, -RowHeight * SDistance, @NewRect, @NewRect, 0, nil, SW_Invalidate);
MoveColRow(Col, NewRow, False, False);
finally
EndUpdate;
end;
end;
end;
Пример вызова...
var BM : TBookMarkStr;
OldRow : Integer;
begin
OldRow := TMyDBGrid(DBGrid1).Row;
BM := Query1.Bookmark;
Query1.Close;
Query1.Open;
Query1.BookMark := BM;
ScrollActiveToRow(DBGrid1, OldRow);
end;
P.S. Необходимо определить тип TMyDBGrid = class(TDBGrid)
← →
cdaDmitriy (2002-05-08 12:14) [7]OK Стало намного лучше начало работать как надо
но есть еще проблемы : Если удаленная запись попадает
в видимую часть DBGrid.
P.S. И Я не Работаю с Query1 а с TTable но это не меняет суть
← →
Lusha (2002-05-08 12:22) [8]>cdaDmitriy © (08.05.02 12:14)
Если удаленная запись попадает в видимую часть DBGrid.
Поподробнее пожалуйста... Что и куда не попадает? Что такое удаленная запись в Вашем понимании?
...Я не Работаю с Query1 а с TTable...
Не расстраивайтесь... Все Мы не без недостатков... :)
← →
cdaDmitriy (2002-05-08 12:54) [9]> Lusha © А ВЫ юмарист
(...Я не Работаю с Query1 а с TTable...
Не расстраивайтесь... Все Мы не без недостатков... :)
но это лирика )
ДЕЛО :
Курсор на ROW=3 RecNo=3 при очередном обнавлении базы
записи = 2 ( физически ) нет и тогда Курсор снова прыгает
я пытался искать предыдущее положение ( по индексу ) и изменять RecNo но пока не получилось....
← →
cdaDmitriy (2002-05-08 15:12) [10]>Lusha ©
← →
Lusha (2002-05-08 15:22) [11]>cdaDmitriy © (08.05.02 12:54)
Ну, а Вы чего ожидаете? Что по Вашему должно происходить в такой ситуации? (я имею в виду визуально)...
← →
cdaDmitriy (2002-05-08 15:54) [12]Курсор должен остаться на тойже записи ( по индексу ) т,е,
в педыдущем примере Курсор должен стать на ROW=2 RecNo=2
но это Я уже исправил
другое : если запись удаляется после текущей но видимой на экране
Например
ROW=15 VisibleRowCount=20(+title) RecNo=30 RecordCount=35
и удаляем RecNo=33
То результат должен быть
ROW=16 VisibleRowCount=20(+title) RecNo=30 RecordCount=34
← →
cdaDmitriy (2002-05-08 18:23) [13]Я немножко исправил функцию
procedure ScrollActiveToRow(Grid : TRxDBGrid; ARow : Integer);
var FTitleOffset, SDistance,SDis,RowHeight,NewRow : Integer; NewRect : TRect;
begin
with TMyDBGrid(Grid) do begin
NewRow := Row; FTitleOffset := 0; if dgTitles in Options then inc(FTitleOffset); if ARow = NewRow then Exit;
with DataLink, DataSet do
try
BeginUpdate;
Scroll(NewRow - ARow); // TMyDBGrid(Grid)
if (NewRow - ARow) < 0 then ActiveRecord := 0 else ActiveRecord := VisibleRowCount - 1;
SDistance := MoveBy(NewRow - ARow);
SDis:= NewRow - ARow - SDistance;/
NewRow := NewRow - SDistance;
MoveBy(ARow - ActiveRecord - FTitleOffset+SDis);/
RowHeight := DefaultRowHeight;
if dgRowLines in Options then Inc(RowHeight, GridLineWidth);
NewRect := BoxRect(0, FTitleOffset, ColCount - 1, 1000);
ScrollWindowEx(Handle, 0, -RowHeight * SDistance, @NewRect, @NewRect, 0, nil, SW_Invalidate);
MoveColRow(Col, NewRow, False, False);
finally
EndUpdate;
end;
end;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.02 c