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

 
Глюк Image в XP, Не перемальовує так як треба Image
Dead Ghost
Отправлено: 31.03.2004, 18:41


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







В мене така проблема: є програма, в якій є 4 Imag'a. Вони по черзі збільшуються в розмірах на Х по ширині i Y по висоті, і повертаються в початковий стан (до попередніх розмірів). Під NT все працює нормально: картинка збільшилась, потім — зменшилась. Під XP: картинка збільшилась і !не зменшилась! точніше її не перемалювало, як я розумію, в початковий стан після стирання попереднього збільшеного варіанта? Як можна позбутись такого "щастя"?
klen
Отправлено: 01.04.2004, 00:31


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

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



Дорогой брат, друг и товарищ, я херово по украински прнял че ты хочешь. Попробуй написать понятнее и лучше кусок кода положи, а мы тут попробуем разобратся с твоей бедой. Нихера не понял, если честно..
Gedeon
Отправлено: 01.04.2004, 14:09


Ветеран

Группа: Модератор
Сообщений: 1742



У меня вроде с украинским лады, но тока я сам с третьего прочтения понял что нужно. Приведите код иначе какого вы ответа ждете?
Guest
Отправлено: 01.04.2004, 19:20


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







To gedeon : код простий як двері, чому я його зразу не привів. Вибачаюсь за недорозуміння з викладом суті проблеми.
Приведу код програми
CODE

Form1->Image1->Top-=20;
Form1->Image1->Left-=20;
Form1->Image1->Height+=40;
Form1->Image1->Width+=40;
Delay(2000); //Власна функція
Form1->Image1->Top+=20;
Form1->Image1->Left+=20;//повернення до початкових координат
Form1->Image1->Height-=40;
Form1->Image1->Width-=40;//повернення початкового розміру
SendMessage(Form1->Handle, WM_IMAGE1,0,0);//Посилка повідомлення формі на зупинку потоку

При поверненні початкового розміру на формі змін не відбувається, бо збільшена картинка не стирається.
Пробував робити копію Form1->Canvas і потім відновлювати вигляд форми по збережоному "правильному" вигляді, але нічого не вийшло
Gedeon
Отправлено: 02.04.2004, 10:57


Ветеран

Группа: Модератор
Сообщений: 1742



Ну из того куска который вы привели, а это собственно изменение размера и координат Image1?, все прекрасно работает. Что такое функция Delay(), что выпоняет поток? Не уменьшиться картинка бы могла если где-то вы бы присвоили свойству AutoSize true, но тогда это было бы под всеми OS. Такие свойство Image как top, left, width & height работают прекрасно под всеми OS проблема где-то в другом месте.
Asher
Отправлено: 02.04.2004, 13:01


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

Группа: Модератор
Сообщений: 550



Привет.
Координаты лучше задавать все разом, через
Form1->Image1->BoundsRect = Rect(новые координаты);
Ну и не забывай после изменений делать Form1->Update();
или Form1->Refresh();
Dead Ghost
Отправлено: 05.04.2004, 16:57


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







Я вирішив проблему через Form1->Repaint().
Але все таки загадка : чому під NT працює, а 2000 і XP дають глюк?
Asher
Отправлено: 05.04.2004, 17:36


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

Группа: Модератор
Сообщений: 550



В Win некоторые из системных функций(напр TextOut) могут вызывать цикл обработки сообщений.
Возможно в новых версиях 2K и XP это дело съоптимизировали до такой степени, что теперь пинок требуется. biggrin.gif

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