Q&A

  • 폼을 동적으로 띄우고 종료시 모두 죽이는 방법좀
메시지 서비스 프로그램을 할려고 합니다.



가령 FormMain폼의 리스트박스에 사용자 ID가 있고 그 사용자 ID를 클릭할경우 메시지 송수진폼을 뜨게 할려고 합니다. 메시지폼을 FormMessage라고 하면 FormMesage폼을 기본적으로 디자인해놓고... 리스트박스에서 사용자ID를 클릭시 그 사용자 ID별로 FormMessage폼을 띄워야하는데 어떻게 하는지 몰라서 고수님께 도움을 청합니다. 그리고 어떤 사용자ID를 클릭하였을때 그 사용자 ID의 메세지폼이 떠 있지 않으면 새롭게 생성하고, 만일 그 사용자ID의 메세지폼이 떠 있을경우에는 그 폼에 포커스를 줄려고 합니다.



그리고 메인폼을 종료시 여러개 떠있는 메세지폼과 다른 폼들을 한꺼번에 종료할려고 하는데 어떻게 해야하는지 답변좀 올려주세요..제발..





2  COMMENTS
  • Profile
    마형 2001.09.11 00:39
    완랜드 wrote:

    > 메시지 서비스 프로그램을 할려고 합니다.

    >

    > 가령 FormMain폼의 리스트박스에 사용자 ID가 있고 그 사용자 ID를 클릭할경우 메시지 송수진폼을 뜨게 할려고 합니다. 메시지폼을 FormMessage라고 하면 FormMesage폼을 기본적으로 디자인해놓고... 리스트박스에서 사용자ID를 클릭시 그 사용자 ID별로 FormMessage폼을 띄워야하는데 어떻게 하는지 몰라서 고수님께 도움을 청합니다. 그리고 어떤 사용자ID를 클릭하였을때 그 사용자 ID의 메세지폼이 떠 있지 않으면 새롭게 생성하고, 만일 그 사용자ID의 메세지폼이 떠 있을경우에는 그 폼에 포커스를 줄려고 합니다.

    >

    > 그리고 메인폼을 종료시 여러개 떠있는 메세지폼과 다른 폼들을 한꺼번에 종료할려고 하는데 어떻게 해야하는지 답변좀 올려주세요..제발..

    >

    >





    1. 메인폼에 TList를 하나 선언하시고 FormCreate에서 Create (formClose에 반드시 해제)

    2. 리스트에서 아이디 선택하면 TList에서 같은 아이디가 있나 확인

    3. 없다면 송수신 폼을 Create하고 리스트에 추가하고 show

    4. 송수신 폼에 FormClose에 Action:= caFree; 를 추가하고 (자동 제거)

    메인 폼에 TList에서 제거하는 펑션 Call



    5. 만약 같은 아이디가 존재하면 Show하거나, 안되면 ?? Activate해야 될지도???



    메인폼이 사라지면 연관된 폼은 자동해제되니 걱정하지 마시길...



    ex)





    ///////////////////

    TFrmMain.FormCreate(...

    begin

    inherited;



    lstChil := TList.Create

    end;



    ///////////////////

    TFrmMain.FormClose ....

    begin

    lstChild.Free;



    inherited;

    end;



    /// 리스트에서 선택시..

    TFrmMain.어쩌구 저쩌구 펑션

    var

    frm: TFrmChild;

    i: integer;

    begin

    for i:=0 to (lstChild.Count-1) do

    begin

    frm := TFrmChild(lstChild.Items[i]);

    if(frm.strID=선택된 id) then

    begin

    frm.Show; // 혹은 재주껏 위로 올리시길.. 안먹을 수도...

    exit;

    end;

    end;



    // 새폼 만들기

    frm := TFrmChild.Create(Self);

    frm.strID := 아까선택한 ID;

    AddChild(frm);



    frm.Show;

    end;



    //////////////////////

    TFrmMain.AddChild(var frm: TFrmChild);

    begin

    lstChild.Add(frm);

    end;





    //////////////////////

    TFrmMain.RemoveChild(var frm: TFrmChild); // 반드시 var로 선언

    var

    nCount, i: integer;

    begin

    lstChild.Remove(frm); // 확인해보시길 안해봐서 될지???

    end;



    /// 폼의 public에 다음 추가

    strID: string;





    //////////////

    TFrmChild.FormClose ....

    begin

    FrmMain.RemoveChild(Self);

    Action := caFree;



    inherited;

    end;



    너무 자세한것 같군요.. 이렇게 자세하게 설명해주면 실력이 늘지않는답니다.

    나머지 문제는 매뉴얼을 참고해서 해결하시고요. 이거 대충 온라인상 만든것이라

    안돌아 갈지도 모른답니다..



  • Profile
    aparadin 2001.09.10 19:31
    완랜드 wrote:

    > 메시지 서비스 프로그램을 할려고 합니다.

    >

    > 가령 FormMain폼의 리스트박스에 사용자 ID가 있고 그 사용자 ID를 클릭할경우 메시지 송수진폼을 뜨게 할려고 합니다. 메시지폼을 FormMessage라고 하면 FormMesage폼을 기본적으로 디자인해놓고... 리스트박스에서 사용자ID를 클릭시 그 사용자 ID별로 FormMessage폼을 띄워야하는데 어떻게 하는지 몰라서 고수님께 도움을 청합니다. 그리고 어떤 사용자ID를 클릭하였을때 그 사용자 ID의 메세지폼이 떠 있지 않으면 새롭게 생성하고, 만일 그 사용자ID의 메세지폼이 떠 있을경우에는 그 폼에 포커스를 줄려고 합니다.

    >

    > 그리고 메인폼을 종료시 여러개 떠있는 메세지폼과 다른 폼들을 한꺼번에 종료할려고 하는데 어떻게 해야하는지 답변좀 올려주세요..제발..

    =======================================================================

    자식폼이 여러개가뜰수있나요?

    흐음.. 그렇다면 좀 그런데....

    Check변수를 주어보시죠 여러개의 배열로잡으셔야겠군요...

    하나의 자식폼이 생성되면 (물론 이것도 배열로잡으셔야겠군요) 그에 상응하는 체크변수

    하나를 True로 해주시고 아이디를 클릭할때 이걸 조사해서 True면

    WindowState를 조정해서 팝업시켜주시고 아니면 새로 생성시켜주시면 되겠군요.

    그리고 자식폼이 죽을때 엄마폼에 있는 자기의 체크변수를 False로 시켜주면 상관없겠군요 그리고 어차피 엄마폼의오브젝트들이기때문에 엄마폼이 죽으면 자식폼은 죽겠군요

    그럼 허접하게 말해서 더욱 혼란을 일으킨건아닌지 모르겠군요.그럼이만...