Как рисовать в статике используя двойную буферизацию?

  • Автор темы kalexi
  • Дата начала
K

kalexi

Нужно рисовать (допустим скроллирующийся текст) в Static'е при этом вначале надо отрисовывать в памяти, а потом в статик.
Как это сделать с Canvas я понимаю, а как без? Т.е. как можно сделать в памяти что-то типа Canvas и рисовать в нем, а потом переносить в Static?

Используемые библиотеки: WINDOWS, MESSAGES!
 
S

Silver Wind

Например так:
В обработке отрисовки создай TBitmap, установи его размер в соответствии с размером твоего Static, рисуй на канве битмапа, а в конце копируй на канву своего статика.

А еще лучше в данном случае один раз создать битмап с требуемой шириной, а высоту установить такую чтобы весь твой скроллируемый текст там поместился, отрисовать на битмапе текст, а затем в обработке отрисовки статика копировать нужную часть канвы битмапа.
 
K

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, точнее в тех параметрах которые я ей передаю.
 
S

Silver Wind

Используемые библиотеки: 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?
 
K

kalexi

Поправил, рисует область экрана:
Код:
BitBlt(GetDC(GetDlgItem(Win,LOGO_IMG)), 0, 0, 248, 64, GetDC(0), 0, 0, SRCCOPY);
Мне нужно создать изображение в памяти и потом вывести с помощью BitBlt на статик, повесить код на таймер.
Без использования VCL.
 
E

EdgarWine

В статик же можно "выбрать" hbitmap и он будет отрисовываться сам... Через SendMessage с параметром STM_SETIMAGE...
А вот с двойной ли будет отрисовываться - не уверен... Хотя вроде должно быть как надо...
Попробуйте лучше CreateDIBSection... ;)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!