Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-97311
ETeRNaL
2002-05-19 07:59
2002.05.30
Coolbar


14-97392
Aaqaqa
2002-04-21 19:56
2002.05.30
А что такое


1-97257
asdf
2002-05-21 08:19
2002.05.30
Закрытие формы


1-97258
antistatic
2002-05-21 07:54
2002.05.30
Проблемы с String и PChar


14-97386
Dzmitry
2002-04-19 11:06
2002.05.30
while<->repeat





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский