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);
}
//---------------------------------------------------------------------------