Q&A

  • 동적 생성시에 인자를 같이 전달하는 방법 없나여?
타이머를 동적 생성한 후 이벤트에 인자를 넣는 건데

타이머의 번호(index1)와 구별인자(index2)를 이벤트내에서 처리 할려구합니다.

꼭 타이머는 아니더라도(다른 VCL의 경우도) 방법이 있는지요?

Componet의 태그를 쓰는 방법은 알고 있는거염...

고수님... 꼭 도와주세여..... ㅠ.ㅠ;;



밑에 처럼 해봤는데 전혀 안되더라구여...



public

procedure OnMyTimer(Sender: TObject; index1, index2 : integer);



var

MyTimer : Array[1..8] of TTimer;

implementation



procedure TForm1.OnMyTimer(Sender: TObject; index1, index2 : integer);

var

aa : integer;

begin

aa := index1;

// 처리 내용

end;



procedure TForm1.FormCreate(Sender: TObject);

var

i : integer;

begin

for i := 1 to 8 do

begin

MyTimer[i] := TTimer.Create(Self);

MyTimer[i].OnTimer := OnMyTimer(MyTimer[i],i,1);

end;

end;



2  COMMENTS
  • Profile
    kylix 2001.04.14 20:26
    이벤트는 그 형이 규격화되어 있습니다. 그러므로 새로운 객체를 만들고, 그 타이머이벤트형을 다시 만들어서 쓰지 않은한 아래와 같은 경우는 불가능합니다.



    Tag를 쓰는 방법을 아신다면 Tag를 쓰세요. Tag는 32비트정수입니다. 형변환만 하시면

    어떤형의 변수든지 다 들어갈 수 있으니까요. 님의 경우는 레코드를 이용해서 태그에다 넣어주시면 되겠네요...



    type

    PMyRec = ^TMyRec;

    TMyRec = record

    Index1, Index2: Integer;

    end;



    procedure TForm1.OnMyTimer(Sender: TObject);

    var

    aa : integer;

    begin

    aa := PMyRec(TTimer(Sender).Tag).Index1;

    // 처리 내용

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    var

    i : integer;

    P: PMyRec;

    begin

    for i := 1 to 8 do

    begin

    MyTimer[i] := TTimer.Create(Self);

    MyTimer[i].OnTimer := OnMyTimer;

    New(P);

    P.Index1 := i;

    P.Index := 1;

    MyTimer[i].Tag := Integer(P);

    // 이객체 해제할때 Tag에 설정된 포인터를 먼저 해제해주세요...

    // Dispose(PMyRec(MyTimer[i].Tag));

    end;

    end;



    초보여염 wrote:

    > 타이머를 동적 생성한 후 이벤트에 인자를 넣는 건데

    > 타이머의 번호(index1)와 구별인자(index2)를 이벤트내에서 처리 할려구합니다.

    > 꼭 타이머는 아니더라도(다른 VCL의 경우도) 방법이 있는지요?

    > Componet의 태그를 쓰는 방법은 알고 있는거염...

    > 고수님... 꼭 도와주세여..... ㅠ.ㅠ;;

    >

    > 밑에 처럼 해봤는데 전혀 안되더라구여...

    >

    > public

    > procedure OnMyTimer(Sender: TObject; index1, index2 : integer);

    >

    > var

    > MyTimer : Array[1..8] of TTimer;

    > implementation

    >

    > procedure TForm1.OnMyTimer(Sender: TObject; index1, index2 : integer);

    > var

    > aa : integer;

    > begin

    > aa := index1;

    > // 처리 내용

    > end;

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > var

    > i : integer;

    > begin

    > for i := 1 to 8 do

    > begin

    > MyTimer[i] := TTimer.Create(Self);

    > MyTimer[i].OnTimer := OnMyTimer(MyTimer[i],i,1);

    > end;

    > end;

    >

  • Profile
    이제관 2001.05.09 00:17
    고마워여 저도 이방법을 찾고 있었는데 도움이 많이 됐습니다.

    kylix wrote:

    > 이벤트는 그 형이 규격화되어 있습니다. 그러므로 새로운 객체를 만들고, 그 타이머이벤트형을 다시 만들어서 쓰지 않은한 아래와 같은 경우는 불가능합니다.

    >

    > Tag를 쓰는 방법을 아신다면 Tag를 쓰세요. Tag는 32비트정수입니다. 형변환만 하시면

    > 어떤형의 변수든지 다 들어갈 수 있으니까요. 님의 경우는 레코드를 이용해서 태그에다 넣어주시면 되겠네요...

    >

    > type

    > PMyRec = ^TMyRec;

    > TMyRec = record

    > Index1, Index2: Integer;

    > end;

    >

    > procedure TForm1.OnMyTimer(Sender: TObject);

    > var

    > aa : integer;

    > begin

    > aa := PMyRec(TTimer(Sender).Tag).Index1;

    > // 처리 내용

    > end;

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > var

    > i : integer;

    > P: PMyRec;

    > begin

    > for i := 1 to 8 do

    > begin

    > MyTimer[i] := TTimer.Create(Self);

    > MyTimer[i].OnTimer := OnMyTimer;

    > New(P);

    > P.Index1 := i;

    > P.Index := 1;

    > MyTimer[i].Tag := Integer(P);

    > // 이객체 해제할때 Tag에 설정된 포인터를 먼저 해제해주세요...

    > // Dispose(PMyRec(MyTimer[i].Tag));

    > end;

    > end;

    >

    > 초보여염 wrote:

    > > 타이머를 동적 생성한 후 이벤트에 인자를 넣는 건데

    > > 타이머의 번호(index1)와 구별인자(index2)를 이벤트내에서 처리 할려구합니다.

    > > 꼭 타이머는 아니더라도(다른 VCL의 경우도) 방법이 있는지요?

    > > Componet의 태그를 쓰는 방법은 알고 있는거염...

    > > 고수님... 꼭 도와주세여..... ㅠ.ㅠ;;

    > >

    > > 밑에 처럼 해봤는데 전혀 안되더라구여...

    > >

    > > public

    > > procedure OnMyTimer(Sender: TObject; index1, index2 : integer);

    > >

    > > var

    > > MyTimer : Array[1..8] of TTimer;

    > > implementation

    > >

    > > procedure TForm1.OnMyTimer(Sender: TObject; index1, index2 : integer);

    > > var

    > > aa : integer;

    > > begin

    > > aa := index1;

    > > // 처리 내용

    > > end;

    > >

    > > procedure TForm1.FormCreate(Sender: TObject);

    > > var

    > > i : integer;

    > > begin

    > > for i := 1 to 8 do

    > > begin

    > > MyTimer[i] := TTimer.Create(Self);

    > > MyTimer[i].OnTimer := OnMyTimer(MyTimer[i],i,1);

    > > end;

    > > end;

    > >