Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2010-07

variable publica en tun with ...

5 messages · 4 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

christian Ortiz

holas

tengo una dudas, a ver si alguien puede ayudarme

tengo un formulario principal, del cual llamo a otros formularios, estos ultimos pueden realizar o no una operacion, eso necesito capturarlo en el 1er form, lo que estoy haciendo, pero no me parece correcto, es:

en todos los formularios defino una variable boolean publica (bModificado) que contendra el valor deseado si hubo o no el cambio, en el form principal lo llamo de esta forma

*with* ElFormulario do *begin*

  bModificado*:=*false*;*
  ShowModal*;* *//Si pongo solo Show, no captura el cambio*
   ......

*end*;

las preguntas:

1. Todo el with se repite varias veces, por lo que podria ponerlo en un procedimiento enviando el form como parametro, el problema es que no existe bModificado el los Tforms por lo que no me permite hacer eso.
2. Alguna forma mas decente de llamar a un form y saber si se realizo algun cambio?? que no use el showmodal

Alguna idea?

Christian ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20100717/5b52fbd6/attachment.html>

Reply by email

José Mejuto
to christian Ortiz

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.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�

Reply by email

Walter Mesón
to christian Ortiz: holas tengo una dudas, a ver si alguien puede ayudarme tengo un formulario principal, del…

Hola...
Una humilde sugerencia...�si us�s la propiedad Tag de los forms a los que llam�s...?, es decir, los creas y le asign�s el tag a 0 (cero), si se hace una modificaci�n o se ejecuta un procesos o lo que quieras, le cambias el tag a 1, por ejemplo, y lo lees, de ahi, las acciones que quieras...

Saludos.

Show quoted text 33 lines
holas tengo una dudas, a ver si alguien puede ayudarme tengo un formulario principal, del cual llamo a otros formularios, estos ultimos pueden realizar o no una operacion, eso necesito capturarlo en el 1er form, lo que estoy haciendo, pero no me parece correcto, es: en todos los formularios defino una variable boolean publica (bModificado) que contendra el valor deseado si hubo o no el cambio, en el form principal lo llamo de esta forma *with* ElFormulario do *begin* bModificado*:=*false*;* ShowModal*;* ///Si pongo solo Show, no captura el cambio/ ...... *end*; las preguntas: 1. Todo el with se repite varias veces, por lo que podria ponerlo en un procedimiento enviando el form como parametro, el problema es que no existe bModificado el los Tforms por lo que no me permite hacer eso. 2. Alguna forma mas decente de llamar a un form y saber si se realizo algun cambio?? que no use el showmodal Alguna idea? -- Christian
Gracias. Saludos. * Walter *

Reply by email

José Mejuto
to Walter Mesón

Hello Walter,

Monday, July 19, 2010, 1:28:05 PM, you wrote:

WM> Hola...
WM> Una humilde sugerencia...�si us�s la propiedad Tag de los forms a los que WM> llam�s...?, es decir, los creas y le asign�s el tag a 0 (cero), si se hace una WM> modificaci�n o se ejecuta un procesos o lo que quieras, le cambias el tag a 1, WM> por ejemplo, y lo lees, de ahi, las acciones que quieras...

Si, digamos que "tag" es una propiedad sin prop�sito definido, es un integer que puedes usar para lo que quieras, pero cuidado por que algunas cosas de terceros pueden usarla tambi�n, ya que no hay un control de quien puede o no usarla.

Por ejemplo yo ten�a una unit que usaba la "tag" para saber si tenia que traducir un form, control, etc... si TAG=1 entonces no traduc�a nada.

Best regards, Jos�

Reply by email

Christian
to José Mejuto: cO> *with* ElFormulario do *begin* cO> bModificado*:=*false*;* cO> ShowModal*;* *//Si…

simplemente genial tu respuesta, gracias.

El dom, 18-07-2010 a las 00:41 +0200, Jos� Mejuto escribi�:

Show quoted text 68 lines
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.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.

Reply by email