Q&A

  • 폼의 동정생성 및 생성유무 식별방법
Msn이나 ICQ에서 처럼....



메세지가 오거나 보낼때요...



메세지창이 생성 되잖아요!.. 근데 생성될때 받는 사람이나 보낸 사람에 관련된



창이 이미 생성되 있슴 그창이 그대로 나타나고...





새로운 사람에게 메세지를 보내거나 받을때는 새로운 창이 생성되잖아요...



그걸 어케 구현하는게 좋을까요?...



현재는 비스므리 하게 구현은 되었는데...



메세지가 뜨는창의 이름을 Frm_Mess 라고 하겠습니다.



접속자 : A, B, C 가 있습니다.



예를들어 A가 B에게서 메세지를 받아서 폼이 생성돼었구요....(A의B와 관련된 폼)

그다음에 A가 C에게서 메세지를 받아서 다른 폼이 생성됐습니다.(A의C와 관련된 폼)



여기까진 문제가 없는데요.....

A가 다시 B에게서 메세지를 받으면 원래있던폼(A의B와 관련된 폼)에 메세지가 뜨면

되잖아요.....ㅠㅠ



근데 또다시 새로운 폼이 생성됩니다...... 결국은 폼이 하나더 생성되버린거지요..



그상황에서 다시 C에게서 메세지가 오면 또 생성되고....



현재는 폼(Frm_Mess)에 전역변수를 두어서... 사용하고 있거든요...



어디서 본건 있어서 Frm_Mess.Tag를 사용해봤는데요... Integer형을 써야한다고



하고.. 점 알려주세욤....

