Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Acceder desde un Frame a su formulario (https://www.clubdelphi.com/foros/showthread.php?t=41083)

rafita 07-03-2007 12:11:31

Acceder desde un Frame a su formulario
 
Hola compañeros,

Nuevamente vuelvo por aquí con una duda:

Tengo un Frame que utilizo desde tres formularios porque la gestión que realizo es igual en todos ellos.
Y necesitaría acceder desde un botón situado en el Frame a un Panel situado en el formulario principal.

Código:

procedure TFrameDetalles.BCancelarClick(Sender: TObject);
begin
  PanelCabecera.Enabled:=True;  // no lo permite porque no pertenece al Frame
end;

He buscado referencias al Parent del frame y cosas así, pero no encuentro nada que sirva.

Si alguien tiene alguna respuesta, se lo agradeceré enormemente.

Saludos.

Lepe 07-03-2007 12:28:20

Hazle un evento al frame, ya que si son 3 Forms donde los usas tendrías que hacer referencia a los 3 forms... y claro, se acabó el encapsulamiento:

Código Delphi [-]

TFrame1 = classs(...)
private
   FCancelar: TnotifyEvent;

public
   property OnCancelar:TnotifyEvent read FCancelar write FCancelar;

end;

implementation

procedure TFrame1.ButtonCancelar(...);
begin
  if Assigned(FCancelar) then
    FCancelar(self);
end;

Ya en el form donde usas los frames:
Código Delphi [-]
Tform1 = classs(tform);
private
  procedure AlCancelar(Sender:TObject);
end;

procedure TForm1.Form1Create();
begin
   Frame1.OnCancelar := AlCancelar;
end;


procedure TForm1.AlCancelar(Sender:TObject);
begin
  panel1.Enabled := false;
end;

Creo que no me equivocado en nada, debería compilar y ejecutar.

Saludos

rafita 07-03-2007 13:55:15

Muchas gracias Lepe,
Voy a procesar lo que me has dicho y adaptarlo al problema, ya que mi nivel es infimo y el problema es un poco más complejo de lo que he expuesto.

Luego te cuento.

rafita 07-03-2007 14:04:35

Probado,

Funciona perfectamente, y hasta creo que lo entiendo, pero desde luego yo solo no sabría resolverlo.

Muchísimas gracias.

Lepe 07-03-2007 15:29:38

Lo que seguramente no te cuadra son estas dos líneas, como a mí la primera vez que lo ví:
Código Delphi [-]
  if Assigned(FCancelar) then
    FCancelar(self);

TNotifyEvent es un puntero a un procedimiento (lo que comunmente se llama evento).

Assigned(FCancelar) es la forma de saber si el usuario ha asignado el evento, es decir, saber si el usuario ha hecho esto:
Código Delphi [-]
Frame1.OnCancelar := AlCancelar;
Exactamente lo mismo que el inspector de objetos, si un evento está vacío (no tiene el nombre escrito) delphi no ejecuta nada.

Si tiene algo escrito, ejecuta ese procedimiento (TForm1.Button1Click(..) por ejemplo.

FCancelar(self), en tiempo de ejecución se sustituye por:
Código Delphi [-]
Form1.AlCancelar(Frame1);
... eso suena raro, pero alguna vez supongo que has hecho esto:
Código Delphi [-]
button1Click(nil); 
// o bien
button1Click(Form1);
para ejecutar el evento Onclick de un boton, en tu ventana por código, pues realmente es eso lo que se hace con la línea FCancelar(Self), ejecutar el procedimiento que se haya asignado, en este caso "AlCancelar".

Saludos


La franja horaria es GMT +2. Ahora son las 15:23:57.

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