Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Lanzar evento.... (https://www.clubdelphi.com/foros/showthread.php?t=3433)

craven 06-09-2003 11:45:15

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.

Julià T. 06-09-2003 15:15:33

Y como accedes?

gatosoft 06-09-2003 17:01:23

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)

craven 06-09-2003 20:47:37

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.

gatosoft 08-09-2003 22:04:05

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;



La franja horaria es GMT +2. Ahora son las 00:31:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi