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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мерцание при смене BitMap-a 
:(
    Опции темы
Spawn
Дата 28.12.2002, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я модифицировал немножко компонент TSpeedButton, добавив события OnMouseEnter и OnMouseLeave, для отлавливания входа и выхода мышки за границы компонента. Сделал 2 одинаковых картинки 3DMax-е, но с разным освещением, для создания эффекта подсветки кнопки. И в соответствующие события вставил смену картинки в компоненте. Казалось бы все нормально, но иногда происходит нежелательное мерцание при смене картинки.

procedure TForm1.FormCreate(Sender: TObject);
begin
img1:=TBitMap.Create;
img2:=TBitMap.Create;
img1.LoadFromFile('Image\1.bmp');
img2.LoadFromFile('Image\2.bmp');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
img1.Free;
img2.Free;
end;

//Замена картинки при выходе или входе мышки в область компонента
procedure TForm1.SpSpeedButton1MouseEnter(Sender: TObject);
begin
SpSpeedButton1.Glyph:=img1;
end;

procedure TForm1.SpSpeedButton1MouseLeave(Sender: TObject);
begin
SpSpeedButton1.Glyph:=img2;
end;

картинка небольшая где то  30 на 30.
Подскажите, пожалуйста как можно избавиться от мерцания?
Заранее благодарен.
PM MAIL   Вверх
Dolphin
Дата 28.12.2002, 21:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я советую при смене картинок использовать метод Tcanvas.dwaw, при котором этого не происходит. А при SpSpeedButton1.Glyph:=img2; вероятно сначала происходит перерисовка рабочей области (полазь в исходниках), а уже после вывод картинки, из-за чего это и происходит.
[email protected]
  Вверх
Spawn
Дата 29.12.2002, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может при использовании TCanvas и не мерцает, но у TSpeedButton нету своиства Canvas((((
PM MAIL   Вверх
Step
Дата 29.12.2002, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



есть, ты его просто получать еще не научился.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Medved
Дата 29.12.2002, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Используй блокировку экрана.

Код

LockWindowUpdate(Handle);  //Блокировка обновления экрана
.... //смена картинки
LockWindowUpdate(0);    //Включить обновление экрана





--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Spawn
Дата 29.12.2002, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У TSpeedButton нет ствоиства Handle, а если ето использовать на форму то эффекта нет(
PM MAIL   Вверх
Spawn
Дата 29.12.2002, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Step @ 28.12.2002, 17:21)
есть, ты его просто получать еще не научился.

А можно поподробние, плз.
PM MAIL   Вверх
Medved
Дата 29.12.2002, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



The LockWindowUpdate function disables or reenables drawing in the specified window. Only one window can be locked at a time.

BOOL LockWindowUpdate(

   HWND hWndLock // handle of window to lock  
  );


Parameters

hWndLock

Specifies the window in which drawing will be disabled. If this parameter is NULL, drawing in the locked window is enabled.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero, indicating that an error occurred or another window was already locked.

Remarks

If an application with a locked window (or any locked child windows) calls the GetDC, GetDCEx, or BeginPaint function, the called function returns a device context with a visible region that is empty. This will occur until the application unlocks the window by calling LockWindowUpdate, specifying a value of NULL for hWndLock.
If an application attempts to draw within a locked window, the system records the extent of the attempted operation in a bounding rectangle. When the window is unlocked, the system invalidates the area within this bounding rectangle, forcing an eventual WM_PAINT message to be sent to the previously locked window and its child windows. If no drawing has occurred while the window updates were locked, no area is invalidated.

LockWindowUpdate does not make the given window invisible and does not clear the WS_VISIBLE style bit.

A locked window cannot be moved.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Spawn
Дата 29.12.2002, 05:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



С LockWindowUpdate() все равно происходит мерцание((((((
PM MAIL   Вверх
Spawn
Дата 29.12.2002, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Подскажите, пожалуйста, как добраться до Canvas?
PM MAIL   Вверх
Technoboss
Дата 30.12.2002, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет!
При таком отображении у тебя всегда будет "мерцание" картинок,
потому что ты не "убираешь" первую картинку и сразу же выводишь
другую.
В Help файле к Delphi есть пример смены картинок.
Почему никто не любит читать?!

These lines of code load a four-image bitmap into the Glyph property of a speed button, and specify the appropriate value for the NumGlyphs property:

SpeedButton1.Glyph.LoadFromFile('MYBITMAP.BMP');
SpeedButton1.NumGlyphs := 4
PM MAIL   Вверх
stab
Дата 2.1.2003, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Что делать дальше если использовать вышеописанный код непонятно.
Technoboss объясни ситуацию.

Могу предложить такой метод: у родительского компонента кнопки поставить свойство DoubleBuffered в True, т.е. если это Form1, то будет так:

procedure TForm1.FormCreate(Sender: TObject);
begin
 DoubleBuffered := True;
end;


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

Запрещено:

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

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

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

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


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

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


 




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


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

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