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 11-09-2005
Avatar de Sotrono
Sotrono Sotrono is offline
Miembro
 
Registrado: abr 2004
Ubicación: Buenos Aires - Argentina
Posts: 396
Poder: 21
Sotrono Va por buen camino
Aplicacion sin form

Hola, como va?
Estoy haciendo una aplicacion sin form (programo en el dpr) y hasta ahora me encontre con 2 problemas que no puedo solucionar:
1) Como creo un objeto? En una aplicacion con form tengo que poner
NombreObjeto:= NombeClase.Create(self);
Pero sin el Form no se puede usar "self".
2) Como y donde tengo que declarar los procedimientos para los eventos.

Si los declaro asi:
Código Delphi [-]
 procedure dsa;
 begin
   ShowMessage('dsa');
 end;
 
 begin //begin principal de la aplicacion
  Objeto:= TObjeto.Create(???);
   Objeto.OnOpen:= dsa;
 end.
Me tira el error:
Incompatible types: method pointer and regular procedure

Bueno espero que me puedan ayudar.
Saludos...
Responder Con Cita
  #2  
Antiguo 11-09-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Un saludo (que siempre se pone de coletilla.... ,¿por qué no ponerlo al principio? )

Código Delphi [-]
 procedure dsa;
 begin
   ShowMessage('dsa');
 end;
 
 begin //begin principal de la aplicacion
  Objeto:= TObjeto.Create(nil);
  try
   Objeto.OnOpen:= dsa;
  finally 
    Objeto.Free;
  end;
 end.
Responder Con Cita
  #3  
Antiguo 11-09-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Por cierto, de qué tipo es el objeto que quieres crear?, porque quieres asignar el evento OnOpen al "dsa", pero ambos deben tener el mismo tipo de parámetros para poder realizarlo.

El problema de method pointer, es porque se necesita que el evento de un objeto, se asigne a otro objeto, es decir, "dsa" tiene que estar definido dentro de un objeto.

Código Delphi [-]
 procedure TForm1.dsa(....);
 procedure TMiObjeto.dsa(....);

tal y como lo tienes es un procedimiento regular, y no puede ser asignado.

Quizás siendo más concreto con lo que estas haciendo te podamos ayudar.
Un saludo
Responder Con Cita
  #4  
Antiguo 12-09-2005
Avatar de Sotrono
Sotrono Sotrono is offline
Miembro
 
Registrado: abr 2004
Ubicación: Buenos Aires - Argentina
Posts: 396
Poder: 21
Sotrono Va por buen camino
Cita:
Empezado por Lepe
de qué tipo es el objeto que quieres crear?
No se a que te referis con esa pregunta. Si es visual o no visual?? Es no visual.

En este momento lo estoy haciendo con el componente TKeySpy bajado de Torry. Pero quiero saber manejar cualquier componente. Conoces algun texto sobre este tema??

Entiendo lo de que tiene que estar definido dentro de un objeto pero no se como hacerlo.
Responder Con Cita
  #5  
Antiguo 12-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.109
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Sotrono
Estoy haciendo una aplicacion sin form (programo en el dpr) y hasta ahora me encontre con 2 problemas que no puedo solucionar:
¿Quieres decir que estás haciendo una aplicación de tipo consola?

Cita:
Empezado por Sotrono
1) Como creo un objeto? En una aplicacion con form tengo que poner

Código Delphi [-]
 NombreObjeto:= NombeClase.Create(self);
Pero sin el Form no se puede usar "self".
Puedes crearlo sin referencia, o sea con una refencia "nula", tal como te plantea Lepe arriba. Luego no debes olvidarte de destruir el objeto en cuestión: puesto que tú te haces cargo del mismo.

Cita:
Empezado por Sotrono
2) Como y donde tengo que declarar los procedimientos para los eventos.
A ver, tenemos que aclarar qué quiere decirse por "procedimientos para los eventos". ¿Te refieres a que el objeto tiene ciertos eventos publicados? ¿Te refieres a que el objeto cuente con uno o más métodos que puedan asociarse a un evento, digamos, de otro objeto?

Como creo que es a esto último a lo que te refieres, piensa en declarar e implementar en tu objeto un método que cuente con los parámetros apropiados para el evento al cual piensas asociarlo. Ambos, evento y método han de tener exactamente los mismos parámetros y en el mismo orden.

Supón que creamos un objeto que cuente con un método que podamos luego asociar a un evento sencillo (con un solo parámetro), como pudiera ser el "Click" de un botón. Para ello no tenemos que crear un tipo de evento, cosa que podemos hacer, sino que nos valdrá con "TNotifyEvent", que, habrás visto alguna vez.

El tipo "TNotifyEvent" se declara como sigue:

Código Delphi [-]
 type
   TNotifyEvent = procedure(Sender: TObject) of object;
Así que nosotros tenemos que preparar en nuestro objeto un método (un procedimiento, que es método por pertenecer a nuestro objeto, y así tiene que ser, como puedes ver por "of Object") capaz de trabajar con el evento "TNotifyEvent".

Código Delphi [-]
  type
    TNuestroObjeto = class
    {...}
    private
      procedure MetodoParaEvento(Sender: TObject);
    {...}
    end;
    
  procedure TNuestroObjeto.MetodoParaEvento(Sender: TObject);
  begin
    // Et voilà
  end;
Una vez creado nuestro objeto podremos disponer de una instancia del mismo y asociar a cualquier evento de tipo "TNotifyEvent" nuestro "MetodoParaEvento". ¿Y si necesitas crear tu propio evento? Pues declaras un tipo tal que "TNofyEvent", de este modo, por ejemplo:

Código Delphi [-]
 type
   TUnEvento = procedure (Sender: TObject; mensaje: string) of Object;

Y el objeto podría quedar así para contar con un método capaz de asociarse con "TUnEvento":

Código Delphi [-]
  type
    TNuestroObjeto = class
    {...}
    private
      procedure MetodoParaMiEvento(Sender: TObject; mensaje: string);
    {...}
    end;
    
  procedure TNuestroObjeto.MetodoParaMiEvento(Sender: TObject; mensaje: string);
  begin
    // Et voilà
  end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 12-09-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.933
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por Sotrono
1) Como creo un objeto? En una aplicacion con form tengo que poner
NombreObjeto:= NombeClase.Create(self);
Pero sin el Form no se puede usar "self".
Quiero detenerme en ese punto, para resaltar un error de conceptos grave, que no es la primera vez que lo veo. El parámetro Owner que nos pide el create, es quién será el dueño de este objeto, que será el encargado de destruirlo, a no ser que nosotros nos hayamos encargado de esto, y no necesariamente tiene que ser Self o Application. Es un punto a evaluar, dependiendo de la lógica del programa.
Cita:
Empezado por Ayuda de Delphi
Indicates the component that is responsible for streaming and freeing this component.
Cita:
Empezado por Sotrono
En este momento lo estoy haciendo con el componente TKeySpy bajado de Torry
Mmmmmm... ¡Que feo suena eso!

Agregando a la explicación, de Dec, te recomiendo leer este hilo:
http://www.clubdelphi.com/foros/showthread.php?t=23405

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 12-09-2005 a las 14:18:18.
Responder Con Cita
  #7  
Antiguo 12-09-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Como no se exactamente que quieres hacer aqui tiene un ejemplo de para un aaplicacion que corre sis formas y dependiendo de sis es nt corre como servicio y si no corre como aplicacion que puede ser en le icon try
Código Delphi [-]
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Service2: TService};

{$R *.res}

begin
  {Function EsNt: Boolean;
  Var
    verInfo : TOSVERSIONINFO;
  Begin
    verInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
    Result := VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT;
  End;}

  If Not EsNt Then
    Application.ShowMainForm = False;
  Application.Initialize;
  If Not EsNt
    Application.CreateForm(TForm1, Form1)
  Else
    Application.CreateForm(TService2, Service2);
  Application.Run;
end.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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


La franja horaria es GMT +2. Ahora son las 04:02:30.


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