Q&A

  • object inspector에 없는 event처리는 어떻게 하나요 ?--제발 도와주셔요
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.

1  COMMENTS
  • Profile
    김일영 2000.05.14 05:58
    안써본 컴포넌트라 잘 모르겠습니다만, 아마도 그 Event가 Published가 아니라

    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.