Страница: 1 | 2 | 3 | 4 | 5 |
Вопрос: Помогите с иконкой
Добавлено: 28.08.04 18:25
Автор вопроса: D_i_M
Ответы
Всего ответов: 64
Номер ответа: 31
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #31
Добавлено: 29.08.04 12:31
у иконки нет hWnd (handle Window) у нее есть только hIcon (handle Icon)...
Загрузить - не получится, ты ее можешь-лишь нарисовать, а потом, если захочешь, присвоить св-во Image св-ву Picture...
Номер ответа: 32
Автор ответа:
D_i_M
Вопросов: 1
Ответов: 10
Профиль | | #32
Добавлено: 29.08.04 12:34
А не подскажешь как это провернуть.
Нарисовать это DrawIcon? А дальше что?
Номер ответа: 33
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #33
Добавлено: 29.08.04 13:21
D_i_M
Берешь хэндл иконки (hIcon) и с ним делаешь такие штуки:
Picture1.AutoRedraw = True
ret= DrawIcon(Picture1.hdc, 0, 0, hIcon)
Set Picture1.Picture = Picture1.Image
Первая строка предупреждает систему, что будет изменено содержимое PictureBox'а. Вторая строка рисует иконку на контексте PictureBox'a (на его hdc), третья строка "закрепляет" за PictureBox'ом новое изображение, чтобы оно не исчезло при перерисовке формы.
Только не забудь объявить в начале кода формы:
Private Declare Function DrawIcon Lib "user32" Alias "rawIcon" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
Номер ответа: 34
Автор ответа:
Kodo
Разработчик Offline Client
ICQ: 293048085
Вопросов: 37
Ответов: 457
Профиль | | #34
Добавлено: 29.08.04 13:36
>у иконки нет hWnd (handle Window) у нее есть только hIcon (handle Icon)...
А не подскажешь, как этот hIcon получить?
Номер ответа: 35
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #35
Добавлено: 29.08.04 13:44
Например так:
hIcon = LoadImage(App.hInstance, "C:\icon.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE)
можно и так:
hIcon = ExtractIcon(App.hInstance, "explorer.exe", 1)
hIcon = LoadIcon(ByVal 0&, IDI_INFORMATION)
Номер ответа: 36
Автор ответа:
Kodo
Разработчик Offline Client
ICQ: 293048085
Вопросов: 37
Ответов: 457
Профиль | | #36
Добавлено: 29.08.04 13:46
Спасибо!
Вопрос не по теме:
Можно ли заставить VB НЕ ОЧИЩАТЬ буфер обмена при запуске? Бесит жутко!
Номер ответа: 37
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #37
Добавлено: 29.08.04 13:49
Есть ещё LoadImage, ExtractAssociatedIcon, ExtractAssociatedIconEx.
Номер ответа: 38
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #38
Добавлено: 29.08.04 13:50
Я тоже хотел бы это узнать!
Тоже ужасно бесит!
И при запуске и при закрытии - все зараза очищает
Номер ответа: 39
Автор ответа:
D_i_M
Вопросов: 1
Ответов: 10
Профиль | | #39
Добавлено: 29.08.04 13:53
2Kodo
Если нужно получить иконку окна то так
lHwdIcon = GetClassLong(hWnd , GCL_HICON)
или так, тут большая и маленькая иконки
lHwdIcon = DefWindowProc(hWnd , WM_GETICON, 0, 0)
lHwdIcon = DefWindowProc(hWnd , WM_GETICON, 1, 0)
cresta
если поставить Picture1.AutoRedraw = True то иконка исчезает а если не ставить то вроде сохраняется
Номер ответа: 40
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #40
Добавлено: 29.08.04 14:18
D_i_M
Ты где ставишь AutoRedraw? В коде или в свойствах PictureBox'a в IDE?
Номер ответа: 41
Автор ответа:
D_i_M
Вопросов: 1
Ответов: 10
Профиль | | #41
Добавлено: 29.08.04 14:22
cresta
В свойствах
Номер ответа: 42
Автор ответа:
D_i_M
Вопросов: 1
Ответов: 10
Профиль | | #42
Добавлено: 29.08.04 14:32
cresta
не подскажешь как можно изменить размер иконки
Номер ответа: 43
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #43
Добавлено: 29.08.04 15:02
D_i_M
В IDE в свойствах PictureBox'а не надо ставить AutoRedraw, пусть там будет False. Эту строку Picture1.AutoRedraw = True нужно вписать в коде, прямо в таком порядке, как я тебе показал, т.е. перед строками
ret= DrawIcon(Picture1.hdc, 0, 0, hIcon)
Set Picture1.Picture = Picture1.Image
Если хочешь нарисовать иконку не такого размера, как она в оригинале, то используй вместо DrawIcon - DrawIconEx.
Private Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Const DI_MASK = &H1
Const DI_IMAGE = &H2
ret=DrawIconEx (Picture1.hdc, 0, 0, hIcon, 88, 88, 0, 0, DI_MASK Or DI_IMAGE)
Эта функция нарисует тебе её такого размера, какой укажешь, в данном случае сделает 88х88.
Номер ответа: 44
Автор ответа:
D_i_M
Вопросов: 1
Ответов: 10
Профиль | | #44
Добавлено: 29.08.04 15:17
cresta
Сенкс
не подскажешь с LoadIcon
hIcon = LoadIcon(0&, IDI_APPLICATION)
выдает hIcon =0, другие IDI_ выдают тоже 0
Номер ответа: 45
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #45
Добавлено: 29.08.04 15:40
Не должно быть так, для IDI_APPLICATION у меня hIcon равен постоянно 65539. Т.е. для системных иконок с префиксом IDI_ значения hIcon постоянные. Можно даже не вызывать LoadIcon, просто написать hIcon = 65541 - будет рисоваться иконка с восклицательным знаком (IDI_EXCLAMATION).
Если функция вернула ноль - значит произошла ошибка. Код ошибки можно определить, вызвав GetLastError.