Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.30;
Скачать: CL | DM;

Вниз

Проблема с 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
1-97237
Андр
2002-05-20 11:52
2002.05.30
Компоновка не в один exe файл


14-97385
SPeller
2002-04-18 08:44
2002.05.30
Проблема с Виндой


3-97123
Sewix
2002-05-02 09:01
2002.05.30
Как узнать в DBGrid значение конкретной ячейки


1-97328
relaxoid
2002-05-19 18:40
2002.05.30
Народ, как добывать кавычки к строке ( )?


1-97265
Blacki
2002-05-17 22:07
2002.05.30
Изменение языка