Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 24-05-2011
robacio_ivan robacio_ivan is offline
Miembro
 
Registrado: ago 2010
Ubicación: Rio Cuarto - Cordoba
Posts: 21
Poder: 0
robacio_ivan Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Hola...

¿Puedes copiar el código completo del procedimiento/método así de cómo haces la llamada al mismo?



Saludos...



procedure TfrmMainGeneral.EjecutarForm(pForm: TfrmForm; pNomPantalla: String);
var
lTransActive: Boolean;
begin
lTransActive := False;
if not DMLectura.IBTRead.InTransaction then
begin
DMLectura.IBTRead.StartTransaction;
lTransActive := True;
end;//if not DMLectura.IBTRead.InTransaction then

if FSesionUsr.AccesoFormSistema(FSesionUsr.GetSesionIDGrupoUsuario, pNomPantalla) then
pForm.ExecuteModal(Self)
else
MessageDlg(Usuario_sin_permiso, mtInformation, [mbOK], 0);

if lTransActive then
DMLectura.IBTRead.Rollback;
end;


y despues lo que quiero hacer es

EjecutarForm(TfrmVenta, Pant_Ventas);
Responder Con Cita
  #22  
Antiguo 25-05-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.339
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En esta caso estás pasando un objeto de tipo TfrmForm, pero no una referencia a la clase, que son cosas distintas; Si quieres ejecutar un mérodo de clase (ExecuteModal), debes pasar la referencia. Otra opción sería pasar el form y ejecutarl por RTTI, pero creo que no es el caso.

Código Delphi [-]
procedure TfrmMainGeneral.EjecutarForm(pForm: TfrmForm; pNomPantalla: String);
var
     lTransActive: Boolean;
begin
  lTransActive := False;
  if not DMLectura.IBTRead.InTransaction then begin
    DMLectura.IBTRead.StartTransaction;
    lTransActive := True;
  end;//if not DMLectura.IBTRead.InTransaction then

  if FSesionUsr.AccesoFormSistema(FSesionUsr.GetSesionIDGrupoUsuario, pNomPantalla) then
    pForm.ExecuteModal(Self)
  else
    MessageDlg(Usuario_sin_permiso, mtInformation, [mbOK], 0);

  if lTransActive then
    DMLectura.IBTRead.Rollback;
end;
y despues lo que quiero hacer es;

Código Delphi [-]
  EjecutarForm(TfrmVenta, Pant_Ventas);

Lo primero es cambiar:

Código Delphi [-]
// Cambiar esto
procedure TfrmMainGeneral.EjecutarForm(pForm: TfrmForm; pNomPantalla: String);

// por esto otro:
procedure TfrmMainGeneral.EjecutarForm(pForm: TfrmFormClass; pNomPantalla: String);

Y en algun sitio (en la sección de type) definir:

Código Delphi [-]
  TfrmFormClass = class of TfrmForm

  TfrmForm = class(TForm)
  published
    class procedure ExecuteModal(Sender:TForm);
  end;

En ese caso la llamada a:

Código Delphi [-]
EjecutarForm(TfrmVenta, 'Pant_Ventas');

Funcionará, siempre y cuando la clase TfrmVenta derive de TfrmForm,

Código Delphi [-]
TfrmVenta = class(TfrmForm)
 ...

No se si me he explicado.


EjecutarForm(TfrmVenta, 'Pant_Ventas');
==> Este procemimiento llega a la línea:
pForm.ExecuteModal(Self)
==>pForm lo hemos pasado como parámetro con un constructor de clase (TfrmVenta); Revisa esta clase y no tiene el método ExecuteModal, pero sí su antecesor TfrmForm. Como lo tiene definido como método de clase, lo ejecuta:
class procedure ExecuteModal(Sender:TForm);
==> Este ,método supongo que crea el form y lo visualiza modal.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #23  
Antiguo 25-05-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ecfisa Ver Mensaje
3. Ninguna, los métodos de clase son estáticos.
Esto es correcto.

Cita:
Empezado por maeyanes Ver Mensaje
A lo mejor estoy confundido, pero yo puedo hacer algo como:

Código Delphi [-]
TMyClass = class
public
  class procedure MyClassMethod; virtual;
end;

TInheritedClass = class
public
  class procedure MyClassMethod; override;
end;

Y compila y se ejecuta perféctamente.
También esto es correcto.

Cita:
Empezado por ecfisa Ver Mensaje
Creo que la aplicación que estoy tecleando y el deseo de cumplir lo mejor posible con los foros, me están reclamando un descanso
Es que ninguno está equivocado:

Cita:
estático = de clase
estatico != no virtual
// Saludos
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 mi clase a una clase de 3 capas o lo mas parecido elarys OOP 2 07-04-2011 23:02:54
Pasar datos a una clase de un WS gcaffe Internet 1 17-12-2010 16:42:52
¿¿Es posible pasar una clase como parámetro con el modificador var?? PaFernan99 OOP 3 09-02-2009 18:49:00
Pasar parametro a una sentencia sql molinero1 SQL 23 12-04-2007 17:55:22
pasar parametro pharaonhx Conexión con bases de datos 3 10-05-2006 19:02:50


La franja horaria es GMT +2. Ahora son las 12:29:52.


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