procedure TForm1.Button1Click(Sender: TObject);
var
TempStream : TMemoryStream;
Str:String;
begin
Str:=edit1.text;
try
TempStream := TMemoryStream.Create;
TempStream.Write(Str[1],length(edit1.text));
TempStream.Position := 0;
ListBox1.Items.LoadFromStream(TempStream);
finally
TempStream.Free;
end;
end;
var
TempStream : TMemoryStream;
Str:String;
begin
Str:=edit1.text;
try
TempStream := TMemoryStream.Create;
TempStream.Write(Str[1],length(edit1.text));
TempStream.Position := 0;
ListBox1.Items.LoadFromStream(TempStream);
finally
TempStream.Free;
end;
end;
var
AStream: TMemoryStream;
Buffer: array [0..1023] of Char;
begin
AStream := TMemoryStream.Create;
FillChar(Buffer, SizeOf(Buffer), 10);
AStream.Write(Buffer, SizeOf(Buffer));
end;
var
AStream: TMemoryStream;
Buffer: array [0..1023] of Char;
begin
AStream := TMemoryStream.Create;
FillChar(Buffer, SizeOf(Buffer), 10);
AStream.Write(Buffer, SizeOf(Buffer));
end;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
Myrecord=record
name:string;
age:integer;
end;
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
TempStream : TMemoryStream;
Str:String;
RecordStr:array[0..10] of Myrecord;
i,j:integer;
begin
for i:=0 to 10 do
begin
RecordStr[i].name:='张'+inttostr(i);
RecordStr[i].age:=i+20;
end;
try
TempStream := TMemoryStream.Create;
for j:=0 to 10 do
begin
Str:=format('%10s',[RecordStr[j].name])+format('%10d',[RecordStr[j].age])+#13+#10;
TempStream.Write(Str[1],length(Str));
TempStream.Position := 0;
ListBox1.Items.LoadFromStream(TempStream);
end;
finally
TempStream.Free;
end;
end;
end.
不知道该怎么做
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ScktComp, Jpeg;type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
ServerSocket1: TServerSocket;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
procedure PrintPartScreen(var PartBmp: TBitmap;m: integer;n: integer);
procedure PrintFullScreen(var FullBmp: TBitmap);
procedure Compare(m: integer;n: integer);
public
{ Public declarations }
end; JpegRec = Record
Jx: integer;
Jy: integer;
SJpeg: TJpegImage;
Flag: Boolean;
end;var
Form1: TForm1;
WidthI,HeightJ: integer;
BmpArray: array[0..9,0..9] of TBitmap;
TempArray: array[0..9,0..9] of TBitmap;
FirstBmp: TBitmap;
SerJpeg: TJpegImage;
SerStream: TMemoryStream;
SerStreamSize: string;
Flag,FlagTimer,FlagUnequal: Boolean;
cm,cn: integer;
x: integer;
SJpegRec: array[0..9,0..9] of JpegRec;
implementation{$R *.dfm}procedure TForm1.PrintPartScreen(var PartBmp: TBitmap;m: integer;n: integer);
var
PartScreenCanvas: TCanvas;
PartDC: HDC;
begin
PartScreenCanvas := TCanvas.Create;
Partdc := GetDC(0);
PartScreenCanvas.Handle := PartDC;
PartBmp.Canvas.CopyRect(Rect(0,0,WidthI,HeightJ),
PartScreenCanvas,
Rect(m*WidthI,n*HeightJ,m*WidthI+WidthI,n*HeightJ+Heightj));
PartScreenCanvas.Free;
ReleaseDC(0,PartDC);
end;procedure TForm1.PrintFullScreen(var FullBmp: TBitmap);
var
FullScreenCanvas: TCanvas;
FullDC: HDC;
begin
FullScreenCanvas := TCanvas.Create;
FullDC := GetDC(0);
FullScreenCanvas.Handle := FullDC;
FullBmp.Canvas.CopyRect(Rect(0,0,Screen.Width,Screen.Height),
FullScreenCanvas,
Rect(0,0,Screen.Width,Screen.Height));
FullScreenCanvas.Free;
ReleaseDC(0,FullDC);
end;procedure TForm1.Compare(m: integer;n: integer);
var
i: integer;
ptr1,ptr2: Pointer;
TempJpeg: TJpegImage;
begin
//scanline比较
BmpArray[m,n].PixelFormat := pf32bit;
TempArray[m,n].PixelFormat := pf32bit;
for i := 0 to HeightJ-1 do
begin
ptr1 := BmpArray[m,n].ScanLine[i];
ptr2 := TempArray[m,n].ScanLine[i];
Flag := CompareMem(ptr1,ptr2,BmpArray[m,n].Width*3);
if not Flag then
begin
//Form1.Canvas.Draw(m*WidthI,n*HeightJ,TempArray[m,n]);
{FlagCycle := true;
cm := m;
cn := n; }
BmpArray[m,n].Assign(TempArray[m,n]);
TempJpeg := TJpegImage.Create;
TempJpeg.CompressionQuality := 50;
TempJpeg.Assign(TempArray[m,n]);
with SJpegRec[m,n] do
begin
Jx := m;
Jy := n;
SJpeg.Assign(TempJpeg);
Flag := true;
end;
FlagUnequal := true;
TempJpeg.Free;
{SerStream := TMemoryStream.Create;
TempJpeg.SaveToStream(SerStream);
SerStreamSize := IntToStr(SerStream.Size);
ServerSocket1.Socket.Connections[0].SendText(IntToStr(cm));
}
break;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
var
i,j: integer;
begin
cm := -1;
cn := -1;
x := 0;
Flag := true;
FlagTimer := true;
FlagUnequal := false;
WidthI := Screen.Width div 10;
HeightJ := Screen.Height div 10;
FirstBmp := TBitmap.Create;
SerJpeg := TJpegImage.Create;
for i := 0 to 9 do
for j := 0 to 9 do
begin
BmpArray[i,j] := TBitmap.Create;
BmpArray[i,j].Width := WidthI;
BmpArray[i,j].Height := HeightJ;
end;
for i := 0 to 9 do
for j := 0 to 9 do
begin
TempArray[i,j] := TBitmap.Create;
TempArray[i,j].Width := WidthI;
TempArray[i,j].Height := HeightJ;
end;
for i := 0 to 9 do
for j := 0 to 9 do
with SJpegRec[i,j] do
begin
Jx := 0;
Jy := 0;
SJpeg := TJpegImage.Create;
Flag := false;
end;
end;procedure TForm1.Timer1Timer(Sender: TObject);
var
i,j: integer;
begin
for i := 0 to 1 do
for j := 0 to 1 do
begin
PrintPartScreen(TempArray[i,j],i,j);
end;
{for i := 0 to 9 do
for j := 0 to 9 do
Compare(i,j); }
Compare(0,0);
if FlagUnequal then
ServerSocket1.Socket.Connections[0].SendText('send');
//Compare(0,1);
end;procedure TForm1.Button1Click(Sender: TObject);
var
i,j: integer;
begin
for i := 0 to 9 do
for j := 0 to 9 do
begin
PrintPartScreen(BmpArray[i,j],i,j);
PrintPartScreen(TempArray[i,j],i,j);
end;
FirstBmp.Width := Screen.Width;
FirstBmp.Height := Screen.Width;
PrintFullScreen(FirstBmp);
ServerSocket1.Port := 3000;
ServerSocket1.Open;
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
str: string;
begin
str := Socket.ReceiveText;
if str = 'First' then
begin
SerStream := TMemoryStream.Create;
SerJpeg.CompressionQuality := 50;
SerJpeg.Assign(FirstBmp);
SerJpeg.SaveToStream(SerStream);
SerJpeg.Free;
FirstBmp.Free;
SerStreamSize := IntToStr(SerStream.Size);
Socket.SendText(SerStreamSize);
end;
if str = 'ready' then
begin
SerStream.Position := 0;
Socket.SendStream(SerStream);
FlagCycle := false;
if FlagTimer then
begin
Timer1.Enabled := true;
FlagTimer := false;
end;
//Timer1Timer(Self);
end;
if str = 'receive' then
Socket.SendText(IntToStr(cn));
if str = 'SendStreamSize' then
Socket.SendText(SerStreamSize);
end;end.
if str = 'receive' then
Socket.SendText(IntToStr(cn));
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, ExtCtrls, Jpeg;type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Image1: TImage;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure FirstReceive();
procedure ReceiveBmp();
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
CliBmp: TBitmap;
CliStream: TMemoryStream;
Size: LongInt;
WidthI,HeightJ: integer;
Flag: boolean;
FlagTemp: boolean;
m,n: integer;
x: integer;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
x := 0;
WidthI := Screen.Width div 10;
HeightJ := Screen.Height div 10;
CliBmp := TBitmap.Create;
CliBmp.Width := Screen.Width;
CliBmp.Height := Screen.Height;
Size := 0;
Flag := false;
FlagTemp := false;
m := -1;
n := -1;
if not ClientSocket1.Active then
begin
ClientSocket1.Address := '210.30.184.206';
ClientSocket1.Port := 3000;
ClientSocket1.Active := true;
end;
end;procedure TForm1.FirstReceive();
var
CliInfo: string;
ReceiveBuf: array [0..10000] of byte;
ReceiveLen: integer;
CliJpeg: TJpegImage;
CliTempBmp: TBitmap;
begin
if Size = 0 then
begin
CliInfo := ClientSocket1.Socket.ReceiveText;
Size := StrToInt(CliInfo);
ClientSocket1.Socket.SendText('ready');
CliStream := TMemoryStream.Create;
end
else
begin
ReceiveLen := ClientSocket1.Socket.ReceiveLength;
ClientSocket1.Socket.ReceiveBuf(ReceiveBuf,ReceiveLen);
CliStream.Write(ReceiveBuf,ReceiveLen);
if CliStream.Size >= Size then
begin
CliJpeg := TJpegImage.Create;
CliTempBmp := TBitmap.Create;
CliStream.Position := 0;
CliJpeg.LoadFromStream(CliStream);
CliTempBmp.Assign(CliJpeg);
CliTempBmp.Width := Screen.Width;
CliTempBmp.Height := Screen.Height;
Form1.Canvas.Draw(0,0,CliTempBmp);
CliJpeg.Free;
CliTempBmp.Free;
CliStream.Free;
Flag := true;
Size := 0;
end;
end;
end;procedure TForm1.ReceiveBmp();
var
TempBmp: TBitmap;
TempJpeg: TJpegImage;
Info: string;
ReceiveBuf: array [0..10000] of byte;
ReceiveLen: integer;
begin
if Size = 0 then
begin
Info := ClientSocket1.Socket.ReceiveText;
Size := StrToInt(Info);
ClientSocket1.Socket.SendText('ready');
CliStream := TMemoryStream.Create;
end
else
begin
ReceiveLen := ClientSocket1.Socket.ReceiveLength;
//Caption := IntToStr(ReceiveLen);
ClientSocket1.Socket.ReceiveBuf(ReceiveBuf,ReceiveLen);
CliStream.Write(ReceiveBuf,ReceiveLen);
if CliStream.Size >= Size then
begin
TempJpeg := TJpegImage.Create;
TempBmp := TBitmap.Create;
CliStream.Position := 0;
TempJpeg.LoadFromStream(CliStream);
TempBmp.Assign(TempJpeg);
TempBmp.Width := WidthI;
TempBmp.Height := HeightJ;
Form1.Canvas.Draw(m*WidthI,n*HeightJ,TempBmp);
x := x + 1;
Caption := IntToStr(x);
TempJpeg.Free;
TempBmp.Free;
CliStream.Free;
Flag := true;
Size := 0;
m := -1;
n := -1;
end;
end;
end;procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s: string;
begin
if not Flag then
begin
FirstReceive();
end
else
begin
s := Socket.ReceiveText;
if s = 'send' then
Socket.SendText('receive');
{if m = -1 then
begin
s := Socket.ReceiveText;
m := StrToInt(s);
Socket.SendText('n');
end
else
if n = -1 then
begin
s := Socket.ReceiveText;
n := StrToInt(s);
Socket.SendText('SendStreamSize');
end
else
ReceiveBmp(); }
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
if not ClientSocket1.Active then
begin
ClientSocket1.Address := '210.30.184.206';
ClientSocket1.Port := 3000;
ClientSocket1.Active := true;
end;
ClientSocket1.Socket.SendText('First');
end;end.