![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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. Подскажите, пожалуйста как можно избавиться от мерцания? Заранее благодарен. |
|||
|
||||
| Dolphin |
|
|||
|
Unregistered |
Я советую при смене картинок использовать метод Tcanvas.dwaw, при котором этого не происходит. А при SpSpeedButton1.Glyph:=img2; вероятно сначала происходит перерисовка рабочей области (полазь в исходниках), а уже после вывод картинки, из-за чего это и происходит.
[email protected] |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Может при использовании TCanvas и не мерцает, но у TSpeedButton нету своиства Canvas((((
|
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
есть, ты его просто получать еще не научился.
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
Используй блокировку экрана.
-------------------- |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
У TSpeedButton нет ствоиства Handle, а если ето использовать на форму то эффекта нет(
|
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
А можно поподробние, плз. |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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. -------------------- |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
С LockWindowUpdate() все равно происходит мерцание((((((
|
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Подскажите, пожалуйста, как добраться до Canvas?
|
|||
|
||||
| Technoboss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |