TDAQSocket = class(TClientSocket)
private
DAQ_ID: integer;
published
Property OnRecEnd : TOnRecEndEvent Read FOnRecEnd write FOnRecEnd;
end; ----> 클라이언트 소켓을 상속받아 만든 클래스입니다.
recend라는 이벤트는 메인 폼에서 정의 했습니다.
TfrmMain = class(TForm)
private
daq: array of TDAQSocket // 동적으로 생성해서 씁니다.
procedure OnDAQRecEnd(Sender: TObject; RecCount : integer);
end;
..
procedure TfrmMain.Create(Sender: TObject);
var
i: integer
begin
setlength(daq, 10)
for i = 0 to 9 do
begin
daq = TDAQSocket.create(self);
daq.OnRecEnd = OnDAQRecEnd;
daq.DAQ_ID = i;
end;
end;
procedure TfrmMain.OnDAQRecEnd(Sender: TObject; RecCount : integer);
begin
try
grdDataInfo.Cells[0, 3] := intTostr(TDAQSocket(Sender).DAQ_ID);
if TDAQSocket(Sender).Dio_Data = 1 then
SetData(TAdvStringGrid(FindComponent('BK2020Item_'+IntToStr(TDAQSocket(Sender).DAQ_ID+1))), TDAQSocket(Sender));
except
end;
end; // recend프로시져 구현부입니다.
프로시져에 보면 스트링 그리드도 동적으로 생성했습니다. daq라는 걸 동적생성 시키면 그 숫자 만큼 그리드도 생성됩니다. 그럼 각각의 daq의 recend이벤트가 발생하면 메인의 프로시져로 넘어옵니다. 그럼 그 DAQ_ID에 해당하는 그리드에 데이터를 넣는 것인데 그런데 제가 생성할때 DAQ_ID라는 곳에 각각 구분하기 위한 인덱스를 넣었는데 그게 항상 0만 넘어 옵니다.
이유를 몰라 여기에 올려 봅니다..
폼의 OnCreate이벤트가 이상한데요. 컴파일 자체가 안될거 같은데...
아래와 같이 해야 될거 같네요...
procedure TfrmMain.Create(Sender: TObject);
var
i: integer
begin
setlength(daq, 10)
for i = 0 to 9 do
begin
daq[i] := TDAQSocket.create(self);
daq[i].OnRecEnd = OnDAQRecEnd;
daq[i].DAQ_ID = i;
end;
end;
^^ 항상 즐코하세요...