Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
부모의 protected된 메소드를 사용하고 싶은데..설명,예제 부탁합니다
제목 그래로 입니다..
부모의 프로텍티드된 메소드를 사용하고 싶은데..
어떤 방법으로 하면 되는지..
쫌 설명 부탁합니다..
1
COMMENTS
구창민
•
2000.06.03 21:39
어린왕자 wrote:
> 제목 그래로 입니다..
> 부모의 프로텍티드된 메소드를 사용하고 싶은데..
> 어떤 방법으로 하면 되는지..
> 쫌 설명 부탁합니다..
>
안녕하세요~ 구창민입니다.
간단한 예를 보기위해, 만만한 TEdit 에서 파생된 클래스를 봅시다.
아래에 있는 소스는 세자리 콤마 Edit인데 TEdit에서 상속되었죠.
public 부분의 CreateParams 메쏘드를 자세히 보세요.
엄마 클래쓰의 protected의 메소드들은 상속받은후
public 으로 재선언해야 한다고 일전에 어린왕자님께 말씀드린적이 있을 겁니다.
그 이유를 다시 간단히 말씀드리면,
예를들어, TEdit에서 자손이 여러종류로 파생될 필요가 있을때
TEdit의 메소드들중 어떤 자손은 필요없고, 어떤자손은 필요있고
그러한 경우가 생깁니다.
그래서, private 에 선언할 수도 없고, public에 선언할 수도 없는
그런 메소드들을 protected에 선언해 두고 필요한
자손들만 public에 재선언 하여 사용하도록 하고 있는 것입니다.
VCL를 두루 살펴보면 TObject라는 클래스로부터
시작하여 점점 새로운 클래스를 만들어 가는 것을 볼수있을 겁니다.
그 점진적 진행을 가만히 들여다 보면 참 재미있습니다.
많은 것을 알게 되구요..제가 제대로 설명 드린건지 모르겠습니다.
그럼, 이해 되셨을 줄 믿고 즐거운 프로그래밍 하시길~
아래는 콤마 Edit의 소스입니다.
type
TNumberEdit = class(TEdit)
private
{ Private declarations }
protected
{ Protected declarations }
procedure Change; override;
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override; <--요놈
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure TNumberEdit.Change;
function Unmask( Value : String ) : Extended;
var i: Byte;
T: String;
begin
if Length( Trim( Value ) ) = 0 then begin
Result := 0;
Exit;
end
else begin
T := '';
for i := 0 to Length( Value ) - 1 do
if Copy( Value, i+1, 1 ) <> ',' then
T := T + Copy( Value, i+1, 1 );
try
Result := StrToFloat( T );
except
Result := 0;
end;
end;
end;
begin
Text := FormatFloat( '###,###,###,###', Unmask( Text ) );
if Length( Trim( Text ) ) > 0 then begin
SendMessage( Self.Handle, WM_KEYDOWN, VK_END, LongInt(0));
SendMessage( Self.Handle, WM_KEYUP , VK_END, LongInt(0));
end;
inherited Change;
end;
procedure TNumberEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams( Params );
Params.Style := Params.Style or
ES_MULTILINE or
ES_RIGHT or
ES_NUMBER or
ES_WANTRETURN;
end;
constructor TNumberEdit.Create(AOwner: TComponent);
begin
inherited Create( AOwner );
AutoSize := False;
end;
procedure Register;
begin
RegisterComponents( 'Samples', [ TNumberEdit ] );
end;
end.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
델초보
•
2000.06.03 21:08
2
COMMENTS
/
0
LIKES
도와주세요~~~
구창민
•
2000.06.03 21:42
델초보 wrote: > 안녕하세요... > 음...저는 ADO를 이용해서 클라이언트에서 DB에 접근할 수 있게 하는 ...
델초보
•
2000.06.03 22:13
감사한데... 델코가 지금 안되네요.... 급한데 그냥 알려주시면 .... 무리인다요? 죄송합니다... 바쁘...
혀기
2000.06.03 21:07
0
COMMENTS
/
0
LIKES
인터넷 프로그램
왕초보
•
2000.06.03 21:03
1
COMMENTS
/
0
LIKES
※※※ ASP & ISAPI
화랑
•
2000.06.06 05:40
델파이 5.0 부터는 Active Server Object를 만들수 있습니다.. 여기에서 Method로 리턴값을 받으면 되지...
뎐세
•
2000.06.03 20:50
2
COMMENTS
/
0
LIKES
isaip dll에서 비동기전송
타락천사
•
2000.06.04 03:35
안녕하세여.. 타락임다..^^ 우선 비동기 전송은 컴포넌트 팔래트의 소켓컴포넌트쓰면 문제가 없구여.. ...
뎐세
•
2000.06.05 03:16
답변은 감사하지만, 제가 원하는 답이 아뉘네요~~ WSA_Select(?)인가 뭐 이런 API들은 윈도 handle을 가...
류응철
2000.06.03 20:46
0
COMMENTS
/
0
LIKES
워드 띄우기 완성.. 의견 주세요... (소스포함)
구창민
2000.06.03 20:41
0
COMMENTS
/
0
LIKES
Re: 소켓프로그램
어린왕자
•
2000.06.03 20:40
1
COMMENTS
/
0
LIKES
부모의 protected된 메소드를 사용하고 싶은데..설명,예제 부탁합니다
제목 그래로 입니다.. 부모의 프로텍티드된 메소드를 사용하고 싶은데.. 어떤 방법으로 하면 되는지.. 쫌 설명 부탁합니다..
구창민
•
2000.06.03 21:39
어린왕자 wrote: > 제목 그래로 입니다.. > 부모의 프로텍티드된 메소드를 사용하고 싶은데.. > 어떤 방...
은철수
2000.06.03 20:30
0
COMMENTS
/
0
LIKES
OCR같은 이미지 파일에서 문자인식
사발우성
•
2000.06.03 20:27
1
COMMENTS
/
0
LIKES
^^ 그냥 한번 봐주시와엽....
구창민
•
2000.06.03 20:51
사발우성 wrote: > StatusBar 에다 힌트가 나오게 하고 싶어업 어떤 속성에구현하면 좋을까엽... > > ...
델초보
•
2000.06.03 20:24
2
COMMENTS
/
0
LIKES
메인폼안에서 자식폼 실행하기 알려주세요
구창민
•
2000.06.03 20:50
델초보 wrote: > 안녕하세요. > > 엑셀처럼 메인폼안에서 자식폼이 영역을 벗어나지 못하게 하고 싶어...
델초보
•
2000.06.03 21:47
창민님 답변 감사합니다. MDI 아닌 윈도우 API로는 안되는지요? 정말 감사합니다.. 그럼 즐거운 주...
미친척
•
2000.06.03 19:56
2
COMMENTS
/
0
LIKES
datetimepicker 컨포넌트의 속성에 관한 질문임당....^^
구창민
•
2000.06.03 20:46
미친척 wrote: > > 안뇽하시와엽 고수님들... 흠... > > 지가엽 데이터타임픽업 컨포넌트로엽.... ...
미친척
•
2000.06.03 20:50
구창민 wrote: > 미친척 wrote: > > > > 안뇽하시와엽 고수님들... 흠... > > > > 지가엽 데이터...
문형록
•
2000.06.03 19:48
3
COMMENTS
/
0
LIKES
내 컴퓨터의 날짜를 받아오는 거좀 알려줘요
사발우성
•
2000.06.03 20:04
안뇽 하십니까 초보사발임당.....^^ 미천한 실력이지만 갈켜드리줘...... label1.caption:=formatdateti...
문형록
•
2000.06.05 05:40
사발우성 wrote: > 안뇽 하십니까 초보사발임당.....^^ 미천한 실력이지만 갈켜드리줘...... > > label...
강인규
•
2000.06.03 19:54
문형록 wrote: > 지금 프로그램을 실행하면서 컴의 날짜를 레이블에 출력을 하려고 합니다. > > 쉬울것...
병규
2000.06.03 19:41
0
COMMENTS
/
0
LIKES
브렌젠헴 나누기 알고리즘 아시는분
유레카
2000.06.03 19:19
0
COMMENTS
/
0
LIKES
Re: DB에서 시간차이구하기
사발우성
•
2000.06.03 19:18
4
COMMENTS
/
0
LIKES
소스좀 봐줘엽... 잘 돌아가다가 이상하게 안움직임당.. ㅠ.ㅠ
구창민
•
2000.06.03 19:38
사발우성 wrote: > with query4 do > begin > close; > sql.Clear; > sql.Add('...
유레카
•
2000.06.03 19:26
사발우성 wrote: > with query4 do > begin > close; > sql.Clear; > sql.Add('...
...
•
2000.06.03 19:22
사발우성 wrote: > with query4 do > begin > close; > sql.Clear; > sql.Add('...
사발우성
•
2000.06.03 19:52
... wrote: > 사발우성 wrote: > > with query4 do > > begin > > close; > > sql.Cl...
류응철
2000.06.03 20:05
0
COMMENTS
/
0
LIKES
델파이코리아의 권오현님 답변중 이해가 안가는부분 답변 좀 부탁합니다..
노상균
•
2000.06.03 18:15
1
COMMENTS
/
0
LIKES
table의 field Editer는 어디에...
...
•
2000.06.03 18:22
노상균 wrote: > 제가 너무 몰라서요.... > > Dbedit에 mask형식을 주어서 입력하는 방법을 여쭤보았는...
하재춘
•
2000.06.03 18:15
1
COMMENTS
/
0
LIKES
as400 db2연결
맹주형
•
2000.06.04 21:21
델파이와 AS/400의 DB2와 연결을 하시려면 다음과 같이 하시면 됩니다. (1)먼저 PC에 CA400을 설치하여 ...
손규만
•
2000.06.03 17:45
1
COMMENTS
/
0
LIKES
변수내용지우기
구창민
•
2000.06.03 19:44
손규만 wrote: > var > PUZ, YPW : ARRAY[0..100] OF DOUBLE; > > 위와 같이 puz, ypw에 들어있...
이진수
•
2000.06.03 09:31
3
COMMENTS
/
0
LIKES
plug-in 테크닉에 대해서...
알리바바
•
2000.06.21 22:18
안녕하셔여 원하시는 정보는 구하셨나여 만약 못구하셨다면 제홈페이지에 플러그인 구현 소스와 샘플이...
알리바바
•
2000.06.21 22:17
안녕하셔여 원하시는 정보는 구하셨나여 만약 못구하셨다면 제홈페이지에 플러그인 구현 소스와 샘플이...
알리바바
•
2000.06.21 22:17
안녕하셔여 원하시는 정보는 구하셨나여 만약 못구하셨다면 제홈페이지에 플러그인 구현 소스와 샘플이...
어린왕자
2000/06/03 20:40
Views
245
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 제목 그래로 입니다..
> 부모의 프로텍티드된 메소드를 사용하고 싶은데..
> 어떤 방법으로 하면 되는지..
> 쫌 설명 부탁합니다..
>
안녕하세요~ 구창민입니다.
간단한 예를 보기위해, 만만한 TEdit 에서 파생된 클래스를 봅시다.
아래에 있는 소스는 세자리 콤마 Edit인데 TEdit에서 상속되었죠.
public 부분의 CreateParams 메쏘드를 자세히 보세요.
엄마 클래쓰의 protected의 메소드들은 상속받은후
public 으로 재선언해야 한다고 일전에 어린왕자님께 말씀드린적이 있을 겁니다.
그 이유를 다시 간단히 말씀드리면,
예를들어, TEdit에서 자손이 여러종류로 파생될 필요가 있을때
TEdit의 메소드들중 어떤 자손은 필요없고, 어떤자손은 필요있고
그러한 경우가 생깁니다.
그래서, private 에 선언할 수도 없고, public에 선언할 수도 없는
그런 메소드들을 protected에 선언해 두고 필요한
자손들만 public에 재선언 하여 사용하도록 하고 있는 것입니다.
VCL를 두루 살펴보면 TObject라는 클래스로부터
시작하여 점점 새로운 클래스를 만들어 가는 것을 볼수있을 겁니다.
그 점진적 진행을 가만히 들여다 보면 참 재미있습니다.
많은 것을 알게 되구요..제가 제대로 설명 드린건지 모르겠습니다.
그럼, 이해 되셨을 줄 믿고 즐거운 프로그래밍 하시길~
아래는 콤마 Edit의 소스입니다.
type
TNumberEdit = class(TEdit)
private
{ Private declarations }
protected
{ Protected declarations }
procedure Change; override;
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override; <--요놈
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure TNumberEdit.Change;
function Unmask( Value : String ) : Extended;
var i: Byte;
T: String;
begin
if Length( Trim( Value ) ) = 0 then begin
Result := 0;
Exit;
end
else begin
T := '';
for i := 0 to Length( Value ) - 1 do
if Copy( Value, i+1, 1 ) <> ',' then
T := T + Copy( Value, i+1, 1 );
try
Result := StrToFloat( T );
except
Result := 0;
end;
end;
end;
begin
Text := FormatFloat( '###,###,###,###', Unmask( Text ) );
if Length( Trim( Text ) ) > 0 then begin
SendMessage( Self.Handle, WM_KEYDOWN, VK_END, LongInt(0));
SendMessage( Self.Handle, WM_KEYUP , VK_END, LongInt(0));
end;
inherited Change;
end;
procedure TNumberEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams( Params );
Params.Style := Params.Style or
ES_MULTILINE or
ES_RIGHT or
ES_NUMBER or
ES_WANTRETURN;
end;
constructor TNumberEdit.Create(AOwner: TComponent);
begin
inherited Create( AOwner );
AutoSize := False;
end;
procedure Register;
begin
RegisterComponents( 'Samples', [ TNumberEdit ] );
end;
end.