Código
Crie a classe THackDBGrid quye será derivada do tipo da grid que você vai utilizar. No meu caso foi a grid do infopower.
Neste procedimento abaixo, não importa onde o ponteiro do registro e a grid estejam, eles sempre voltarão a posição anterior.
}
type
THackDBGrid = class(TwwDBGrid)
end;
type
TForm1 = class(TForm)
Cds_Agenda: TClientDataSet;
Gdb_Agenda: TwwDBGrid;
private
{ Private declarations }
public
{ Public declarations }
end;
procedure TForm1.Gdb_AgendaIButtonClick(Sender: TObject);
var
rowDelta: Integer;
row: integer;
rowCount: Integer;
rowCenter: Integer;
recNo: integer;
ds : TDataSet;
begin
inherited;
try
// Armazena a posição antes do refresh
Cds_Agenda.DisableControls;
ds := THackDBGrid(Gdb_Agenda).DataSource.DataSet;
//rowDelta := -1 + THackDBGrid(Gdb_Agenda).Row;
rowDelta := THackDBGrid(Gdb_Agenda).Row -1;
rowCount := THackDBGrid(Gdb_Agenda).RowCount -1;
rowCenter := rowCount div 2;
row := ds.RecNo;
// Atualiza os dados da agenda
PreencheAgenda;
with ds do
begin
RecNo := row;
if rowDelta < rowCenter then
begin
rowDelta := rowCount - (rowDelta+1);
MoveBy(rowDelta);
MoveBy(-rowDelta);
end
else
begin
MoveBy(-rowDelta) ;
MoveBy(rowDelta) ;
end;
end;
Gdb_Agenda.SetFocus;
finally
Cds_Agenda.EnableControls;
end;
end;
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009