Q&A

  • msn메신저 같은 대화창은 어떻게 구현을 하는거죠?
메신저 같은 대화창들을 보면 (msn메신저 처럼)
같은 대화창이  각각 사용자와의 대화수많큼 폼이 뜹니다.
10명이 대화하면 10개의 대화창이 뜨고.. 100명이 대화하면 100개의 대화창이 뜨고..
그런데 각사용자에 맞게 잘 찾아 들어간다는 게 궁금합니다.

저렇게 할려면 어떻게 폼을 생성해야 하고, 어떻게 차별을 두는건지..
좀 알려주십시오.. 정말 머리가 안돌아갑니다.. 늙은 초보프로그래머에게 광명을...

* 돌머리로는 이렇게 까진 생각했습니다...

form1이 메인창이고 form2가 대화창이라고 하면 메인창에서 대기중에 있다가
A에게 대화요청이 들어오면 form2 := TForm2.create(self);로 대화창하나 띠우고
B에게 대화요청이 들어오면 역시 form2 := TForm2.create(self); 띠우고..
이렇게 하면 2개의 대화창이 뜨지만 다음에 A에게 대화가 다시 들어온다면
A와 열었던 form2를 찾아들어가야 하는데.. 어떻게 찾아들어가야 하는지..
form2를 생성할때 차별을 두고 생성해야 하는지.. 아... 정말 속터집니다.
조언 부탁드립니다!!!
1  COMMENTS
  • Profile
    최용일 2002.08.08 12:09
    안녕하세요. 최용일입니다.

    여러가지 방법이 있겠지만... 대화창목록을 관리하는 뭔가를 써야겠죠...

    TScreen.Forms배열일수도 있구, 대화창목록을 관리하는 객체일수도 있구... 등등...

    두번째 방법이 더 좋겠네요... TList나 TCollection등을 쓰거나 여기에서 파생해서 객체 하나 만들어 쓰시거나... 객체하나 새롭게 만들어서 여러가지 기능들을 넣어두시면 더 좋구요...

    암튼... TList를 쓴다는 가정하에...

    폼에 각각을 구별하는 속성이 존재해야 겠죠? 대화요청상대방 이름같은거...

    대화 요청 들어오면 리스트에서 대화요청상대방 이름으로 검색해서 없으면 폼하나 새로 만들어서 띄우고 리스트에 그폼을 집어넣구요, 있으면 그 리스트에 있는 같은 대화요청상대방이름을 가진 폼을 띄우시면 되죠... 이러면 중복될일이 없죠...

    대화창 := nil;
    for Index := 0 to 폼리스트.Count - 1 do // 같은 유저의 대화창이 존재하는가 검색
    begin
        if TForm2(폼리스트.Items[Index]).대화상대방이름 = 새롭게요청한대화상대방이름 then // 발견했군.
        begin
            대화창 := TForm2(폼리스트.Items[Index]);  
            Break; // 발견했으니까 더 이상 찾을 필요없네...
        end;
    end;

    if (대화창 = nil) then // 리스트에 없으면... 새로운 폼 생성
    begin
        대화창 := TForm2.Create(Self);
        대화창.대화상대방이름 := 새롭게요청한대화상대방이름;
        폼리스트.Add(대화창); // 리스트에 추가
    end;

    대화창.Show; // 대화창 보이기

    ^^ 항상 즐코하세요...