챗팅을 공부 삼아서 구현해 볼려고 하는데요...궁금한 점이 있습니다.
예를들어 msn 메신저에서 대화상대를 선택하고 더블클릭하면 상대방과의 대화할수 있는
대화창이 화면에 생성되잖아요.. 요부분이 궁금합니다.
1:1 채팅이라면 미리 정적으로 준비해둔 대화창 폼을 모달리스로 띄우면 될것같은디.
만약 n:n 이라면 각기 대화 상대하고의 대화창이 생성되어야 하잖아요....
미리 준비해둔 대화창폼을 어떻게 하면 여러번 생성할 수 있을까요? 상속 같은 방법이 필요한건가요? 일종의 표준 템플릿이 필요하다고 생각되는데요.. 방법좀 자세히 부탁드립니다.
TA : Main폼
TB : 클라이언트 폼(대화폼) Public 또는 Property 속성에 ID추가
예) A에서
대상아이디 클릭시
for i := 0 to Screen.FormCount - 1 do
if Self.Forms[i] as TB then
if Self.Forms[i] as TB.ID = '대상아이디' then
begin
Self.Forms[i] as TB.Show;
exit;
end;
//위에서 없으니 생성
With TB.Create(Self) do
begin
ID := 대상아이디
...
Show;
end;
대상아이디에서 메세지 수신(WriteMessage 가상으로 만든 메소드 또는 함수)
for i := 0 to Screen.FormCount - 1 do
if Self.Forms[i] as TB then
if Self.Forms[i] as TB.ID = '대상아이디' then
begin
Self.Forms[i] as TB.Show;
Self.Forms[i] as TB.WriteMessage(메세지);
exit;
end;
//위에서 없으니 생성
With TB.Create(Self) do
begin
ID := 대상아이디
...
Show;
WriteMessage(메세지);
end;
무슨 이야기인지 아시겠죠
그냥 뛰우세요 아무생각없이(클라이언트 Close에 Cafree 필수,
또한, Project 옵션 클라이언트폼은 제거하는것도 필수?(있어도 무방하
지만 메모리 낭비))
그리고 제어는 담과 같이
for i := 0 to Screen.FormCount - 1 do
if Self.Forms[i] as TB then
if Self.Forms[i] as TB.ID = '대상아이디' then
begin
.....(알아서 하심됨)
end;
참 될수 있으면 Fnction 으로 만드세요 이것도 쓸까
Function GetChildFormWithID(ID : string) : TB;
var i : integer;
begin
Result := nil;
for i := 0 to Screen.FormCount - 1 do
if Self.Forms[i] as TB then
if Self.Forms[i] as TB.ID = '대상아이디' then
begin
Result := Self.Forms[i];
exit;
end;
With TB.Create(Self) do
begin
ID := 대상아이디;
...
Result := Self;
end;
end;