Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-09-2003
craven craven is offline
Miembro
 
Registrado: may 2003
Posts: 78
Poder: 22
craven Va por buen camino
Arrow Lanzar evento....

Hola a todos. La duda que tengo sobre el lanzamiento de un evento es la siguiente. Quisiera que al lanzar un determinado evento, se retorne en el mismo un conjunto de valores dentro de un array, es decir:

TMiEv = procedure (Sender: TObject; datos: array of variant) of object ;

Como veis asi declaro el evento, pero en el capturador del evento, cuando quiero acceder a los datos del array me da error. ¿Por qué? ¿Hay alguna otra forma de hacerlo? Los datos que contiene el array son de distintos tipos (entero, real y cadena de caracteres). Gracias de antemano por la ayuda. Un saludo.
__________________
craven
Responder Con Cita
  #2  
Antiguo 06-09-2003
Julià T. Julià T. is offline
Miembro
 
Registrado: may 2003
Ubicación: en el teclado
Posts: 314
Poder: 21
Julià T. Va por buen camino
Y como accedes?
Responder Con Cita
  #3  
Antiguo 06-09-2003
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
EL problema que tienes es la manera como defines tu variable de salida. Es erroneo hacer :

Código:
TMiEv = procedure (Sender: TObject; datos: array of variant) of object ;
debes definir la variable datos asi:

Código:
TMiEv = procedure (Sender: TObject;  VAR  datos: array of variant) of object ;
Y dentro de tu codigo, la puedes utilizar asi:

Código:
Procedure CalcularAlgo;
   var vDatos:Array of Variant;
Begin

{.....Calculos.....}

if Se_cumplio_Condicion then
    if assigned(FMiEv) then
       begin
          FMiEv(self, vDatos);
          for i:= low(vDatos) to high(vDatos) do
               {...haces lo que quieras....}
       end;

end;
Ya lo probe y funciona asi, pero me pregunto: ¿para que utilizas este tipo de eventos?. Lo digo por que al principio me llamo la atencion un evento que devolviera valores de ese modo, y me hice la misma pregunta que Julià T.: "¿y como accedes?". Es una manera poco comun de definir un evento. (me parece)
Responder Con Cita
  #4  
Antiguo 06-09-2003
craven craven is offline
Miembro
 
Registrado: may 2003
Posts: 78
Poder: 22
craven Va por buen camino
Antes de nada, gracias.

Lo que estoy intentado hacer es un pequeño panel de opciones, de forma que al pulsar OK se lance un evento, capturable y que retorne todas las modificaciones realizadas en las opciones que se presentan en dicho panel.

El problema que se me presenta al utilizar este tipo de array abierto es que cuando intento asignar el valor de una casilla a la variable que deseo, me da un fallo.

Un saludo.
__________________
craven
Responder Con Cita
  #5  
Antiguo 08-09-2003
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Bueno, el problema tal vez sea que no inicializas la variable Datos. como es un vector dinámico, debes decirle cual es la lomgitud de los datos que estas almacenando, con: SetLength .

Ahora, si ya lo hiciste, y te marca error al asignar una variable (cosa bien rara, por que por definicion, un variant acepta cualquier cosa), lo mas probable es que estes utilizando un subindice equivocado. Por ejemplo:

Código:
vSubIndice:=0;
{....}
inc(vSubuIndice);
SetLength(vDatos, vSubindice);
vDatos[vsubIndice]:=1234;
Esto es un error, pues la lista se inicializa en Cero. por lo que debes hacer:

Código:
vSubIndice:=0;
{....}
inc(vSubuIndice);
SetLength(vDatos, vSubindice);
vDatos[vsubIndice-1]:=1234;
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 16:59:45.


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