home *** CD-ROM | disk | FTP | other *** search
- unit SenderMain;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Buttons, OleCtrls, ISP, ExtCtrls, StdCtrls, Menus, ComCtrls, DB, DBTables;
-
- type
- TSendMain = class(TForm)
- Panel1: TPanel;
- Image1: TImage;
- OpenDialog1: TOpenDialog;
- MainMenu1: TMainMenu;
- File1: TMenuItem;
- Close1: TMenuItem;
- Connection1: TMenuItem;
- Connect1: TMenuItem;
- Disconnect1: TMenuItem;
- LoadnewBitmap1: TMenuItem;
- StatusBar1: TStatusBar;
- TCP1: TTCP;
- Timer1: TTimer;
- SendData1: TMenuItem;
- SendBitMap1: TMenuItem;
- Sendwav1: TMenuItem;
- SendEXE1: TMenuItem;
- procedure TCP1Error(Sender: TObject; Number: Smallint;
- var Description: string; Scode: Integer; const Source,
- HelpFile: string; HelpContext: Integer; var CancelDisplay: Wordbool);
- procedure Connect1Click(Sender: TObject);
- procedure Disconnect1Click(Sender: TObject);
- procedure LoadnewBitmap1Click(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- procedure Close1Click(Sender: TObject);
- procedure TCP1Connect(Sender: TObject);
- procedure Sendwav1Click(Sender: TObject);
- procedure SendBitMap1Click(Sender: TObject);
- procedure SendEXE1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
-
- procedure SendTCPData(Location: Pointer; Size: Integer;
- DataType : Integer; Tcp: TTcp);
-
- var
- SendMain: TSendMain;
-
- implementation
- uses mmsystem, typInfo, oleauto, onei;
- {$R *.DFM}
-
-
- {This is the workhorse function, all transfering data comes
- through this function}
- procedure SendTCPData(Location: Pointer; Size: Integer; DataType :
- Integer; Tcp: TTcp);
-
- procedure FillHeader(PHeader: PTFisherTCP; DataType, Size : Integer);
- begin
- PHeader^.Size := Size;
- PHeader^.Tag := DataType;
- end;
-
- var
- PHeader: PTFisherTCP;
- HeadBuffer, DataBuffer: Variant;
- Ptr: Pointer;
- begin
- PHeader := AllocMem(sizeOf(TFisherTCP));
- try
- FillHeader(PHeader, DataType, Size);
- {send the header}
- try
- HeadBuffer := VarArrayCreate([0, SizeOf(TFisherTCP)-1], VarByte);
- Ptr := VarArrayLock(HeadBuffer);
- Move(PHeader^, Ptr^, SizeOf(TFisherTCP));
- finally
- VarArrayUnlock(HeadBuffer);
- end;
- Tcp.SendData(HeadBuffer);
- finally
- FreeMem(Pheader);
- end;
-
- {Send the Stream}
- DataBuffer := VarArrayCreate([0, Size -1] , VarByte);
- try
- Ptr := VarArrayLock(DataBuffer);
- Move(Location^, Ptr^, Size);
- finally
- VarArrayUnlock(DataBuffer);
- end;
- Tcp.SendData(DataBuffer);
- end;
-
- {--- There are 2 TCP event methods used----}
- procedure TSendMain.TCP1Error(Sender: TObject; Number: Smallint;
- var Description: string; Scode: Integer; const Source, HelpFile: string;
- HelpContext: Integer; var CancelDisplay: Wordbool);
- begin
- Tcp1.Close;
- ShowMessage(Description);
- end;
-
- procedure TSendMain.TCP1Connect(Sender: TObject);
- begin
- Disconnect1.Enabled := True;
- Connect1.Enabled := False;
- Connect1.Checked := True;
- SendData1.Enabled := True;
- end;
-
- {--------- Determine the state of the TCP control ------}
- {The timer calls GetTcpState() because this control does
- not have an OnStateChange event - so we make our own}
- function GetTcpState(Tcp : TTcp): string;
- begin
- case Tcp.State of
- 0 : Result := 'Closed';
- 1 : Result := 'Open';
- 2 : Result := 'Listening';
- 3 : Result := 'Connection is Pending';
- 4 : Result := 'Resolving the host name';
- 5 : Result := 'Host is Resolved';
- 6 : Result := 'Connecting';
- 7 : Result := 'Connected to ' + Tcp.RemoteHost;
- 8 : Result := 'Connection is closing';
- 9 : Result := 'State error has occurred';
- 10 : Result := 'Connection state is undetermined';
- end;
- end;
-
- procedure TSendMain.Timer1Timer(Sender: TObject);
- begin
- StatusBar1.Panels[0].Text := GetTcpState(Tcp1);
- StatusBar1.Panels[1].Text := 'Port ' + IntToStr(Tcp1.LocalPort);
- end;
-
-
- {--------- These are the functions that send the data ----------}
- procedure TSendMain.Sendwav1Click(Sender: TObject);
- var
- DefaultFile : String;
- Stream : TMemoryStream;
- begin
- Stream := TmemoryStream.Create;
- try
- DefaultFile := ExtractFileDir(ParamStr(0)) + '\' + 'ah.wav';
- Stream.LoadFromFile(DefaultFile);
- Stream.Seek(0,0);
- SendTCPData(Stream.Memory, Stream.Size, OneI_Wav, Tcp1);
- finally
- Stream.Free;
- end;
- end;
-
- procedure TSendMain.SendBitMap1Click(Sender: TObject);
- var
- Stream : TMemoryStream;
- begin
- Stream := TmemoryStream.Create;
- try
- SendMain.Image1.Picture.Bitmap.SaveToStream(Stream);
- Stream.Seek(0,0);
- SendTCPData(Stream.memory, Stream.Size, OneI_BitMap, Tcp1);
- finally
- Stream.Free;
- end;
- end;
-
- procedure TSendMain.SendEXE1Click(Sender: TObject);
- var
- DefaultFile : String;
- Stream : TMemoryStream;
- begin
- Stream := TmemoryStream.Create;
- try
- DefaultFile := ExtractFileDir(paramstr(0)) + '\' + 'OneEye.exe';
- Stream.loadFromFile(DefaultFile);
- Stream.Seek(0,0);
- SendTCPData(Stream.memory, Stream.size, 3, Tcp1);
- finally
- Stream.Free;
- end;
- end;
-
- {-------- Menu Item Click methods ----}
- procedure TSendMain.LoadnewBitmap1Click(Sender: TObject);
- begin
- if OpenDialog1.execute then
- Image1.Picture.Bitmap.LoadFromFile(OpenDialog1.FileName);
- end;
-
- procedure TSendMain.Connect1Click(Sender: TObject);
- var
- Server : String;
- begin
- Server := '127.0.0.1';
- if InputQuery('Computer to connect to', 'Address (either IP or Name):', Server) then
- try
- Tcp1.Connect(Server, 1024);
- except
- on E: EOleException do
- ShowMessage('This ActiveX control can not reconnect to a server twice');
- end;
- end;
-
-
-
- procedure TSendMain.Disconnect1Click(Sender: TObject);
- begin
- Tcp1.Close;
- Senddata1.Enabled := False;
- Connect1.Enabled := True;
- Connect1.Checked := False;
- Disconnect1.Enabled := False;
- end;
-
- procedure TSendMain.Close1Click(Sender: TObject);
- begin
- close;
- end;
-
- end.
-