Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Aplicacion sin form (https://www.clubdelphi.com/foros/showthread.php?t=25076)

Sotrono 11-09-2005 21:44:55

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

Lepe 11-09-2005 22:10:46

Un saludo (que siempre se pone de coletilla.... ,¿por qué no ponerlo al principio? :D)

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.

Lepe 11-09-2005 22:42:38

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

Sotrono 12-09-2005 02:03:49

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.

dec 12-09-2005 03:54:21

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;

delphi.com.ar 12-09-2005 14:09:12

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! :p

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

Saludos!

rastafarey 12-09-2005 21:07:13

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.


La franja horaria es GMT +2. Ahora son las 01:34:59.

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