Q&A

  • 신인재님,송기원님 감사하구요 한번더...
CreateForm(FormClass: TFormClass; var Reference)사용시에



답변이 없어 다시 한번 도움을 요청합니다.



MainMenu에서 Menu를 Click하면 MenuItms.name = 'mmForm1'을 받아와서

procedure 에 'mmForm1'값만 넘겨줘서

procedure 에서는 넘겨받은 값을 Copy(mmForm1,3,5)해서 'Form1'이라는 화면을 Call 하고 싶습니다.



그런데 문제는 MenuItems.name의 Type은 String이니까 그 값을 넘겨야 하는데

CreateForm 을 사용하려면 Tpye이 맞지가 않아서 처리가 안되요.



From Name을 String으로 받아서 FormClass, TFormClass Type으로 변환할 수

없나요. 아니면 String으로도 사용가능한가요?



다른방법이라도 좀....



1  COMMENTS
  • Profile
    신인재 1999.07.13 23:43
    쩝....감사를 표하시니...좀 송구스럽네요....^^;



    음...님께서 말하신 폼을 스트링으로 콜은 하는 것은 당연히 불가능 합니다..

    TForm은 특정자료형이 아니고 form 객체를 생성하기 위한 클래스이기 때문이죠...



    따라서 저는 이 문제를 해결하기 위해 제안을 하고자 합니다.

    TFormClass의 배열을 사용하는 것이죠

    예를 들어아래와 같이

    const

    FormCnt = 100; // 폼의 갯수

    var

    FormAryy : Array[0..FormCnt] of TFormClass;

    Unit_Form : TForm // 공통으로 사용할 폼



    그리고 배열의 내용을 채워 넣습니다.



    FormAryy[0] := TForm1;

    FormAryy[1] := TForm2;

    FormAryy[2] := TForm3;

    FormAryy[3] := TForm4;

    .

    .

    .



    그리고 메뉴의 Tag프로퍼티를 순서대로 1, 2, 3, 4.....이런 식으로

    입력을 합니다.



    그리고 각 메뉴클릭을 하나의 이벤트 핸들러로 묶고 아래와 같이 코딩합니다





    procedure TMainForm1.Menu1Click(Sender: TObject);

    begin

    Unit_Form := nil;

    Unit_Form := FormAryy[TComponent(Sender).Tag].Create(Application);

    Unit_Form.Show;

    end;



    음..온라인 상에서 그쩍인거라..좀 틀릴 수도 있겠네요..



    정 께서 말씀하시기를...

    > CreateForm(FormClass: TFormClass; var Reference)사용시에

    >

    > 답변이 없어 다시 한번 도움을 요청합니다.

    >

    > MainMenu에서 Menu를 Click하면 MenuItms.name = 'mmForm1'을 받아와서

    > procedure 에 'mmForm1'값만 넘겨줘서

    > procedure 에서는 넘겨받은 값을 Copy(mmForm1,3,5)해서 'Form1'이라는 화면을 Call 하고 싶습니다.

    >

    > 그런데 문제는 MenuItems.name의 Type은 String이니까 그 값을 넘겨야 하는데

    > CreateForm 을 사용하려면 Tpye이 맞지가 않아서 처리가 안되요.

    >

    > From Name을 String으로 받아서 FormClass, TFormClass Type으로 변환할 수

    > 없나요. 아니면 String으로도 사용가능한가요?

    >

    > 다른방법이라도 좀....

    >