Ola amigos, estou trazendo hoje uma dica rapida para quem deseja usar o bookmark. Primeiro vamos esclarecer o que e BookMark e depois mostrar uma das mais simples maneiras de utilizar esse recurso.O que e BookMark ?Bookmark e um artificio que temos a nossa disposicao para marcar um registro no ClientDataSet e depois localiza-lo rapidamente. Imagine o BookMark como um marcador de paginas (seria essa a traducao ao pe da letra), sendo assim voce marca o registro no qual quer retornar futuramente, navega pelos outros registros do ClientDataSet e quando desejar, faz a chamada para o seu bookmark e retorna ao registro marcado. Parece facil nao e? E facil sim!Para utilizar o bookmark da maneira mais simples, devemos utilizar o marcador como uma string. Crie uma variavel private no seu form do tipo string. Ela sera utilizada para receber o marcador do ClientDataSet, como tambem para indicar qual a posicao o ClientDataSet deve colocar o ponteiro posteriormente.Esta parecendo complicado ne, mas voce vera que e brincadeira de crianca fazer isso.Construa um form conforme o modelo abaixo ou baixe aqui o exemplo completo. Nao se preocupe com os dados isso sera resolvido no exemplo criando uma tabela temporaria. Agora vamos a codificacao para aqueles que nao baixaram o exemplo vou colocar abaixo o codigo da unit.unit uExemploBookMark;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Buttons, DB, DBClient, Grids, DBGrids;typeTExemploBookMark = class(TForm)DBGrid1: TDBGrid;CDS: TClientDataSet;ds: TDataSource;BitBtn1: TBitBtn;MemorizaBookMark: TBitBtn;LocalizaBookMark: TBitBtn;procedure BitBtn1Click(Sender: TObject);procedure MemorizaBookMarkClick(Sender: TObject);procedure LocalizaBookMarkClick(Sender: TObject);private{ Private declarations }BookMarkString : String; // essa variavel ira auxiliar no uso do bookmarkpublic{ Public declarations }end;varExemploBookMark: TExemploBookMark;implementation{$R *.dfm}procedure TExemploBookMark.BitBtn1Click(Sender: TObject);var I: Integer;begin // aqui estamos criando nossa tabela temporaria CDS.FieldDefs.Add('codigo',ftInteger); CDS.FieldDefs.Add('descricao',ftString, 50); CDS.CreateDataSet; // aqui estamos criando os registros na tabela temporaria for I := 1 to 10 do begin CDS.Append; CDS.FieldByName('codigo').AsInteger := i; CDS.FieldByName('descricao').AsString := 'Descricao - '+inttostr(i); CDS.Post; end;end;procedure TExemploBookMark.LocalizaBookMarkClick(Sender: TObject);begin // dessa maneira dizemos ao clientdataset para ir para o endereco // armazenado na nossa variavel CDS.Bookmark := BookMarkString;end;procedure TExemploBookMark.MemorizaBookMarkClick(Sender: TObject);begin // aqui estamos atribuindo o endereco atual do registro na nossa // variavel BookMarkString := Cds.Bookmark;end;end.Para testar aponte o cursor para um registro qualquer selecionando o registro e depois clique no botao Memoriza BookMark, feito isso navegue pelo gride apontando agora qualquer outro registro e depois clique no botao Localiza BookMark, nesse instante o cursor devera retornar para o registro memorizado anteriormente.Voces perceberam como foi facil utilizar o bookmark dessa maneira? Para marcar nosso registro utilizamos BookMarkString := Cds.Bookmark; e para retornar ao registro marcado fizemos o contrario CDS.Bookmark := BookMarkString; . Claro que alguns irao dizer que e melhor utilizar o bookmark criando um ponteiro, etc. Sim, realmente se criarmos um ponteiro do tipo TBookMark, poderemos utilizar funcionalidades mais complexas, proporcionando um controle maior e mais seguro, mas o objetivo aqui era justamente demonstrar a parte facil desse recurso e sua implementacao sendo feita da maneira mais simples possivel, espero que tenham gostado. Amigos um companheiro de programacao fez essa pergunta no Grupo Delphi-BR (grupo dedicado a Delphi do Yahoo, muito bom! Eu recomendo!), entao dei uma fucada, pois utilizo a biblioteca do