PDA

Ver la Versión Completa : Distinguir el objeto sender en un evento


vejerf
09-02-2007, 16:45:09
Hola...
El problema es el siguiente. Voy a realizar una aplicación que puede recibir datos x los puertos serie y cada vez q llega un caracter se genera un evento. El problema es q, a priori, no se cuantos puertos serie voy a tener x lo q me he definido una tabla que contiene una serie de elementos TVaCOMM.

Modems : array[1..255] of TVaCOMM

La cosa es q no se como hacer para distinguir q objeto del array es el q me esta originando el evento.

Gracias a todos...

Neftali
09-02-2007, 17:21:07
¿Qué tipo de evento es el que te llega?
¿Lo has programado tú?

Anade un parámetro del tipo: TVaCOMM

vejerf
09-02-2007, 17:41:46
Estoy usando un objeto VCL para el manejo de los puertos serie. Este objeto es el TVaCOMM y posee un evento con la siguiente definición:
TVaCommRxCharEvent = procedure(Sender: TObject; Count: Integer)
El evento se genera cada vez q llega un caracter al puerto serie. Supongo q este evento no lo puedo modificar para meter mas parámetros... aunq como no soy un experto programador tampoco lo se.
Gracias Neftali... si se te ocurre alguna idea te lo agradecería...

jhonny
09-02-2007, 18:25:24
A ver, por lo que entiendo el objeto Sender debe ser un TVaCOMM y me supongo que esa clase TVaCOMM debe tener una manera de diferenciarlo de los demás, voy a asumir que esa manera de diferenciarse sea una propiedad llamada Posición de tipo Integer: en ese caso podria hacer un cast asi:


case TVaCOMM(Sender).Posicion do
begin
//Y hacer lo que tengas que hacer...
end;

TVaCOMM(Sender).Posicion te mostraria la propiedad Posicion del objeto Sender.

Espero te haya comprendido bien y que esto te sirva de algo. ;)

Lepe
09-02-2007, 19:59:16
Yo he entendido el asunto de otra forma, no sé si servirá:


procedure TForm1.Evento_Al_recibir(Sender: TObject; Count: Integer);
var Encontrado :Boolean;
begin
for i:= low(Modems) to High(Modems) do
begin
Encontrado := TVaCOMM(Sender) = Modems[i];
if Encontrado then Break;
end;
If Encontrado then
ShowMessage('Encontrado en el índice del array Modem: '+IntTostr(i));
end;

Saludos

vejerf
12-02-2007, 14:20:15
Gracias chic@s por vuestra ayuda... asunto solucionado por el momento... pero x cambio de planes... ya os contare