Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Establecer numero maximo lineas RichEdit o Memo (https://www.clubdelphi.com/foros/showthread.php?t=28618)

pepecharlie67 26-12-2005 14:11:40

Establecer numero maximo lineas RichEdit o Memo
 
Hola me gustaria saber como establecer un numero maximo de lineas a un richedit o un memo.Es decir,quiero que el numero maximo de lineas sean 3 y no sobrepase de ahi.Gracias

pepecharlie67 26-12-2005 14:49:36

Ya va.Ya esta hecho.

vtdeleon 26-12-2005 20:44:07

Saludos
Cita:

Empezado por pepecharlie67
Ya va.Ya esta hecho.

Explicanos cómo, para los futuros foristas que tengan la misma duda.
;)

pepecharlie67 26-12-2005 22:15:55

Pues lo que hecho ha sido un poco chapuza pero bueno,en mi caso me vale mas que de sobra.A ver,yo simplemente he contado el numero de letras que me cabe en una linea,por ejemplo 30.Pues si quieres tres lineas,es simplemente multiplicar por 3.Osea que en el campo MaxLength del richedit simplemente deberiamos poner 90.

Ohcan 27-12-2005 10:58:41

Bueno...
A mí se me ocurre:
Código Delphi [-]
 //En el evento OnChange (da igual para Memo que para RichEdit)
 procedure TForm1.Memo1Change(Sender: TObject);
 begin
   if memo1.Lines.Count > 9 then ShowMessage('No se pueden añadir más líneas');
 end;
sustituyendo el 9 por el número/variable/constante que prefieras.
y el showmessage por algo que borre las lineas que sobran (Memo.Lines.Delete(I);)
Saludos

Ohcan 27-12-2005 11:42:31

OnKeyUp
 
No me quedé nada a gusto con el post anterior...
Así que mejor sería, quizás, esto:
Código Delphi [-]
procedure TForm1.ElMemoKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  MaxLines:Integer;
begin
  MaxLines := 2;
  while ElMemo.Lines.Count > MaxLines do
    ElMemo.Lines.Delete(ElMemo.Lines.Count-1);
end;
MaxLines lo he definido allí mismo... pero sería mejor que fuera una constante ...

Ohcan 27-12-2005 13:12:36

Y si esto va a ser para todos los TMemo....
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type

  TMemo = class(StdCtrls.TMemo)

  private
    FMaxLines:Integer;
    FOnKeyUp: TKeyEvent;
    procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;
    procedure SetMaxLines(Value:Integer);
  protected
    property OnKeyUp: TKeyEvent read FOnKeyUp write FOnKeyUp;
  public
    property MaxLines:Integer read FMaxLines Write SetMaxLines default 0;
  end;

  TForm1 = class(TForm)
    ElMemo: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TMemo }

procedure TMemo.SetMaxLines(Value: Integer);
begin
  if Value<>FMaxLines then
    if Value<0 then
      raise Exception.Create('A MaxLines no se le pueden asignar valores menores de cero(0).')
    else
      FMaxLines := Value;
end;

procedure TMemo.WMKeyUp(var Message: TWMKeyUp);
begin
  if FMaxLines<>0 then
    while Lines.Count > FMaxLines do
      Lines.Delete(Lines.Count-1);
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  ElMemo.MaxLines := 3;
end;

end.
Crea una palicación desde cero... pon un memo en el formulario (llámalo ElMemo) y sustituye el código de la Unit1 por el que está aquí arriba.
:)

pepecharlie67 13-01-2006 20:35:33

No me funciona bien la solucion propuesta.Muchas gracias de todas formas.A ver si me pueden decir una solucion alternativa.Gracias

roman 13-01-2006 22:37:02

Pues hombre, yo creo que deberías empezar por explicarnos porqué no te funciona bien. A primera vista, la solución de Ohcan parece cumplir lo esperado.

// Saludos

JOSEA 05-04-2006 22:52:52

La función de ohcan, de lujo, pero si además quieres que funcione parecido a un Tedit (o sea si escribes al principio del Tmemo que no borre la ultima línea entera, se me ocurre esta solución
Código:

procedure TForm1.memoKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if memo.lines.count >3 then begin
    keybd_event(vk_back, 0, 0, 0);
    keybd_event(vk_back, 0, KEYEVENTF_KEYUP, 0);
  end;
end;

Hace un efectillo raro pero funciona (incluso si pulsas un enter)


La franja horaria es GMT +2. Ahora son las 08:53:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi