Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/39: Рейтинг темы: голосов - 39, средняя оценка - 4.72
46 / 8 / 1
Регистрация: 20.08.2010
Сообщений: 53

Иконка формы на VB6

15.02.2013, 15:28. Показов 7991. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

В VB6 загружаю иконку в Form1.Icon и при запуске приложения, иконка не совсем качественного вида. В VB2008 загружаю эту же иконку в Form1.Icon и иконка отображается нормально при запуске приложения.

Как реализовать правильное отображение иконки Form1 в VB6?

Заранее благодарен!
Изображения
  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2013, 15:28
Ответы с готовыми решениями:

VB6 удаление объектов с формы
Здравствуйте, вот программирую тут небольшую игрушку на VB6. И возникла такая проблема: необходимо создавать объекты Image прямо в процессе...

Будут ли видны формы VB6 в VB5?
Делетантский вопрос, но очень нужно притом срочно!! Собственно Субж :) Заранее благодарен Nick

Как убрать read only формы в project explorer (VB6)
В project explorer (VB6) все формы с замочками. До эгого игрался с Visual SourceSafe . И сейчас не могу записать некоторые формы...

13
145 / 46 / 1
Регистрация: 06.11.2012
Сообщений: 283
15.02.2013, 17:52
Цитата Сообщение от TYM Посмотреть сообщение
иконка не совсем качественного вида
Может для вб 6 она слишком качественная Попробуй сделать качество пониже
0
Заблокирован
15.02.2013, 18:18
TYM, Visual Basic вообще как бы староват и он не поддерживает передачу изображения в 32 битном качестве ALPHA. Там максимум 24 бита.
0
46 / 8 / 1
Регистрация: 20.08.2010
Сообщений: 53
16.02.2013, 10:53  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Решил данный вопрос следующим образом:

Поскольку VB6 стандартными средствами не поддерживает передачу изображения иконок в 32-х битном качестве ALPHA (максимум только 24 бита), я сделал следующее:

Отредактировал иконку с помощью специализированной программы. Главное при редактировании иконки указать параметры создаваемой иконки, они должны быть такими:

48x48 – 8
32x32 – 8
16x16 – 8

Затем нам нужно скомпилировать файл ресурсов с нужной нам иконкой:

Заходим в папку C:\Program Files\Microsoft Visual Studio\VB98\Wizards

Из этой папки нам нужно использовать файл rc.exe – Microsoft resource compiler.
(Для удобства, я скопировал себе файлы на диск C в папку с именем 1)

Открываем блокнот и вписываем в него следующее:

AAA icon moveable preload test.ico

Где test.ico – это имя отредактированной иконки.

Сохраняем всё это в файл Myresfile.rc.

Не забудьте поместить файл test.ico в папку с rc.exe.

Затем выполняем команду
Bash
1
C:\1>rc.exe /r /fo Myresfile.res myresfile.rc
Результатом выполнения данной команды является создание файла ресурсов Myresfile.res.
В VB6 открываем редактор ресурсов и загружаем только что созданный файл ресурсов Myresfile.res.

Теперь самое интересное:

Нужно создать модуль и вписать в него следующий код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Private Declare Function GetSystemMetrics Lib "user32" ( _
      ByVal nIndex As Long _
   ) As Long
 
Private Const SM_CXICON = 11
Private Const SM_CYICON = 12
 
Private Const SM_CXSMICON = 49
Private Const SM_CYSMICON = 50
   
Private Declare Function LoadImageAsString Lib "user32" Alias "LoadImageA" ( _
      ByVal hInst As Long, _
      ByVal lpsz As String, _
      ByVal uType As Long, _
      ByVal cxDesired As Long, _
      ByVal cyDesired As Long, _
      ByVal fuLoad As Long _
   ) As Long
   
Private Const LR_DEFAULTCOLOR = &H0
Private Const LR_MONOCHROME = &H1
Private Const LR_COLOR = &H2
Private Const LR_COPYRETURNORG = &H4
Private Const LR_COPYDELETEORG = &H8
Private Const LR_LOADFROMFILE = &H10
Private Const LR_LOADTRANSPARENT = &H20
Private Const LR_DEFAULTSIZE = &H40
Private Const LR_VGACOLOR = &H80
Private Const LR_LOADMAP3DCOLORS = &H1000
Private Const LR_CREATEDIBSECTION = &H2000
Private Const LR_COPYFROMRESOURCE = &H4000
Private Const LR_SHARED = &H8000&
 
Private Const IMAGE_ICON = 1
 
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" ( _
      ByVal hWnd As Long, ByVal wMsg As Long, _
      ByVal wParam As Long, ByVal lParam As Long _
   ) As Long
 
Private Const WM_SETICON = &H80
 
Private Const ICON_SMALL = 0
Private Const ICON_BIG = 1
 
Private Declare Function GetWindow Lib "user32" ( _
   ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Const GW_OWNER = 4
 
Public Sub SetIcon( _
      ByVal hWnd As Long, _
      ByVal sIconResName As String, _
      Optional ByVal bSetAsAppIcon As Boolean = True _
   )
Dim lhWndTop As Long
Dim lhWnd As Long
Dim cx As Long
Dim cy As Long
Dim hIconLarge As Long
Dim hIconSmall As Long
      
   If (bSetAsAppIcon) Then
      ' Find VB's hidden parent window:
      lhWnd = hWnd
      lhWndTop = lhWnd
      Do While Not (lhWnd = 0)
         lhWnd = GetWindow(lhWnd, GW_OWNER)
         If Not (lhWnd = 0) Then
            lhWndTop = lhWnd
         End If
      Loop
   End If
   
   cx = GetSystemMetrics(SM_CXICON)
   cy = GetSystemMetrics(SM_CYICON)
   hIconLarge = LoadImageAsString( _
         App.hInstance, sIconResName, _
         IMAGE_ICON, _
         cx, cy, _
         LR_SHARED)
   If (bSetAsAppIcon) Then
      SendMessageLong lhWndTop, WM_SETICON, ICON_BIG, hIconLarge
   End If
   SendMessageLong hWnd, WM_SETICON, ICON_BIG, hIconLarge
   
   cx = GetSystemMetrics(SM_CXSMICON)
   cy = GetSystemMetrics(SM_CYSMICON)
   hIconSmall = LoadImageAsString( _
         App.hInstance, sIconResName, _
         IMAGE_ICON, _
         cx, cy, _
         LR_SHARED)
   If (bSetAsAppIcon) Then
      SendMessageLong lhWndTop, WM_SETICON, ICON_SMALL, hIconSmall
   End If
   SendMessageLong hWnd, WM_SETICON, ICON_SMALL, hIconSmall
   
End Sub
Далее нужно в свойство загрузки формы добавить такой код:
Visual Basic
1
2
3
Private Sub Form_Load()
SetIcon Me.hWnd, "AAA", True
End Sub
Вот собственно и всё. Кстати, небольшое примечание: иконка появится только после компиляции проекта в exe.
7
16.02.2013, 11:12

Не по теме:

обязательно нужно добавить сюда

1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 19:45
Если честно, тут прям очень много когда. Почему нельзя было решить всего парой функций?

Visual Basic
1
2
ExtractIconEx App.Path & "\" & App.EXEName & ".exe", 0, 0, hIcon, 1
SendMessage hwnd, WM_SETICON, ICON_BIG, ByVal hIcon
Буквально эти две строчки кода загружают иконку на форму. В функции ExtractIconEx можно указывать номер ресурса загружаемого из EXE. Например вот:

Visual Basic
1
ExtractIconEx App.Path & "\" & App.EXEName & ".exe", 6, 0, hIcon, 1
Вот тут 6 например, по номерам там можно спокойно. Там по моему в порядковом номере.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
28.04.2023, 17:01
Вот новое готовое решение, которое я придумал. Гораздо меньше кода! Прям гораздо меньше!!! Я прям не понимаю вообще зачем так много кода там надо было...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option Explicit
 
Private Declare Function ExtractIconEx Lib "shell32" Alias "ExtractIconExW" (ByVal lpszFile As Long, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 
Private Const ICON_SMALL = 0
Private Const ICON_BIG = 1
Private Const WM_SETICON = &H80
 
Private Sub Form_Load()
    Dim hIconSmall As Long
    Dim hIconLarge As Long
    Dim IconPath As String
    
    IconPath = App.Path & "\" & App.EXEName & ".exe"
    
    ExtractIconEx StrPtr(IconPath), 0, hIconLarge, hIconSmall, 1 ' Загрузить и большую и маленькую иконку
    SendMessage hwnd, WM_SETICON, ICON_SMALL, ByVal hIconSmall ' Установить маленькую иконку
    SendMessage hwnd, WM_SETICON, ICON_BIG, ByVal hIconLarge ' Установить большую иконку
End Sub
Добавлено через 3 минуты
Цитата Сообщение от TYM Посмотреть сообщение
Решил данный вопрос следующим образом
Этот огромный кусок кода, как я заметил, был взят отсюда: http://www.vbstreets.ru/VB/Articles/66446.aspx
Это очень старая статья на сайте bstreets, прям очень старая. Там написано: Дата публикации статьи: 24.12.2006 14:35. И очень много ненужного кода прям.

Когда извлечение иконки решается всего одной строкой кода ExtractIconEx.
0
sleep
 Аватар для I can
4943 / 4625 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
28.04.2023, 17:12
Цитата Сообщение от HackerVlad Посмотреть сообщение
ExtractIconEx
В 2006-м может такой апишки вообще не было.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
28.04.2023, 17:19
Цитата Сообщение от I can Посмотреть сообщение
не было
Была, лучше бы мне лайк поставил.
0
sleep
 Аватар для I can
4943 / 4625 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
28.04.2023, 17:20
Шучу, конечно. Но причина какая-то есть. На vbstreets есть крутые перцы, особенно Хакер.

Добавлено через 43 секунды
Цитата Сообщение от HackerVlad Посмотреть сообщение
лучше бы мне лайк поставил
А мне это не надо никак, я на Бейсике не пишу.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
28.04.2023, 17:22
Цитата Сообщение от I can Посмотреть сообщение
А мне это не надо никак
Зато там где меня обсирали, лайк на то сообщение поставил.

Добавлено через 1 минуту
Вот Как отличить целые от дробных чисел?
0
sleep
 Аватар для I can
4943 / 4625 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
28.04.2023, 17:23
Цитата Сообщение от HackerVlad Посмотреть сообщение
лайк на то сообщение поставил
Там рабочий код, я его проверял, а ты был неправ.

Добавлено через 17 секунд
А здесь всё как-то мутно.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
28.04.2023, 17:47
Цитата Сообщение от I can Посмотреть сообщение
особенно Хакер
The Trick круче

Добавлено через 53 секунды
Цитата Сообщение от I can Посмотреть сообщение
я на Бейсике не пишу
А чего тогда сидишь на форуме бейсика и троллишь всех
0
sleep
 Аватар для I can
4943 / 4625 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
28.04.2023, 18:12
Цитата Сообщение от HackerVlad Посмотреть сообщение
троллишь всех
только тебя
Цитата Сообщение от HackerVlad Посмотреть сообщение
сидишь на форуме бейсика
я больше в Шарпе, тут только ты активность проявляешь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2023, 18:12
Помогаю со студенческими работами здесь

стандартные отчёты VB6 (DataReport) Как передать напрямую переменную из формы ?
стандартные отчёты VB6 (DataReport) Как передать напрямую переменную из формы ? Подскажите, как используя стандартные отчёты VB6...

Иконка формы
public partial class MainForm : Form { public MainForm() { InitializeComponent(); } ...

Иконка формы
Добрый день! Подскажите, пожалуйста. Есть файл 111.ico. Он находится в папке с программой "bin\Debug\111.ico" Мне нужно...

иконка для формы и трея
есть иконка. в ней размер 16*16 для окна формы как бы, и 256*256 для отображения в трее. иконку добавила в файл ресурсов. устанавливаю...

Иконка формы на панели задач
Всем привет! Я уже не раз так или иначе поднимал данную тему. У меня практически все получилось. Вот только есть один нюанс. Начну по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru