Cuando intentamos sobrepasar la capacidad de un TEdit, éste envia un mensaje EN_MAXTEXT a su ventana padre para informarle.
Nosotros tendremos que capturar dicho evento, y pasar el foco al siguiente control:
En la definicion de la form ponemos:
Type
TForm1 = class(TForm)
..........
private
procedure WMCommand(var Msg: TWMCommand); message WM_COMMAND;
..........
end;
|
y luego, en el implementation:
procedure TForm1.WMCommand(var Msg: TWMCommand);
begin
if Msg.NotifyCode = EN_MAXTEXT then
begin
PostMessage(Handle, WM_NEXTDLGCTL,0, 0);
inherited;
end;
end;
|
Para hacer lo mismo, pero sin perder el caracter tecleado al entrar en el nuevo TEdit:
Añadimos una variable global a la form:
var
Form1: TForm1;
Letra:char;
|
Ponemos la propiedad Keypreview de la form a true
Ponemos el siguiente código en evento OnKeyPress de la form:
Y como procedure de tratamiento del mensaje substituimos la anterior por esta otra:
procedure TForm1.WMCommand(var Msg: TWMCommand);
begin
if Msg.NotifyCode = EN_MAXTEXT then
begin
SendMessage(Handle, WM_NEXTDLGCTL , 0, 0);
If ActiveControl is TEdit then
with TEdit(ActiveControl) do
begin
Text:=Letra;
SelStart:=2;
end;
inherited;
end;
end;
|
Actualizado el 19/08/99
Habia un error tipográfico: WM_NEXTCTLDLG en lugar de WM_NEXTDLGCTL ...
Actualizado el 20/08/99
Añado el segundo ejemplo, que no pierde caracteres al pasar al siguiente TEdit
|