Q&A

  • [질문] 다양한 함수 또는 폼 호출방법을 문의 합니다.
연말정산업무 관련입니다.
영수증을 연도별로 Form을 생성했습니다.
frm2007, frm2008...

호출하는 Form에서 인쇄를 누르면 해당연도의 폼을 Create하고 싶은데
if문장으로 매년마다 추가하기엔 좀 보기 안 좋아서요.

components찾을때 처럼(FindComponent 함수) 폼이름을 조합하고
조합된 폼이름을 호출하는 방법이 있나요?

고수님의 조언을 기다리겠습니다...꾸뻑!~
3  COMMENTS
  • Profile
    타락천사 2009.01.09 02:55
    Application.FindComponent 를 쓰면 폼을 컴포넌트 검색하듯 쓸 수 있습니다.
  • Profile
    홍성락 2009.01.09 03:53
    팁/테크 페이지에 최용일님의 글이 있던데요...
    SUBJECT : [팁] 이름으로 폼(컴포넌트) 생성하기

    폼을 이름으로 생성하려면 조금 성가신 작업으로 미리 RegisterClass에 등록해야합니다.
    RegisterClass(Tform2);

    사용하는 폼에 생성시 넣어도 되지만,
    자주 여러곳에서 사용하신다면 Project나 별도 유닛에 모아 놓는게 편합니다.

    <!--CodeS-->
    //등록
    program Project1;

    uses
    Forms,
    Classes, //추가
    Unit1 in 'Unit1.pas' {Form1},
    Unit2 in 'Unit2.pas' {Form2},
    Unit3 in 'Unit3.pas' {Form2},
    Unit4 in 'Unit4.pas' {Form2},

    .......;

    {$R *.res}

    begin
    Application.Initialize;

    RegisterClass(Tform2); //먼저 RegisterClass에 등록
    RegisterClass(Tform3);
    RegisterClass(Tform4);
    .......
    Application.CreateForm(TForm1, Form1);
    Application.Run;
    end.


    <!--CodeE-->

    <!--CodeS-->
    //호출 예
    procedure TForm1.Button1Click(Sender: TObject);
    var
    fc : TFormClass;
    fm : TForm;
    i : integer;
    begin
    if GetClass('TForm2') <> nil then begin //RegisterClass에서 있는지 검사
    fc := TFormClass(GetClass('TForm2'));
    if (assigned(fc)) then begin
    fm := nil;
    for i := 0 to Screen.FormCount-1 do begin //중복 생성을 막음
    if (Screen.Forms[i].ClassName = fc.ClassName) then begin
    fm := Screen.Forms[i];
    break;
    end;
    end;

    if not assigned(fm) then fm := fc.Create(nil); //폼 생성
    fm.Show
    end;
    end;
    end;
    <!--CodeE-->
  • Profile
    전문성 2009.01.09 22:14
    프핫!
    감사합니다.
    생각보다 어렵지가 않네요... 고수님의 조언에 항상 감사드립니다..