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