Fastnet component중에서
Tnmstrmserv component에 관한 object inspector의 event에는
Onpacketrecvd라는 event는 없습니다.
그러나 delphi help에는
Tnmstrmserv -----events
derived from tpowersock
Onpacketrecvd가 있습니다.
Tnmstrmserv component에서 Onpacketrecvd event를 사용하려면 어떻게 해야 하나요 ?
고수님들의 많은 답변 기다립니다.
일단 다음 아래 소스대로 했는데 event가 일어나지 않는 것 같아요 !
nmstrmserv component를 통해 file을 전송받을때 그 진행 상황을 progress bar로 나타내려 합니다.
그런데 event가 발생하지 않는 것 같아요 ?
다음이 제 soure입니다.
너그러우신 마음으로 한번 보시고 틀린점이 있는 지 알려주시면 고맙겠습니다.
unit module1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Psock, NMSTRM;
type
TModuleform = class(TDataModule)
NMStrm1: TNMStrm;
NMStrmServ1: TNMStrmServ;
procedure NMStrm1PacketSent(Sender: TObject);
procedure NMStrmserv1Packetrecvd(Sender: TObject);
procedure NMStrm1MessageSent(Sender: TObject);
procedure NMStrmServ1ClientContact(Sender: TObject);
procedure NMStrm1ConnectionFailed(Sender: TObject);
procedure NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Moduleform: TModuleform;
implementation
uses messengerfrm, mainfrm;
{$R *.DFM}
procedure TModuleform.NMStrm1PacketSent(Sender: TObject);
begin
messengerform.FlatProgressBar1.max:=nmstrm1.BytesTotal ;
messengerform.FlatProgressBar1.Position:=nmstrm1.BytesSent ;
end;
procedure TModuleform.NMStrm1MessageSent(Sender: TObject);
begin
messagedlg('File이 성공적으로 전송되었습니다.',mtinformation,[mbok],0) ;
end;
procedure TModuleform.NMStrmServ1ClientContact(Sender: TObject);
begin
nmstrmserv1.reportlevel:=status_basic ;
nmstrmserv1.timeout:=9000 ;
end;
procedure TModuleform.NMStrm1ConnectionFailed(Sender: TObject);
begin
messagedlg('File전송 중 오류발생'+#13+'다시 시도하세요 !',mterror,[mbok],0) ;
end;
procedure TModuleform.NMStrmServ1MSG(Sender: TComponent;
const sFrom: String; strm: TStream);
var
myfstream : tfilestream ;
begin
if fileexists(mainform.downloadpath) then deletefile(mainform.downloadpath) ;
myfstream:=tfilestream.create(mainform.downloadpath,fmcreate) ;
try
myfstream.copyfrom(strm,strm.size) ;
finally
myfstream.Free ;
end ;
end;
procedure TModuleform.NMStrmServ1PacketRecvd(Sender: TObject);
begin
messengerform.FlatProgressBar1.max:=nmstrmserv1.BytesTotal ;
messengerform.FlatProgressBar1.Position:=nmstrmserv1.BytesRecvd;
end;
procedure TModuleform.DataModuleCreate(Sender: TObject);
begin
NMStrmServ1.OnPacketRecvd := NMStrmServ1PacketRecvd ;
end;
end.
Public Event 같습니다. 그럼 Object Inspector가 아니라 코드에서 이벤트
핸들러를 지정해줘야 합니다.
nmstrmserv.Onpacketrecvd := Form1.Onpacketrecvd_Handler;
이런 식으로 대입해주시면 됩니다...
Onpacketrecvd와 함수 프로토타입이 일치해야 하는건 아시겠죠...
수고하세요.
===================================================================
saxoji wrote:
> Fastnet component중에서
> Tnmstrmserv component에 관한 object inspector의 event에는
> Onpacketrecvd라는 event는 없습니다.
> 그러나 delphi help에는
> Tnmstrmserv -----events
> derived from tpowersock
> Onpacketrecvd가 있습니다.
>
> Tnmstrmserv component에서 Onpacketrecvd event를 사용하려면 어떻게 해야 하나요 ?
> 고수님들의 많은 답변 기다립니다.
> 일단 다음 아래 소스대로 했는데 event가 일어나지 않는 것 같아요 !
>
>
> nmstrmserv component를 통해 file을 전송받을때 그 진행 상황을 progress bar로 나타내려 합니다.
> 그런데 event가 발생하지 않는 것 같아요 ?
>
> 다음이 제 soure입니다.
> 너그러우신 마음으로 한번 보시고 틀린점이 있는 지 알려주시면 고맙겠습니다.
>
>
>
> unit module1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> Psock, NMSTRM;
>
> type
> TModuleform = class(TDataModule)
> NMStrm1: TNMStrm;
> NMStrmServ1: TNMStrmServ;
> procedure NMStrm1PacketSent(Sender: TObject);
> procedure NMStrmserv1Packetrecvd(Sender: TObject);
> procedure NMStrm1MessageSent(Sender: TObject);
> procedure NMStrmServ1ClientContact(Sender: TObject);
> procedure NMStrm1ConnectionFailed(Sender: TObject);
> procedure NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
> strm: TStream);
> procedure DataModuleCreate(Sender: TObject);
>
>
> private
> { Private declarations }
>
> public
> { Public declarations }
> end;
>
> var
> Moduleform: TModuleform;
>
> implementation
>
> uses messengerfrm, mainfrm;
>
>
>
> {$R *.DFM}
>
>
>
> procedure TModuleform.NMStrm1PacketSent(Sender: TObject);
> begin
> messengerform.FlatProgressBar1.max:=nmstrm1.BytesTotal ;
> messengerform.FlatProgressBar1.Position:=nmstrm1.BytesSent ;
> end;
>
> procedure TModuleform.NMStrm1MessageSent(Sender: TObject);
> begin
> messagedlg('File이 성공적으로 전송되었습니다.',mtinformation,[mbok],0) ;
> end;
>
> procedure TModuleform.NMStrmServ1ClientContact(Sender: TObject);
> begin
> nmstrmserv1.reportlevel:=status_basic ;
> nmstrmserv1.timeout:=9000 ;
> end;
>
> procedure TModuleform.NMStrm1ConnectionFailed(Sender: TObject);
> begin
> messagedlg('File전송 중 오류발생'+#13+'다시 시도하세요 !',mterror,[mbok],0) ;
> end;
>
> procedure TModuleform.NMStrmServ1MSG(Sender: TComponent;
> const sFrom: String; strm: TStream);
> var
> myfstream : tfilestream ;
> begin
> if fileexists(mainform.downloadpath) then deletefile(mainform.downloadpath) ;
>
> myfstream:=tfilestream.create(mainform.downloadpath,fmcreate) ;
> try
> myfstream.copyfrom(strm,strm.size) ;
> finally
> myfstream.Free ;
> end ;
> end;
>
>
>
> procedure TModuleform.NMStrmServ1PacketRecvd(Sender: TObject);
> begin
> messengerform.FlatProgressBar1.max:=nmstrmserv1.BytesTotal ;
> messengerform.FlatProgressBar1.Position:=nmstrmserv1.BytesRecvd;
> end;
>
>
>
> procedure TModuleform.DataModuleCreate(Sender: TObject);
> begin
> NMStrmServ1.OnPacketRecvd := NMStrmServ1PacketRecvd ;
> end;
>
> end.