안녕하십니까?
소켓을 이용한 pc간에 메모전달 프로그램을 만들고 있습니다.
미리 폼을 몇개 준비해 놓고, 첫번째 메모가 오면 첫번째 폼을,
2번째 메모가 오면 2번째 폼을(첫번째 폼을 닫지 않았다면) 같이 띄워놓고 싶습니다.
아래처럼 코딩했는데, 계속해서 첫번째 폼만 사용되어 에러가 나네요 ㅡㅡ^
if TfmShow = nil then
begin
try
fmShow2 := TfmShow2.Create(Self);
fmShow2.ShowModal;
finally
fmShow2.Free;
end;
end
else
begin
try
fmShow := TfmShow.Create(Self);
fmShow.ShowModal;
finally
fmShow.Free;
end;
end;
즉, 메모가 여러가 오면 사용자가 닫기 전에는 계속해서 준비된 다른 폼을 같이 보여주고 싶은 의도 입니다. 도와주세요 ~~~ ^*^
ShowModal 말고 Show로 하셔야 하는거 아닌가? ㅡ.ㅡ
자세한 상황은 저도 잘 모르니 폼뛰우는 부분만 적겠습니다.
아래부분은 함수로 따로 놔두셔도 계속 쓰실수 있으실거에요..
FindForm(폼이름) <= 얘가 True 면 떠 있구요..
떠있을때 죽여야 한다면 Free 시키시면 될거에요..
띄우는 폼애들은 Close 이벤트에서 Action := caFree 해주시구요..
즐프되세요.
MDI 구요..
//===함수 선언
private
function FindForm(const ActForm: string): Boolean;
//========= 현재 실행할 폼이 이미 떠 있는지 찾음. =================//
function TF_Base_Main.FindForm(const ActForm: string): Boolean;
var
I: Integer;
begin
Result := False;
for I := 0 to MDIChildCount - 1 do
if UpperCase( MDIChildren[I].Name ) = UpperCase( ActForm ) then
begin
Result := True;
Break;
end;
end;
//========================== 프로그램 종료시..
procedure TF_Base_Main.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
var
i : Integer;
begin
if ID_YES = Application.MessageBox( '기초 코드 관리를 종료할까요?', '프로그램 종료', MB_YESNO + MB_ICONQUESTION ) then
begin
for i := MDIChildCount -1 Downto 0 Do
begin
MDIChildren[i].Free;
end;
CanClose := True;
end else CanClose := False;
end;
//================ 폼 뛰우는 부분.
procedure TF_Base_Main.N4Click(Sender: TObject);
begin
// 프로젝트 코드 관리
if Not FindForm('F_PJCode_Info') then F_PJCode_Info := TF_PJCode_Info.Create(Self);
F_PJCode_Info.Show;
end;