C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Очистка TImage, Repaint () и FreeImage () не предлагать!
Aptem
Отправлено: 22.03.2006, 14:33


Мастер участка

Группа: Участник
Сообщений: 349



Доброго времени суток.

Есть проблема. Как очистить TImage? Казалось бы все просто, но облазив весь форум не нашел ничего подходящего. Всякие там Repaint и FreeImage не подходят, точнее не подходят в тех местах где они написаны smile.gif

У меня на форме лежит ScrollBox на нем TImage, в TImage программно через TStream загружается картинка, например 100х100, затем этим же способом загружается другая картинка на тот же TImage, но размером 50х50. Та часть, которая больше 50х50 рисуется от первой картинки, а та которая 50х50 от новой. Вот такие вот проблемы.

Может все таки решим раз и навсегда эту проблему.

Спасибо за внимание.
poland
Отправлено: 22.03.2006, 15:02


Ученик-кочегар

Группа: Участник
Сообщений: 16



QUOTE (Aptem @ 22/03/2006, 14:33)
Казалось бы все просто
CODE
ScrollBox->Invalidate();
если не понравится результат
CODE
TRect r(ScrollBox->ClientRect);
::Invalidate(ScrollBox->Handle,&r,true или false);
gvg
Отправлено: 22.03.2006, 17:50


Машинист паровоза

Группа: Участник
Сообщений: 222



А если Image->Picture = NULL
Aptem
Отправлено: 22.03.2006, 19:50


Мастер участка

Группа: Участник
Сообщений: 349



Не сработало ни то ни другое, однако заметил интересную вещь. Если вдруг картинка имеет размер 4096х2048 то есть на форме она не умещается и на скролбоксе появляются скролбары, то следующая картинка загружается чисто, то есть то, что надо. Однако если этих скролбаров нет, то и ничо не стирается. Вот такая вот забавная вещь. Я подумал, мож как то надо принудительно вызывать что-то вроде OnResize.
MarcusCaesar
Отправлено: 22.03.2006, 22:37


Не зарегистрирован







У меня сработало 2 варианта очистки:
1) Image->Canvas->Handle = NULL;
2) удалить TImage (с помощью delete Image)
и затем в рантайме создать его заново:
Image = new TImage(NULL);
Image->Parent = ScrollBar;
Image->Width = 50;
Image->Height = 50;
Но после этого необходимо принудительно изменить клиентской части ScrollBar и положения бегунков.
Grigoriy
Отправлено: 22.03.2006, 23:12


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (Aptem @ 22/03/2006, 14:33)
Всякие там Repaint и FreeImage не подходят, точнее не подходят в тех местах где они написаны smile.gif

Ну и объясни почему они "не подходят".
Тогда я тебе дам окончательный ответ на твою проблему.

Измени размеры самого Image до размеров 1*1 пиксел перед тем как будешь в него грузить новый БИТМАП. А потом восстанови предыдущие размеры и грузи новое изображение.

Вернуться в Вопросы программирования в C++Builder