Limitar a qntde de caracteres digitados por linha no TMemo

Delphi

02/05/2005

Como consigo limitar a qntde de caracteres digitados por linha no TMemo

Ex.:
Quero que permitar digitar somente 23 caracteres por linha.

Ficaria assim:
------------------
Fórum DevMedia - Delphi
Fórum DevMedia - Delphi

o que for ser digitado depois do ´Fórum DevMedia - Delphi´ não deixar

Grato
Bruno


Bfbraz

Bfbraz

Curtidas 0

Respostas

Fábio Feltrin

Fábio Feltrin

02/05/2005

Altere o tamanho do TMemo para que nele caiba apenas 23 caracteres ja que o espaço restante vc não ira utilizar.

Att Fábio Feltrin da Silveira


GOSTEI 0
Bfbraz

Bfbraz

02/05/2005

Não posso simplesmente alterar o tamanho do Memo pois a qntde de caractares vai variar de Cliente, cada Cliete vai ter uam qtde diferente que podera digitar

Bruno Rodrigues


GOSTEI 0
Rômulo Barros

Rômulo Barros

02/05/2005

Deve haver um jeito mais simples. Mas, enquanto vc não acha a solução, implemente o código abaixo no evento OnKeyPress do seu Memo.

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
Var
   C : Longint;
begin
   With(Memo1)Do
   Begin
      For C := 0 To Lines.Count -1 Do
      Begin
         If(Not(Key In[8,13]))Then
            Begin
               If(Length(Lines[C]) > 23)Then
               Begin
                  MessageDlg(´Limite de caracteres ultapassado !!!´,mtWarning,[mbOk],0);
                  Key := 0;
                  Break;
               End;
         End;
      End;
   End;
end;



GOSTEI 0
Beppe

Beppe

02/05/2005

Rômulo, não existe maneira mais simples do que a sua solução, sem restrições. Até seria possível testar qual linha foi modificada com Memo1.CaretPos.y, e verificar a largura desta linha. Porém, se for possível Copiar&Colar, daí somente a tua rotina dá jeito. Mas poderia ser proibido o ´Ctrl+V´, então testar apenas a linha atual é viável.


GOSTEI 0
Rômulo Barros

Rômulo Barros

02/05/2005

Sim, eu tentei testar apenas a linha atual, mas não consegui achar um comando para isso, tipo ( Memo.Lines[Memo.ItemIndex] ) ... ... mas, conforme descrito por você anteriormente, Beep, basta implementar o método [b:3855815b75]CaretPos.y[/b:3855815b75] e adequar o código para o sistema.

[color=blue:3855815b75][i:3855815b75][u:3855815b75]Valeu !!![/u:3855815b75][/i:3855815b75][/color:3855815b75]


GOSTEI 0
Antseralves

Antseralves

02/05/2005

Teste o seguinte:

No formulário onde está o TMemo faça a propriedade
[b:f934334362]KeyPreview[/b:f934334362] = [b:f934334362]true[/b:f934334362].

No evendo [b:f934334362]OnKeyPress[/b:f934334362] do TMemo codifique:

if Length(Memo1.Lines.Strings[Memo1.CaretPos.Y]) = 33 then
if Key >= ´0´ then
Key := #0;

Boa sorte !

AntSer
=====


GOSTEI 0
POSTAR