Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
상속에 관한 질문입니다..
음..
상속에 관한 문제인데요..
예를 들어서..
어떤 컴포넌트의 ActiveControl이라는 속성이 있을때..
속성값은 TButton이라 한다면..
전..Tbutton에 맴버함수를 더 넣어서 클래스를 만들구 싶거든요..
그래가지구..위 컴포넌트에 그대루 인식시키고 싶어요..
어떻게 해야 이렇게 만들수 있는지..
팁 주시기 바랍니다..고수님덜..
3
COMMENTS
이준해
•
2000.06.13 18:29
다음 순서대로 작업해 보세요.
1. TButton의 SuperClass로 하는 원하는 Class를 만드세요.(TMyButton이라 하죠)
: 원하는 멤버함수를 넣든가, Property를 추가하던가, Event 등을 추가하던가, 또는
모양을 바꿀 수도 있겠죠.
2. 만들어진 Class(VCL Component가 되겠죠)를 등록하세요
3. 폼을 디자인할 때, 만들어진 버튼을 이용하세요.
4. ActiveControl은 통상 Form등 Container가 갖는 속성으로 알고 있습니다.
원하는 작업을 하고자 할때 다음과 같이 불러 쓰세요.
if form1.activeControl is TMyButton then begin
TMyButton(form1.activeControl).yourMemberFunction...
...
end;
또는
form1.ActiveControl := myButton1; // ActiveControl이 readonly가 아니라면요
5. 이런 작업이 가능한 것은 다음 이유입니다.
- ActiveControl은 TControl로 변수선언이 되어있을 겁니다.
- TButton등 가시적인 대부분의 Component는 TControl의 하위 Class입니다.
- 따라서 ActiveControl에는 TControl의 하위 Class라면 모두 reference시킬수 있습니다.
(물론, 엄밀히 말하면 Class가 아니라 Instance겠죠 ?)
6. 기타
- OOP.. 몰라도 Delphi쓰는데 문제 없습니다. 그러나, 좀 신경써서 개념과
사용법을 익혀놓으면 재미 있습니다.
- 님께서 시도하는게 그런 류의 공부 같은데 훌륭한 성취 있으시길 바랍니다.
코드를 보여드리지 못해 죄송합니다. 뎅파이 바이블이나 관련 책에
OOP 또는 고급프로그래밍기법등의 장을 참조하세요.
즐거운 하루 되시길.
어린왕자 wrote:
> 음..
> 상속에 관한 문제인데요..
>
> 예를 들어서..
> 어떤 컴포넌트의 ActiveControl이라는 속성이 있을때..
> 속성값은 TButton이라 한다면..
>
> 전..Tbutton에 맴버함수를 더 넣어서 클래스를 만들구 싶거든요..
> 그래가지구..위 컴포넌트에 그대루 인식시키고 싶어요..
>
> 어떻게 해야 이렇게 만들수 있는지..
> 팁 주시기 바랍니다..고수님덜..
0
0
삭제
수정
댓글
어린왕자
•
2000.06.13 18:42
> 2. 만들어진 Class(VCL Component가 되겠죠)를 등록하세요
꼭 등록해야하나요? 동적으로 사용하면 안되나요? 귀찮아서..
> 5. 이런 작업이 가능한 것은 다음 이유입니다.
> - ActiveControl은 TControl로 변수선언이 되어있을 겁니다.
> - TButton등 가시적인 대부분의 Component는 TControl의 하위 Class입니다.
> - 따라서 ActiveControl에는 TControl의 하위 Class라면 모두 reference시킬수 있습니다.
원래 저에게 문제 있는건 PageControl.ActivePage속성인데요..
속성값이 TTabsheet라는 값은데..
저가 TTabSheet를 상속해서 몇개 멤버변수를 넣어서 TTabSheet1으로 만들었습니다..(같은 유닛에서..)
근데..ActivePage속성값이 TTabSheet1 형태로 하고 싶은거죠..
상식으로 생각할때..하위클래스라두 해두...이런 작업은 가능하지 않을 거 같아요..
하지만 다른 방법이 있지 않을까 해서요..
확~VCL컴포넌트 소스를 바꿔버릴까요?
0
0
삭제
수정
댓글
이준해
•
2000.06.13 19:12
TTabSheet라면 쉽진 않을 것 같네요.
정석대로라면 다음 작업을 해야 할 것 같습니다.
1. TTabSheet 의 하위 Class를 만든다 (TMyTabSheet라고 하죠)
2. TPageControl의 하위 Class를 만든다
: 이때, TPageControl에서 TabSheet를 추가/제거하는 부분을 Override해서
TTabSheet 대신 TMyTabSheet를 넣어준다.
3. 작업할때는 TTabSheet를 Return받아 TMyTabSheet로 TypeCasting해서 사용한다.
: 예를 들어 TMyTabSheet(myPageControl.Tabsheets[0]) 쯤이 되겠죠
편법을 써서리, 어린왕자님이 원하는대로 등록하지 않고 동적으로 사용하려면...
꼭 !! 사용해야 한다면, 이런 방법도 있습니다.
1. TMyTabSheet를 만듭니다.(물론 작업하는 form에서 use해야 되겠죠)
2. *.dfm파일을 편집기에서 열어서(폼에 마우스 오른쪽 버튼 -> View As Text하시면 됩니다.)
TTabSheet로 정의된 변수를 TMyTabSheet로 바꾼다.(replace)
3. 작업한 파일을 다시 "View As Form" 하셔서, 에러가 안나는지 확인하세요.
4. form.pas 파일에서 역시
TTabSheet로 정의된 변수를 TMyTabSheet로 바꾼다.(replace)
5. 만약 ActivePage를 불러 사용하려면
TMyTabSheet(form1.ActivePage).YourMemberFunction ....
이런 식으로 사용하면 됩니다.
6. 만약 런타임중에 Page를 추가/삭제등의 작업을 하면 위 방법이 안통합니다.
런타임중에 사용하려면 위의 "정석대로" 처리해야 합니다.
즉, PageControl을 디자인할때 Fix시켜야 사용가능하다는 거죠.
마지막으로..
Delphi에서 주어진 VCL Component의 소스를 바꾸는 방법
: 최악의 방법이라고 생각되며 권하고 싶지 않습니다.
: VCL은 제가 알기론 Delphi Version에 따라 조금씩 변합니다. 즉, 님께서 소스를 건드리시면 다음 버전에서 또 소스를 건드려야 한다는 거죠
호환성이 보장안되는 거죠(안그래도 버젼별 호환성은 문제가 되긴 하지만)
또한, 다른 폼등에서 PageControl을 사용할 텐데, 그런 부분까지 님께서 정상작동을 보증해야 합니다.
: 팀작업을 통해서 작업중이라면 다름사람의 VCL 파일 까지 모두 바꾸어야 합니다.(만약 저라면 안바꿀려고 할 겁니다.)
: 또하나, Delphi를 설치하고 소스를 고쳐야 해당 파일을 정상적으로 볼수 있다는 것도 문제라 할 수 있겠네요.
가능하면 Delphi 설치 + 프로젝트에서 만든 콤포넌트 설치 로 개발환경이 설정되는게 바람직하지 않을까요 ?
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
미지수
2000.06.13 18:29
0
COMMENTS
/
0
LIKES
모뎀으로 pc to pc 파일 전송
sky
2000.06.13 18:26
0
COMMENTS
/
0
LIKES
소켓관련에러
psunk
2000.06.13 17:50
0
COMMENTS
/
0
LIKES
용지 방향 설정은 어떻게....
다빈
•
2000.06.13 10:30
4
COMMENTS
/
0
LIKES
버튼클릭 시 실행파일 열기?
최영근
•
2000.06.13 11:03
다빈 wrote: > 버튼 클릭시 실행파일(다른 프로젝트파일의 실행파일)을 열고 > 싶은데(*.EXE) 어떻게 해...
다빈
•
2000.06.13 11:43
그런데요... winexec로 열린 파일을 다시 열려고 할
이수정
•
2000.06.14 12:19
안녕하세요... 코드는 모르구요... 여기 자료실에.. 최용일님이신가.. 실행파일 중복실행 방지용...
최영근
•
2000.06.13 21:26
다빈 wrote: > 그런데요... > winexec로 열린 파일을 다시 열려고 할
어린왕자
•
2000.06.13 08:57
3
COMMENTS
/
0
LIKES
상속에 관한 질문입니다..
음.. 상속에 관한 문제인데요.. 예를 들어서.. 어떤 컴포넌트의 ActiveControl이라는 속성이 있을때.. 속성값은 TButton이라 한다면.. 전..Tbutton에 맴버함수를 더 넣어서 클래스를 만들구 싶거든요.. 그래가지구..위 컴포넌트에 그대루 ...
이준해
•
2000.06.13 18:29
다음 순서대로 작업해 보세요. 1. TButton의 SuperClass로 하는 원하는 Class를 만드세요.(TMyButton이라 ...
어린왕자
•
2000.06.13 18:42
> 2. 만들어진 Class(VCL Component가 되겠죠)를 등록하세요 꼭 등록해야하나요? 동적으로 사용하면 안되...
이준해
•
2000.06.13 19:12
TTabSheet라면 쉽진 않을 것 같네요. 정석대로라면 다음 작업을 해야 할 것 같습니다. 1. TTabSheet ...
김동식
•
2000.06.13 08:50
1
COMMENTS
/
0
LIKES
델파이로 하드웨어 제어용 dll 제작
조규춘
•
2000.06.13 14:34
김동식 wrote: > 델파이로 하드웨어 제어용 DLL 제작이 가능한지 알고싶군요. 하드웨어 제어용 DLL 제...
아리엘
•
2000.06.13 08:10
1
COMMENTS
/
0
LIKES
퀵레포트에서 QRExpress가 이상해요..
이준해
•
2000.06.13 18:32
TQRExpress 에는 필드명을 주는 것으로 알고 있습니다. 양쪽에 큰괄호를 하고 필드명을 주세요 "[field1]...
이태수
•
2000.06.13 07:37
1
COMMENTS
/
0
LIKES
필드구분자가 Tab인 것을 읽는 방법
양병규
•
2000.06.13 10:02
StringReplace로 Tab문자를 콤마로 바꿔서 TStrings의 CommaText로 대입하면.. 탭을 구분으로해서 TString...
어린왕자
•
2000.06.13 07:37
2
COMMENTS
/
0
LIKES
쿼리의 내용이 변하더라도 첫번째 결과값을 그대로 두구 싶습니다.
조규춘
•
2000.06.13 14:53
어린왕자 wrote: > 안녕하세요..어린왕자입니다.. > 질문있습니다.. > 디비그리드와 데이타소스와 ADODa...
어린왕자
•
2000.06.13 16:34
규춘님 답변 잘봤어요.. 음.. 저가 할려는 의도는 그 결과창을 계속 띠워놓구 싶거든요? 그리드 결과 창...
이재명
•
2000.06.13 07:06
1
COMMENTS
/
0
LIKES
변수에 따른 동적테이블 생성방법 좀 가르쳐 주십시요...
모승열
•
2000.06.14 01:55
이재명 wrote: > 개념 그래프를 이용하여 자연어 검색 및 저장 프로그램을 작성중입니다. > 생성된 변수...
느티나무
•
2000.06.13 06:47
1
COMMENTS
/
0
LIKES
06-2000 -> june2000 으로 바꾸는법
서경환
•
2000.06.13 07:18
제가 보기에는 제어판의 국가별 설정에 따라서 표시되는 방법이 틀린 것 같습니다. 아래의 소스를 참고하...
초보
2000.06.13 06:37
0
COMMENTS
/
0
LIKES
스트림으로 화일을 저장할때 에러가 납니다.
박대규
•
2000.06.13 06:30
1
COMMENTS
/
0
LIKES
마우스의 모양을 알수있는 방법은?
서경환
•
2000.06.13 06:56
다른 윈도우에 변수를 잡고 public { Public declarations } vi_cursor:integer; begin if Scre...
선희
•
2000.06.13 05:38
1
COMMENTS
/
0
LIKES
MDIChild폼을 호출할때의 문제...
서경환
•
2000.06.13 06:21
17082 참조하면 될 것 같은데 테스트 해보았음... 선희 wrote: > MDI폼으로 프로젝트를 진행중인데 >...
azure
•
2000.06.13 04:57
1
COMMENTS
/
0
LIKES
StringGrid 를 DBGrid 처럼
서경환
•
2000.06.13 05:33
StringGrid를 클릭하면 해당 로우의 데이타(키)를 읽어와서 Select문을 다시 쓰는것이 한 방법인데... 더 ...
어린왕자
•
2000.06.13 04:50
1
COMMENTS
/
0
LIKES
안녕하셔요~ 동적배열에 대한 질문인데요..초보라서..ㅅ.ㅅ
이준해
•
2000.06.13 18:36
Class를 만들어 사용한다고 속도가 느려지지는 않습니다. TList 라는 Class 를 사용하세요. 쬐금 손봐서 ...
배훈
•
2000.06.13 04:30
2
COMMENTS
/
0
LIKES
BDE error 13059 ? 도와주세요!..(급합니다)
서경환
•
2000.06.13 05:30
DBE Administrator에서 Configuration --> Drivers --> Native --> Oracle --> VENDOR INIT를 ORA8(비슷한...
배훈
•
2000.06.13 06:23
서경환 wrote: > DBE Administrator에서 Configuration --> Drivers --> Native --> Oracle --> VENDOR IN...
이창영
•
2000.06.13 03:57
1
COMMENTS
/
0
LIKES
인스톨쉴드에서 DB 레지스트리 등록은?
이승우
•
2000.06.13 05:47
이창영 wrote: > 안녕하세요! > 프로그램 인스톨되고 제어판의 odbc에서 추가하면 문제가 없는데 > 그런...
지연
•
2000.06.13 03:55
2
COMMENTS
/
0
LIKES
퀵 레포트
이언주
•
2000.06.13 06:18
퀵리포트에서 미리보기에서 printer setup에서 인쇄할 페이지라고 ~에서 ~까지라고 설정하는 부분이 있습니...
지연
•
2000.06.13 17:54
답변은 고맙습니다... 그런데 제가 올린 질문을 자세히 안 읽어 보셨나봐요... 답변해 주신것처럼 페이지...
이창영
•
2000.06.13 03:50
1
COMMENTS
/
0
LIKES
바탕화면에 바로가기 만들기(인스톨쉴드)
조규춘
•
2000.06.13 14:24
이창영 wrote: > 안녕하세요! > 프로그램 인스톨되고나서 바탕화면에 바로가기 아이콘을 > 자동으로 만...
어린왕자
2000/06/13 08:57
Views
291
Likes
0
Comments
3
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
1. TButton의 SuperClass로 하는 원하는 Class를 만드세요.(TMyButton이라 하죠)
: 원하는 멤버함수를 넣든가, Property를 추가하던가, Event 등을 추가하던가, 또는
모양을 바꿀 수도 있겠죠.
2. 만들어진 Class(VCL Component가 되겠죠)를 등록하세요
3. 폼을 디자인할 때, 만들어진 버튼을 이용하세요.
4. ActiveControl은 통상 Form등 Container가 갖는 속성으로 알고 있습니다.
원하는 작업을 하고자 할때 다음과 같이 불러 쓰세요.
if form1.activeControl is TMyButton then begin
TMyButton(form1.activeControl).yourMemberFunction...
...
end;
또는
form1.ActiveControl := myButton1; // ActiveControl이 readonly가 아니라면요
5. 이런 작업이 가능한 것은 다음 이유입니다.
- ActiveControl은 TControl로 변수선언이 되어있을 겁니다.
- TButton등 가시적인 대부분의 Component는 TControl의 하위 Class입니다.
- 따라서 ActiveControl에는 TControl의 하위 Class라면 모두 reference시킬수 있습니다.
(물론, 엄밀히 말하면 Class가 아니라 Instance겠죠 ?)
6. 기타
- OOP.. 몰라도 Delphi쓰는데 문제 없습니다. 그러나, 좀 신경써서 개념과
사용법을 익혀놓으면 재미 있습니다.
- 님께서 시도하는게 그런 류의 공부 같은데 훌륭한 성취 있으시길 바랍니다.
코드를 보여드리지 못해 죄송합니다. 뎅파이 바이블이나 관련 책에
OOP 또는 고급프로그래밍기법등의 장을 참조하세요.
즐거운 하루 되시길.
어린왕자 wrote:
> 음..
> 상속에 관한 문제인데요..
>
> 예를 들어서..
> 어떤 컴포넌트의 ActiveControl이라는 속성이 있을때..
> 속성값은 TButton이라 한다면..
>
> 전..Tbutton에 맴버함수를 더 넣어서 클래스를 만들구 싶거든요..
> 그래가지구..위 컴포넌트에 그대루 인식시키고 싶어요..
>
> 어떻게 해야 이렇게 만들수 있는지..
> 팁 주시기 바랍니다..고수님덜..