• 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

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

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

kalexi

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

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

А еще лучше в данном случае один раз создать битмап с требуемой шириной, а высоту установить такую чтобы весь твой скроллируемый текст там поместился, отрисовать на битмапе текст, а затем в обработке отрисовки статика копировать нужную часть канвы битмапа.
 
Я просто впервые сталкиваюсь с рисованием и копированием битмапов.
Допустим так:
Код:
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, точнее в тех параметрах которые я ей передаю.
 
Используемые библиотеки: 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?
 
Поправил, рисует область экрана:
Код:
BitBlt(GetDC(GetDlgItem(Win,LOGO_IMG)), 0, 0, 248, 64, GetDC(0), 0, 0, SRCCOPY);
Мне нужно создать изображение в памяти и потом вывести с помощью BitBlt на статик, повесить код на таймер.
Без использования VCL.
 
В статик же можно "выбрать" hbitmap и он будет отрисовываться сам... Через SendMessage с параметром STM_SETIMAGE...
А вот с двойной ли будет отрисовываться - не уверен... Хотя вроде должно быть как надо...
Попробуйте лучше CreateDIBSection... ;)
 
Мы в соцсетях:

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

Курс AD