Здравствуйте. Вот незатейливый код.
Код:
procedure TgetJpg1Thread.Execute;
var Stream: TMemoryStream;
IdHTTP: TIdHTTP;
s_url: String;
// Sender: TObject;
bmp: TBItmap;
jpg: TJpegImage;
begin
Stream := TMemoryStream.Create();
jpg := TJpegImage.Create;
bmp := TBitmap.Create;
Try
IdHTTP := TIdHTTP.Create(NIL);
s_url := 'подставить урл';
IdHTTP.ReadTimeout := 500;
IdHTTP.ConnectTimeout := 500;
IdHTTP.HTTPOptions := [hoInProcessAuth];
IdHTTP.Get(s_url, Stream);
if stream.Size > 0 then
begin
Stream.SaveToFile('1.jpg');
// Stream.Position := 0;
jpg.Loadfromfile('1.jpg');
bmp.Assign(jpg);
SetStretchBltMode(Form1.Image1.Canvas.Handle, HALFTONE);
Form1.Image1.Canvas.CopyRect(Form1.Image1.Canvas.ClipRect, bmp.Canvas, bmp.Canvas.ClipRect);
Form1.Image1.Picture.SaveToFile('333.jpg');
end;
IdHTTP.Disconnect;
IdHTTP.Free;
FreeAndNil(Stream);
FreeAndNil(bmp);
FreeAndNil(jpg);
Except
On E: Exception do
begin
IdHTTP.Disconnect;
IdHTTP.Free;
FreeAndNil(Stream);
FreeAndNil(bmp);
FreeAndNil(jpg);
end;
end;
end;
Смысл его в том, что он скачивает картинку из интернета и меняет её размер в соответствии с размером компонента TImage. Из обычной кнопки код корректно выполняется полностью. А если подставить этот код в Execute потока, то не отрабатывает строка:
Код:
Form1.Image1.Canvas.CopyRect(Form1.Image1.Canvas.ClipRect, bmp.Canvas, bmp.Canvas.ClipRect);
при этом скачивание и сохранение картинки в виде файла на диск из потока работает. Возможно сможете подсказать в чём проблема.