![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте. Вот незатейливый код.
Код:
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); |
|
#2
|
|||
|
|||
|
Добавь синхронизацию твоего потока с главным потоком приложения.
|
|
#3
|
|||
|
|||
|
Цитата:
Synchronize(myProcedure); а в myProcedure вставить проблемную строку, и myProcedure выполнится в основном потоке? Но почему эта строка не работает в доп.потоке... вот в чём вопрос... Последний раз редактировалось svshamov, 12.05.2021 в 12:14. |
|
#4
|
|||
|
|||
|
Да, именно так.
Если правильно помню, то там заморочки с памятью между потоками. |