Artigo Clube Delphi Edição 6 - Descobrindo a Posição da Linha em um Objeto TMemo

Artigo da Revista Clube Delphi Edição 6.

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

Artigos relacionados