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
  #1  
Antiguo 04-01-2008
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Poder: 18
totote Va por buen camino
Clase global en un proyecto

Buenas gente tengo una duda, tengo un proyecto, el cual tiene una clase llamada TUsuarioOnline con sus funciones y un constructor, esta clase la quiero hacer global a todo el proyecto, entonces en defino una instancia de la clase en el source del proyecto, despues intento crear el objeto desde un formulario, pero no me deja, que puedo hacer, aca les dejo el codigo de lo que hice.

Proyecto:
Código Delphi [-]
program pCorrelatividades;

uses
  Forms,
  uLogin in 'uLogin.pas' {fLogin},
  udmCorrelatividades in 'udmCorrelatividades.pas' {dmC: TDataModule},
  uCorrelatividades in 'uCorrelatividades.pas' {fCorrelatividades},
  uClases in 'uClases.pas';
{$R *.res}
var
  usuario_online: TUsuarioOnline;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfCorrelatividades, fCorrelatividades);
  Application.CreateForm(TdmC, dmC);
  Application.Run;
end.

fLogin:
Código Delphi [-]
procedure TfLogin.btAceptarClick(Sender: TObject);
var
  user: string;
  Nivel: integer;
begin
if (edUser.Text <> '') and (edPass.Text <> '') then
begin
  dmC.cdsLogin.Close;
  dmC.cdsLogin.Params.ParamByName('user').AsString:= edUser.Text;
  dmC.cdsLogin.Params.ParamByName('pass').AsString:= edPass.Text;
  dmC.cdsLogin.Open;
  if dmC.cdsLogin.RecordCount > 0 then
  begin
    user:= edUser.Text;
    Nivel:= dmC.cdsLogin.FieldByName('nivel').AsInteger;
    usuario_online:= TUsuarioOnline.Create(user,Nivel); // <-- aca da error que no reconoce usuario_online
  end
  else
    messagedlg('Datos incorrectos, por favor vuelva a intentar',mtInformation,[mbOk],0);
end
else
  messagedlg('Campos incompletos',mtError,[mbOk],0);
end;


uClases:
Código Delphi [-]
unit uClases;

interface

type

  TUsuarioOnLine = class
    private
      Usuario: String;
      Nivel: integer;
    public
      constructor Create(nombre: string;Nvl: integer);
      function GetUsuario():string;
      function GetNivel():integer;
  end;

implementation

{ TUsuarioOnLine }

constructor TUsuarioOnLine.Create(nombre: string; Nvl: integer);
begin
  Usuario:= nombre;
  Nivel:= Nvl;
end;

function TUsuarioOnLine.GetNivel: integer;
begin
  result:= Nivel;
end;

function TUsuarioOnLine.GetUsuario: string;
begin
  result:= Usuario;
end;

end.

Espero que me puedan ayudar Saludos
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS
Responder Con Cita
  #2  
Antiguo 04-01-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues, así a bote pronto, debería funcionar. Tal vez te falte añadir la unidad donde se define "TUsuarioOnline", "uClases", si no me equivoco. Así, el error que te encuentras debería ser que no se sabe nada del tipo "TUsuarioOnline", no acerca de la variable global, pues, como digo, si no me equivoco, eso debería funcionar como esperas.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 04-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
De esto no se, pero estas poniendo en el form el uses del unit uClases ?
Supongo que este es el que contiene esto.
Saludos
Responder Con Cita
  #4  
Antiguo 04-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Como bien dice dec, la variable usuario_online es global, más no su tipo... solo agrega en el uses la unidad donde está declarado TUsuarioOnline...


Saludos...
Responder Con Cita
  #5  
Antiguo 04-01-2008
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Poder: 18
totote Va por buen camino
si, tengo agregado uClases en uses de fLogin, el error que me tira no es que no reconoce el tipo "TUsuarioOnline", sino que no reconoce la variable global "usuario_online"
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS
Responder Con Cita
  #6  
Antiguo 04-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Vaya, entonces el declarar una variable en el proyecto no la hace global a toda la aplicación...

Es mejor que la variable la declares en la unidad uClases...


Saludos...
Responder Con Cita
  #7  
Antiguo 04-01-2008
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Poder: 18
totote Va por buen camino
y si la defino en uClases, y creo el objeto desde fLogin, despues lo podre llamar desde otros formularios?
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS
Responder Con Cita
  #8  
Antiguo 04-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Si... solo tienes que agregar uClases a la cláusula uses del formulario donde lo quieras usar...


Saludos...
Responder Con Cita
  #9  
Antiguo 04-01-2008
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Poder: 18
totote Va por buen camino
asi es, ahi recien lo comprobé jeje, muchas gracias por la ayuda. Un saludo a todos
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS
Responder Con Cita
  #10  
Antiguo 05-01-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola totote,
La forma correcta de hacer lo que necesitas es siguiendo las directrices que sugiere el patrón Singleton.

Para darte una idea de como realizarlo en delphi sugiero las siguientes lecturas:
http://dn.codegear.com/article/22576
http://www.delphi3000.com/articles/article_1736.asp?SK=

La idea del patrón singleton es que cuando se llama al método GetInstance o NewInstance (o como prefieras llamarlo) se considere previamente si existe ya una instancia de dicha clase. Si es así la función retorno dicha instancia en caso contrario la creará.

Con esto se consigue que al primer momento en que se invoque el método se cree la única instancia permitida, mientras que en las otras invocaciones lo que conseguirás será una referencia a dicha instancia.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
Hook global pepelaalfa API de Windows 2 08-12-2005 18:24:27
Variable global jluisx OOP 3 27-10-2005 22:31:22
Variable global (De novatisimo) RyAr Varios 5 08-07-2004 15:48:44
variable global existe en php ? sarga PHP 1 27-06-2004 17:47:07
Procedimiento global Carlos Arevalo Varios 2 17-11-2003 18:55:00


La franja horaria es GMT +2. Ahora son las 06:42:43.


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