Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 23
lucasarts_18 Va por buen camino
Pasar parametros a una ventana

Hola a todos:

Mi Duda es la siguiente, en delphi siempre (no he visto otra forma) se pasan variables de un formulario a otro de la siguiente manera.

Código Delphi [-]
procedure TFrm_DetalleBuscaFacturaCambio.FormActivate(Sender: TObject);
begin
   edt_numero.Text:=Frm_FacturaCambio.Edt_facturaentrada.Text;
   SetReadOnlyTxt(edt_numero,true);
end;




Es decir en el evento FormActivate estamos leyendos variables de otra parte, que para mí está malísimo ya que las ventanas deben ser independientes unas de otros o sino se pierde en gran medida la reutilización de objetos.

Mi pregunta es, ¿existe una forma mas elegante de hacer esto?. En otros lenguajes puedes pasar variables u estructuras completas entre una ventana y otra ya que la opción de abrir un ventana permite pasar parámetros, en delphi no he visto hasta el momento nada de esto

Hasta Luego -
__________________
No todo es como parece ser...
Responder Con Cita
  #2  
Antiguo 28-10-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 23
lucasarts_18 Va por buen camino
Hola:

Pido disculpa, no me he dado cuenta y posteé este mensaje en este apartado, pido por favor a un moderador que lo mueva a su sitio corresponiente, gracias
__________________
No todo es como parece ser...
Responder Con Cita
  #3  
Antiguo 29-10-2006
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 22
droguerman Va por buen camino
Código Delphi [-]//defines: constructor create(aOwner : TComponent; const prm : string); reintroduce;


//implementas
Código Delphi [-]constructor TMiForma.create(aOwner : TComponent; const prm : string); begin inherited create(aOwner); fPrm := ''; end;

//y llamas

Código Delphi [-]x := TMiForma.create(application.mainForm, 'hola');
__________________
self.free;
Responder Con Cita
  #4  
Antiguo 29-10-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 23
lucasarts_18 Va por buen camino
Hola:

Gracias, está buena la idea, solo tengo una duda con el siguiente código


Código Delphi [-]
constructor TMiForma.create(aOwner : TComponent; const prm : string); begin 
inherited create(aOwner); 
fPrm := ''; //Esto no lo entiendo, donde está definido fPrm 
end;

Si es fPrm el parametro prm, no deja asignarle absolutamente nada ya que es una constante






Hasta luego -
__________________
No todo es como parece ser...
Responder Con Cita
  #5  
Antiguo 29-10-2006
Epachsoft Epachsoft is offline
Miembro
 
Registrado: abr 2005
Posts: 167
Poder: 22
Epachsoft Va por buen camino
Hola,

Lo que usualmente yo hago es lo siguiente.

En toda ventana nueva que estoy creando, agrego un metodo publico llamado execute(parametro1,parametro2,parametro3);

El execute contiene realmente el control ventana, ejemplo

Código Delphi [-]
function execute(param1:string):boolean;
begin
 Result:=False;
 If (PARAM1='CORRA') then
  Resul:=showmodal=MrOk
 else
  Begin
    // nada paso aqui.
   Result:=False; // reiterativo, pero es una tradicion.
  End;
 End;

De esta manera se evita la MALA costumbre de poner codigo en el OnShow, en el OnActivate. Inclusive se puede controlar lo que pasa en el OnCreate.


Luego desde cualquier otra ventana yo ejecuto

Código Delphi [-]
Begin
 With TNewWindow.Create(Self) do
  Begin
   Try
     If Execute('CORRA') then DoSomething else Dosomethingelse;
   Finally
    Free; // Si se usa una variable temporal, lo mejor es usar FreeandNil.
   End;
  End;
End;

Espero que sirva.
__________________
Esteban Pacheco
A delphi programming blog

Última edición por dec fecha: 29-10-2006 a las 11:34:16.
Responder Con Cita
  #6  
Antiguo 30-10-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 23
lucasarts_18 Va por buen camino
Gracias a ambos, he resuelto el problema...
__________________
No todo es como parece ser...
Responder Con Cita
  #7  
Antiguo 30-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Yo propongo otra cosa, de la misma índole, pero en otro sentido:
Código Delphi [-]

TForm1 = class (tForm)

private
  Fparam1:string;
  Fparam2:integer;

  procedure Setparam2(value:integer);
  function Getparam2:integer;
public
  constructor Create(Aowner:TObject);override;

  property Parametro1:string read Fparam1 write Fparam1;
  property Parametro1:integer read Getparam2 write Setparam2;
  procedure Execute;
end;

constructor TForm1.Create(Aowner:TObject);
begin
  inherited Create(Aowner);
  Fparam1 := EmptyStr;
  Fparam2 := -1;
end;

procedure TForm1.SetParam2(value:integer);
begin
{ Value es el valor que se le va a asignar desde fuera de la clase
  justo cuando alguien hace Form1.param2 := 33
}
 if Value <> Fparam2 then 
 begin
// podemos comprobar que el antiguo Fparam2 es distinto al 
// valor que se le quiere asignar, y no repetir acciones.
// Además podemos saber el valor que tenía y ahora el valor que tendrá, 
// en algunas situaciones es muy util, porque podemos inicializar variables
// liberar objetos, etc.
end;
end;

function TForm1.GetParam2:integer;
begin
  result := Fparam2;
 // devolvemos la variable privada, igual hay que hacer cálculos u otras cosas
end;

procedure TForm1.Execute;
begin
  if Fparam1 = EmptyStr then
    raise Exception.Create('dale un valor a Parametro1');

  if Fparam2 = -1 then
    raise exception.Create ('dale un valor a Parametro2');

Ventajas:
- Si ahora necesitamos añadir otro parámetro más, no hay necesidad de modificar la declaración del procedimiento Execute, es decir modificar los parámetros de entrada que necesita, simplemente se añade una propiedad más, modificas internamente el método Execute y listo. Normalmente no tienes que modificar el programa que hace uso de la clase.

- Podemos saber los valores antiguos y nuevos de cada parámetro, como ya dije, para inicializar o liberar recursos.

- Su uso es más parecido a la VCL, por tanto en un futuro será intuitivo su uso. ¿el TQuery lleva parámetros en su método Open(sql: string)?, o por ejemplo, ¿el TOpenDialog en su método Execute?, pues por eso mismo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 30-10-2006 a las 11:01:10.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar parametros.... Coco_jac SQL 2 02-09-2006 04:28:16
Abrir nueva ventana y pasar parametros Coco_jac PHP 2 25-08-2006 17:14:16
Pasar parametros a IBdataSet digital Firebird e Interbase 3 13-07-2004 08:39:11
como pasar parametros... hook SQL 13 11-05-2004 19:24:14
Pasar parametros a ADOQUERY JODELSA Conexión con bases de datos 1 04-09-2003 23:47:36


La franja horaria es GMT +2. Ahora son las 06:21:32.


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
Copyright 1996-2007 Club Delphi