![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно двигать содержимое панели? [D7, Win95/98, WinME, NT4, Win2k, WinXP]
Сергей Петров © (2004-08-29 04:23:00)Задача приблизительно следущая: есть панель, и есть отдельно скроллбар. Хочу связать их вместе, то есть сделать подобие скроллбокса. Как мне правильно двигать панель? Под "правильно" подразумевается такой метод, при котором не будет этого противного моргания...
Есть и второй вопрос. Имеется в наличии Timage. Нужно быстро заменить ее bitmap на другой (когда мышка наводится на картинку - она должна измениться на другую), опять же - как это сделать так, чтобы не было мерцания?
Ломброзо (2004-08-29 14:48:00) [1]Для Delphi - вместо CDC использовать TCanvas, вместо CBitmap - TBitmap. А может, стоит просто обратить внимание на TWinControl.DoubleBuffered?
Ломброзо (2004-08-29 14:45:00) [2]> Есть и второй вопрос.
Double buffering. В памяти создать Device Context (DC), на нём отрисовать всё, что нужно, затем скопировать битовый массив функцией BitBlt на исходный DC. Кусочек на С++:
void CXNGrid::OnPaint()
{
PAINTSTRUCT ps;
CDC *dc = BeginPaint(&ps);
CRect badrect = ps.rcPaint;
CRect rc;
GetClientRect(&rc);
CDC memDC;
CBitmap memBmp;
memDC.CreateCompatibleDC(dc);
memBmp.CreateCompatibleBitmap(dc, rc.right - rc.left, rc.bottom - rc.top);
memDC.SelectObject(&memBmp);
// Здесь - вся отрисовка
dc->BitBlt(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, &memDC, 0, 0, SRCCOPY);
memBmp.DeleteObject();
memDC.DeleteDC();
EndPaint(&ps);
}
Mim1 (2004-08-29 11:35:00) [3]скролбар тоесть
Mim1 (2004-08-29 11:34:00) [4]Он про это в компонентах писал, ему хочется посвоему скролбокс отрисосывать.
DiamondShark (2004-08-29 11:31:00) [5]А TScrollBox чем не угодил?
Mim1 (2004-08-29 08:27:00) [6]Я как понимаю моргание это свойство операционки, при ресайде моргает все что младьше XP и на уровне приложения с этим бороться ИМХО не стоит.
По вопросу, может контролы расположить на вложеной панельке и менять ее координаты?
TUser (2004-08-29 06:13:00) [7]А почему не использовать скроллбокс?
См. также WM_VSCROLL, WM_HSCROLL, ShowScrollBar.