Q&A

  • 같은폼 여러개 띄우기... [재질문]
폼A에서 폼B를 여러개 띄우려고합니다.

물론 폼B는 각각 제어가 가능 해야합니다...



어떤분이

--------------------------------------------

예를 들어 띄울 폼의 타입이 TForm2라면

띄울때마다 Form2[K] := TForm2.Create(Self);

물론 K는 증가하겠죠...

이런 식으로 하면 됩니다.

---------------------------------------------



요렇게 하라고 되있어서 함 해봤는데....

Form2[K]라고 해논 부분에서 에러가 나네요..

폼 이름에 []요거가 안되나봐여..

글서 그냥 Form2라고 해놓고... 실행을 시키니까...

여러개 뜨긴 뜨는데.. 제어가 안되더군요..

여러개의 창들중에 종료가 하나밖에 안됩니당. -_-;



제발 꼭좀 알려주세요.. 상당히 급한 일이라. 부탁드려요..

4  COMMENTS
  • Profile
    김일영 2000.11.18 19:06
    안녕하세요.

    '어떤 분'이 접니다.

    다른 분들께서 설명을 잘 해주셔서 이미 아시겠지만,

    Form2[K]라고 쓴 건 폼의 배열을 쓰시라는 뜻이었습니다.

    배열 이름이 좀 이상했나요.

    Forms: array of TForm2;

    이렇게 하시면 되겠죠... 그러면 Forms[K] <= 이해 되시죠?



    한두경 wrote:

    > 폼A에서 폼B를 여러개 띄우려고합니다.

    > 물론 폼B는 각각 제어가 가능 해야합니다...

    >

    > 어떤분이

    > --------------------------------------------

    > 예를 들어 띄울 폼의 타입이 TForm2라면

    > 띄울때마다 Form2[K] := TForm2.Create(Self);

    > 물론 K는 증가하겠죠...

    > 이런 식으로 하면 됩니다.

    > ---------------------------------------------

    >

    > 요렇게 하라고 되있어서 함 해봤는데....

    > Form2[K]라고 해논 부분에서 에러가 나네요..

    > 폼 이름에 []요거가 안되나봐여..

    > 글서 그냥 Form2라고 해놓고... 실행을 시키니까...

    > 여러개 뜨긴 뜨는데.. 제어가 안되더군요..

    > 여러개의 창들중에 종료가 하나밖에 안됩니당. -_-;

    >

    > 제발 꼭좀 알려주세요.. 상당히 급한 일이라. 부탁드려요..

  • Profile
    Mr.Q 2000.11.18 17:09
    한두경 wrote:

    > 폼A에서 폼B를 여러개 띄우려고합니다.

    > 물론 폼B는 각각 제어가 가능 해야합니다...

    >

    > 어떤분이

    > --------------------------------------------

    > 예를 들어 띄울 폼의 타입이 TForm2라면

    > 띄울때마다 Form2[K] := TForm2.Create(Self);

    > 물론 K는 증가하겠죠...

    > 이런 식으로 하면 됩니다.

    > ---------------------------------------------

    >

    > 요렇게 하라고 되있어서 함 해봤는데....

    > Form2[K]라고 해논 부분에서 에러가 나네요..

    > 폼 이름에 []요거가 안되나봐여..

    > 글서 그냥 Form2라고 해놓고... 실행을 시키니까...

    > 여러개 뜨긴 뜨는데.. 제어가 안되더군요..

    > 여러개의 창들중에 종료가 하나밖에 안됩니당. -_-;

    >

    > 제발 꼭좀 알려주세요.. 상당히 급한 일이라. 부탁드려요..







    Form2는 TForm2형인데.. 그 Form2를 배열형으로 사용하려 했기때문에

    에러가 난것입니다. Form2형의 사용자 인스턴스를 만들어줘야죠.

    myForm2: array [1..3] of Form2; 이렇게 선언될거구요,,,

    사용시에, myForm2[k].. 이런식이 됩니다.

    다음과 같이 하세요.



    interface



    uses

    Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs,

    Unit2,; //폼B의 유닛명을 Interface부의 Uses절에 추가



    private

    myFormList: array [1..3] of TForm2;



    procedure TForm1.FormCreate(Sender: TObject);

    var

    i:integer;

    begin

    Form1.Color:=$000080FF;

    for i:=1 to 3 do

    begin

    myFormList[i]:=TForm2.Create(Application);

    end;



    for i:=1 to 3 do

    begin

    with myFormList[i] do

    begin

    Left:=110+i*20;

    Top:=25+i*20;

    Color:=$00804000;

    Caption:='myFormList[' + IntToStr(i) + '] derived from Form2';

    Visible:=false;

    end;

    end;

    end;



    //폼제어

    procedure TForm1.Button1Click(Sender: TObject);

    begin

    myFormList[1].Visible:=true;

    myFormList[2].Visible:=false;

    myFormList[3].Visible:=false;

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    begin

    myFormList[2].Visible:=true;

    myFormList[1].Visible:=false;

    myFormList[3].Visible:=false;

    end;



    procedure TForm1.Button3Click(Sender: TObject);

    begin

    myFormList[3].Visible:=true;

    myFormList[1].Visible:=false;

    myFormList[2].Visible:=false;

    end;





  • Profile
    한두경 2000.11.20 03:26
    여러분들 도움으로 폼 여러개 띄워서

    각각 제어하는건 되거든요...

    근데...

    Form2의 implementation 부분에다

    유닛 안에서만 사용할 전역변수를 선언해놨는데

    근데 이놈값을.. Form2[1]에서 바꿔버리면..

    Form2[2]의 값도 바뀌고.. Form2[3]의 값까지

    바뀌어 버리더군요...

    어떻게 해야하나요?? implementation 에다 선언하는 변수가

    유닛 내에서만 사용하는 변수 아니던가요??

    혹 잘못되었다면.. 어떻게 해야할지 알려주세요.

    객체사용하듯이 Self.변수명 하니까 에러나네요. ^^;;



    Mr.Q wrote:

    > 한두경 wrote:

    > > 폼A에서 폼B를 여러개 띄우려고합니다.

    > > 물론 폼B는 각각 제어가 가능 해야합니다...

    > >

    > > 어떤분이

    > > --------------------------------------------

    > > 예를 들어 띄울 폼의 타입이 TForm2라면

    > > 띄울때마다 Form2[K] := TForm2.Create(Self);

    > > 물론 K는 증가하겠죠...

    > > 이런 식으로 하면 됩니다.

    > > ---------------------------------------------

    > >

    > > 요렇게 하라고 되있어서 함 해봤는데....

    > > Form2[K]라고 해논 부분에서 에러가 나네요..

    > > 폼 이름에 []요거가 안되나봐여..

    > > 글서 그냥 Form2라고 해놓고... 실행을 시키니까...

    > > 여러개 뜨긴 뜨는데.. 제어가 안되더군요..

    > > 여러개의 창들중에 종료가 하나밖에 안됩니당. -_-;

    > >

    > > 제발 꼭좀 알려주세요.. 상당히 급한 일이라. 부탁드려요..

    >

    >

    >

    > Form2는 TForm2형인데.. 그 Form2를 배열형으로 사용하려 했기때문에

    > 에러가 난것입니다. Form2형의 사용자 인스턴스를 만들어줘야죠.

    > myForm2: array [1..3] of Form2; 이렇게 선언될거구요,,,

    > 사용시에, myForm2[k].. 이런식이 됩니다.

    > 다음과 같이 하세요.

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs,

    > Unit2,; //폼B의 유닛명을 Interface부의 Uses절에 추가

    >

    > private

    > myFormList: array [1..3] of TForm2;

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > var

    > i:integer;

    > begin

    > Form1.Color:=$000080FF;

    > for i:=1 to 3 do

    > begin

    > myFormList[i]:=TForm2.Create(Application);

    > end;

    >

    > for i:=1 to 3 do

    > begin

    > with myFormList[i] do

    > begin

    > Left:=110+i*20;

    > Top:=25+i*20;

    > Color:=$00804000;

    > Caption:='myFormList[' + IntToStr(i) + '] derived from Form2';

    > Visible:=false;

    > end;

    > end;

    > end;

    >

    > //폼제어

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > myFormList[1].Visible:=true;

    > myFormList[2].Visible:=false;

    > myFormList[3].Visible:=false;

    > end;

    >

    > procedure TForm1.Button2Click(Sender: TObject);

    > begin

    > myFormList[2].Visible:=true;

    > myFormList[1].Visible:=false;

    > myFormList[3].Visible:=false;

    > end;

    >

    > procedure TForm1.Button3Click(Sender: TObject);

    > begin

    > myFormList[3].Visible:=true;

    > myFormList[1].Visible:=false;

    > myFormList[2].Visible:=false;

    > end;

    >

    >

  • Profile
    황광일 2000.11.18 15:07
    var

    frms : array[0..3] of Tform2;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    i : integer;

    begin

    for i:= 0to 3 do

    begin

    frms[i] := TForm2.Create(Self);

    frms[i].Show;

    end;

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    begin

    frms[StrToInt(Edit1.Text)].Show;

    end;



    이렇게 해보시져..

    TEdit에 0,1,2,3 각각 입력해보면..

    따로따로 활성화되는군여..





    한두경 wrote:

    > 폼A에서 폼B를 여러개 띄우려고합니다.

    > 물론 폼B는 각각 제어가 가능 해야합니다...

    >

    > 어떤분이

    > --------------------------------------------

    > 예를 들어 띄울 폼의 타입이 TForm2라면

    > 띄울때마다 Form2[K] := TForm2.Create(Self);

    > 물론 K는 증가하겠죠...

    > 이런 식으로 하면 됩니다.

    > ---------------------------------------------

    >

    > 요렇게 하라고 되있어서 함 해봤는데....

    > Form2[K]라고 해논 부분에서 에러가 나네요..

    > 폼 이름에 []요거가 안되나봐여..

    > 글서 그냥 Form2라고 해놓고... 실행을 시키니까...

    > 여러개 뜨긴 뜨는데.. 제어가 안되더군요..

    > 여러개의 창들중에 종료가 하나밖에 안됩니당. -_-;

    >

    > 제발 꼭좀 알려주세요.. 상당히 급한 일이라. 부탁드려요..