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