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

Тема в разделе "Delphi - Multimedia, Графика, Игры", создана пользователем kalexi, 3 авг 2008.

  1. kalexi

    kalexi Гость

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

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

    Silver Wind Гость

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

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

    kalexi Гость

    Я просто впервые сталкиваюсь с рисованием и копированием битмапов.
    Допустим так:
    Код (Text):
    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, точнее в тех параметрах которые я ей передаю.
     
  4. Silver Wind

    Silver Wind Гость

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

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

    Во-первых где он вызывается?
    Во-вторых, хотябы здесь:
    Код (Text):
    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?
     
  5. kalexi

    kalexi Гость

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

    EdgarWine Гость

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

Поделиться этой страницей