![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как через TMemoryStream и IdTCPServer передать переменную Record [D7, XP]
oam333 © (2012-12-18 17:07:00)Есть переменная типа Record. В ней два параметра: типа Integer и типа TMemoryStream.
Как полученную переменную Record передать клиенту через IdTCPServer, чтобы на клиенте разобрать этот поток обратно в Record?
TPack = Record
block_num : integer;
pic_content : TMemoryStream;
end;
var stream_old: TPack;
procedure TForm1.Button1Click(Sender: TObject);
begin
stream_old.block_num := 10;
stream_old.pic_content := TMemoryStream.Create;
end;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var strText: string;
i: integer;
ScreenCopy: TCanvas;
gr: TBitmap;
rcDest, rcSource: TRect;
PNG: TPNGObject;
begin
rcSource := Screen.DesktopRect; //исходный размер картинки
rcDest := Rect(0, 0, 100, 100); //конечный размер картинки
ScreenCopy := TCanvas.Create;
ScreenCopy.Handle := GetDC(0);
gr:= TBitmap.Create;
gr.Height := 100;
gr.Width := 100;
gr.Canvas.CopyRect(rcDest, ScreenCopy, rcSource);
PNG := TPNGObject.Create;
PNG.Assign(gr);
PNG.SaveToStream(stream_old.pic_content);
PNG.Free;
gr.Free;
AThread.Connection.WriteStream( stream_old, true, true);
end;
Вот как в предпоследней строке передать stream_old?
брат Птибурдукова (2012-12-18 17:36:00) [21]
> AThread.Connection.WriteStream(stream_old, true, true);
Ну что-то типа такого:
AThread.Connection.WriteStream(stream_old.block_num, true, true);
AThread.Connection.WriteStream(stream_old.pic_content.memory^, true, true);
...ну там ещё по-любому должна быть какая-то версия WriteStream, позволяющая задавать размер записываемой области памяти.
ЗЫ. А зачем тут запись? Почему бы block_num не пихать в тот же MemoryStream?
Медвежонок Пятачок (2012-12-18 17:13:00) [22]Вот так и передать.
Но перед тем как, - встать в начало стрима