Events(Delphi) Delphi의 이벤트
18341 단어 delphi
This topic describes the following material:
4
[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.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Delphi 10.3.3 IDE 글꼴 및 글꼴 크기 수정Delphi는 Windows 플랫폼에서 유명한 빠른 응용 프로그램 개발 도구(Rapid Application Development, 약칭 RAD)입니다.그것의 전신은 바로 DOS 시대에 성행한'Borland Turb...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.