Events(Delphi) Delphi의 이벤트

18341 단어 delphi
Events (Delphi)
This topic describes the following material:
4
  • Event properties and event handlers(이벤트 속성 및 시간 처리 방법)
  • 4
  • Triggering multiple event handlers(여러 이벤트 처리 방법 트리거)
  • Contents
     [hide] 
    1 About Events
    2 Event Properties and Event Handlers
    3 Triggering Multiple Event Handlers
    4 See Also
    이벤트 정보
    An event links an occurrence in the system with the code that responds to that occurrence. The occurrence triggers the execution of a procedure called an event handler. The event handler performs the tasks that are required in response to the occurrence. Events allow the behavior of a component to be customized at design-time or at run time. To change the behavior of the component, replace the event handler with a custom event handler that will have the desired behavior.
    하나의 이벤트 링크 시스템에서 하나의 이벤트가 발생하고 이 이벤트에 대한 응답 코드를 재생합니다.이벤트가 발생할 때 트리거되어 실행되는 과정을 이벤트 처리 방법이라고 부른다.이벤트 처리 방법은 이벤트에 응답해야 하는 작업을 수행합니다. 원하는 행동을 실현하려면 사용자 정의 이벤트 처리 방법으로 원래의 이벤트 처리 방법을 바꿔야 합니다.
    이벤트 속성 및 이벤트 처리 방법
    Components that are written in Delphi use properties to indicate the event handler that will be executed when the event occurs. By convention, the name of an event property begins with "On", and the property is implemented with a field rather than read/write methods. The value stored by the property is a method pointer, pointing to the event handler procedure.
    Delphi의 구성 요소에서 이벤트 처리 방법을 속성으로 표시합니다. 이 방법은 이벤트가 발생할 때 실행됩니다.일반적으로 이벤트 속성의 이름은 On으로 시작하고 이벤트 속성은read/write 방법을 사용하지 않고 필드로 실행됩니다.속성에 저장된 값은 방법의 지침으로 이벤트 처리 방법의 과정을 가리킨다.
    In the following example, the TObservedObject class includes an OnPing event, of type TPingEvent. The FOnPing field is used to store the event handler. The event handler in this example, TListener.Ping, prints 'TListener has been pinged!'.
     program EventDemo;
     
     {$APPTYPE CONSOLE}
     type
       { Define a procedural type }
       TPingEvent = procedure of object;
     
       { The observed object }
       TObservedObject = class
       private
         FPing: TPingEvent;
     
       public
         property OnPing: TPingEvent read FPing write FPing;
     
         { Triggers the event if anything is registered }
         procedure TriggerEvent();
       end;
     
       { The listener }
       TListener = class
         procedure Ping;
       end;
     
     
     procedure TObservedObject.TriggerEvent;
     begin
       { Call the registerd event only if there is a listener }
       if Assigned(FPing) then
         FPing();
     end;
     
     procedure TListener.Ping;
     begin
       Writeln('TListener has been pinged.');
     end;
     
     var
       ObservedObject: TObservedObject;
       Listener: TListener;
     
     begin
       { Create object instances }
       ObservedObject := TObservedObject.Create();
       Listener := TListener.Create();
     
       { Register the event handler }
       ObservedObject.OnPing := Listener.Ping;
     
       { Trigger the event }
       ObservedObject.TriggerEvent();//Should output 'TListener has been pinged'
       Readln;                       // Pause console before closing
     end.

    Triggering Multiple Event Handlers(트리거 다중 이벤트 처리 방법)
    In Delphi, events can be assigned only a single event handler. If multiple event handlers must be executed in response to an event, the event handler assigned to the event must call any other event handlers. 
    Delphi에서 이벤트는 하나의 이벤트 처리 방법만 부여할 수 있습니다. (이것은.net과 다르고.net 이벤트는 멀티캐스트 기능을 타고났습니다. (multicast))) 한 이벤트에 응답할 때 여러 이벤트 처리 방법을 실행해야 한다면 이벤트에 값을 부여하는 이벤트 처리 방법은 모든 다른 이벤트 처리 방법을 호출해야 합니다.
    In the following code, a subclass of TListener called TListenerSubclass has its own event handler called Ping2. In this example, the Ping2 event handler must explicitly call the TListener.Ping event handler in order to trigger it in response to the OnPing event:
     program EventDemo2;
     
     {$APPTYPE CONSOLE}
     
     type
       { Define a procedural type }
       TPingEvent = procedure of object;
     
       { The observed object }
       TObservedObject = class
       private
         FPing: TPingEvent;
     
       public
         property OnPing: TPingEvent read FPing write FPing;
     
         { Triggers the event if anything is registered }
         procedure TriggerEvent();
       end;
     
       { The listener }
       TListener = class
         procedure Ping;
       end;
     
       { The listener sub-class }
       TListenerSubclass = class(TListener)
         procedure Ping2;
       end;
     
     procedure TObservedObject.TriggerEvent;
     begin
       { Call the registerd event only if there is a listener }
       if Assigned(FPing) then
         FPing();
     end;
     
     procedure TListener.Ping;
     begin
       Writeln('TListener has been pinged.');
     end;
     
     procedure TListenerSubclass.Ping2;
     begin
       { Call the base class ping }
       Self.Ping();
       Writeln('TListenerSubclass has been pinged.');
     end;
     
     var
       ObservedObject: TObservedObject;
       Listener: TListenerSubclass;
     
     begin
       { Create object instances }
       ObservedObject := TObservedObject.Create();
       Listener := TListenerSubclass.Create();
     
       { Register the event handler }
       ObservedObject.OnPing := Listener.Ping2;
     
       { Trigger the event }
       ObservedObject.TriggerEvent();//Should output 'TListener has been pinged'
                                  //and then 'TListenerSubclass has been pinged'
       Readln;                    // Pause console before closing
     end.

    좋은 웹페이지 즐겨찾기