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;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      AStream: TMemoryStream;
      Buffer: array [0..1023] of Char;
    begin
      AStream := TMemoryStream.Create;
      FillChar(Buffer, SizeOf(Buffer), 10);
      AStream.Write(Buffer, SizeOf(Buffer));
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      AStream: TMemoryStream;
      Buffer: array [0..1023] of Char;
    begin
      AStream := TMemoryStream.Create;
      FillChar(Buffer, SizeOf(Buffer), 10);
      AStream.Write(Buffer, SizeOf(Buffer));
    end;
      

  3.   

    你是不是这个意思:
    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.
      

  4.   

    谢谢,是这个意思.但是我在记录中存放了一个TBitmap类型,
    不知道该怎么做
      

  5.   

    服务器端
    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.
      

  6.   

    这个地方还没改
    if str = 'receive' then
        Socket.SendText(IntToStr(cn));
      

  7.   

    客户端
    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.