Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Y dónde está el Focus? (https://www.clubdelphi.com/foros/showthread.php?t=85186)

GustavoCruz 11-02-2014 20:51:16

Y dónde está el Focus?
 
Hola amigos del foro, resulta que cuando presiono la tecla enter se me pierde el focus... el código que tengo es el siguiente

Código Delphi [-]
procedure TfTraslados.Departamento_PChange(Sender: TObject);
begin
  {  'Descripcion'       }
  if (Departamento_P.GetTextLen > 2)and(Departamento_P.Focused) then
    begin
      if fDatos.ConsultarSQL(qBusquedas, 'select Codigo, Departamento '
      +'descripcion from Departamentos where Departamento like ''%'
      +Departamento_P.Text+'%''') then
        DBGrid1.Visible:= True
      else
        DBGrid1.Visible:= False
    end
  else
    begin
      DBGrid1.Visible:= False;
      qBusquedas.Close;
    end;
end;

procedure TfTraslados.Departamento_PKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = Enter) and (Departamento_P.GetTextLen > 1) then
    begin      
      DBGrid1Exit(Sender);
      Municipio_P.SetFocus;
    end;
end;

procedure TfTraslados.Departamento_PKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_UP: begin
      //SelectNext(Grilla, False, True);
      Key := 0;
    end;

    VK_DOWN: begin
      if DBGrid1.Visible then
         DBGrid1.SetFocus;  //SelectNext(Grilla, True, True);
      Key := 0;
    end;
  end;
end;

procedure TfTraslados.DBGrid1Exit(Sender: TObject);
begin
  if (qBusquedas.IsEmpty) or ( not qBusquedas.Active) then
    begin
      DBGrid1.Visible:= False;
      qBusquedas.Close;
      Exit;
    end;

  case buscando of
    0: begin
      depcodigo:= qBusquedas.FieldByName('codigo').AsString;
      Departamento_P.Text:= qBusquedas.FieldByName('descripcion').AsString;
    end;
    1: begin
      depcodigo:= qBusquedas.FieldByName('codigo').AsString;
      Municipio_P.Text:= qBusquedas.FieldByName('descripcion').AsString;
    end;
    2: begin
      depcodigo:= qBusquedas.FieldByName('codigo').AsString;
      EPS_P.Text:= qBusquedas.FieldByName('descripcion').AsString;
    end;
  end;
  DBGrid1.Visible:= False;
  qBusquedas.Close;
end;

procedure TfTraslados.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if(Key = Enter)then
    DBGrid1Exit(Sender);
end;

La cuestión es que cuando presiono enter en el caja de texto, esto me debería llevar la siguiente caja pero no sucede así...
Mi pregunta Cómo hago para saber en donde se encuentra el Focus....

Gracias por vuestro tiempo

Gustavo Cruz

Ñuño Martínez 11-02-2014 21:11:52

Comprueba el valor de "TabOrder". Es una propiedad de los componentes e indica el orden que se seguirá al pulsar el tabulador o el intro. Es posible que el orden no sea correcto, ya que por defecto es el orden de creación, así que si añades o eliminas componentes puede que te saltes alguno.

Caral 12-02-2014 00:42:24

Hola
Es un problema cuando se pierde el focus y quedas a oscuras :D:D
Bueno, aparte de la broma::)
Me da la impresión de que si tienes dos eventos distintos pero similares puede haber confusión, me refiero a los eventos:
Departamento_PKeyPress y Departamento_PKeyDown
Me parece que hacen prácticamente lo mismo, no ?.
Saludos

GustavoCruz 12-02-2014 14:16:13

Hola Caral, el problema es que esas mismas instrucciones las tengo en otro formulario y allá todo funciona perfectamente bien. Y bueno definitivamente estoy oscuras :p...; también he observado el TabOrder y todo está bien.

Habrá alguna función que me indique en qué lugar se encuenta el focus dentro de un formulario?

Gracias por vuestro tiempo

GustavoCruz

ecfisa 12-02-2014 15:39:04

Cita:

Empezado por GustavoCruz (Mensaje 472582)
...
Habrá alguna función que me indique en qué lugar se encuenta el focus dentro de un formulario?
...

Hola Gustavo.

Código Delphi [-]
  Screen.ActiveControl.Name;

Saludos :)

ecfisa 12-02-2014 16:00:54

Hola de nuevo.

Ampliando el alcance podes hacer:
Código Delphi [-]
function GetFocusedControlName(const FormName:string): TWinControl;
var
  i: Integer;
begin
  Result:= nil;
  for i :=  0 to Screen.FormCount-1 do
    if (Screen.Forms[i].Name = FormName)and(Screen.Forms[i].Visible) then
    begin
      Result:= Screen.Forms[i].ActiveControl;
      Exit;
    end;
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  WC: TWinControl;
begin
  WC:= GetFocusedControlName('Form2');
  if Assigned(WC) then
    ShowMessage(WC.Name);
end;
De este modo obtenes el nombre del control que tenga el foco en cualquier Form visible, cuya unidad haya sido incluida en la unidad actual.

Saludos :)


La franja horaria es GMT +2. Ahora son las 02:52:30.

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