Q&A

  • [컴포넌트 제작]타이머에 관한 질문입니다.
안녕하세요?

컴포넌트 제작 일을 돕고 있는 학생이지요...



타이머를 포함한 컴포넌트를 만들려고 하는데, 뜻밖의 문제에 도달하였답니다.

소스도 같이 올립니다.



보통, 예를 들어 click 이벤트와 같이 사용자 이벤트가 직접적으로 주어지는 경우는

제대로 동작하였으나,

Timer의 OnTimer 즉, 가상메소드인 Timer를 이용하니,

컴포넌트로 코딩한대로 실행이 되지 않았습니다.

그래서, 실험정신(?)으로, 저의 임시 타이머 컴포넌트를 이용하여, 아래에 보시는

대로, 저의 컴포넌트에 OnTimer의 동작이 명시되어 있음에도 불구하고,

원래, Events 창에 있는 OnTimer를 이용하여 다시 유사한 동작을

명시하여 보았습니다.

그르니까, 저의 컴포넌트의 OnTiemr는 OnTime시에 'aaaa'를 ShowMessage로 띄

우게 하고, Events창의 OnTimer에게는 'bbbb' 메세지를 띄우게 하였습니다.



그러고 나서 실행하고 나니, aaaa와 bbbb가 교대로 띄워지지 않겠습니까?



학교 선배님의 추측으로는,

Timer는 사용자 이벤트로 직접적으로 주어지는 것이 아니라, 시스템적인 것이므로,

타이머는 원래 주어진 컴포넌트에서 요구가 있을때만 동작하는 것이 아니겠냐고

하시더군요.

정말 그런가요?



컴포넌트로 주어진 시간뒤에 어떤 동작을 할수 있게 하는 방법이 없나요?

아시는 고수님들!! 꼭 가르쳐 주세요!!



unit ExT;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls;



type

TExT = class(TTimer)

private

{ Private declarations }

protected

{ Protected declarations }

procedure Timer; override;

public

{ Public declarations }

constructor Create(AOwner: TComponent); override;

published

{ Published declarations }

end;



procedure Register;



implementation



constructor TExT.Create(AOwner: TComponent);

begin

inherited Create(AOwner);

end;



procedure TExT.Timer;

begin

inherited Timer;



ShowMessage('aaaa');

end;



procedure Register;

begin

RegisterComponents('Samples', [TExT]);

end;



end.

1  COMMENTS
  • Profile
    최용일 2000.05.08 08:05
    안녕하세요. 최용일입니다.



    말씀하신대로 'aaaa'와 'bbbb'가 교대로 띄워지는게 제대로 작동하는 것입니다.



    작성하신 타이머의 Timer메소드를 보시면 아래와 같이 부모의 Timer메소드를 호출하셨



    더군요. 그러니까 부모의 Timer메소드에서 OnTimer를 호출하여 'bbbb'를 띄우고 그다음



    아래 코드의 'aaaa'를 띄우는 것입니다. 그러니 타이머 이벤트마다 교대로 계속해서



    뜨는 것입니다. 이것이 제대로된 동작입니다.



    > procedure TExT.Timer;

    > begin

    > inherited Timer;

    >

    > ShowMessage('aaaa');

    > end;



    사실 TTimer.Timer메소드는 단지 OnTimer이벤트가 설정되어 있을때 호출하는 역활밖에



    하지 않습니다.



    제 추측입니다만 아마도 하실려는 일이 매번 타이머 이벤트(OnTimer)가 발생하는 것이



    아니라 어떤 일정한 시간이 되면 OnTimer이벤트가 발생하게 하실려는것 같은데요.



    타이머에 계수를 하나 설정해두고 그것이 어떤 시간을 가리킨다면 OnTimer이벤트를



    실행하는 방식으로 짜신다면 될것같은데요. 아래와 같은식으로요...



    procedure TExT.Timer;

    begin

    if 계수 = 일정한시간 then

    begin

    if Assigned(FOnTimer) then

    OnTimer(Self);

    end

    else

    계수 = 계수 + 1;

    end;



    아니면 타이머의 Interval을 설정하시는 것도 있구요.



    ^^ 항상 즐코하세요.



    양은주 wrote:

    > 안녕하세요?

    > 컴포넌트 제작 일을 돕고 있는 학생이지요...

    >

    > 타이머를 포함한 컴포넌트를 만들려고 하는데, 뜻밖의 문제에 도달하였답니다.

    > 소스도 같이 올립니다.

    >

    > 보통, 예를 들어 click 이벤트와 같이 사용자 이벤트가 직접적으로 주어지는 경우는

    > 제대로 동작하였으나,

    > Timer의 OnTimer 즉, 가상메소드인 Timer를 이용하니,

    > 컴포넌트로 코딩한대로 실행이 되지 않았습니다.

    > 그래서, 실험정신(?)으로, 저의 임시 타이머 컴포넌트를 이용하여, 아래에 보시는

    > 대로, 저의 컴포넌트에 OnTimer의 동작이 명시되어 있음에도 불구하고,

    > 원래, Events 창에 있는 OnTimer를 이용하여 다시 유사한 동작을

    > 명시하여 보았습니다.

    > 그르니까, 저의 컴포넌트의 OnTiemr는 OnTime시에 'aaaa'를 ShowMessage로 띄

    > 우게 하고, Events창의 OnTimer에게는 'bbbb' 메세지를 띄우게 하였습니다.

    >

    > 그러고 나서 실행하고 나니, aaaa와 bbbb가 교대로 띄워지지 않겠습니까?

    >

    > 학교 선배님의 추측으로는,

    > Timer는 사용자 이벤트로 직접적으로 주어지는 것이 아니라, 시스템적인 것이므로,

    > 타이머는 원래 주어진 컴포넌트에서 요구가 있을때만 동작하는 것이 아니겠냐고

    > 하시더군요.

    > 정말 그런가요?

    >

    > 컴포넌트로 주어진 시간뒤에 어떤 동작을 할수 있게 하는 방법이 없나요?

    > 아시는 고수님들!! 꼭 가르쳐 주세요!!

    >

    > unit ExT;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > ExtCtrls;

    >

    > type

    > TExT = class(TTimer)

    > private

    > { Private declarations }

    > protected

    > { Protected declarations }

    > procedure Timer; override;

    > public

    > { Public declarations }

    > constructor Create(AOwner: TComponent); override;

    > published

    > { Published declarations }

    > end;

    >

    > procedure Register;

    >

    > implementation

    >

    > constructor TExT.Create(AOwner: TComponent); // <<<<<<< 필요없는 코드

    > begin

    > inherited Create(AOwner);

    > end;

    >

    > procedure TExT.Timer;

    > begin

    > inherited Timer;

    >

    > ShowMessage('aaaa');

    > end;

    >

    > procedure Register;

    > begin

    > RegisterComponents('Samples', [TExT]);

    > end;

    >

    > end.

    • 최용일
      2000.05.09 03:12
      안녕하세요. 최용일입니다. 바뀔때마다 자동으로 다운로드하게 하실려면 html에다가 ActiveX버전을 포함...
    • 강인규
      2000.05.08 20:44
      저두 ActiveX를 한번 해보았을 뿐이지만 제가 아는 한도에서 답변해드리겠습니다. db연동이 관건인데........
    • 하얀까마귀
      2000.05.08 22:31
      안녕하세요 하얀까마귀 입니다.. 여러폼에서 사용하신다면 전역으로 선언을 하셔야 할것 같네요.. 전...
    • 하얀까마귀
      2000.05.08 19:40
      안녕하세요 하얀까마귀 입니다.. 휘휴.. 이제 너무많이해서 이말은 하기 싫지만... 'Access violatio...
    • seagod
      2000.05.08 20:20
      로컬에서 테스트하기 위해서는 최소한 랜카드가 있어야합니다. 혹시 랜카드가 설치되었있는지요. 확인하시...
    • 한근수
    • 2000.05.08 19:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2000.05.08 19:38
      안녕하세요 하얀까마귀 입니다.. 소스에서 해야되는건 별로 없고요.. 콤포넌트 설정에 대해서 설명드릴...
    • 한근수
      2000.05.08 23:14
      하얀까마귀 wrote: > 안녕하세요 하얀까마귀 입니다.. > > 소스에서 해야되는건 별로 없고요.. 콤포넌...
    • 이선미
    • 2000.05.08 09:01
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.08 10:14
      안녕하세요. 최용일입니다. 프로그램상에서 구현을 하던지 DB를 쓰던지 아뭏든 우편번호를 가지고 주소...
    • 이선미
      2000.05.09 05:18
      예. 저도 그렇게 생각을 했거든요 그런데 제가 db를 작성한게 아니라 기존에 있던 db를 받아서 다시 프로...
    • 최용일
      2000.05.09 05:53
      안녕하세요. 최용일입니다. 코딩으로 하셔도 마찬가지의 노가다입니다. 그 많은 우편번호 자료를 일일이...
    • 최용일
      2000.05.08 09:16
      안녕하세요. 최용일입니다. 프라퍼티에디터에서 라벨의 Cursor프로퍼티를 crHandPoint로 설정하세요. ...
    • 최용일
      2000.05.08 08:14
      안녕하세요. 최용일입니다. 저는 델파이로 짠다고 해서 더 쉽다거나 더 어렵다거나 하지는 않는다고 생...
    • Mr.Q
    • 2000.05.08 06:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.08 08:44
      안녕하세요. 최용일입니다. 아래와 같이 하시면 좌우여백은 설정하실 수 있는데 위,아래 여백 설정하는...
    • 양은주
    • 2000.05.08 06:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.08 08:05
      안녕하세요. 최용일입니다. 말씀하신대로 'aaaa'와 'bbbb'가 교대로 띄워지는게 제대로 작동하는 것입니...
    • 노상균
    • 2000.05.08 04:17
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 미정
      2000.05.09 07:18
      노상균 wrote: > 쿼리문에 관한 질문. > > db name : Enroll > field name : Jubsu_no Short I...
    • 노민철
      2000.05.08 06:18
      노상균 wrote: > 쿼리문에 관한 질문. > > db name : Enroll > field name : Jubsu_no Short I...
    • 노상균
    • 2000.05.07 22:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김태균
      2000.05.08 01:04
      일단 datasource1,query1이 마스터구 datasource2,query2을 디테일로 설정하구 SQL을 만들죠. query2의...
    • 주기표
    • 2000.05.07 22:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.09 19:55
      안녕하세요. 최용일입니다. 컴포넌트 선택을 잘못하신것 같네요. 메모(TMemo)의 주기능은 편집기인데요....
    • 윤티
      2000.05.08 03:18
      톰과 제리 wrote: > 키입력이 없서면 일정시간후 원도를 종료하려고 합니다. > 전역훅킹을 하면 키입력을...
    • 최용일
      2000.05.08 07:49
      안녕하세요. 최용일입니다. 가상메소드가 무슨 의미인지는 몰라도 OnTimer이벤트를 처리하는 메소드는 T...
    • 최용일
      2000.05.07 05:00
      안녕하세요. 최용일입니다. 또 다른 방법으로는 TWebBrowser를 이용하는 방법도 있습니다. 먼저 플래쉬...
    • 김경식
      2000.05.07 04:51
      poppe wrote: > > image에서 읽을수 있는 파일 종류에 swf가 없더군요.... > > 혹시 swf파일을 읽어...