다음 예제를 보고 좋은 조언 부탁드립니다...
-------------------------------------------------------------------
1. unit1 <-- 메인폼
2. unit2 <-- 없는 Unit(함수정의용)
---사용자 정의 함수---
function ConnectNetwork():Boolean;
begin
try
Form1.Powersock1.Connect;
Result := True;
Form1.Powersock1.DisConnect;
except
Result := True;
Form1.Powersock1.DisConnect;
end;
end;
-------------------------------------------------------------------
제가 하려는 의도는 다음과 같습니다.
메인폼에서 ConnectNetwork()을 호출하면 ConnectNetwork()함수 내부에서
메인폼의 StatusBar의 OnDrawPanel이벤트를 작동하게 할려고 합니다.
OnDrawPanel이벤트에는 판넬에 ON,OFF를 찍어주는 스크립트가 되있습니다.
델파이는 이벤트 드리븐 형식의 프로그래밍을 사용하고 있습니다.
모든 윈도우 프로그래밍 툴이 마찬가지이겠죠.
아래처럼 Connect다음 바로 Disconnect가 온다면 어떻게 될까요?
Connect하라고 메세지를 날린 후 바로 Disconnect하라는 메세지를 날리게 됩니다.
즉, 소켓 컴포넌트에서는 Connect와 Disconnect를 거의 동시에 처리를 해버리게 되는것이죠. Connect 함수가 완전히 수행되기 전에 말이죠.
그렇다면 Connect가 된 후에 Disconnect를 해야 효과를 볼 수 있겠죠?
잘 찾아보시면 소켓컴포넌트의 이벤트에 OnConnect와 OnDisconnect이벤트가 있을것입니다.
OnConnect시 Panel에 ON이라는 정보를 보내주고, OnDisconnect이벤트가 발생시 OFF라는 정보를 보내주면 되는것이죠.
즉, 소켓의 이벤트를 사용해야 정확히 작동한다는 것입니다.
만약 굳이 아래처럼 하시겠다면 꽁수가 있기는 합니다.
만약 소켓 컴포넌트에 현재 연결상태를 가져올 수 있는 프로퍼티가 있다면(있다는 가정하에..) 그것을 사용해 루프를 돌려버리는 것이죠.
예를들어...
function ConnectNetwork():Boolean;
begin
try
Form1.Powersock1.Connect;
repeat
Application.ProcessMessages
Until PowerSock1.Stat = psConnect; <-- 가정입니다..
Result := True;
Form1.Powersock1.DisConnect;
repeat
Application.ProcessMessages
Until PowerSock1.Stat = psDisConnect; <-- 역시가정입니다..
except
Result := True;
Form1.Powersock1.DisConnect;
repeat
Application.ProcessMessages
Until PowerSock1.Stat = psDisConnect; <-- 이것도 역시가정입니다..
end;
end;
정연섭 께서 말씀하시기를...
> 다음 예제를 보고 좋은 조언 부탁드립니다...
> -------------------------------------------------------------------
> 1. unit1 <-- 메인폼
>
> 2. unit2 <-- 없는 Unit(함수정의용)
>
> ---사용자 정의 함수---
> function ConnectNetwork():Boolean;
> begin
> try
> Form1.Powersock1.Connect;
> Result := True;
> Form1.Powersock1.DisConnect;
> except
> Result := True;
> Form1.Powersock1.DisConnect;
> end;
> end;
> -------------------------------------------------------------------
> 제가 하려는 의도는 다음과 같습니다.
> 메인폼에서 ConnectNetwork()을 호출하면 ConnectNetwork()함수 내부에서
> 메인폼의 StatusBar의 OnDrawPanel이벤트를 작동하게 할려고 합니다.
>
> OnDrawPanel이벤트에는 판넬에 ON,OFF를 찍어주는 스크립트가 되있습니다.
>