Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Foco en PageControl (https://www.clubdelphi.com/foros/showthread.php?t=69218)

valeria 02-08-2010 21:31:21

Foco en PageControl
 
Buenas tardes, les quisiera hacer una consulta..resulta que estoy creando por código un page control ,con dos Tabshett y adentro de esos dos TTabSheet creo un dbgrid,mi pregunta es la siguiente cuando yo entro al form donde se encuntra el page control, él foco no se encuntra en el dbgrid...y tengo que cliquear alguna de las celdas para poder moverme en las celdas de ese dbgrid... como puedo hacer para que al entrar en el page control el foco se encuntre directamente en el dbgrid...aclaro que probé en hace DBGDatos.SetFocus,pero me tira error...

Código Delphi [-]
begin
  MiPageControl := TPageControl.Create(Self);
  MiPageControl.Parent := Self;
  MiPageControl.Align:= AlClient;
  DBGDatos:= TDBGrid.Create(self);
  DBGDatos1:= TDBGrid.Create(self);
  Hoja1:= TTabSheet.Create(MiPageControl);
  Hoja2:= TTabSheet.Create(MiPageControl);
  with Hoja1 do
  begin
       PageControl := MiPageControl;
       DBGDatos.Parent := Hoja1;
       DBGDatos.Top:= 60;
       DBGDatos.Width:= 600;
       DBGDatos.DataSource:= self.DataSource1;
       self.ADODataSet1.Active:= true;
      end;
   with Hoja2 do
   begin
       PageControl := MiPageControl;
       DBGDatos1.Parent := Hoja2;
       DBGDatos1.Top:= 60;
       DBGDatos1.Width:= 600;
       DBGDatos1.DataSource:= self.DataSource1;
       self.ADODataSet1.Active:= true;
   end;
     MiPageControl.ActivePage:= Hoja1;
     MiPageControl.ActivePage:= Hoja2;
 end;

roman 02-08-2010 21:49:46

Prueba poniendo la propiedad TabStop de los TabSheet en false.

// Saludos

valeria 02-08-2010 22:11:22

Foco en PageControl
 
Gracias Román pero no hace nada poner la propiedad TabStop en false; sigue como congelado el dbgrid hasta que no le doy clic en alguna de sus celdas....

roman 02-08-2010 23:04:29

Hola,

Aparentemente me funciona si pongo el DBGDatos.SetFocus en el evento OnEnter del TabSheet que contiene al DBGrid.

// Saludos

ecfisa 03-08-2010 04:09:32

Hola Valeria.
Una forma podría ser usando el evento OnChanging del TPageControl.

Código:

...
type
  TForm1 = class(TForm)
  private
    procedure MiPageControlChanging(Sender: TObject;
        var AllowChange: Boolean);
  public
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  end;
var
  Form1: TForm1;
  MiPageControl: TPageControl;
  DBGDatos,DBGDatos1: TDBGrid;
  Hoja1,Hoja2: TTabSheet;

implementation

procedure TForm1.MiPageControlChanging(Sender: TObject;
  var AllowChange: Boolean);
begin
  case TPageControl(Sender).TabIndex of
    0: DBGDatos.SetFocus;
    1: DBGDatos1.SetFocus;
    3: // otro TTabSheet...
    4: // ...
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MiPageControl := TPageControl.Create(Self);
  with MiPageControl do
  begin
    Parent := Self;
    Align:= AlClient;
    OnChanging:= MiPageControlChanging;
  end;
  DBGDatos:= TDBGrid.Create(self);
  DBGDatos1:= TDBGrid.Create(self);
  Hoja1:= TTabSheet.Create(MiPageControl);
  Hoja2:= TTabSheet.Create(MiPageControl);
  with Hoja1 do
  begin
    PageControl := MiPageControl;
    DBGDatos.Parent := Hoja1;
    DBGDatos.Top:= 60;
    DBGDatos.Width:= 600;
    DBGDatos.DataSource:= DataSource1;
    ADODataSet.Active:= true;
  end;
  with Hoja2 do
  begin
    PageControl := MiPageControl;
    DBGDatos1.Parent := Hoja2;
    DBGDatos1.Top:= 60;
    DBGDatos1.Width:= 600;
    DBGDatos1.DataSource:= DataSource2;
    ADODataset1.Active:= true;
  end;
end;

{ FormActivate, para que aparezca con foco en DBGDatos al entrar al Form }
procedure TForm1.FormActivate(Sender: TObject);
begin
  with MiPageControl do
  begin
    ActivePage:= Hoja1;
    DBGDatos.SetFocus;
  end;
end;
end.

Las variables las trabajé como globales y usé dos DataSets distintos a fin de probar el ejemplo.
Una cosa mas, el uso del parámetro self, es innecesario en este caso.

Saludos.

valeria 03-08-2010 15:34:39

Gracias Ecfisa!!! ahora si funciona como yo queria,muchisiiiimas gracias!!


La franja horaria es GMT +2. Ahora son las 03:04:45.

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