ind10 IdTcpServer 与IdTcpClient文件传输Demo |
|
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
Server端代码:
[code delphi] unit UntMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, ComCtrls, XPMan, ExtCtrls, StdCtrls, Menus, IdContext, IdScheduler, IdSchedulerOfThread, IdSchedulerOfThreadDefault, IdBaseComponent, IdComponent, IdCustomTCPServer, IdTCPServer, ImgList,IdGlobal, UntGlb ,IOUtils,IdThread, RibbonLunaStyleActnCtrls,ABOUT, ToolWin, PlatformDefaultStyleActnCtrls, ActnPopup, ExtDlgs ; type TForm1 = class(TForm) trycn1: TTrayIcon; xpmnfst1: TXPManifest; stat1: TStatusBar; grp1: TGroupBox; grp2: TGroupBox; mmo1: TMemo; mm1: TMainMenu; N1: TMenuItem; N3: TMenuItem; N2: TMenuItem; N4: TMenuItem; N7: TMenuItem; N8: TMenuItem; il1: TImageList; idtcpsrvr1: TIdTCPServer; idschdlrfthrdflt1: TIdSchedulerOfThreadDefault; N5: TMenuItem; BalloonHint1: TBalloonHint; PopActMemo: TPopupActionBar; NClear: TMenuItem; N6: TMenuItem; NSave: TMenuItem; PopActBall: TPopupActionBar; N9: TMenuItem; N11: TMenuItem; mniN10: TMenuItem; mniN11: TMenuItem; mniN12: TMenuItem; il3: TImageList; dlgSave1: TSaveTextFileDialog; lv1: TListView; il2: TImageList; procedure N11Click(Sender: TObject); procedure N7Click(Sender: TObject); procedure WndProc(var Msg:TMessage);override; procedure N14Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure idtcpsrvr1Execute(AContext: TIdContext); procedure FormCreate(Sender: TObject); procedure idtcpsrvr1Connect(AContext: TIdContext); procedure idtcpsrvr1Disconnect(AContext: TIdContext); procedure AddList(Acontext:TIdContext); procedure DelList(Acontext:TIdContext); procedure UpdSta; procedure WMUSERMSG(var msg:TMessage); message WM_USERMSG; procedure WMUSERFILE(var msg:TMessage);message WM_USERFILE; procedure N5Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure DisConnectAllClient; procedure N8Click(Sender: TObject); procedure N9click(Sender:Tobject); procedure mniN11Click(Sender: TObject); procedure mniN12Click(Sender: TObject); procedure trycn1DblClick(Sender: TObject); procedure PopActMemoPopup(Sender: TObject); procedure NClearClick(Sender: TObject); procedure NSaveClick(Sender: TObject); procedure dlgSave1CanClose(Sender: TObject; var CanClose: Boolean); procedure FormDestroy(Sender: TObject); procedure lv1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); procedure lv1ItemChecked(Sender: TObject; Item: TListItem); private { Private declarations } //定义一个私有成员,保存连接对象AContext(ListView控件Items成员没有AdddObject方法,无法保存对象) FStrings:TStrings; str:string; public { Public declarations } end; //这里声明一个自定义类,在Form.Create方法里面使用 type TMyContextClass = class(TIdServerContext) ClientInfo:TClientInfo; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMUSERFILE(var msg: TMessage); var FContext:TIdContext; ClientIP:string; begin FContext := TMyContextClass(msg.LParam); ClientIP := FContext.Binding.PeerIP; with mmo1.Lines do begin case msg.WParam of 0: Add(format('【客户端:%s】正在接收文件: %s--%s',[ClientIP,str,DateTimeToStr(Now)])); 1: Add(Format('【客户端:%s】文件: %s 接收完毕--%s',[ClientIP,str,DateTimeToStr(Now)])); 2: Add(Format('【客户端:%s】用户终止文件: %s 传送--%s',[ClientIP,str,DateTimeToStr(Now)])); end; end; end; procedure TForm1.WMUSERMSG(var msg: TMessage); begin if Msg.Msg = WM_USERMSG then begin case msg.WParam of ADD_LIST : AddList(TMyContextClass(msg.LParam)); DEL_LIST : DelList(TMyContextClass(msg.LParam)); end; stat1.Panels[1].Text := Format('%s%d',[stutext,lv1.Items.Count]); end; end; procedure TForm1.WndProc(var Msg:TMessage); begin if ((Msg.Msg = WM_SYSCOMMAND) and (msg.WParam = SC_CLOSE)) or ((Msg.Msg = WM_SYSCOMMAND)and(msg.WParam = SC_MINIMIZE)) then begin Msg.Msg := 0; N11.Click; end; inherited; end; procedure TForm1.AddList(Acontext: TIdContext); begin with lv1.Items.Add do begin Caption :=Acontext.Binding.PeerIP; ImageIndex :=0; SubItems.Add(TMyContextClass(AContext).ClientInfo.ClientName); SubItems.Add(DatetimeToStr(Now)); end; FStrings.AddObject('object',Acontext); mmo1.Lines.Add(Format('客户端【%s,%s】连接到服务器--%s',[AContext.Binding.PeerIP,TMyContextClass(AContext).ClientInfo.ClientName,DatetimeToStr(Now)])); end; procedure TForm1.DelList(Acontext: TIdContext); var i:Integer; begin // lst1.Items.Delete(lst1.Items.IndexOfObject(Acontext)); i:= FStrings.IndexOfObject(Acontext); FStrings.Delete(i); lv1.Items.Delete(i); mmo1.Lines.Add(Format('客户端【%s,%s】从服务器断开--%s',[AContext.Binding.PeerIP,TMyContextClass(AContext).ClientInfo.ClientName,DatetimeToStr(Now)])); end; procedure TForm1.DisConnectAllClient; var i:Integer; begin for i := 0 to FStrings.Count - 1 do begin TMyContextClass(FStrings.Objects[i]).Connection.Disconnect; end; end; procedure TForm1.dlgSave1CanClose(Sender: TObject; var CanClose: Boolean); var h:Integer; begin CanClose := False; if FileExists(dlgSave1.FileName) then begin if MessageDlg(Format('文件%s已存在,要替换吗?',[dlgSave1.FileName]),mtInformation,[mbYes,mbNo],0)=mrYes then begin DeleteFile(dlgSave1.FileName); h:=FileCreate(dlgSave1.FileName); FileClose(h); CanClose := True; end; end else begin h:=FileCreate(dlgSave1.FileName); FileClose(h); CanClose := True; end; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := False; DisConnectAllClient; CanClose := True; end; procedure TForm1.FormCreate(Sender: TObject); var path:string; begin //这里重新赋值 idtcpsrvr1.ContextClass属性。在Context被创建时,将以 TMyContextClass 类来创建。 //TIdListenerThread.LContext := Server.FContextClass.Create(LPeer, LYarn, Server.Contexts); //详见IdCustomTcPServer.pas单元956行 idtcpsrvr1.ContextClass := TMyContextClass; FStrings := TStringList.Create; lv1.Checkboxes := True; path:=ExtractFilePath(ParamStr(0)) REV; if not DirectoryExists(path) then TDirectory.CreateDirectory(path); end; procedure TForm1.FormDestroy(Sender: TObject); begin FStrings.Free; end; procedure TForm1.idtcpsrvr1Connect(AContext: TIdContext); //这里不能直接操作VCL控件,OnConnect,OnDisConnect,OnException,OnExecute都是在线程里面执行 //要采取SendMessage发送消息通知主线程操作VCL的方法才是可取的; //详见IdCustomTcPServer.pas单元961-964行 begin // TMyContextClass(AContext).ClientInfo.ClientIP := AContext.Binding.PeerIP; // SendMessage(Handle,WM_USERMSG,ADD_LIST,LongInt(AContext )); //通知主线更新VCL控件 end; procedure TForm1.idtcpsrvr1Disconnect(AContext: TIdContext); begin SendMessage(Handle,WM_USERMSG ,DEL_LIST,LongInt(AContext)); //通知主线更新VCL控件 end; procedure TForm1.idtcpsrvr1Execute(AContext: TIdContext); var Buf:TDataPack; BByte:TIdBytes; path:string; Files:string; h,Received:Integer; begin //接收文件存入当前程序REV子目录下 path := ExtractFilePath(Application.ExeName) REV '\'; while AContext.Connection.Connected do begin AContext.Connection.IOHandler.ReadBytes(BByte,SizeOf(buf),False); BytesToRaw(BByte,buf,SizeOf(Buf)); case Buf.Command of cmdSetName: begin with TMyContextClass(AContext).ClientInfo do begin ClientName :=Buf.ClientInfo.ClientName; ClientIP :=Buf.ClientInfo.ClientIP; end; SendMessage(Handle,WM_USERMSG,ADD_LIST,LongInt(AContext )); end; cmdSendFile: begin Files := path Buf.FileName; case Buf.Flags of 0: begin str :=buf.FileName; SendMessage(Handle,WM_USERFILE,0,LongInt(AContext)); if FileExists(files) then DeleteFile(files); h:=FileCreate(files,fmOpenReadWrite ); end; 1: h:=FileOpen(files,fmOpenReadWrite ); end; FileSeek(h,0,2); FileWrite(h,buf.FileData,Buf.ReadBytes); Received := GetFileSize(h,nil); FileClose(h); if Received = Buf.FileSize then SendMessage(Handle,WM_USERFILE,1,LongInt(AContext)); end; cmdUserbreak: begin SendMessage(Handle,WM_USERFILE ,2,LongInt(AContext)); end; end; end; end; procedure TForm1.lv1ItemChecked(Sender: TObject; Item: TListItem); begin if Item.Checked then N5.Enabled := True else N5.Enabled := False; end; procedure TForm1.lv1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); begin if Selected then Item.Checked := True else Item.Checked := False; end; procedure TForm1.mniN11Click(Sender: TObject); begin AboutBox.ShowModal; end; procedure TForm1.mniN12Click(Sender: TObject); begin Close; end; procedure TForm1.N11Click(Sender: TObject); begin if Visible then begin Visible := False; trycn1.ShowBalloonHint; end; end; procedure TForm1.N14Click(Sender: TObject); begin Close; end; procedure TForm1.N9Click(Sender: TObject); begin if not Visible then Visible := True else Visible := False; end; procedure TForm1.NClearClick(Sender: TObject); begin mmo1.ReadOnly := False; mmo1.Text := ''; mmo1.ReadOnly := True; end; procedure TForm1.NSaveClick(Sender: TObject); const LogTxt = '------服务器操作日志------' #13 #10; var h:THandle; TxtFileName:string; n,m:Integer; tmp:AnsiString; begin if mmo1.Text <>'' then begin if dlgSave1.Execute then begin tmp:= LogTxt mmo1.Text; n:= Length(tmp); TxtFileName := dlgSave1.FileName; h:= FileOpen(TxtFileName,fmOpenReadWrite); m:=FileWrite(h,tmp[1],n); FileClose(h); if m=n then ShowMessage('日志保持成功') else ShowMessage('日志保存失败'); end; end; end; procedure TForm1.PopActMemoPopup(Sender: TObject); begin if mmo1.Text <>'' then begin NClear.Enabled := True; NSave.Enabled := True; end else begin NClear.Enabled := False; NSave.Enabled := False; end; end; procedure TForm1.trycn1DblClick(Sender: TObject); begin N9.Click; end; procedure TForm1.N2Click(Sender: TObject); begin if N2.Checked then idtcpsrvr1.Active := True else begin DisConnectAllClient; idtcpsrvr1.Active := False; end; if idtcpsrvr1.Active then begin stat1.Panels[0].Text := '服务器开启'; mmo1.Lines.Add(Format('服务器开启--%s',[DateTimeToStr(now)])); end else begin stat1.Panels[0].Text :='服务器关闭'; mmo1.Lines.Add(Format('服务器关闭--%s',[DateTimeToStr(now)])); end; end; procedure TForm1.N5Click(Sender: TObject); var i:Integer; begin for I := 0 to lv1.Items.Count - 1 do begin if lv1.Items[i].Checked then begin TMyContextClass(FStrings.Objects[i]).Connection.Disconnect; end; end; end; procedure TForm1.N7Click(Sender: TObject); begin Close; end; procedure TForm1.N8Click(Sender: TObject); begin AboutBox.ShowModal; end; procedure TForm1.UpdSta; begin stat1.Panels[1].Text := StuText IntToStr(lv1.Items.Count); end; end. [/code] [code delphi] unit About; interface uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls; type TAboutBox = class(TForm) Panel1: TPanel; ProgramIcon: TImage; ProductName: TLabel; Version: TLabel; Copyright: TLabel; Comments: TLabel; OKButton: TButton; procedure OKButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var AboutBox: TAboutBox; implementation {$R *.dfm} procedure TAboutBox.OKButtonClick(Sender: TObject); begin CloseModal; end; end. [/code] [code delphi] object AboutBox: TAboutBox Left = 200 Top = 108 BorderStyle = bsDialog Caption = #20851#20110 ClientHeight = 213 ClientWidth = 298 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = True Position = poScreenCenter PixelsPerInch = 96 TextHeight = 13 object Panel1: TPanel Left = 8 Top = 8 Width = 282 Height = 161 BevelInner = bvRaised BevelOuter = bvLowered ParentColor = True TabOrder = 0 object ProgramIcon: TImage Left = 8 Top = 8 Width = 65 Height = 57 Picture.Data = { 07544269746D617076020000424D760200000000000076000000280000002000 0000200000000100040000000000000200000000000000000000100000000000 000000000000000080000080000000808000800000008000800080800000C0C0 C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF FF00000000000000000000000000000000000EE8787878EEEEEEE03F30878EEE EEE00EE8787878EEEEEEE03F30878EEEEEE00EE8787878EEEEEEE03F30878EEE EEE00EE8787878EEEEEEE03F30878EEEEEE00887787877788888803F3088787E EEE00788787878878887803F3088887EEEE00788887888878887803F3088887E EEE00877888887788888703F308887EEEEE00888777778888888037883088888 8EE007777777777777703787883087777EE00888888888888803787FF8830888 888008888888888880378777778830888880077777777788037873F3F3F87808 88E00888888888803787FFFFFFFF8830EEE00887777778800001111111111100 EEE00888888888888899B999B99999EEEEE00888888888888899B9B99BB9B9EE EEE0088888888888899BB9BB99BB99EEEEE0078888888888899B999B999999EE EEE0087788888778899B9B9BB9BB99EEEEE00888778778888E9B9B9BB9999EEE EEE0088888788888EE9B99B9BB9BEEEEEEE00EE8888888EEEEE999B9999EEEEE EEE00EEEE888EEEEEEEE99BB999EEEEEEEE00EEEEE8EEEEEEEEEE999B9EEEEEE EEE00EEEEE8EEEEEEEEEEEE999EEEEEEEEE00EEEEE8EEEEEEEEEEEEE99EEEEEE EEE00EEEEE8EEEEEEEEEEEEE9EEEEEEEEEE00EEEEE8EEEEEEEEEEEEEEEEEEEEE EEE00EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00000000000000000000000000000 0000} Stretch = True IsControl = True end object ProductName: TLabel Left = 81 Top = 16 Width = 194 Height = 13 Caption = 'Indy10 IdTcpServer && IdTcpClient Demo' IsControl = True end object Version: TLabel Left = 81 Top = 40 Width = 60 Height = 13 Caption = 'Version V1.0' IsControl = True end object Copyright: TLabel Left = 8 Top = 80 Width = 98 Height = 13 Caption = 'Copyright 2010-2015' IsControl = True end object Comments: TLabel Left = 8 Top = 104 Width = 209 Height = 13 AutoSize = False Caption = 'By '#33945#38754#20154' QQ: 17561129' IsControl = True end end object OKButton: TButton Left = 111 Top = 180 Width = 75 Height = 25 Caption = #30830#23450 Default = True ModalResult = 1 TabOrder = 1 OnClick = OKButtonClick end end [/code] |
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
[code delphi] object Form1: TForm1 Left = 0 Top = 0 ClientHeight = 495 ClientWidth = 494 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] Menu = mm1 OldCreateOrder = False Position = poDesktopCenter OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy DesignSize = ( 494 495) PixelsPerInch = 96 TextHeight = 13 object stat1: TStatusBar Left = 0 Top = 476 Width = 494 Height = 19 Panels = < item Text = #26381#21153#22120#29366#24577 Width = 80 end item Text = #23458#25143#31471#36830#25509#25968#65306'0' Width = 50 end> end object grp1: TGroupBox Left = 8 Top = 2 Width = 480 Height = 176 Anchors = [akLeft, akTop, akRight] Caption = #23458#25143#31471 TabOrder = 1 DesignSize = ( 480 176) object lv1: TListView Left = 3 Top = 16 Width = 474 Height = 157 Anchors = [akLeft, akTop, akRight] Columns = < item AutoSize = True Caption = 'IP'#22320#22336 MinWidth = 100 end item Alignment = taCenter AutoSize = True Caption = #35745#31639#26426#21517#31216 MinWidth = 100 end item Alignment = taCenter AutoSize = True Caption = #36830#25509#26102#38388 MinWidth = 100 end> MultiSelect = True ReadOnly = True SmallImages = il2 TabOrder = 0 ViewStyle = vsReport OnSelectItem = lv1SelectItem OnItemChecked = lv1ItemChecked end end object grp2: TGroupBox Left = 8 Top = 184 Width = 479 Height = 284 Anchors = [akLeft, akTop, akRight, akBottom] Caption = #26085#24535 TabOrder = 2 DesignSize = ( 479 284) object mmo1: TMemo Left = 3 Top = 16 Width = 473 Height = 265 Hint = #26174#31034#25805#20316#26085#24535 CustomHint = BalloonHint1 Anchors = [akLeft, akTop, akRight, akBottom] ParentShowHint = False PopupMenu = PopActMemo ReadOnly = True ScrollBars = ssVertical ShowHint = True TabOrder = 0 end end object trycn1: TTrayIcon Hint = 'Indy10 Demo By '#33945#38754#20154 BalloonHint = #31995#32479#36827#20837#25176#30424#65292#19981#24433#21709#20351#29992 BalloonTitle = #23567#25552#31034 BalloonFlags = bfInfo Icons = il1 PopupMenu = PopActBall Visible = True OnDblClick = trycn1DblClick Left = 32 Top = 304 end object xpmnfst1: TXPManifest Left = 144 Top = 88 end object mm1: TMainMenu Images = il1 Left = 104 Top = 304 object N1: TMenuItem Caption = #31995#32479 object N2: TMenuItem AutoCheck = True Caption = #24320#21551'/'#20851#38381 Hint = #24320#21551#25110#20851#38381#26381#21153 OnClick = N2Click end object N4: TMenuItem Caption = '-' end object N5: TMenuItem Caption = #26029#24320 Enabled = False ImageIndex = 2 OnClick = N5Click end object N7: TMenuItem Caption = #36864#20986 SubMenuImages = il1 ImageIndex = 1 OnClick = N7Click end end object N3: TMenuItem Caption = #24110#21161 object N8: TMenuItem Caption = #20851#20110 ImageIndex = 3 OnClick = N8Click end end end object il1: TImageList Left = 72 Top = 304 Bitmap = { 494C010106000A00040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000002000000001002000000000000020 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000EFEEEE1192919175C4C2C1430000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000EBEBEB14BCBCBC4399999966464342D88B4C2BFFA95B30FF654230FEAAAA AA55FEFEFE010000000000000000000000000000000000000000000000000000 0000E5E1E05FADB3B6F2D7C4C8FFDCC0BEFFD5C9C0FFB9B5B5FFC1C2C788FCFB FA07000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000F3F3F30CB9B9B9469C9C9C639999 996672727294573B2CFCA8592FFFB06134FFB06134FFB06134FF694532FF5F5F 5FF99A9A9A65EAEAEA1500000000000000000000000000000000F9F6F515C5C0 C5EEBB9281FFAD4835FFB34822FFA43D13FF983601FFAF2303FFB65339FFCED4 D0FFE8DFDE3C0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000BEBDBD424A4948CD894F 2FFFB36336FFB76739FFB76739FFB76739FFB76739FFB76739FF6D4834FF9A9A 9AFF555555C799999966BABABA450000000000000000FBF9F90FD9D6D8F9A551 43FFC1563BFFBE5431FFC7A59EFFA9400AFF9C3501FFA32D00FFBF2705FFDB28 0CFFDDD8C4FFE8DFDE3C00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000004F3D34F5B56437FFBF6D3EFFC06E 3EFFC06E3EFFC06E3EFFC06E3EFFC06E3EFFC06E3EFFC06E3EFF704934FF7676 76FF8F8F8FFF8787877AB5B5B54AEFEFEF1000000000C4C6C5E0AD5747FFB655 3BFFC15641FFC79D8FFFBCC4C3FF915D55FF834E38FF932B0AFFC32A01FFC42E 02FFDF2E0CFFD4CBC9FFFCFBFA07000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000CF7E4DFFCB7645FFCB7645FFCB76 45FFCB7645FFCB7645FFCB7645FFCB7645FFCB7645FFCB7645FF7A533DFFFFFF FFFF626262FF7A7A7AFD0000000000000000F4F1F037C2A7A3FFBB583DFFB758 3BFFA65A46FFE0E4DFFFC9C6C8FFB9B6B8FFBBB4B9FFD7D9D9FF85341DFFC728 06FFC32704FFAC4F3DFFC7C4C788000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000D98754FFD57E4BFFD57E4BFFD57E 4BFFD57E4BFFD57E4BFFD57E4BFFD57E4BFFD57E4BFFD57E4BFF7D5038FFDADA D9FFC3C3C3FF6D6D6DFF5A5A5ADF00000000C4C6C6C4C1847CFFBC5740FFCD58 42FFCB7867FFE2E4DDFFD2D3DAFFAA9182FFBA6041FFCB9D85FFE9F6F0FF9629 0BFFBB2C00FFB12405FFB6B5B6FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000E18E5AFFDE8551FFDE8551FFDE85 51FFDE8551FFDE8551FFDE8551FFDE8551FFDF8955FFD38C5EFFC6C6C6FFFFFF FFFFFFFFFFFF828282FF929292FEE6E6E619C6C7C7EDCE8C7EFFD18970FFA857 3DFFC7583BFFCD583CFFBC7B73FFE1CABAFFA7492BFFA9460FFF902F06FFA041 1CFF933202FF9C3405FFC7BAB8FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000E8945FFFE58B56FFE89560FFA273 53FFEA9C68FFE58B56FFE89560FF9B6F52FFC7C7C7FFB17655FFFDFDFDFFD28C 62FFF4F4F4FF9090909E0000000000000000CDCBCAFDD19487FFCF8572FFD389 74FFBD694EFFBA5539FFBE553DFFBE5439FFA04828FFAF441CFF9D4218FFA13C 10FF9F390DFFAE410DFFCAB8B2FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000DB986AFD8D7C70B9FCFBFA06CE7F 51FFAD856DFF896B57FFF5F5F5FFD2B29FFFFFFFFFFFF1F1F1FFFFFFFFFFFFFF FFFFFFFFFFFFB2B2B2F70000000000000000C7C0BFE6C79384FFD0826FFFCC81 6EFFEFB9ABFFB57F75FFC16B56FFBD5844FFE7E4E2FF9D7C70FFA04526FFAE45 28FFAF462AFFBD6544FFCFC5C2FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000009D5D 34FEEFB695FFF0B897FFEBBFA5FFFFFFFFFFFEFEFEFFF3F3F3FFB19F94FFE8E4 E2FFC69B81FFFEFEFEFF0000000000000000C9CDCBACBD8480FFC8846CFFD17E 68FFC1806AFFF4EDECFFD6C8C8FFBDA8A2FFD1CDD0FFDDE2E0FFEDF4F5FFBF8B 82FFD08A77FFD09584FFB3B4B5F2000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000A198 9188F0B898FFEAA57CFFE18B59FFD3AC94FFD1CBC8FFFAFAFAFFF1F1F1FFFFFF FFFFFEFEFEFFDDDDDDFFCACACA5400000000FBF9F91ADFDDD7FFE29C8FFFC87C 68FFCC7C6AFFC1867FFFDFD6D0FFB9C1C5FFBCC3BFFFD4D1D5FFE2DCD9FFD087 76FFD58F7BFFD3ABA1FFE1DEDD5F000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000FCFB FB05EEC1A5FFF4F5F5FFF3F0EDFFFFFEFEFFE3DAD9FFAA7F72FF969695FFAFAF AFFFA1A1A1FE8D8D8DC9F0F0F0190000000000000000D3D1D2BABF9B95FFE098 88FFC67968FFCD7B66FFCD7D6AFFC98173FFCD877BFFD1DED5FFCA8376FFD188 79FFCB938AFFC1C1C1EE00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00009D5D37FE8C4A2DFFA5623DFFBA602BFF9F6039FFA59F9B86F3F3F3150000 0000000000000000000000000000000000000000000000000000D4D4D4E3C69B 95FFE8A195FFCA8473FFC57B6BFFCB7F6CFFCC7F68FFCCA59DFFE19685FFCB93 87FFD9D6D2F9FAF8F71500000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000F9F8F70AB4AFAB6CF8F7F60B000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000CFC9 CBBADFDCD0FFC28276FFD78E7FFFDFA18FFFDD988DFFBB8879FFCFB9B1FFD6D5 D4E0FCFAFA0F0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000FBF9F81ACBCACCACC8C5C7E6C2CCCAFDC9C4C2EDBFC6C8C4F6F3F3370000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000FF000000FF000000FF000000 FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 FF000000FF000000FF000000FF000000FF000000000000000000000000000000 00000000000000000000C8C2C055C7C1BE55C6C1BE55C8C2C055000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000FDFDFD02F9F9F90700000000000000000000 00000000000000000000000000000000000000000000D1D1D12EA2A2A25DD0D0 D02FEDEDED12FEFEFE0100000000000000000000000000000000000000000000 000000000000000000000000000000000000FF00000080000000FFFFFF000000 000080000000FFFFFF0080000000800000008000000080000000800000008000 00008000000080000000800000000000FF00000000000000000000000000E4E1 DF386D6565FF3F2A1DFF4E301CFF4E2F1CFF4B2D1AFF492C17FF3B271AFF7B75 75FFEFEDED1C000000000000000000000000000000000000000000000000FDFD FD02FCFCFC03FBFBFB04FBFBFB04FAFAFA05C6C6C64CCACACA50000000000000 000000000000000000000000000000000000FEFEFE019A5110FF653116FF3A39 38E7545454B18282827DB9B9B946E2E2E21DF7F7F708FEFEFE01000000000000 000000000000000000000000000000000000FF000000FF000000FFFFFF00FFFF FF00FFFFFF00FFFFFF0080000000800000000000000000000000C0C0C000C0C0 C000C0C0C00000000000800000000000FF000000000000000000DFDBD938402C 21FF4B2F1DFF432A16FF422A18FF412918FF3F2716FF3E2616FF3C2415FF3B23 13FF35251CFFEDEBEA1C00000000000000000000000000000000FBFBFB04D5D3 D3305D5755F0686868FF605D5CFD948F8D7EC9C9C947C9C9C947BBBBBB65B9B9 B947EFEFEF10FEFEFE010000000000000000FEFEFE01B25F13FFC2794EFFD18F 64FFA84109FF7E3008FF4B3326F6414344D16B6B6B949D9D9D62D4D4D42BFBFB FB0400000000000000000000000000000000FF000000FF000000FFFFFF000000 000000000000FFFFFF0000000000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 C000C0C0C000C0C0C000800000000000FF0000000000E1DDDA384E3525FF5B3B 26FFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6BF BFFF462916FF3D281CFFEDEBEA1C000000000000000000000000AFA7A3667361 5BFFBDB6A7FFCCC198FFBAA872FF66391BFF675351ED6D6D6DD66D6D6DD71919 19FF75757596FCFCFC030000000000000000FEFEFE01CB6B17FFC98760FFFFE2 C4FFFFE1C0FFFFE1BCFFEDB78DFFC5723EFF983501FF663417FF444545CEDDDD DD2200000000000000000000000000000000FF000000FF000000FFFFFF00FFFF FF000000000000000000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0000000 000080808000C0C0C000800000000000FF00000000004F3E36FF624028FF5C3E 28FF75655AFF543825FF62412AFFE4DEDDFF7B6F67FF553723FF503320FF6354 4DFF3F2718FF492C18FF524844FF000000000000000000000000775B4FFFBE8D 5DFFFAEA99FFFFFEE0FFFCE574FFD1932FFFA88676FF5F504CFF535353FF1B1B 1BFF7575759B000000000000000000000000FEFEFE01CB6D1DFFDCA989FFFFE5 CCFFFFE2C4FFFFDEBCFFFFD9B3FFFFD7B1FFFFC272FFE7A36BFF4D382CF0D8D8 D82700000000000000000000000000000000FF000000FF000000FF000000FFFF FF0000000000C0C0C000C0C0C000C0C0C000C0C0C00000000000808080008080 80008080800000000000800000000000FF00B9B1AFAA65432BFF6A472DFFDDD8 D6FFFFFFFFFF634531FF714D33FFDCD5D3FF7B6E65FF614129FF9D8B81FFFFFF FFFF5A4D48FF472B19FF462B18FFCFCAC75500000000D4C8C4458A2B17FFF1B8 71FFFFF57EFFFFE480FFFFB71DFFF37800FFC88C65FF784C42FF545454FF1D1D 1DFF7676769B000000000000000000000000ECECEC16CF7427FFE1B69AFFFFE9 D4FFFFE6CCFF4CAFC9FFFFE3BBFFFFD9B3FFFFAD3DFFE5A46FFF483A32EBE3E3 E31C00000000000000000000000000000000FF000000FF000000FF0000000000 0000C0C0C000C0C0C000C0C0C000C0C0C0008080800080808000808080008080 8000C0C0C00080000000800000000000FF005B5251FF704C32FF785B48FFFFFF FFFF6E5646FF7E5637FF7D5438FFDFD7D4FF7E7169FF6A482EFF654329FFC4B8 B4FFFFFFFFFF3A2415FF4C2E1AFF807A7BFF00000000B8A9A55CB9654AFFF499 6AFFFFBD06FFFFC105FFFFB003FFFE8406FFD67C3FFFA37058FF565656FF1E1E 1EFF7777779B000000000000000000000000E1E1E222CB6E22FFECCDB8FFFFED DBFFAED0D0FF1FA0CCFFE1D9C5FFFAC37BFFC4BDACFFDC9257FF3B3839E5C3C3 C33CF7F7F708000000000000000000000000FF000000FF000000FF000000C0C0 C000C0C0C000C0C0C000C0C0C000FFFFFF008080800080808000808080008080 80000000000080000000800000000000FF0052443DFF795234FFD4CAC4FFF1F0 F0FF7A5538FF8C603FFF7E583BFFDDD6D4FF7D7268FF66462EFF6C482EFF6140 28FFFFFFFFFF45342CFF4E301CFF5A514EFF00000000F9F6F50BAC3110FFF690 62FFFFB073FFFFF5D2FFFFD389FFFE9C50FFE3975CFF946C56FF575757FF2020 20FF7878789B000000000000000000000000CECECF39CA6C20FFFBEFE3FFB0D6 DCFF3EACCFFFFFE8D3FF44ADCBFFE6CBB0FF797856FFFFD8AEFFE28D39FE8553 26D96F6F6F90B7B7B748EEEEEE11FEFEFE01FF000000FF00000000000000C0C0 C000C0C0C000C0C0C00080808000FFFFFF00FFFFFF0080808000808080008080 80008000000080000000800000000000FF0055463FFF825839FFE2D9D6FFADA4 A1FF8A6041FF966845FFE2DCDAFFFFFFFFFFFFFFFFFFBAB2B2FF65452EFF6945 2CFFFFFFFFFF5C4C43FF4E311EFF5B514EFF0000000000000000D6B08ED6FABD 97FFFFCD88FFFFEC99FFFFE58BFFFFCE88FFF8CBA2FF585857FF585858FF2121 21FF7878789B000000000000000000000000B1B2B35BCC6E21FFFCF3EEFFFCF5 EAFFFFF3E4FFFFF1DBFF049ACCFFFFEACCFFFFDFBDFFD68536FFFBD7B2FFFFE2 BFFFEAA25AFF88592AF157575FACA5A5A55AFF000000FF00000000000000C0C0 C000C0C0C000000000008080800080808000FFFFFF00FFFFFF00C0C0C0008000 00008000000080000000800000000000FF00564841FF8A5E3DFFE2D9D5FFBFB8 B6FF8A6241FFA27149FFFFFFFFFFFFFFFFFFFFFFFFFFF4F2F2FF704D33FF6A47 2EFFFFFFFFFF5D4B42FF523420FF5C5351FF000000000000000000000000D3CD C7C6FFFDEEFFFFFDDFFFFFFEE8FFF7F3D5FF73706DFF686868FF5A5A5AFF2323 23FF7979799B000000000000000000000000AAABAD62C6600EFFFDFAF9FFFFF9 F3FFFFF6EBFFFFF1E4FF7FC3D4FFDADCD2FFFFE5CCFFD08651FF5E4C38D7D7A4 728DF0B77CFFE7E9F1FF0F48D0FF4F4F7CB0FF000000FF000000FFFFFF00C0C0 C000000000000000000000000000000000000000000000000000FFFFFF00FFFF FF008000000080000000800000000000FF00736A67E28F6240FFBA9E8DFFFFFF FFFF6A4E37FFAB774EFFA9764DFF9E6E49FF936645FF885D3DFF7D5538FF785F 52FFFFFFFFFF493121FF543522FF999291C6000000000000000000000000D6D5 D43F2A2A2AFF393836FF2B2A29FF2D2D2DFF787878FF757575FF737373FF2727 27FF7A7A7A9B0000000000000000000000009A9A997FC15805FFFEFEFFFFFFFD FAFFFFF9F3FFFFF6EAFFFEF1E4FF1EA2CDFFFFE8D4FFD38A57FF3F4244D6E9E9 E91600000000D8D8D73E2B37B2D9E8E8EA17FF000000FF000000FFFFFF00C0C0 C0008080800080808000808080008080800080808000FF000000FFFFFF000000 00008000000080000000800000000000FF00D7CFCA71885F40FF9B6C49FFFCFB FAFFBDB5B2FF7D5A3FFFA7744DFFA3724AFF986A46FF885E3DFF6A4A33FFF9F8 F9FFB8AFAEFF583926FF4E3220FFE1DDDB38000000000000000000000000CECD CD3F343434FF343434FF343434FF343434FF898989FF898989FF878787FF3F3F 3FFF7C7C7C9B0000000000000000000000008684839EB94C00FFFFFFFFFFFFFF FFFFFFFCFAFFFFF8F3FFFFF6EAFF33ACD1FFFAEEDDFFCC7D46FF464749CEEEEE EE1100000000000000000000000000000000FF000000FF000000FFFFFF00C0C0 C00080808000808080008080800000000000FF000000FF000000FFFFFF00FFFF FF00FFFFFF0080000000800000000000FF00000000005E534EFF9D6C48FFAD81 62FFFFFFFFFFDFDBDBFF6C5647FF6B4E35FF684B33FF806E63FFFFFFFFFFEAE6 E6FF5B3D28FF5C3C26FF756E6DFF00000000000000000000000000000000CCCC CC3F3C3C3CFF3C3C3CFF3C3C3CFF3C3C3CFF9A9A9AFF9A9A9AFF9A9A9AFF4C4C 4CFF8989899B000000000000000000000000938F89A4BF5600FFC5825BFFE0C1 B3FFFFFFFFFFFFFFFFFFFFFFFBFFFFFAEEFFFFF2E6FFCE7F42FF494A4CC7EFEF EF1000000000000000000000000000000000FF000000FF000000000000000000 0000808080008080800000000000FF000000FF000000FF000000FF000000FF00 0000FF00000080000000800000000000FF0000000000000000006D5342FFA06F 49FFA6744FFFE9E0DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9ABA4FF6847 2EFF644228FF51423BFF0000000000000000000000000000000000000000CDCD CD40464646FF464646FF464646FF454545FF8A8A8AFFB0B0B0FFADADADFF5C5C 5CFF9292929B000000000000000000000000838178C7C55A00FFC45C00FFC45D 00FFC55D00FFBA5000FFB14B00FFC37A4BFFD2A58BFFC77334FF494A4CC7EFEF EF1000000000000000000000000000000000FF000000FF000000FF0000000000 000000000000FF000000FF000000FF000000FF000000FF000000FF000000FF00 0000FF000000FF000000800000000000FF000000000000000000000000004F41 3AFF9B6C48FF9D6D47FFBEA290FFFFFFFFFFFFFFFFFF69492FFF765034FF6B48 2EFF504641FF000000000000000000000000000000000000000000000000CDCD CD40515151FF515151FF515151FF515151FF515151FF4F4F4FFFA8A8A8FF6F6F 6FFF9898989B000000000000000000000000B9B9B956BBB695FFDEC390FFF3BE 74FFE0953FFFCF6F10FFC65B00FFC75E00FFC86000FFCC6100FF515354BBF4F4 F40B00000000000000000000000000000000FF000000FF000000FF000000FF00 0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00 0000FF000000FF000000FF0000000000FF000000000000000000000000000000 0000B5ADAAAA56473EFF7A563AFF775339FF714E36FF684931FF50433DFFB9B3 B1AA00000000000000000000000000000000000000000000000000000000CFCF CF3F656565F0656565F0656565F0656565F0656565F0656565F0656565F06363 63F097979794000000000000000000000000000000000000000000000000FEFE FE01CBCCCC3D92949583888A83BF979682EDBEB28AFFD2A663FF8D8E8F7CFBFB FB0400000000000000000000000000000000424D3E000000000000003E000000 2800000040000000200000000100010000000000000100000000000000000000 000000000000000000000000FFFFFF00FF1FFFFF00000000F007F00F00000000 0003C00700000000800180030000000000008001000000000003000100000000 0001000100000000000000010000000000030001000000000003000100000000 E003000100000000E001000100000000E001800300000000F01FC00300000000 F1FFE00700000000FFFFF01F000000000000FC3FFE7F83FF0000E007E03F003F 0000C003C003000F00008001C003000F00008001C007000F000000008007000F 0000000080070007000000008007000000000000C007000000000000E0070000 00000000E007000800000000E007000F00008001E007000F0000C003E007000F 0000E007E007000F0000F00FE007E00F} end object idtcpsrvr1: TIdTCPServer Bindings = <> DefaultPort = 22100 OnConnect = idtcpsrvr1Connect OnDisconnect = idtcpsrvr1Disconnect Scheduler = idschdlrfthrdflt1 OnExecute = idtcpsrvr1Execute Left = 176 Top = 88 end object idschdlrfthrdflt1: TIdSchedulerOfThreadDefault MaxThreads = 0 Left = 208 Top = 88 end object BalloonHint1: TBalloonHint Images = il1 HideAfter = 5000 Left = 240 Top = 88 end object PopActMemo: TPopupActionBar Images = il3 OnPopup = PopActMemoPopup Left = 320 Top = 312 object NClear: TMenuItem Caption = #28165#31354 ImageIndex = 0 OnClick = NClearClick end object N6: TMenuItem Caption = '-' end object NSave: TMenuItem Caption = #20445#23384'...' ImageIndex = 1 OnClick = NSaveClick end end object PopActBall: TPopupActionBar Images = il1 Left = 136 Top = 304 object N9: TMenuItem Caption = #25171#24320 Default = True ImageIndex = 4 OnClick = N9Click end object N11: TMenuItem Caption = #38544#34255 ImageIndex = 5 OnClick = N11Click end object mniN10: TMenuItem Caption = '-' end object mniN11: TMenuItem Caption = #20851#20110 ImageIndex = 3 OnClick = mniN11Click end object mniN12: TMenuItem Caption = #36864#20986 ImageIndex = 1 OnClick = mniN12Click end end object il3: TImageList Left = 368 Top = 312 Bitmap = { 494C010102000500040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000001000000001002000000000000010 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000FCFCFC03E1E1E11EA9A39E61978D857AACA9A659D5D5D52AF3F3F30C0000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000F9F9F9089292926D7978 788B7978788B7978788B7978788B7978788B7978788B7978788B7978788B7978 788B7A79798AB0B0B04FFEFEFE01000000000000000000000000FEFEFE01BCB8 B54A7D4509FAD1AC3BFCEAC641FEE5BD37FFE0B32CFED6A520FD93671FE7B2B2 B24DF5F5F50A0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000B5B5B54DD7D2D0FFD0CB C8FFCFCAC7FFCDC8C5FFCCC7C4FFCAC5C2FFC9C3C0FFC6C1BDFFC4BEBAFFC4BD BAFFBDB7B2FFCAC5C3FCEDEDED160000000000000000FDFDFD02826449B6D1AE 41FCEFD04DFFEBC742FFE6BE38FFE2B638FFDCAB26FFD5A017FFCE960FFFC88D 07FE837E7689EEEEEE1100000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000A9A8A87ED5D1D0FFD4D0 CEFFD3CFCDFFD1CDCBFFD0CBC9FFCFCAC7FFCFCAC8FFCCC6C4FF849078FF4F60 48FFC0BBB7FFC9C4C1FFECECEB2000000000000000008F7B6996E2C34DFCEFD1 4DFFE5C44DFFFAEED7FFFCEFE1FFF5DECAFFF7D9BFFFFDD8B5FFD5974FFFC185 01FFBA7D01FE86827B84F6F6F609000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000ABAAAA7DE2DFDDFFE1DD DCFFE0DCDAFFE0DCDCFFA9B499FF415F1BFF213700FF30582BFFD6D2CFFFD5D0 CEFFD2CECBFFD9D4D2FFEEEEEE2000000000EFEEEE11B1852CFBF5D653FFDBC0 5BFFE5D8D1FFC7BEB9FFC3BAB6FFC0B5AFFFB9A9A1FFBCA398FFCAA18DFFB17E 5FFFB47500FFAB6C01FEBBBBBB44000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000ABABAB7DEAE8E7FFEAE8 E6FFE5E3E1FF759954FF578F2BFF296500FF235700FFC6C8BDFFE3DFDEFFE0DE DCFFDFDDDBFFE4E1DFFFF0F0EF2000000000826348B7F6D855FEF5D350FFD3D0 CEFFCEAE48FFD6A92CFFA19470FFB0965DFFB97F0AFF826A47FFBBA89FFFB996 85FF865B2CFFA36400FF7B6443BCF6F6F6090000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000ADACAC7DF1EFEEFFEDEC EAFF7A8F45FF639629FF437411FF43870DFF739A53FFC5CABBFFECEBEAFFEBEA E9FFEBE9E7FFEEECEBFFF1F1F120000000008A550FFCEECC48FFA59765FFDADE E0FFC7A440FFCD9B20FFC28D14FFB29861FFB17402FFA76800FFBBB4B0FFBBA6 9CFFA48271FF9A5B00FF905303FCDEDEDE210000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000AEADAD7DF2F1F1FF8272 2CFF8B963FFF728129FF749A36FF608E27FF557B24FFF3F3F2FFF3F2F2FFF3F2 F1FFF2F1F0FFF5F4F3FFF1F1F12000000000B38726FCE7C13BFF9B9D9CFFDEE5 E8FFC09937FFC59015FFB9800BFFA76E07FFA96A00FFA16100FF7F6D56FFC0B5 AFFFB69A8DFF884F04FF894A00FFC9C9C9360000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000AEAFAF7D9E702EFFAB90 37FFA29236FF9D9B41FF8D973FFF748431FF6B7537FFF9F8F8FFF8F8F8FFF8F7 F7FFF8F7F7FFFAF9F9FFF2F2F22000000000BD8F27FCE2B731FFA4A9AAFFE1E8 ECFFB98E2FFFA77F2DFFB17302FFA96900FFA16100FFA36619FF8F4F00FFBDB8 B5FFBAA69CFF7D4808FF7F4200FFC5C5C53A0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000A49C937FC18201FFCC9A 03FFB48D1BFFB5982FFF978032FF877839FFD8D5C8FFFCFBFBFFFBFBFBFFFBFB FBFFFBFBFBFFFDFDFDFFF2F2F22000000000A37018FADDAF27FF949691FFE4EB EEFFB18326FFA4792CFFCCA66AFFA16000FF995900FFCCCECCFF884900FF7865 55FFB8A8A0FF7C4201FF773B01FED5D5D52A0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000FBFAF906974D03FCD49100FFB97F 00FFD89800FFC79619FF895713FFE7E0D5FFF2EFECFFFEFEFEFFFEFEFEFFFEFE FEFFFEFDFDFFFEFEFEFFF2F2F220000000008875609FD8A61DFFAE8B2FFFD7DC DEFFBD7E02FFB67300FFE5E5E5FFA76000FF9E5700FFBBB9B4FF8D4800FF8541 00FF7A6D67FF783C00FF6D390EF1EFEFEF100000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000875742BDA76F2CE7D0961AFFCD8E 00FFD39000FFCA8A1AFF774012FFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE FEFFFEFEFEFFFEFEFEFFF3F3F32000000000E3E3E31CCF9913FECC930CFFA6A9 A9FFEEF2F4FFF5F7F8FFF8FAFAFFF6FAFCFFF1F7FAFFECF3F7FFE0E5E8FFC0BE BDFF6E3F10FF703400FF918C8976FEFEFE010000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A5938281C57C2CFFB6752CFFCB86 21FFC77F04FFB96A00FFDEC8B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF3F3F31E00000000FEFEFE019B958B74C68A05FFBE81 00FFA9ACACFFEAEFF1FFECF1F3FFEAF0F3FFE7EEF1FFE2E9ECFFCCCFD1FF6C4A 27FF703400FF673611EEE8E8E817000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A0623CDAAC5F35FF9D5930FFB66B 36FFB06114FFB37238FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFDFD060000000000000000F5F5F50A93866B94B87A 00FFB17200FF906A2AFF9FA2A2FFB5BCBEFFABB1B3FF827769FF7B4105FF7135 00FF693107F8D2D2D22D00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C0ABA065934020FF8E4115FF9C4B 26FF6A290EF7D9D3CE5DDBD7D35DDEDBD95DE0DFDE5DE0E0E05DE0E0E05DE0E0 E05DDFDFDF5DFBFBFB0E00000000000000000000000000000000F5F5F50AA6A3 9E61A76903FC9F6000FF965800FF8D4F00FF834600FF7C4000FF713501FE6E4D 35CADBDBDB24FEFEFE0100000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000825342C17B2A0FFF8249 35D3F9F7F60B0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000FEFE FE01E6E6E619ACAAA857826B4DB27B5428D7765634CB8A7F7689CFCFCF30F6F6 F609000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000424D3E000000000000003E000000 2800000040000000100000000100010000000000800000000000000000000000 000000000000000000000000FFFFFF00FFFFF01F000000008001C00700000000 8001800300000000800180010000000080010001000000008001000000000000 8001000000000000800100000000000080010000000000008001000000000000 0001000000000000000100000000000000010001000000000001800300000000 0003C0030000000087FFE00F00000000} end object dlgSave1: TSaveTextFileDialog Filter = #25991#26412#25991#20214'(*.TXT)|*.txt' OnCanClose = dlgSave1CanClose Left = 280 Top = 312 end object il2: TImageList Left = 272 Top = 88 Bitmap = { 494C010101000500040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000001000000001002000000000000010 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF FF00808080000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF FF00C0C0C0008080800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF FF00C0C0C000C0C0C00000000000808080000000000000000000000000000000 0000C0C0C000C0C0C00080808000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FF000000FF000000FF00 000000008000C0C0C00000000000808080000000000000000000000000000000 000000000000C0C0C00080808000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FF000000FF000000FF00 000080000000000080000000000080808000C0C0C000C0C0C000C0C0C000C0C0 C000C0C0C000C0C0C00080808000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FF000000FF000000FF00 0000800000008000000000000000808080008080800080808000808080008080 8000808080008080800080808000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000080808000FFFFFF00FFFFFF00FFFF FF00C0C0C0008000000000000000808080008080800080808000808080000080 0000808080000000000080808000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C0C0C000C0C0C000C0C0C0008080 8000FFFFFF00FFFFFF0000000000C0C0C000FFFFFF00FFFFFF00FFFFFF00FFFF FF00C0C0C0008080800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000080808000C0C0C000C0C0C0008080 8000FFFFFF00FFFFFF0000000000FF000000FF000000FF000000FF0000008000 0000C0C0C0008080800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000080808000000000000000 0000808080008080800000000000FF000000FF000000FF000000FF0000008000 0000C0C0C0008080800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000008080 8000C0C0C000FF000000FF000000FF000000FF000000FF000000FF0000008000 0000C0C0C0008080800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000008080 8000C0C0C000FF000000FF000000FF000000FF000000FF000000FF0000008000 0000C0C0C0008080800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000008080 8000C0C0C0000000000000000000000000000000000000000000000000008000 0000C0C0C0008080800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000008080 8000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 C000C0C0C0008080800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000080808000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 C000C0C0C0008080800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000424D3E000000000000003E000000 2800000040000000100000000100010000000000800000000000000000000000 000000000000000000000000FFFFFF008F8300000000000087C3000000000000 8003000000000000800100000000000080000000000000008000000000000000 8000000000000000000000000000000000030000000000000003000000000000 8003000000000000C003000000000000E003000000000000E003000000000000 E003000000000000F003000000000000} end end. [/code]
編輯記錄
zhweizw 重新編輯於 2010-08-17 17:00:20, 註解 無‧
|
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
[code delphi] unit UntClt; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls,UntGlb,IdGlobal, ExtCtrls, ImgList ; type TForm1 = class(TForm) btn1: TButton; chk1: TCheckBox; idtcpclnt1: TIdTCPClient; stat1: TStatusBar; tmr1: TTimer; BalloonHint1: TBalloonHint; il1: TImageList; edt1: TEdit; lbl1: TLabel; dlgOpen1: TOpenDialog; btn2: TButton; btn3: TButton; btn4: TButton; btn5: TButton; grp1: TGroupBox; lst1: TListBox; procedure btn1Click(Sender: TObject); procedure chk1Click(Sender: TObject); procedure idtcpclnt1Disconnected(Sender: TObject); procedure btn2Click(Sender: TObject); procedure tmr1Timer(Sender: TObject); procedure idtcpclnt1Connected(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btn5Click(Sender: TObject); procedure btn3Click(Sender: TObject); procedure btn4Click(Sender: TObject); private { Private declarations } ComputerName:string; public { Public declarations } UserBreakAll:Boolean; end; var Form1: TForm1; implementation uses Untprogress; {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); begin close; end; procedure TForm1.btn2Click(Sender: TObject); var i:Integer; begin if dlgOpen1.Execute(Handle) then begin for I := 0 to dlgOpen1.Files.Count - 1 do lst1.Items.add(dlgOpen1.Files[i]); end; grp1.Caption := GroupText format('(%s个)',[IntToStr(lst1.Count)]); end; procedure TForm1.btn3Click(Sender: TObject); begin lst1.Clear; grp1.Caption := GroupText format('(%d个)',[0]); end; procedure TForm1.btn4Click(Sender: TObject); begin lst1.DeleteSelected; grp1.Caption := GroupText format('(%s个)',[IntToStr(lst1.Count)]); end; procedure TForm1.btn5Click(Sender: TObject); var FileName:string; buf:TDataPack; bbuf:TIdBytes; i,j,SendTimes,RemainLen,h,FileLen,Sent:Integer; begin if idtcpclnt1.Connected then begin if lst1.Count >0 then begin UserBreakAll := False; Sent :=0; frmProgress.Show; for I := 0 to lst1.Count - 1 do begin if UserBreakAll then Break; FileName := lst1.Items[i]; frmProgress.lbl1.Caption := FileName; frmProgress.pb1.Position :=0; Application.ProcessMessages; h:= FileOpen(FileName,fmOpenRead); if h>0 then begin FileLen := GetFileSize(h,nil); SendTimes := FileLen div SEND_BUF; RemainLen := FileLen mod SEND_BUF; frmProgress.pb1.Max := FileLen; buf.Command :=cmdSendFile; buf.FileName := ExtractFileName(FileName); buf.FileSize := FileLen; buf.Flags :=0;//新建 for j := 1 to SendTimes do begin if UserBreakAll then Break; if not idtcpclnt1.Connected then Break; FileRead(h,buf.FileData,SEND_BUF); buf.ReadBytes := SEND_BUF; bbuf := RawToBytes(buf,SizeOf(buf)); idtcpclnt1.IOHandler.Write(bbuf); buf.Flags := 1;//续传 frmProgress.pb1.Position :=j*send_buf; Application.ProcessMessages; end; if RemainLen >0 then begin if not idtcpclnt1.Connected then Break; FileRead(h,buf.FileData,RemainLen); buf.ReadBytes := RemainLen ; bbuf := RawToBytes(buf,SizeOf(buf)); idtcpclnt1.IOHandler.Write(bbuf); frmProgress.pb1.Position := FileLen; Application.ProcessMessages; end; FileClose(h); if (not UserBreakAll) then inc(sent); end; end; frmProgress.Close; ShowMessage(Format('%d个文件发送成功',[sent])); if idtcpclnt1.Connected and UserBreakAll then begin bbuf :=nil; buf.Command := cmdUserbreak ; bbuf := RawToBytes(buf,SizeOf(buf)); idtcpclnt1.IOHandler.Write(bbuf); end; end else ShowMessage('请选择待发送的文件'); end else ShowMessage('未连接服务器'); end; procedure TForm1.chk1Click(Sender: TObject); begin if not tmr1.Enabled then tmr1.Enabled:= True ; idtcpclnt1.Host :=edt1.Text; if chk1.Checked then begin try Application.ProcessMessages; idtcpclnt1.Connect; except end; if idtcpclnt1.Connected then stat1.Panels[1].Text := '已链接到服务器'; end else idtcpclnt1.Disconnect; chk1.Checked := idtcpclnt1.Connected ; end; procedure TForm1.FormCreate(Sender: TObject); var n:Cardinal; Name:array[0..MAX_COMPUTERNAME_LENGTH] of Char ; begin n:=MAX_COMPUTERNAME_LENGTH 1; GetComputerName(name,n); ComputerName := string(Name); end; procedure TForm1.FormDestroy(Sender: TObject); begin // if Assigned(Datathread) then FreeAndNil(Datathread); end; procedure TForm1.idtcpclnt1Connected(Sender: TObject); var bbuf:TIdBytes; buf:TDataPack; begin buf.ClientInfo.ClientName :=ComputerName; bbuf :=RawToBytes(buf,SizeOf(buf)); idtcpclnt1.IOHandler.Write(bbuf); end; procedure TForm1.idtcpclnt1Disconnected(Sender: TObject); begin stat1.Panels[1].Text := '已从服务器断开'; chk1.Checked := False; end; procedure TForm1.tmr1Timer(Sender: TObject); begin if not idtcpclnt1.Connected then idtcpclnt1.OnDisconnected(nil); end; end.[/code] |
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
[code delphi] unit Untprogress; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TfrmProgress = class(TForm) btn2: TButton; pb1: TProgressBar; lbl1: TLabel; procedure btn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmProgress: TfrmProgress; implementation uses UntClt; {$R *.dfm} procedure TfrmProgress.btn2Click(Sender: TObject); begin UntClt.Form1.UserBreakall := True; end; end. [/code] |
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
[code delphi] unit UntGlb; interface uses Messages,Windows, SysUtils,Classes ; const StuText = '客户端连接数:'; GroupText='发送文件列表'; WM_USERMSG = WM_USER 1002; WM_USERFILE= WM_USER 1003; ADD_LIST = 0; DEL_LIST =1; UPD_STA =2; SEND_BUF = 1024*20; REV = 'REV'; type TCommand = (cmdSetName,cmdSendFile,cmdUserbreak); TClientInfo = packed record ClientName:string[50]; ClientIP:string[15]; ClientID:string[10]; Flags:Integer; end; TDataPack = packed record Flags : Integer; FileSize : Integer; ReadBytes : Integer; Command : TCommand; ClientInfo : TClientInfo; FileName : string[255]; FileData : array[0..SEND_BUF -1] of Byte; end; implementation end. [/code] |
Hero
一般會員 發表:3 回覆:10 積分:12 註冊:2002-07-11 發送簡訊給我 |
在TIdTCPServer的OnConnect, OnDisconnect, OnExecute event內呼叫TWinControl.Handle這個動作並不是Thread Safe的
也就是SendMessage(Handle, .........) 有可能會發生問題,這個我自己就遇過 建議採用TIdNotify方式來處理(我有找到一篇是說TIdSync也可能會有問題,所以我就沒試過在這使用TIdSync) https://forums.embarcadero.com/thread.jspa?messageID=187441𭰱 |
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
谢谢Hero大大指导~小弟学习了
===================引 用 Hero 文 章=================== 在TIdTCPServer的OnConnect, OnDisconnect, OnExecute event內呼叫TWinControl.Handle這個動作並不是Thread Safe的 也就是SendMessage(Handle, .........) 有可能會發生問題,這個我自己就遇過 建議採用TIdNotify方式來處理(我有找到一篇是說TIdSync也可能會有問題,所以我就沒試過在這使用TIdSync) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |