Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 |

 

  Вопрос: Помогите с иконкой Добавлено: 28.08.04 18:25  

Автор вопроса:  D_i_M

Ответить

  Ответы Всего ответов: 64  

Номер ответа: 31
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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 ";DrawIcon" (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.

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам