2015년 10월 18일 일요일

사용자이벤트

unit Unit1;



interface

uses

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

  Dialogs, StdCtrls;

Type

  // 이벤트 핸들러 생성
  TMy1stEvent = procedure(PrvValue, CurValue: integer) of object;

  // 값 변경 감시 클래스 정의 [사용자 이벤트 정의]
  TWatchChangeValue = class
  private
    FOnChangeVal : TMy1stEvent;
  public
    procedure ChangeValue(PrvValue, CurValue: integer);
  published
    property OnChangeValue : TMy1stEvent read FOnChangeVal write FOnChangeVal;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }


    // 값 변경 감시 클래스 선언
    WatchChangeValue : TWatchChangeValue;

    // 이벤트 발생시 호출하는 함수 선언
    procedure ChangeValue2(PrvValue, CurValue: integer);

  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
  // 이벤트를 발생시키는 트리거 함수
  WatchChangeValue.ChangeValue(edit1.Tag, StrToInt(edit1.Text));

  if edit1.Tag <> StrToInt(edit1.Text) then
    edit1.Tag := StrToInt(edit1.Text);
end;


// 이벤트 발생시 호출하는 함수
procedure TForm1.ChangeValue2(PrvValue, CurValue: integer);
begin
  // 변경전 값과 변경후 값 표시
  self.Caption := IntToStr(PrvValue) + '>>>' + IntToStr(CurValue)
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  // 이벤트 등록
  WatchChangeValue := TWatchChangeValue.Create();
  // 값 변경 이벤트가 발생되었을 때 호출할 함수 설정
  WatchChangeValue.OnChangeValue := ChangeValue2;
end;


{ TWatchChangeValue }



// 이벤트 호출
procedure TWatchChangeValue.ChangeValue(PrvValue, CurValue: integer);
begin
  if Assigned(OnChangeValue) then OnChangeValue(PrvValue, CurValue);
end;


end.

// 출처 Posted by 떡잎  http://wwwi.tistory.com/280

댓글 없음:

댓글 쓰기