[Lazarus-es] variable publica en tun with ...

José Mejuto joshyfun en gmail.com
Dom Jul 18 00:41:01 CEST 2010


Hello christian,

Sunday, July 18, 2010, 12:05:41 AM, you wrote:

cO> *with* ElFormulario do *begin*
cO>   bModificado*:=*false*;*
cO>   ShowModal*;* *//Si pongo solo Show, no captura el cambio*
cO>    ......
cO> *end*;
cO> las preguntas:
cO> 1. Todo el with se repite varias veces, por lo que podria ponerlo en un
cO> procedimiento enviando el form como parametro, el problema es que no existe
cO> bModificado el los Tforms por lo que no me permite hacer eso.

Tienes un montón de formas de hacerlo, si la notificación es así de
simple (vamos un valor sencillo) puedes usar el propiedad TAG de todos
los formularios:

function comprueba(const AForm: TForm): boolean;
begin
  AForm.tag:=0;
  AForm.ShowModal;
  if AForm.tag=0 then Result:=false else Result:=true;
end;

---------

Si la cosa se complica más, esto es tienes que devolver una
estructura, o varios eventos posibles tendrás que diseñar un form base
para esos forms, de modo que todos los forms que necesiten ese
comportamiento puedan heredar de este nuevo en vez de TForm. Algo así:

type
  TEventoEspecial=procedure(Sender: TObject; UnaString: string;
  UnInteger: Integer) of object;

type TFormConEventos=class(TForm)
public
  property OnEventoEspecial: TEventoEspecial;
end;

procedure TFormConEventos.Modificado();
begin
  if Assigned(OnEventosEspecial) then
     OnEventoEspecial(Self,'Hola',53);
end;

Y luego en tus formularios, donde pone:

TFormCambios1=class(TForm)

Lo cambias por:

TFormCambios1=class(TFormConEventos)

y cuando llames al formulario:

.......
FormCambios:=TFormCambios1.Create;
FormCambios.OnEventoEspecial:=@MyFuncionEvento;
FormCambios.Show;

Y habrás montado un sistema de eventos parecido al "OnKeyPress",
"OnShow", "FormCreation", etc...

Hay más formas de montarlo, usando mensajes por ejemplo, pero quizá
este último sea el más versátil.

-- 
Best regards,
 José





More information about the Lazarus-es mailing list