Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
폼이름으로 폼을 생성하려면...?
폼 이름을 알고 있을 때 폼을 생성할 수 있을까요?
즉, 내가 생성해야 할 폼이 TMyForm 타입의 폼이라고 할 때
"TMyForm"이라는 문자열로부터 실제 클래스 객체를 만들 수
있을까에 대한 것입니다.
왠만한 곳은 다 찾아봤는데 RTTI와 관계가 있다는 것 말고
실제 구현해놓은 예제 코드는 찾아보기가 힘드네요.
그런 방법이 있다면 한번쯤 구현해볼만한 주제가 아닌가
생각됩니다.
델파이 고수들의 도움 바랍니다.
6
COMMENTS
홍효선
•
1999.11.02 05:03
올려 놓으신 글을 참고로
아래와 같이 폼이름으로 폼을 생성하는 프로시져를 만들고져 합니다.
procedure Proc_LoadForm(pTForm:string; pForm: TForm);
var
newClass: TPersistentClass;
begin
if pForm = nil then
begin
RegisterClass(TPersistentClass(pTForm)); // Error
newClass := GetClass(pTForm);
Application.CreateForm(TComponentClass(newClass), pForm);
pForm.Show;
Exit;
end;
pForm.WindowState := wsNormal;
pForm.Show;
end;
근데 윗 부분의 "Error"라고 표시 한곳에서 에러가 발생 하던데
어떤 문제가 있는지 좀 봐주세요....?
개선할 점이 있다면 좀 제시해 주시면 감사하겠습니다.
이상호 wrote:
> 폼 이름을 알고 있을 때 폼을 생성할 수 있을까요?
>
> 즉, 내가 생성해야 할 폼이 TMyForm 타입의 폼이라고 할 때
> "TMyForm"이라는 문자열로부터 실제 클래스 객체를 만들 수
> 있을까에 대한 것입니다.
>
> 왠만한 곳은 다 찾아봤는데 RTTI와 관계가 있다는 것 말고
> 실제 구현해놓은 예제 코드는 찾아보기가 힘드네요.
>
> 그런 방법이 있다면 한번쯤 구현해볼만한 주제가 아닌가
> 생각됩니다.
>
> 델파이 고수들의 도움 바랍니다.
0
0
삭제
수정
댓글
이상호
•
1999.09.04 18:11
답변을 올려주신 두분께 감사드립니다.
하지만 아직 제가 원하는 해결책은 없어서 아쉽네요.
먼저 김성동님께서 답해주신 저도 한번 시도해본 것인데, 실행해보면 런타임 에러
가 발생됩니다.
그리고 구창민님께서 답해주신 내용은 제 질문의 의도와는 조금 다른 것 같습니다.
제 질문의 요지는 문자열로 표현된 폼 클래스 이름만 알고 있을 때 그 폼 클래스의
인스턴스를 어떻게 생성하는 것인가에 대한 것입니다.
그러므로 구창민님의 답변에 있는 "with TForm.Create( Application ) do"에서는
TForm이라는 클래스 이름 자체를 이미 사용했기 때문에 제가 적용하기에는
맞지 않을 것 같습니다.
0
0
삭제
수정
댓글
구창민
•
1999.09.04 06:59
이상호 께서 말씀하시기를...
> 폼 이름을 알고 있을 때 폼을 생성할 수 있을까요?
>
> 즉, 내가 생성해야 할 폼이 TMyForm 타입의 폼이라고 할 때
> "TMyForm"이라는 문자열로부터 실제 클래스 객체를 만들 수
> 있을까에 대한 것입니다.
>
> 왠만한 곳은 다 찾아봤는데 RTTI와 관계가 있다는 것 말고
> 실제 구현해놓은 예제 코드는 찾아보기가 힘드네요.
>
> 그런 방법이 있다면 한번쯤 구현해볼만한 주제가 아닌가
> 생각됩니다.
>
> 델파이 고수들의 도움 바랍니다.
이상호님 안녕하세요?
폼 이름은 문자열입니다.
아래처럼 생성시키시면 됩니다.
procedure TForm1.Button1Click(Sender: TObject);
var i: ShortInt;
begin
for i:= 2 to 5 do
with TForm.Create( Application ) do
begin
Name := 'Form' + IntToStr( i );
Show;
end;
end;
그럼 항상 즐거운 프로그래밍 되시길~~
0
0
삭제
수정
댓글
김성동
•
1999.09.04 03:36
음...
테스트 해보지는 않았습니다만
이렇게 하면 되지 않을까 생각 되네요.
var
Form : TForm;
begin
Application.CreateForm(TComponentClass(GetClass("TMyForm")), Form);
end;
혹시 동작하지 않는다면 Classes.pas와 Forms.pas를 유심히 들여다 보시면 해결되리라 봅니다.
이상호 께서 말씀하시기를...
> 폼 이름을 알고 있을 때 폼을 생성할 수 있을까요?
>
> 즉, 내가 생성해야 할 폼이 TMyForm 타입의 폼이라고 할 때
> "TMyForm"이라는 문자열로부터 실제 클래스 객체를 만들 수
> 있을까에 대한 것입니다.
>
> 왠만한 곳은 다 찾아봤는데 RTTI와 관계가 있다는 것 말고
> 실제 구현해놓은 예제 코드는 찾아보기가 힘드네요.
>
> 그런 방법이 있다면 한번쯤 구현해볼만한 주제가 아닌가
> 생각됩니다.
>
> 델파이 고수들의 도움 바랍니다.
0
0
삭제
수정
댓글
이상호
•
1999.09.04 19:13
GetClass를 사용하기 전에 한 가지 해주어야 할 일이 있더군요.
먼저 GetClass를 사용하기 이전에 어디선가(Form Create라면 상관없을 거
같네요) RegisterClass('TMyForm')을 먼저 해 주는 것입니다.
그러면 등록된 클래스에 대한 정보를 구할 수가 있어서 런타임 에러가 발생하지
않더군요.
// 아래는 샘플 코드...
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClass(TMyForm);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
form: TForm;
newClass: TPersistentClass;
begin
newClass := GetClass('TMyForm');
Application.CreateForm(newClass, form);
form.Show;
end;
김성동 께서 말씀하시기를...
> 음...
>
> 테스트 해보지는 않았습니다만
> 이렇게 하면 되지 않을까 생각 되네요.
>
> var
> Form : TForm;
> begin
> Application.CreateForm(TComponentClass(GetClass("TMyForm")), Form);
> end;
>
> 혹시 동작하지 않는다면 Classes.pas와 Forms.pas를 유심히 들여다 보시면 해결되리라 봅니다.
>
> 이상호 께서 말씀하시기를...
> > 폼 이름을 알고 있을 때 폼을 생성할 수 있을까요?
> >
> > 즉, 내가 생성해야 할 폼이 TMyForm 타입의 폼이라고 할 때
> > "TMyForm"이라는 문자열로부터 실제 클래스 객체를 만들 수
> > 있을까에 대한 것입니다.
> >
> > 왠만한 곳은 다 찾아봤는데 RTTI와 관계가 있다는 것 말고
> > 실제 구현해놓은 예제 코드는 찾아보기가 힘드네요.
> >
> > 그런 방법이 있다면 한번쯤 구현해볼만한 주제가 아닌가
> > 생각됩니다.
> >
> > 델파이 고수들의 도움 바랍니다.
>
>
0
0
삭제
수정
댓글
미노
•
2000.01.22 19:29
모든 고수님께 감사합니다.
최종 코드는 다음과 같습니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClass(TMyForm);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
form : TForm;
newClass : TPersistentClass;
begin
newClass := GetClass('TMyForm');
Application.CreateForm(TComponentClass(newClass), form);
form.Show;
end;
end.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
최혜정
•
1999.09.04 21:06
1
COMMENTS
/
0
LIKES
외부파일 실행 후 원 프로그램을 SHOW
이정욱
•
1999.09.04 23:26
그렇게 하시려면 실행후 실행을 마칠때까지 기다리는 함수를 사용해야 합니다. 한델(http://www.delphi.co...
오남석
1999.09.04 18:38
0
COMMENTS
/
0
LIKES
QRGroup에서 첫번째 그룹의 헤더가 나오기 않는군요
임동욱
1999.09.04 17:55
0
COMMENTS
/
0
LIKES
ODBC연결법
dj
•
1999.09.04 17:50
1
COMMENTS
/
0
LIKES
ListBox 항목 선택하는방법
이정욱
•
1999.09.04 23:24
ItemIndex에 원하는 값을 넣어주세요. 첫번째 아이템의 번호가 0 이니 만약 2번째를 선택되게 하고 싶다면...
오남석
1999.09.04 17:42
0
COMMENTS
/
0
LIKES
Qreport중 QrGroup에 관한 질문입니다.
한 재
•
1999.09.04 15:15
1
COMMENTS
/
0
LIKES
다시 한번 질문...
jinifan
•
1999.09.04 16:21
한 재 께서 말씀하시기를... > 질문이 역시 시원치 않았나 보군요. 도사님들의 가르침이 없으니 말입니...
bluetin
•
1999.09.04 08:47
1
COMMENTS
/
0
LIKES
group footer가 먹히질 않습니다.
김고진
•
1999.09.06 19:03
bluetin 께서 말씀하시기를... 글쎄요... summary band가 아래로 내려가진 않는다고 하는데 아마도 Group...
hata
1999.09.04 07:44
0
COMMENTS
/
0
LIKES
[컴포너트 이메이지..]
초보자
•
1999.09.04 06:38
1
COMMENTS
/
0
LIKES
판넬에 line, polyline 등을 그리는 방법
구창민
•
1999.09.04 08:42
초보자 께서 말씀하시기를... > 안녕하세요. > > 판넬에 line, polyline 등을 그리는 방법을 가르쳐 ...
남윤혁
•
1999.09.04 06:24
2
COMMENTS
/
0
LIKES
TTable에서 내림차순 정렬 법? T__T
asterisk
•
1999.09.04 18:33
고건 Index만들때...설정을 하셔야됩니다... Descending을 chcek하시면..내림차순으로 정렬이 된답니다......
jinifan
•
1999.09.04 10:53
남윤혁 께서 말씀하시기를... > 설마 없는 것은 아니겠죠??? > > TTable의 IndexFieldNames에 'id' > ...
강영석
1999.09.04 04:00
0
COMMENTS
/
0
LIKES
ORA-12663 ERROR ORACLE에서....
나성오
1999.09.04 04:00
0
COMMENTS
/
0
LIKES
ODBC 와 DB 연결
정민규
•
1999.09.04 03:38
1
COMMENTS
/
0
LIKES
델파이와 리눅스
구창민
•
1999.09.04 08:53
정민규 께서 말씀하시기를... > > 델파이에서 DB를 사용하지 않는 CGI를 만들려고 합니다... > > ...
이상호
•
1999.09.04 03:12
6
COMMENTS
/
0
LIKES
폼이름으로 폼을 생성하려면...?
폼 이름을 알고 있을 때 폼을 생성할 수 있을까요? 즉, 내가 생성해야 할 폼이 TMyForm 타입의 폼이라고 할 때 "TMyForm"이라는 문자열로부터 실제 클래스 객체를 만들 수 있을까에 대한 것입니다. 왠만한 곳은 다 찾아봤는데 RTTI와 관계...
홍효선
•
1999.11.02 05:03
올려 놓으신 글을 참고로 아래와 같이 폼이름으로 폼을 생성하는 프로시져를 만들고져 합니다. proced...
이상호
•
1999.09.04 18:11
답변을 올려주신 두분께 감사드립니다. 하지만 아직 제가 원하는 해결책은 없어서 아쉽네요. 먼저 김...
구창민
•
1999.09.04 06:59
이상호 께서 말씀하시기를... > 폼 이름을 알고 있을 때 폼을 생성할 수 있을까요? > > 즉, 내가 생성...
김성동
•
1999.09.04 03:36
음... 테스트 해보지는 않았습니다만 이렇게 하면 되지 않을까 생각 되네요. var Form : TForm;...
이상호
•
1999.09.04 19:13
GetClass를 사용하기 전에 한 가지 해주어야 할 일이 있더군요. 먼저 GetClass를 사용하기 이전에 어디...
미노
•
2000.01.22 19:29
모든 고수님께 감사합니다. 최종 코드는 다음과 같습니다. unit Unit1; interface uses Windo...
호수영
•
1999.09.04 01:37
1
COMMENTS
/
0
LIKES
DB에서 자료를 검색할때 자음(ㄱ,ㄴ,ㄷ....)으로
jinifan
•
1999.09.04 11:20
호수영 께서 말씀하시기를... > DB에서 자료를 검색할때 자음(ㄱ,ㄴ,ㄷ....)으로 조회할 수 있는 방법이 ...
김성영
•
1999.09.04 00:30
1
COMMENTS
/
0
LIKES
TreeView에 대해
jinifan
•
1999.09.04 11:32
김성영 께서 말씀하시기를... > TreeView에서 배열을 사용하려고 하는데 문제가 발생합니다. > var > ...
초보
1999.09.04 00:30
0
COMMENTS
/
0
LIKES
procedure에 관하여
송영신
1999.09.04 00:24
0
COMMENTS
/
0
LIKES
도움이 될런지 ...
최수영
1999.09.04 00:09
0
COMMENTS
/
0
LIKES
[참조]크리스탈 레포트 홈페이지 Q/A주소
조계영
•
1999.09.03 22:42
1
COMMENTS
/
0
LIKES
윈도우 강제 종료시 실행중인 프로그램도 강제종료하기
김영대
•
1999.09.03 23:35
조계영 께서 말씀하시기를... > 안녕하세요 > > 윈도우 종료와 관련 exitwindowsex 함수를 이용하여 >...
이상호
1999/09/04 03:12
Views
1143
Likes
0
Comments
6
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
아래와 같이 폼이름으로 폼을 생성하는 프로시져를 만들고져 합니다.
procedure Proc_LoadForm(pTForm:string; pForm: TForm);
var
newClass: TPersistentClass;
begin
if pForm = nil then
begin
RegisterClass(TPersistentClass(pTForm)); // Error
newClass := GetClass(pTForm);
Application.CreateForm(TComponentClass(newClass), pForm);
pForm.Show;
Exit;
end;
pForm.WindowState := wsNormal;
pForm.Show;
end;
근데 윗 부분의 "Error"라고 표시 한곳에서 에러가 발생 하던데
어떤 문제가 있는지 좀 봐주세요....?
개선할 점이 있다면 좀 제시해 주시면 감사하겠습니다.
이상호 wrote:
> 폼 이름을 알고 있을 때 폼을 생성할 수 있을까요?
>
> 즉, 내가 생성해야 할 폼이 TMyForm 타입의 폼이라고 할 때
> "TMyForm"이라는 문자열로부터 실제 클래스 객체를 만들 수
> 있을까에 대한 것입니다.
>
> 왠만한 곳은 다 찾아봤는데 RTTI와 관계가 있다는 것 말고
> 실제 구현해놓은 예제 코드는 찾아보기가 힘드네요.
>
> 그런 방법이 있다면 한번쯤 구현해볼만한 주제가 아닌가
> 생각됩니다.
>
> 델파이 고수들의 도움 바랍니다.