Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Проблема с компонентами TidTCPServer и TidTCPClient   Найти похожие ветки 

 
maxistent ©   (2009-12-01 13:42) [40]

в общем, я сделал так:

procedure TForm1.ss1Execute(AThread: TIdPeerThread);
var
buf:pointer;
DataSize:integer;
st:TStream;
r0:TRect;
p0:TPoint;
begin
AThread.Connection.ReadBuffer(p0,sizeof(p0));//"габариты" всей картинки
AThread.Connection.ReadBuffer(r0,sizeof(r0));//позиция текущего фрагмента
AThread.Connection.ReadBuffer(DataSize,sizeof(DataSize));//размер изображения (jpg)
GetMem(buf,DataSize);
AThread.Connection.ReadBuffer(buf^,DataSize);

//тут я все это складываю в стрим...
st:=TMemoryStream.Create;
st.Write(p0,sizeof(p0));
st.Write(r0,sizeof(r0));
st.Write(buf^,DataSize);
FreeMem(buf,DataSize);
st.Position:=0;
//потом читаю это все в память...
DataSize:=st.Size;
GetMem(buf,DataSize);
st.Read(buf^,DataSize);
st.Free;

//и передаю дальше...
try
 PostMessage(Form1.Handle, WM_DATA_TO_RENDER_AVAIL, WPARAM(buf), LPARAM(DataSize)); except
 FreeMem(ptrDataToRender);
 raise;
end;
end;

procedure TForm1.WMMyMessage(var Message: TMessage);
var
ptrDataToRender: Pointer;
dwSizeOfDataToRender: DWord;
st:TStream;
jpg:TJPEGImage;
p:TPoint;
r:TRect;
begin
ptrDataToRender := Pointer(Message.wParam);
dwSizeOfDataToRender := DWord(Message.lParam);
try
st:=TMemoryStream.Create;
st.Write(ptrDataToRender^,dwSizeOfDataToRender);
st.Position:=0;
st.Read(p,sizeof(p));
st.Read(r,sizeof(r));
jpg:=TJPEGImage.Create;
jpg.LoadFromStream(st);
st.Free;:=TJPEGImage.Create;
jpg.LoadFromStream(st);
st.Free;
Image1.Picture.Bitmap.Canvas.Draw(r.Left,r.Top,jpg);
jpg.Free;
finally
 FreeMem(ptrDataToRender);
end;
end;
Image1.Picture.Bitmap.Canvas.Draw(r.Left,r.Top,jpg);
jpg.Free;
finally
 FreeMem(ptrDataToRender);
end;
end;


Теперь все безупречно работает. И память распределяется и расходуется вроде правильно. Большое спасибо вам всем! теперь буду внимательней "смотреть" на указатели.. =)


 
maxistent ©   (2009-12-01 13:46) [41]

p.s. в [40] последние 6 строк кода ошибочно вставлены...


 
CrytoGen   (2009-12-01 13:49) [42]

не походу ты всё равно не внимательно к указателям относишься:
try
PostMessage(Form1.Handle, WM_DATA_TO_RENDER_AVAIL, WPARAM(buf), LPARAM(DataSize)); except
FreeMem(ptrDataToRender);
raise;
end;

где ты тут работал с ptrDataToRender?


 
maxistent ©   (2009-12-01 14:35) [43]

ну это я уже по памяти списывал из кода и "на лету" редактировал, чтоб вам было проще читать... там не "ptrDataToRender", а "buf"  =)


 
Slym ©   (2009-12-02 11:33) [44]

http://delphimaster.net/view/6-1227604925/



Страницы: 1 2 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.052 c
2-1340780940
aka
2012-06-27 11:09
2013.03.22
Удаления пробелов в строке.


2-1338481759
NatashaZ
2012-05-31 20:29
2013.03.22
Поток и ShowModal (Delphi2009)


15-1332788348
IceKhan
2012-03-26 22:59
2013.03.22
как включить отображение системных файлов в OpenDialog


15-1349268838
Чтец
2012-10-03 16:53
2013.03.22
Книга в формате Word


2-1332577830
Pcrepair
2012-03-24 12:30
2013.03.22
TStringList и перевод символов в нижний регистр