El 20/02/2013 17:09, Paola Bruccoleri escribi�:
Show quoted text 24 lines
en un form tengo la propiedad keypreview=true y adem�s hereda de otro
llamado frmEnterESC que tiene definidos los eventos para que el usuario
se pueda mover a trav�s de los controles con enter.. (el usuario viene
de un sistema dos y debo proveerlo de esa funcionalidad que tanto
extra�ar� :) )
procedure TfrmEnterESC.FormKeyPress(Sender: TObject; var Key: char);
begin
if (key = #13) and not(ActiveControl is TCustomButton) then
begin
SelectNext(ActiveControl, True, True);
Key := #0;
end
end;
Ahora.. en ese form adem�s muestro un campo memo donde est�n unas
observaciones que el usuario podr� cambiar (usando los botones corresp
de un dbnavigator)
�C�mo puedo hacer para que al presionar enter en ese control
efectivamente haga un enter y NO me pase al siguiente control?
Es para permitirle al usuario que pueda escribir las observaciones en
varios renglones..
Hola,
Yo tengo hecho eso mismo, pero en vez de seleccionar la clase del control lo que hago es definir el funcionamiento de ENTER en funci�n del valor TAG de cada componente (y su readonly) de modo que si un componente tiene:
TAG=0 Al presionar enter busca el siguiente control activo que no sea ReadOnly y cuyo TAG no sea "1".
TAG=1 El enter nunca se para en estos controles, se los salta, de modo que la navegaci�n por el form con enter se puede saltar algunos componentes que por ejemplo no se usan normalmente.
TAG=2 El comportamiento de ENTER es normal, o sea, el KeyPress no hace nada.
Mi KeyPress es este:
procedure TFormSpecial.KeyPress(var Key: char);
begin
if Key=#13 then begin
//if Self.ActiveControl is TMemo then Key:=#0;
if not JumpToNextControl(Self,false) then begin
inherited KeyPress(Key);
end else begin
//Key:=#0; //Causes problems in Grid editors ?
end;
end;
end;
Unido a estas dos cosas m�s:
{ HackForm }
THackForm=class(TForm)
public
function FindNextControl(CurrentControl: TWinControl; GoForward,
CheckTabStop, CheckParent: Boolean): TWinControl;
end;
{ HackForm }
function THackForm.FindNextControl(CurrentControl: TWinControl; GoForward,
CheckTabStop, CheckParent: Boolean): TWinControl;
begin
Result:=inherited FindNextControl(CurrentControl, GoForward,
CheckTabStop, CheckParent);
end;
//Funcion del TFormSpecial que usa los enter de modo "especial".
function TFormSpecial.JumpToNextControl(const aForm: TForm; const
aForced: Boolean): Boolean;
var
NC: TWinControl;
OC: TWinControl;
IsReadOnly: Boolean;
HF: THackForm;
begin
Result:=false;
OC:=aForm.ActiveControl;
if ((OC.Tag and $0002)0) and (not aForced) then exit;
// I know that every aForm is a Form derived class, and as it is a
hack no
// problem should be present.
{$PUSH}
{$OBJECTCHECKS OFF}
HF:=THackForm(aForm);
{$POP}
NC:=HF.FindNextControl(OC,true,true,false);
if Assigned(NC) then begin
if (NC.Tag and $0001)0 then begin
Repeat
NC:=HF.FindNextControl(NC,true,true,false);
IsReadOnly:=false;
if NC is TEdit then begin
if TEdit(NC).ReadOnly then IsReadOnly:=true;
end;
Until ((NC.Tag and $0001)=0) and (not IsReadOnly);
end;
NC.SetFocus;
Result:=true;
end;
end;
Si te convence la idea �sala sin problemas :) Tu problema se solventar�a simplemente poniendo el TAG del Memo a "2".