5  COMMENTS
  • Profile
    최용일 2001.08.02 21:04
    안녕하세요. 최용일입니다.



    Tag속성과 Screen.Forms, Screen.FormCount속성을 이용하시면 하실 수 있을겁니다...



    폼이 새로 생성될때 Tag속성에 유저의 정보를 넣어주세요. Tag는 4바이트 Integer이니까



    형변환만 하면 어떤형이든지 들어갈 수 있습니다. 주로 포인터를 형변환해서 많이 넣습



    니다. Screen.Forms에는 현재 디스플레이되는 폼의 리스트가 들어있고,



    Screen.FormCount에는 폼의 갯수가 들어있습니다.



    for문으로 돌려서 Form.Tag속성을 검사해서 같은 유저정보를 가지는 폼이 있다면 그냥



    Show해서 보여주시고 아니면 생성하시면 되죠...



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



    나옹맨 wrote:

    > Msn이나 ICQ에서 처럼....

    >

    > 메세지가 오거나 보낼때요...

    >

    > 메세지창이 생성 되잖아요!.. 근데 생성될때 받는 사람이나 보낸 사람에 관련된

    >

    > 창이 이미 생성되 있슴 그창이 그대로 나타나고...

    >

    >

    > 새로운 사람에게 메세지를 보내거나 받을때는 새로운 창이 생성되잖아요...

    >

    > 그걸 어케 구현하는게 좋을까요?...

    >

    > 현재는 비스므리 하게 구현은 되었는데...

    >

    > 메세지가 뜨는창의 이름을 Frm_Mess 라고 하겠습니다.

    >

    > 접속자 : A, B, C 가 있습니다.

    >

    > 예를들어 A가 B에게서 메세지를 받아서 폼이 생성돼었구요....(A의B와 관련된 폼)

    > 그다음에 A가 C에게서 메세지를 받아서 다른 폼이 생성됐습니다.(A의C와 관련된 폼)

    >

    > 여기까진 문제가 없는데요.....

    > A가 다시 B에게서 메세지를 받으면 원래있던폼(A의B와 관련된 폼)에 메세지가 뜨면

    > 되잖아요.....ㅠㅠ

    >

    > 근데 또다시 새로운 폼이 생성됩니다...... 결국은 폼이 하나더 생성되버린거지요..

    >

    > 그상황에서 다시 C에게서 메세지가 오면 또 생성되고....

    >

    > 현재는 폼(Frm_Mess)에 전역변수를 두어서... 사용하고 있거든요...

    >

    > 어디서 본건 있어서 Frm_Mess.Tag를 사용해봤는데요... Integer형을 써야한다고

    >

    > 하고.. 점 알려주세욤....

  • Profile
    최용일 2001.08.02 21:11
    꼭 Tag속성을 사용하실 필요는 없겠네요...



    폼엥 속성을 추가해서 사용하시는 것이 더 편할거 같군요...



    type

    TFrm_Mess = class(TForm)

    ...

    UserName: string;

    end;





    var

    Found: Boolean;

    begin

    Found := False;

    for I := 0 to Screen.FormCount-1 do

    begin

    if Screen.Forms[I] is TFrm_Mess then

    if TFrm_Mess(Screen.Forms[I]).UserName = 메세지보낸유저이름 then

    begin

    Screen.Forms[I].Show;

    Found := True;

    end;

    end;

    if not Found then // 메세지보낸유저와 대화하는 폼이 없다면

    begin

    Frm_Mess := TFrm_Mess.Create(nil); // 새로 생성

    Frm_Mess.Show;

    end;

    end;



    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > Tag속성과 Screen.Forms, Screen.FormCount속성을 이용하시면 하실 수 있을겁니다...

    >

    > 폼이 새로 생성될때 Tag속성에 유저의 정보를 넣어주세요. Tag는 4바이트 Integer이니까

    >

    > 형변환만 하면 어떤형이든지 들어갈 수 있습니다. 주로 포인터를 형변환해서 많이 넣습

    >

    > 니다. Screen.Forms에는 현재 디스플레이되는 폼의 리스트가 들어있고,

    >

    > Screen.FormCount에는 폼의 갯수가 들어있습니다.

    >

    > for문으로 돌려서 Form.Tag속성을 검사해서 같은 유저정보를 가지는 폼이 있다면 그냥

    >

    > Show해서 보여주시고 아니면 생성하시면 되죠...

    >

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

    >

    > 나옹맨 wrote:

    > > Msn이나 ICQ에서 처럼....

    > >

    > > 메세지가 오거나 보낼때요...

    > >

    > > 메세지창이 생성 되잖아요!.. 근데 생성될때 받는 사람이나 보낸 사람에 관련된

    > >

    > > 창이 이미 생성되 있슴 그창이 그대로 나타나고...

    > >

    > >

    > > 새로운 사람에게 메세지를 보내거나 받을때는 새로운 창이 생성되잖아요...

    > >

    > > 그걸 어케 구현하는게 좋을까요?...

    > >

    > > 현재는 비스므리 하게 구현은 되었는데...

    > >

    > > 메세지가 뜨는창의 이름을 Frm_Mess 라고 하겠습니다.

    > >

    > > 접속자 : A, B, C 가 있습니다.

    > >

    > > 예를들어 A가 B에게서 메세지를 받아서 폼이 생성돼었구요....(A의B와 관련된 폼)

    > > 그다음에 A가 C에게서 메세지를 받아서 다른 폼이 생성됐습니다.(A의C와 관련된 폼)

    > >

    > > 여기까진 문제가 없는데요.....

    > > A가 다시 B에게서 메세지를 받으면 원래있던폼(A의B와 관련된 폼)에 메세지가 뜨면

    > > 되잖아요.....ㅠㅠ

    > >

    > > 근데 또다시 새로운 폼이 생성됩니다...... 결국은 폼이 하나더 생성되버린거지요..

    > >

    > > 그상황에서 다시 C에게서 메세지가 오면 또 생성되고....

    > >

    > > 현재는 폼(Frm_Mess)에 전역변수를 두어서... 사용하고 있거든요...

    > >

    > > 어디서 본건 있어서 Frm_Mess.Tag를 사용해봤는데요... Integer형을 써야한다고

    > >

    > > 하고.. 점 알려주세욤....

  • Profile
    나옹맨 2001.08.03 00:00
    폼에 속성을 추가 한다는게 무슨말씀인지요?



    한번만 더 알려주세요.....







    최용일 wrote:

    > 꼭 Tag속성을 사용하실 필요는 없겠네요...

    >

    > 폼엥 속성을 추가해서 사용하시는 것이 더 편할거 같군요...

    >

    > type

    > TFrm_Mess = class(TForm)

    > ...

    > UserName: string;

    > end;

    >

    >

    > var

    > Found: Boolean;

    > begin

    > Found := False;

    > for I := 0 to Screen.FormCount-1 do

    > begin

    > if Screen.Forms[I] is TFrm_Mess then

    > if TFrm_Mess(Screen.Forms[I]).UserName = 메세지보낸유저이름 then

    > begin

    > Screen.Forms[I].Show;

    > Found := True;

    > end;

    > end;

    > if not Found then // 메세지보낸유저와 대화하는 폼이 없다면

    > begin

    > Frm_Mess := TFrm_Mess.Create(nil); // 새로 생성

    > Frm_Mess.Show;

    > end;

    > end;

    >

    > 최용일 wrote:

    > > 안녕하세요. 최용일입니다.

    > >

    > > Tag속성과 Screen.Forms, Screen.FormCount속성을 이용하시면 하실 수 있을겁니다...

    > >

    > > 폼이 새로 생성될때 Tag속성에 유저의 정보를 넣어주세요. Tag는 4바이트 Integer이니까

    > >

    > > 형변환만 하면 어떤형이든지 들어갈 수 있습니다. 주로 포인터를 형변환해서 많이 넣습

    > >

    > > 니다. Screen.Forms에는 현재 디스플레이되는 폼의 리스트가 들어있고,

    > >

    > > Screen.FormCount에는 폼의 갯수가 들어있습니다.

    > >

    > > for문으로 돌려서 Form.Tag속성을 검사해서 같은 유저정보를 가지는 폼이 있다면 그냥

    > >

    > > Show해서 보여주시고 아니면 생성하시면 되죠...

    > >

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

    > >

    > > 나옹맨 wrote:

    > > > Msn이나 ICQ에서 처럼....

    > > >

    > > > 메세지가 오거나 보낼때요...

    > > >

    > > > 메세지창이 생성 되잖아요!.. 근데 생성될때 받는 사람이나 보낸 사람에 관련된

    > > >

    > > > 창이 이미 생성되 있슴 그창이 그대로 나타나고...

    > > >

    > > >

    > > > 새로운 사람에게 메세지를 보내거나 받을때는 새로운 창이 생성되잖아요...

    > > >

    > > > 그걸 어케 구현하는게 좋을까요?...

    > > >

    > > > 현재는 비스므리 하게 구현은 되었는데...

    > > >

    > > > 메세지가 뜨는창의 이름을 Frm_Mess 라고 하겠습니다.

    > > >

    > > > 접속자 : A, B, C 가 있습니다.

    > > >

    > > > 예를들어 A가 B에게서 메세지를 받아서 폼이 생성돼었구요....(A의B와 관련된 폼)

    > > > 그다음에 A가 C에게서 메세지를 받아서 다른 폼이 생성됐습니다.(A의C와 관련된 폼)

    > > >

    > > > 여기까진 문제가 없는데요.....

    > > > A가 다시 B에게서 메세지를 받으면 원래있던폼(A의B와 관련된 폼)에 메세지가 뜨면

    > > > 되잖아요.....ㅠㅠ

    > > >

    > > > 근데 또다시 새로운 폼이 생성됩니다...... 결국은 폼이 하나더 생성되버린거지요..

    > > >

    > > > 그상황에서 다시 C에게서 메세지가 오면 또 생성되고....

    > > >

    > > > 현재는 폼(Frm_Mess)에 전역변수를 두어서... 사용하고 있거든요...

    > > >

    > > > 어디서 본건 있어서 Frm_Mess.Tag를 사용해봤는데요... Integer형을 써야한다고

    > > >

    > > > 하고.. 점 알려주세욤....

  • Profile
    최용일 2001.08.03 04:10
    속성창에서 이벤트를 추가하는 것과 같은 맥락인데요.... 쩝....



    속성창에서 이벤트를 추가하면 폼의 선언부에 추가가 되잖아요? 그것처럼 속성, 필드, 메소드



    를 직접 코딩으로 추가할 수 있습니다... 전역변수를 쓰지 않고 이런식으로 하는 것이 OOP의



    매력이 아닐런지...



    TFrm_Mess = class(TForm)

    ......

    private

    FUserName: string;

    protected

    property UserName: string read FUserName write FUserName;

    end;



    접근할 때

    Frm_Mess.UserName := 'New User';

    if Frm_Mess.UserName = '어쩌구' then 저쩌구...;

    ...



    나옹맨 wrote:

    > 폼에 속성을 추가 한다는게 무슨말씀인지요?

    >

    > 한번만 더 알려주세요.....

    >

    >

    >

    > 최용일 wrote:

    > > 꼭 Tag속성을 사용하실 필요는 없겠네요...

    > >

    > > 폼엥 속성을 추가해서 사용하시는 것이 더 편할거 같군요...

    > >

    > > type

    > > TFrm_Mess = class(TForm)

    > > ...

    > > UserName: string;

    > > end;

    > >

    > >

    > > var

    > > Found: Boolean;

    > > begin

    > > Found := False;

    > > for I := 0 to Screen.FormCount-1 do

    > > begin

    > > if Screen.Forms[I] is TFrm_Mess then

    > > if TFrm_Mess(Screen.Forms[I]).UserName = 메세지보낸유저이름 then

    > > begin

    > > Screen.Forms[I].Show;

    > > Found := True;

    > > end;

    > > end;

    > > if not Found then // 메세지보낸유저와 대화하는 폼이 없다면

    > > begin

    > > Frm_Mess := TFrm_Mess.Create(nil); // 새로 생성

    > > Frm_Mess.Show;

    > > end;

    > > end;

    > >

    > > 최용일 wrote:

    > > > 안녕하세요. 최용일입니다.

    > > >

    > > > Tag속성과 Screen.Forms, Screen.FormCount속성을 이용하시면 하실 수 있을겁니다...

    > > >

    > > > 폼이 새로 생성될때 Tag속성에 유저의 정보를 넣어주세요. Tag는 4바이트 Integer이니까

    > > >

    > > > 형변환만 하면 어떤형이든지 들어갈 수 있습니다. 주로 포인터를 형변환해서 많이 넣습

    > > >

    > > > 니다. Screen.Forms에는 현재 디스플레이되는 폼의 리스트가 들어있고,

    > > >

    > > > Screen.FormCount에는 폼의 갯수가 들어있습니다.

    > > >

    > > > for문으로 돌려서 Form.Tag속성을 검사해서 같은 유저정보를 가지는 폼이 있다면 그냥

    > > >

    > > > Show해서 보여주시고 아니면 생성하시면 되죠...

    > > >

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

    > > >

    > > > 나옹맨 wrote:

    > > > > Msn이나 ICQ에서 처럼....

    > > > >

    > > > > 메세지가 오거나 보낼때요...

    > > > >

    > > > > 메세지창이 생성 되잖아요!.. 근데 생성될때 받는 사람이나 보낸 사람에 관련된

    > > > >

    > > > > 창이 이미 생성되 있슴 그창이 그대로 나타나고...

    > > > >

    > > > >

    > > > > 새로운 사람에게 메세지를 보내거나 받을때는 새로운 창이 생성되잖아요...

    > > > >

    > > > > 그걸 어케 구현하는게 좋을까요?...

    > > > >

    > > > > 현재는 비스므리 하게 구현은 되었는데...

    > > > >

    > > > > 메세지가 뜨는창의 이름을 Frm_Mess 라고 하겠습니다.

    > > > >

    > > > > 접속자 : A, B, C 가 있습니다.

    > > > >

    > > > > 예를들어 A가 B에게서 메세지를 받아서 폼이 생성돼었구요....(A의B와 관련된 폼)

    > > > > 그다음에 A가 C에게서 메세지를 받아서 다른 폼이 생성됐습니다.(A의C와 관련된 폼)

    > > > >

    > > > > 여기까진 문제가 없는데요.....

    > > > > A가 다시 B에게서 메세지를 받으면 원래있던폼(A의B와 관련된 폼)에 메세지가 뜨면

    > > > > 되잖아요.....ㅠㅠ

    > > > >

    > > > > 근데 또다시 새로운 폼이 생성됩니다...... 결국은 폼이 하나더 생성되버린거지요..

    > > > >

    > > > > 그상황에서 다시 C에게서 메세지가 오면 또 생성되고....

    > > > >

    > > > > 현재는 폼(Frm_Mess)에 전역변수를 두어서... 사용하고 있거든요...

    > > > >

    > > > > 어디서 본건 있어서 Frm_Mess.Tag를 사용해봤는데요... Integer형을 써야한다고

    > > > >

    > > > > 하고.. 점 알려주세욤....

  • Profile
    나옹맨 2001.08.02 21:01
    혹시 한개의 폼을 자꾸 생성하는게 아니라...



    다른 이름의 폼을 새로 생성해야 하나요? 지금은 Frm_Mess라는 폼을



    Frm_Mess.create(nil) 이처럼 사용하고 있는데....



    그래서 생성될때 Frm_Mess.변수(전역):=보낸사람 으로 하는데...



    이걸 Frm_보낸사람.create(nil) 로 하고 Frm_Mess의 모든 콤포를 복사해서



    배치해야 하남요? 아이구 복잡해랑....



    나옹맨 wrote:

    > Msn이나 ICQ에서 처럼....

    >

    > 메세지가 오거나 보낼때요...

    >

    > 메세지창이 생성 되잖아요!.. 근데 생성될때 받는 사람이나 보낸 사람에 관련된

    >

    > 창이 이미 생성되 있슴 그창이 그대로 나타나고...

    >

    >

    > 새로운 사람에게 메세지를 보내거나 받을때는 새로운 창이 생성되잖아요...

    >

    > 그걸 어케 구현하는게 좋을까요?...

    >

    > 현재는 비스므리 하게 구현은 되었는데...

    >

    > 메세지가 뜨는창의 이름을 Frm_Mess 라고 하겠습니다.

    >

    > 접속자 : A, B, C 가 있습니다.

    >

    > 예를들어 A가 B에게서 메세지를 받아서 폼이 생성돼었구요....(A의B와 관련된 폼)

    > 그다음에 A가 C에게서 메세지를 받아서 다른 폼이 생성됐습니다.(A의C와 관련된 폼)

    >

    > 여기까진 문제가 없는데요.....

    > A가 다시 B에게서 메세지를 받으면 원래있던폼(A의B와 관련된 폼)에 메세지가 뜨면

    > 되잖아요.....ㅠㅠ

    >

    > 근데 또다시 새로운 폼이 생성됩니다...... 결국은 폼이 하나더 생성되버린거지요..

    >

    > 그상황에서 다시 C에게서 메세지가 오면 또 생성되고....

    >

    > 현재는 폼(Frm_Mess)에 전역변수를 두어서... 사용하고 있거든요...

    >

    > 어디서 본건 있어서 Frm_Mess.Tag를 사용해봤는데요... Integer형을 써야한다고

    >

    > 하고.. 점 알려주세욤....