Título: Linha e Coluna do Memo
Linguagem: C++Builder
S.O.: Windows
Autor(es): Wenderson Teixeira
A maioria dos editores de texto mostram em qual linha e coluna est� o cursor, acontence que n�o h� uma fun��o que retorne estes par�metros diretamente, por isso deve-se utilizar uma solu��o alternativa. Utilizando-se a propriedade SelStart, pode-se pegar a posi��o do cursor em rela��o ao n�mero de caracteres desde o come�o do Memo, assim, o que se resta a fazer � subtrair a quantidade de caracteres por linha at� a linha atual, os �nicos problemas deste m�todo, � que quando se est� fazendo a sele��o de um trecho do texto da esquerda para a direita ou de cima para baixo, a posi��o n�o � atualizada.
Ex.:
Crie a fun��o UpdateData como membro do seu form principal e ponha, nos eventos OnKeyUp e OnMouseMove o seguinte c�digo:
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1KeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
UpdateData(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
UpdateData(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpdateData(TObject *Sender)
{
int index = Memo1->SelStart;
bool done = false;
for(int c = 0; c < Memo1->Lines->Count && !done; c++)
if(index > Memo1->Lines->Strings[c].Length())
index -= Memo1->Lines->Strings[c].Length() + 2;
else
done = true;
Label1->Caption = String(index + 1) + " x " + String(c);
}
//---------------------------------------------------------------------------