A propriedade Hint do DBGrid é estática, isto é, o texto colocado lá aparece quando o mouse aponta para o Grid. Porém o que eu precisava era mostrar o conteúdo de uma célula no Hint. Isto é, muito útil quando a coluna possui uma largura pequena e o texto contido no registro é muito grande.
Para este exemplo utilizei um ClientDataSet apontando para o arquivo “C:\Arquivos de programas\Arquivos comuns\Borland Shared\Data\biolife.xml”. Portanto crie uma nova aplicação e adicione um ClientDataSet, um DataSource e um Grid no Form. Aponte o ClientDataSet para o arquivo “C:\Arquivos de programas\Arquivos comuns\Borland Shared\Data\biolife.xml” e o DataSource para o ClientDataSet e finalmente aponte o Grid para o DataSource.
Faça o Grid ocupar todo o Form configurando a propriedade Align para alClient. Para efeitos didáticos adicione os campos ao ClientDataSet exceto os campos “Notes” e “Graphic”. Ative o ClientDataSet para visualizar os dados.
Crie uma classe chamada TminhaJanelaHint conforme abaixo, esta será usada para substituir o hint padrão do Delphi.
type
E crie uma variável deste tipo na área public da unit:
MeuHint: TMinhaJanelaHint;
Temos que criar uma classe “amiga” para podermos acessar as propriedades do DBGrid que não são visíveis pelo objeto.
type
Devemos definir o seguinte procedimento para mapear a posição do mouse para a coordenada relativa ao Grid:
procedure mouseToCell(X, Y: integer; var ACol, ARow: longint);
Que terá o código abaixo:
procedure TForm1.mouseToCell(X, Y: integer; var ACol, ARow: Integer);
Agora iremos definir um procedimento que calcula e posiciona a janela de hint personalizada substituindo a janela padrão de hint do Delphi. Esta função irá permitir inclusive que utilizemos mais de uma linha de texto. Ela deve ser definida como um procedimento da classe TminhaJanelaHint.
procedure TMinhaJanelaHint.doActivateHint(Sender: TObject);
// Executo o procedimento para exibição do Hint na tela
end;
No DBGrid deve-se criar o evento OnMouseMove para controlar os movimentos do mouse e digitar o código abaixo:
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
// Passamos o conteúdo do campo para o Hint do Grid e chamamos a função para exibi-lo
Finalmente no evento FormCreate do formulário instanciamos um objeto da classe TminhaJanelaHint.
procedure TForm1.FormCreate(Sender: TObject);
Espero que este arquivo seja útil, um abraço a todos e até o próximo artigo.