Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   llamar formulario al hacer click en un tabSheet del componente PageControl (https://www.clubdelphi.com/foros/showthread.php?t=80154)

novato_erick 06-09-2012 18:19:11

llamar formulario al hacer click en un tabSheet del componente PageControl
 
Un Saludo Cordial a todos en el foro:

Se me presento una idea descabellada producto de una compañera de trabajo que mas adelante se las presentare y la estoy invitando a participar en este foro e inscribirse.

Bueno voy al grano a ver si le ayudo con su ayuda :) chicos:

Ella me ha preguntado como llamar un formulario haciendo click en los tabsheet ya creados en modo de diseño.

Pensé hacerlo en los eventos pero note que los tabsheet no tienen dicho evento entonces la verdad no se que otro evento podría servir.


Si alguien podría ayudarnos.


Saludos

novato_erick

roman 06-09-2012 18:28:26

Pero tienen los eventos OnMouseDown y OnMouseUp. Con ellos lo puede hacer.

Por cierto, con 130 mensajes que llevas ya podrías tener un mejor uso del espacio. Este mensaje tiene cabida en el foro de OOP así que no hay necesidad de ponerlo en Varios.

Muevo el hilo.

// Saludos

novato_erick 06-09-2012 18:45:36

Gracias roman

Seré mas cuidadoso en realizar las consultas en los foros apropiados.


Saludos

novato_erick

novato_erick 06-09-2012 19:34:08

roman:

Volviendo al tema principal, ya logre llamara al formulario dentro del evento del TabSheet OnMouseDown, con este codigo:

Código Delphi [-]

procedure TfrmEmpleados.TabSheetDatos_GeneralesMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 frmDatos_Generales :=TfrmDAtos_Generales.Create(self);
 frmDatos_Generales.Parent :=TabSheetDatos_Generales;
 frmDatos_Generales.Show;
end;

Sin embargo, lo que se quiere es que la pestaña del PageControl ocurra el evento:

saludos y gracias por tu atención

novato_erick

roman 06-09-2012 19:38:32

Y ¿por qué no lo preguntaste así desde un principio?

Por otro lado, si lo que quiere es mostrar el formulario dentro del TabSheet que se va a activar al hacer click en la pestaña, pienso que sería mejor usar el evento OnChange del PageControl. Ademas, creo que debería verificar primero si no está ya credo el formulario, de lo contrario lo creará e insertará múltiples veces.

// Saludos

novato_erick 06-09-2012 19:55:07

roman mira este código:
Código Delphi [-]

procedure TfrmEmpleados.pgcDatos_EmpleadoMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if pgcDatos_Empleado.PageCount >0 then
  begin
  frmDatos_Generales :=TfrmDAtos_Generales.Create(self);
  frmDatos_Generales.Parent :=pgcDatos_Empleado.pages[0];
  frmDatos_Generales.Show;
  end;

   if pgcDatos_Empleado.PageCount >= 1 then
     begin
  frmNivel_Educativo :=TfrmNivel_Educativo.Create(self);
  frmNivel_Educativo.Parent :=pgcDatos_Empleado.pages[1];
  frmNivel_Educativo.Show;
  end;

end;

con bucle if, creo que logre el comportamiento pero acabo de leer lo que me sugieres con el evento OnChange,
Cita:

roman dice:
Ademas, creo que debería verificar primero si no está ya credo el formulario, de lo contrario lo creará e insertará múltiples veces
como así no te entiendo.


saludos

roman 06-09-2012 19:57:43

Cita:

Empezado por novato_erick (Mensaje 442122)
como así no te entiendo.

Es decir, ¿qué pasa si doy clic por segunda vez en la pestaña?

// Saludos

novato_erick 06-09-2012 20:59:47

roman tienes razón:

Acabo de probar haciendo click en las pestañas y si me vuelve abrir el formulario creandome mas formulario del mismo.

ahora mi pregunta es:

como evito eso?

//Saludos

roman 06-09-2012 21:04:02

Tienes primero que asegurarte que la variable que usas para el formulario tiene valor nil al comienzo de la aplicación. Por ejemplo, en el evento OnCreate del formulario principal pones:

Código Delphi [-]
frmDatos_Generales := nil;

Y luego, al dar el clic pones:

Código Delphi [-]
if not Assigned(frmDatos_Generales) then
begin
  // Aquí el código que tienes
end;

// Saludos

novato_erick 06-09-2012 21:55:09

Gracias roman:

aquì esta el codigo completo en el Evento OnMouseDown del PageControl:
Código Delphi [-]
procedure TfrmEmpleados.pgcDatos_EmpleadoMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
    if pgcDatos_Empleado.PageCount >0 then
       begin
          if not Assigned(frmDatos_Generales) then
            begin
              frmDatos_Generales :=TfrmDAtos_Generales.Create(self);
              frmDatos_Generales.Parent :=pgcDatos_Empleado.pages[0];
              frmDatos_Generales.Show;
            end;
       end;
   if pgcDatos_Empleado.PageCount >= 1 then
     begin
     if not Assigned(frmNivel_Educativo) then
      begin
        frmNivel_Educativo :=TfrmNivel_Educativo.Create(self);
        frmNivel_Educativo.Parent :=pgcDatos_Empleado.pages[1];
        frmNivel_Educativo.Show;
      end;
     end;
  end;

En teoria funciona con los dos (2) formularios y son 5 en total que voy a llamar en el mismo ciclo. mi pregunta es roman estoy en lo correcto en la forma que lo hice?

Gracias por tu tiempo

novato_erick


La franja horaria es GMT +2. Ahora son las 08:00:22.

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