ychatu56.pas
来自「Yahoo Messenger for Mobile」· PAS 代码 · 共 270 行
PAS
270 行
unit YchatU56;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, DBSock, ExtCtrls, ScktComp, FileCtrl, CPanel,
DynamicSkinForm;
Type FTDownload = Class (TThread)
Br: Integer;
S,HttpStr,HttpGrabData,Port,Server: String;
Host,Url,ExtendedInfo,FileN,User,Data: String;
AL: Longint;
Buffer: Array [0..18024] of Char;
Socket: TDCBSock;
F: File;
Buf: Array[0..18024] of Char;
Procedure Execute; Override;
Procedure OnDisconnect;
Constructor Create(Shost,SFileN: String);
End;
type
TForm52 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ListBox1DblClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
procedure Panel3DblClick(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
Fn,ThierIP,UserN: String;
{ Public declarations }
end;
var
Form52: TForm52;
FStage: Integer;
FileTCount: Integer;
implementation
uses YchatU1, YchatU46;
{$R *.dfm}
procedure TForm52.FormCreate(Sender: TObject);
begin
If DirectoryExists(Path+'Downloads')=False Then
CreateDir(Path+'Downloads');
Label3.Caption:='Saving To: '+Path+'Downloads';
end;
procedure TForm52.Button3Click(Sender: TObject);
begin
If Edit1.Visible=True Then
Begin
If Trim(Edit2.Text)<>'' Then
ThierIP:=Edit2.Text;
//Edit1.Text:=Trim(ThierIP);
End;
If Pos(',',ThierIP)>0 Then
Delete(ThierIP,1,Pos(',',ThierIP));
ThierIP:=Trim(ThierIP);
ClientSocket1.Active:=False;
ClientSocket1.Port:=8990;
ClientSocket1.Host:=Form52.ThierIP;
ClientSocket1.Active:=True;
end;
procedure TForm52.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Edit1.Text:='Contact Made!';
ListBox1.Clear;
Socket.SendText('LST'+#$EA);
end;
procedure TForm52.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
Var
S: String;
begin
Edit1.Text:='Reading In FileShare Data...';
S:=Socket.ReceiveText;
ListBox1.Items.Text:=ListBox1.Items.Text+S;
end;
procedure TForm52.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Edit1.Text:='Finished Reading In FileShare Data!';
Button2.Enabled:=True;
end;
procedure TForm52.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Edit1.Text:='Error Connecting To Remote Machine: '+IntToStr(ErrorCode);
ErrorCode:=0;
end;
procedure TForm52.ListBox1DblClick(Sender: TObject);
begin
FN:=HighLightedFile;
Edit1.Text:='Attempting to download '+FN;
FTDownload.Create(Form52.thierIP,FN);
{ ClientSocket2.Active:=False;
ClientSocket2.Port:=8990;
ClientSocket2.Host:=Form52.ThierIP;
ClientSocket2.Active:=True;}
end;
procedure TForm52.Button2Click(Sender: TObject);
begin
Button4.Enabled:=True;
FN:=HighLightedFile;
Edit1.Text:='Attempting to download '+FN;
FTDownload.Create(Form52.thierIP,FN);
{ ClientSocket2.Active:=False;
ClientSocket2.Port:=8990;
ClientSocket2.Host:=Form52.ThierIP;
ClientSocket2.Active:=True;}
end;
constructor FTDownload.Create(Shost,SFileN: String);
begin
Form52.Button4.Enabled:=True;
StopDownloads:=False;
FileN:=SfileN;
Host:=Shost;
Inherited Create(false);
end;
procedure FTDownload.Execute;
Var
BB,N,L2: Integer;
KperS,Stats,Tmp: String;
TempBuff: Array[0..18024] Of Char;
begin
Data:='';
Socket:=TDCBSock.Create(nil);
Socket.BlockMode:=BmBlocking;
FileTCount:=1;
Form52.Timer1.Enabled:=True;
TL:=0;
FStage:=1;
System.Assign(F,Path+'Downloads\'+FileN);
System.Rewrite(F,1);
Form52.Edit1.Text:='Connected attempting to download '+FileN;
Socket.RemoteHost:=Host;
Socket.RemotePort:='8990';
HttpStr:='FT'+#$EA+FileN+#$EA;
Socket.Connect;
Sleep(40);
Fstage:=1;
If Socket.Connected=True Then
Try
Socket.Sendln(HttpStr);
Data:='';
While (Socket.WaitForData(20000)) And (StopDownloads=False) Do
Begin
// Br:=Socket.PeekBuf(Buf,SizeOf(Buf));
Br:=Socket.ReceiveBuf(Buf,SizeOf(Buf));
TL:=Socket.BytesReceived;
// Inc(TL,Br);
// Sleep(30);
///////////
If FStage=2 Then
Begin
Form52.ProgressBar1.Position:=TL Div 1024;
KperS:=FloatToStr((Tl/FileTCount)/1024);
KperS:=Copy(KperS,1,Pos('.',KperS)+2);
form52.label4.Caption:='Downloaded: '+IntToStr(TL)+' of '+IntToStr(AL)+' '+KperS+'K/s';
If BR>0 Then
BlockWrite(F,Buf,Br,Br);
End;
If FStage=1 Then
Begin
Stats:=Buf;
BB:=Pos(#$EA+#$AE,Stats);
Delete(Stats,1,pos(#$EA,Stats));
Tmp:=Copy(Stats,1,pos(#$Ea,Stats)-1);
Try
AL:=StrToInt(Tmp);
If AL>1024 Then
Form52.ProgressBar1.Max:=AL Div 1024
else
Form52.ProgressBar1.Max:=AL;
Except
End;
FillChar(TempBuff,SizeOf(TempBuff),0);
Move(Buf[BB+1],TempBuff[0],Br-BB);
KperS:=FloatToStr((Tl/FileTCount)/1024);
KperS:=Copy(KperS,1,Pos('.',KperS)+2);
form52.label4.Caption:='Downloaded: '+IntToStr(TL)+' of '+IntToStr(AL)+' '+KperS+'K/s';
If BR>0 Then
BlockWrite(F,TempBuff,(Br-BB)-1,Br);
Fstage:=2;
Form52.ProgressBar1.Position:=TL Div 1024;
End;
///////////
Application.ProcessMessages;
End;
OnDisconnect;
Except
Socket.Disconnect;
End;
Socket.Free;
System.Close(F);
TL:=0;
Form52.Edit1.Text:='File Succesfully Downloaded!';
Form52.Button4.Enabled:=False;
Form52.Timer1.Enabled:=False;
end;
procedure FTDownload.OnDisconnect;
begin
end;
procedure TForm52.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Button1.Enabled:=True;
Button2.Enabled:=False;
Button3.Enabled:=False;
end;
procedure TForm52.Timer1Timer(Sender: TObject);
begin
Inc(FileTCount);
end;
procedure TForm52.Panel3DblClick(Sender: TObject);
begin
Edit2.Visible:=Not Edit2.Visible;
Button3.Enabled:=True;
Button1.Enabled:=False;
Label3.Caption:='Override';
Edit1.Text:=ThierIP;
end;
procedure TForm52.Button4Click(Sender: TObject);
begin
StopDownloads:=True;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?