Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как очистить TImage, Очистить компонент от картинки. 
V
    Опции темы
BeePer
  Дата 19.2.2006, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.2.2006

Репутация: нет
Всего: нет



Прива, всем..
Вобщем у меня трабла возникла с компонентом TImage:
Загружаю в него изображение из потока
Код

  http:=TIdHTTP.Create(Self);
  ms := TMemoryStream.Create;
  try
 url :='http://site.net/script?img_1234';
    http.Get(img, ms);
    ms.Position := 0;
    try
      NewGraphic := TJpegImage.Create;
      NewGraphic.LoadFromStream(ms);
      Image1.Picture.Graphic.Free;
      Image1.Picture.Graphic := NewGraphic;
    except
      NewGraphic.Free;
    end;
  finally
    ms.Free;
    http.Free;

Картинка загружается нормально, но если нажать ещё раз кнопку, т.е. загрузить повторно, то выдаётся ошибка и картнка не обновляется, если же вставляю перед этим кодом Image1.free;
то всё выполняется несколько раз, но картинка не загружается..
Не могу понять, как сделать, чтоб timage очищался перед каждой загрузкой картинки, и чтоб работало? Может кто знает?

Это сообщение отредактировал(а) BeePer - 19.2.2006, 01:34
PM MAIL   Вверх
Albinos_x
Дата 19.2.2006, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



Думаю что трабла утебя не с TImage....
попробуй так:
Код

http:=TIdHTTP.Create(Self);    
  ms := TMemoryStream.Create;    
  try    
 url :='http://site.net/script?img_1234';    
    http.Get(img, ms);    
    ms.Position := 0;    
    try    
      NewGraphic := TJpegImage.Create;    
      NewGraphic.LoadFromStream(ms);    
      Image1.Picture.Graphic := NewGraphic;    
    finally    
      NewGraphic.Free;    
    end;    
  finally    
    ms.Free;    
    http.Free;





--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Snowy
Дата 19.2.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



А я думаю, что трабла в том, что какая-то из переменных (например NewGraphic) глобальная. А должны быть все локальные.


Albinos_x, нет, именно except, а не finally. Я сам этот код писал.
Убивать низя - мы этот ньюграфик в Image пихаем.
PM MAIL   Вверх
Albinos_x
Дата 19.2.2006, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



Цитата(Snowy @ 19.2.2006, 09:34 Найти цитируемый пост)
Albinos_x, нет, именно except, а не finally. Я сам этот код писал.
Убивать низя - мы этот ньюграфик в Image пихаем.

это понятно, просто я недавно делал наподобии прогу, делал где-то так:
Код
...
var 
    T:TDateTime;
    b:TBitMap;
    l:integer;
    r,r1:TRect;
    dd:Double;
begin
try
b:=TBitmap.Create;
b.Width:=300;
b.Height:=255;
b.Canvas.Brush.Style := bsSolid;
b.Canvas.Brush.Color := clBlack;
b.Canvas.Rectangle(b.Canvas.ClipRect);
...
...
b.Canvas.CopyRect(r1,Form3.Image1.Canvas,r);
b.Canvas.Pen.Width:=2;
...
Image1.Picture.Bitmap:=b;
finally     
 b.Free;
 end;
...

у меня всё работает нормально.... поэтому так и написал.....
------------

если не в этом, то скорее как ты сказал - NewGraphic глобальная, поэтому и ошибка...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
BeePer
Дата 28.2.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.2.2006

Репутация: нет
Всего: нет



Слушайте, пробовал по всякому, даже местами переставлял %)
Решил протестить на локальных файлах:
Код

{Клик Button1}
var
NewGraphic: TGraphic;
begin
 try
     NewGraphic := TJpegImage.Create;
     NewGraphic.LoadFromFile('1.jpg');
     Image1.Picture.Graphic.Free;
     Image1.Picture.Graphic := NewGraphic;
 except
 NewGraphic.Free;
end;
//Работает, но 1 раз, т.е. если ещё раз на буттон нажать, то будет ошибка...

другой:
Код

{Клик Buttton2}
var
NewGraphic: TGraphic;
begin
 try
     NewGraphic := TJpegImage.Create;
     NewGraphic.LoadFromFile('2.jpg');
     Image1.Picture.Graphic.Free;
     Image1.Picture.Graphic := NewGraphic;
  except
  NewGraphic.Free;
end;
//Тоже работает один раз...

Оба кода работают нормально по одному разу... если кликнуть по первой кнопке, а потом по второй, то тоже ошибка...
Никак не могу понять из-за чего?

з.ы. на форме TImage и 2 кнопки..

Это сообщение отредактировал(а) BeePer - 28.2.2006, 00:19
PM MAIL   Вверх
Snowy
Дата 28.2.2006, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Угу. Есть такое.
Убери
Код
     Image1.Picture.Graphic.Free;

При присваивании его и так убивают.
А ошибка из-за двойного убийства - мы убили, а потом еще назначение пытается.
А т.к. указатель не зачищен, то ошибка убийства.
Ну и except на finally все же нужно заменить - на присвоение создается новый Graphic.
Вобщем так:
Код

var
  http: TIdHTTP;
  NewGraphic: TJpegImage;
begin
  http:=TIdHTTP.Create(Self);    
  ms := TMemoryStream.Create;    
  try    
    http.Get('http://site.net/script?img_1234', ms);    
    ms.Position := 0;    
    NewGraphic := TJpegImage.Create;    
    try    
      NewGraphic.LoadFromStream(ms);    
      Image1.Picture.Graphic := NewGraphic;    
    finally    
      NewGraphic.Free;    
    end;    
  finally    
    ms.Free; http.Free;
  end;
end;

PM MAIL   Вверх
BeePer
Дата 1.3.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.2.2006

Репутация: нет
Всего: нет



Респект Snowy - всё заработало, грузит по нескольку раз))

Тема закрыта.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1269 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.