안녕하세요.
제가 에디터 컴포넌트를 수정하여 만들려고 합니다.
그런데 KeyDown, KeyUp 이벤트를 에디터 컴포넌트에서 상속받아서
기능을 추가하려고 하는데 이상한 에러가 나네요. 도움말을 봐도,
질문 난과 같이 해서 선언에러 같은 것 이 자꾸납니다.
무엇을 잘 못해 에러가 나는건지요?
==========================================
다음과 같이 해보세요.
Example입니다. 즐거운 하루되세요.
unit LsyEditpas;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math, ExtCtrls;
type
TLsyEdit = class(TEditPanel)
private
FNo1 : TEdit;
FNo2 : TEdit;
{ Private declarations }
protected
{ Protected declarations }
procedure KeyPress(var Key: Char); override; //***** 다음과 같이 쓰세요 *****
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{ Public declarations }
published
{ Published declarations }
property OnKeyPress; //***** 다음과 같이 쓰세요 *****
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Sample', [TLsyEdit]);
end;
procedure KeyPress(var Key: Char);
begin
inheried;
end;
================== 질문과 답변을 보고 해서 아래와 같은 에러가 나네요?
[Error] LsyEditpas.pas(16): Declaration of 'KeyPress' differs from previous declaration
=========== 그러나 override 와 inheried 제거 하면 실행되지만, 내용은 실행이 되지 않습니다. ^^;;;
그것이 문제가 아니였고,
TEdit 를 보니, OnKeyDown, OnKeyUp 종류들은 property로 되어 있어
제가 어떻게 기능들은 재정의 해서 사용할수 있을까 했었는데, 답을 얻었습니
다. 함수 원형이
TWinControl 클래스 안에 들어 있더군요. ^^;;;
저와 같이 실수 하지지 마시라는 의미에서 아래와 같이 붙입니다.
선언부에 클래스는 TEdit를 상속 받았구요.
published
{ Published declarations }
procedure KeyPress(var key : Char);override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyUp(var Key: Word; Shift: TShiftState); override;
정의하시구요.
구현부에
procedure TPWEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited KeyDown(Key,Shift);
end;
.
.
.
동일하게 하시면 기능을 모두 상속받고, 아래에 기능들을 덧 붙일 수 있습니다. ^^
평안하루 되세요.