иконка в Picture с ресаизом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

иконка в Picture с ресаизом

Сообщение Avtopic » 10.07.2007 (Вт) 21:30

Люди, Спасите!
ест функция от tyomitch
Код: Выделить всё
Private Function CreatePictureFromBitmap(ByVal hBmp As Long, PicType As Long) As StdPicture
Dim Pic As PicBmp, IID_IDispatch As GUID
    With IID_IDispatch
       .Data1 = &H20400
       .Data4(0) = &HC0
       .Data4(7) = &H46
    End With
    With Pic
       .Size = Len(Pic)
       .Type = PicType
       .hBmp = hBmp
       .hPal = 0
    End With
    OleCreatePictureIndirect Pic, IID_IDispatch, 1, CreatePictureFromBitmap
End Function

и иконка в Picture с ресаизом
Код: Выделить всё
Private Function FitIconToPicture(ByVal hIcon As Long) As Picture
    Dim hDC As Long, hBmp As Long, hBmpOld As Long

    Set Picture1.Picture = CreatePictureFromBitmap(hIcon, &H3)    ‘1


    hDC = CreateCompatibleDC(Picture1.hDC)
    hBmp = CreateCompatibleBitmap(hDC, 20, 20)
    hBmpOld = SelectObject(hDC, hBmp)
    StretchBlt hDC, 0, 0, 20, 20, Picture1.hDC, 0, 0, 32, 32, vbSrcCopy
    SelectObject hDC, hBmpOld
    DeleteDC hDC

    Set Picture1.Picture = CreatePictureFromBitmap(hBmp, &H1)    ‘2

    Set FitIconToPicture = Picture1.Picture
End Function

После первого Set Picture1.Picture = CreatePictureFromBitmap
рисунок цветной
После второго, черно-белый. причем, "черно" как уголь
Где я ошибаюсь?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 10.07.2007 (Вт) 21:34

А из одного и того же битмапа, да?
Изображение

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 10.07.2007 (Вт) 21:45

Пробовал и на двух пикчербоксах тоже, но раз результат был один и тот же, второй убрал.
По идее и на одном должен работать.

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

Re: иконка в Picture с ресаизом

Сообщение tyomitch » 10.07.2007 (Вт) 22:23

Avtopic писал(а):ест функция от tyomitch

Код не мой! Я только разместил пример! :-D

CreateCompatibleBitmap(hDC, 20, 20) замени хотя бы на CreateCompatibleBitmap(Picture1.hDC, 20, 20)

А лично я все апи бы выкинул из FitIconToPicture, и растягивал вызовом PaintPicture ;-)
Изображение

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 10.07.2007 (Вт) 22:27

zzzzz :evil:
Код: Выделить всё
hBmp = CreateCompatibleBitmap(Picture1.hDC, 20, 20)

-----------------------------------

Oп.. не успел
Все ровно, спасибо!

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 10.07.2007 (Вт) 22:44

tyomitch писал(а):А лично я все апи бы выкинул из FitIconToPicture, и растягивал вызовом PaintPicture ;-)

Понимаете, в конце второй функции здесь для наглядности сидит
Код: Выделить всё

Set Picture1.Picture = CreatePictureFromBitmap(hBmp, &H1)   
Set FitIconToPicture = Picture1.Picture

реально, в коде выглядит так
Код: Выделить всё
Set FitIconToPicture = CreatePictureFromBitmap(hBmp, &H1)

даже FitIconToPicture реально, в коде называется ResizeIcon :) и она присваивается
MSFlexGrid.CellPicture-у

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

Сообщение tyomitch » 11.07.2007 (Ср) 9:32

Ну и какая разница?

Код: Выделить всё
Private Function FitIconToPicture(ByVal hIcon As Long) As Picture
' Задай для Picture1 AutoRedraw=True и нужные размеры

    With Picture1
        .PaintPicture CreatePictureFromBitmap(hIcon, 3), 0, 0, .ScaleWidth, .ScaleHeight
        ' Любители API могут заменить предыдущую строку вызовом DrawIconEx
        Set FitIconToPicture = .Image
    End With
End Function
Изображение

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 11.07.2007 (Ср) 11:22

Никакой разницы :) . Спасибо!

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 11.07.2007 (Ср) 12:25

Хотя, там не хватает
.Picture = LoadPicture() или .Cls


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

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

Сейчас этот форум просматривают: Google-бот и гости: 96

    TopList