Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как рисовать в статике используя двойную буферизацию?
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - Multimedia, Графика, Игры
kalexi
Нужно рисовать (допустим скроллирующийся текст) в Static'е при этом вначале надо отрисовывать в памяти, а потом в статик.
Как это сделать с Canvas я понимаю, а как без? Т.е. как можно сделать в памяти что-то типа Canvas и рисовать в нем, а потом переносить в Static?

Используемые библиотеки: WINDOWS, MESSAGES!
Silver Wind
Например так:
В обработке отрисовки создай TBitmap, установи его размер в соответствии с размером твоего Static, рисуй на канве битмапа, а в конце копируй на канву своего статика.

А еще лучше в данном случае один раз создать битмап с требуемой шириной, а высоту установить такую чтобы весь твой скроллируемый текст там поместился, отрисовать на битмапе текст, а затем в обработке отрисовки статика копировать нужную часть канвы битмапа.
kalexi
Я просто впервые сталкиваюсь с рисованием и копированием битмапов.
Допустим так:
var
  buf:HBitmap;
begin
  buf := CreateBitmap(200,67,1,1, nil);
  Ellipse(buf,10,10,100,100);
  BitBlt(GetDlgItem(Win,LOGO_IMG), 0, 0, 200, 67, buf, 0, 0, SRCCOPY);

Не работает, чувствую, что дело в BitBlt, точнее в тех параметрах которые я ей передаю.
Silver Wind
Цитата(kalexi @ 3:08:2008 - 14:53) *
Используемые библиотеки: WINDOWS, MESSAGES!

Этим я так понял ты подчеркиваешь, что работаешь без использования VCL. тогда рекомендую почитать про то как в Windows рисуют, какими API.

А этот код бред.

Во-первых где он вызывается?
Во-вторых, хотябы здесь:
Ellipse(buf,10,10,100,100);
  BitBlt(GetDlgItem(Win,LOGO_IMG), 0, 0, 200, 67, buf, 0, 0, SRCCOPY);

Первый параметр должен быть хэндлом HDC, а не как не HBitmap или HWND.

И вообще что это за отрисовка такая где собственно GetDC, BeginPaint и т.п., где все то что должно присутствовать в отрисовке в Windows?
kalexi
Поправил, рисует область экрана:
BitBlt(GetDC(GetDlgItem(Win,LOGO_IMG)), 0, 0, 248, 64, GetDC(0), 0, 0, SRCCOPY);

Мне нужно создать изображение в памяти и потом вывести с помощью BitBlt на статик, повесить код на таймер.
Без использования VCL.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.