Esse artigo faz parte da revista Clube Delphi edição 6. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML. 

 

Descobrindo a Posição da Linha em um Objeto TMemo

 

Não seria interessante se um componente TMemo tivesse a habilidade de reportar sobre qual linha o cursor está posicionado? Uma maneira de se obter esta informação seria através da propriedade SelStart, isto é, sempre que se clicar no texto de um TMemo, à propriedade SelStart será  atribuído o valor da posição do cursor. Esta posição poderia ser mapeada para o número da linha, somando-se o valor do comprimento das linhas e retestando-se SelStart nesta situação. Acontece, que via API do Windows, podemos obter esta informação de uma forma mais fácil:

 

 

LineNumber:=SendMessage(Memo1.Handle,EM_LINEFROMCHAR, Memo1.SelStart,0);

 

Onde:

 

Memo1 é o nome atribuído ao componente TMemo e LineNumber é retornado como um LongInt, podendo através de um TypeCast, ser utilizado como Integer.

 

Na figura ilustrada, pode ser utilizado o evento OnKeyDown para exibir o número da linha na barra de status, como podemos ver no código abaixo:

 

procedure Tform1.Memo1KeyDown(Sender:

Tobject; var Key: Word;

Shift: TshiftState);

begin

StatusBar1.Panels[0].Text :=

‘Linha: ‘+IntToStr(SendMessage

(Memo1.Handle, EM_LINEFROMCHAR,

Memo1.SelStart,0));

end;

 

 

Documento Técnico – Inprise