делаю часы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
mayhem
Новичок
Новичок
Аватара пользователя
 
Сообщения: 49
Зарегистрирован: 26.07.2004 (Пн) 14:02
Откуда: kiev

делаю часы

Сообщение mayhem » 24.09.2007 (Пн) 17:06

давно не брался за это. подскажите где лага.

Код: Выделить всё

    Dim region As RECT
    With region
        .Top = 0
        .Left = 0
        .Right = Me.Width / Screen.TwipsPerPixelX - 2
        .Bottom = Me.Height / Screen.TwipsPerPixelY - 2
    End With

    buff = GetDC(Me.hwnd)
    cbuff = CreateCompatibleDC(buff)
   
    SetTextColor cbuff, RGB(255, 150, 0)
    hBrush& = CreateSolidBrush(RGB(0, 0, 0))
    SelectObject cbuff, hBrush

    rez& = Rectangle(cbuff, region.Left, region.Top, region.Right, region.Bottom)
    rez& = DrawText(cbuff, Time, 8, region, DT_CENTER + DT_SINGLELINE + DT_VCENTER + DT_NOCLIP)
   
    rez& = BitBlt(cbuff, region.Left, region.Top, region.Right, region.Bottom, cbuff, 0, 0, SRCCOPY)
   
    ReleaseDC Me.hwnd, cbuff
    ReleaseDC Me.hwnd, cbuff
    DeleteObject hBrush


это все должно отрисовать часы по центру на черном фоне. если писать сразу в buff, все работает но с мерцанием, вспомнил про bitblt но она не хочет перерисовівать форму, нотя возвращает 1.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.09.2007 (Пн) 21:07

Ты перерисовываешь свою картинку из cbuff в cbuff.
Сомневаюсь, что это то, что тебе нужно.
Изображение

mayhem
Новичок
Новичок
Аватара пользователя
 
Сообщения: 49
Зарегистрирован: 26.07.2004 (Пн) 14:02
Откуда: kiev

Сообщение mayhem » 25.09.2007 (Вт) 16:24

упс. но дело тоже не в этом. это просто опечатка

перерисовываю из сbuff в buff

Код: Выделить всё
rez& = BitBlt(buff, region.Left, region.Top, region.Right, region.Bottom, cbuff, 0, 0, SRCCOPY)

mayhem
Новичок
Новичок
Аватара пользователя
 
Сообщения: 49
Зарегистрирован: 26.07.2004 (Пн) 14:02
Откуда: kiev

Сообщение mayhem » 25.09.2007 (Вт) 20:46

порешал проблему через createCompatibleBitmap

но теперь все Ч/Б. Есть идеи?

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 27.09.2007 (Чт) 0:06

To create a color bitmap, use the hDC that was used to create the memory device context, as shown in the following code:

HDC memDC = CreateCompatibleDC ( hDC );
HBITMAP memBM = CreateCompatibleBitmap ( hDC );
SelectObject ( memDC, memBM );

mayhem
Новичок
Новичок
Аватара пользователя
 
Сообщения: 49
Зарегистрирован: 26.07.2004 (Пн) 14:02
Откуда: kiev

Сообщение mayhem » 27.09.2007 (Чт) 13:02

спасибо за совет, но я уже добрался таки до мсдн и часики мои уже разноцветные.

brodyga
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 29.09.2009 (Вт) 9:52

Re: делаю часы

Сообщение brodyga » 31.07.2010 (Сб) 17:10

А можно еще раз озвучить решение, а то я не могу разобраться. У меня в итоге все равно получается черно-белое изображение, а должно быть цветным.

Код: Выделить всё
'Загружаю фоновый рисунок
Picture1.Picture = LoadPicture(App.Path & "\" & BACKGRNDFILE)
'Создаю hDC
lngDC = CreateCompatibleDC(Picture1.hDC)
'Создаю Bitmap
lngBMP = CreateCompatibleBitmap(lngDC, lngWidthPixels, lngHeightPixels)
'Выбираю объект
SelectObject lngDC, lngBMP
'<Тут вызывается подпрограмма, которая на Picture1 отрисовывает необходимое изображение>
'Копирую отрисованное в Picture1 изображение в свой битмап
BitBlt lngDC, x, y, lngWidthPixels, lngHeightPixels, Picture1.hDC, 0, 0,


Когда я сохраняю картинку из lngDC, то она оказывается чернобелой

Можете

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: делаю часы

Сообщение iGrok » 31.07.2010 (Сб) 20:41

brodyga писал(а):А можно еще раз озвучить решение, а то я не могу разобраться. У меня в итоге все равно получается черно-белое изображение, а должно быть цветным.


Ну чуть выше же написано, в чём дело. И отсылка к мсдн с подробным объяснением, почему именно так.

Note: When a memory device context is created, it initially has a 1-by-1 monochrome bitmap selected into it. If this memory device context is used in CreateCompatibleBitmap, the bitmap that is created is a monochrome bitmap.


Т.е. надо так: lngBMP = CreateCompatibleBitmap(Picture1.hDC, lngWidthPixels, lngHeightPixels).
label:
cli
jmp label


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 99

    TopList