Иконки....

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

Иконки....

Сообщение vovchikxxx » 17.04.2003 (Чт) 19:04

Можно ли программно поменять иконку у файла своего расширения

moderator
Модератор
Модератор
 
Сообщения: 1896
Зарегистрирован: 10.12.2001 (Пн) 18:11
Откуда: Украина, Харьков

Сообщение moderator » 17.04.2003 (Чт) 21:59

А что, кроме программного способа есть еще и аппаратный? :wink:

Сделать это очень просто - нужно ассоциировать расширение с твоей программой. Как это сделать недавно обсуждалось.
Модератор
http://www.vbstreets.ru / moderator@vbstreets.ru

... Почетные награды: [*], [+], [!]. Все еще впереди...

vovchikxxx
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 22.01.2003 (Ср) 19:32
Откуда: Сергиев Посад

Сообщение vovchikxxx » 17.04.2003 (Чт) 22:02

Да это я знаю!
Я хочу чтобы каждому отдельному файлу присваивалась своя иконка
выбранная...

Пхоже так сделать нельзя никак... :-(((((

Powersoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 17.04.2003 (Чт) 21:23

Сообщение Powersoft » 17.04.2003 (Чт) 22:20

Это делается в Registry в секции HKEY_CLASSES_ROOT. Вот модуль для Registry:

Option Explicit
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal HKEY As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String) As Long
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal HKEY As Long, ByVal lpValueName As String) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Public Const REG_SZ = 1
Public Const ERROR_SUCCESS = 0&
Public Enum MAINKEY
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_CONFIG = &H80000005
HKEY_CURRENT_USER = &H80000001
HKEY_DYN_DATA = &H80000006
HKEY_LOCAL_MACHINE = &H80000002
HKEY_PERFORMANCE_DATA = &H80000004
HKEY_USERS = &H80000003
End Enum

Public Function GetString(HKEY As MAINKEY, strPath As String, strValue As String)
Dim keyhand As Long, datatype As Long, lValueType As Long, lResult As Long
Dim strBuf As String, lDataBufSize As Long, intZeroPos As Integer, r As Long
r = RegOpenKey(HKEY, strPath, keyhand)
lResult = RegQueryValueEx(keyhand, strValue, 0&, lValueType, ByVal 0&, lDataBufSize)
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, " ")
lResult = RegQueryValueEx(keyhand, strValue, 0&, 0&, ByVal strBuf, lDataBufSize)
If lResult = ERROR_SUCCESS Then
intZeroPos = InStr(strBuf, Chr$(0))
If intZeroPos > 0 Then
GetString = Left$(strBuf, intZeroPos - 1)
Else
GetString = strBuf
End If
End If
End If
RegCloseKey keyhand
End Function

Public Function SaveString(HKEY As MAINKEY, strPath As String, strValue As String, strdata As String)
Dim keyhand As Long, r As Long
r = RegCreateKey(HKEY, strPath, keyhand)
r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata))
r = RegCloseKey(keyhand)
End Function

Public Function CreateKey(HKEY As MAINKEY, strPath As String)
Dim keyhand&, r As Long
r = RegCreateKey(HKEY, strPath, keyhand&)
r = RegCloseKey(keyhand&)
End Function

Public Function DeleteKey(ByVal HKEY As MAINKEY, ByVal strKey As String)
Dim r As Long
r = RegDeleteKey(HKEY, strKey)
End Function

Public Function DeleteString(ByVal HKEY As MAINKEY, ByVal strPath As String, ByVal strValue As String)
Dim keyhand As Long, r As Long
r = RegOpenKey(HKEY, strPath, keyhand)
r = RegDeleteValue(keyhand, strValue)
r = RegCloseKey(keyhand)
End Function

vovchikxxx
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 22.01.2003 (Ср) 19:32
Откуда: Сергиев Посад

Сообщение vovchikxxx » 18.04.2003 (Пт) 0:18

Почему меня никто не понимает??

Существует два файла и и набор иконок!!!

Выбираю один из этих файлов!!
И присваиваю этому файлу выбранную иконку из набора!!
Выбираю другой файл и присваиваю ему другую выбранную иконку из набора!!!

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 18.04.2003 (Пт) 0:49

Если я правильно понял то тебе надо нажать на форму , с права откроется Properties-Form1 там выбери Icon и там укажи путь до иконки! :!:
Max!

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 18.04.2003 (Пт) 14:56

Max! писал(а):Если я правильно понял то тебе надо нажать на форму , с права откроется Properties-Form1 там выбери Icon и там укажи путь до иконки! :!:


Макс, ты меня не перестаешь удивлять :)

Он же имеет ввиду менять картинки ЛЮБЫМ файлам! А не только своей программе. :lol:

А если серьезно, то помоему иконки менять можно только эксешникам используя их ресурсы.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 18.04.2003 (Пт) 15:38

2 vovchikxxx

Тебя никто не понимает потому что ты так вопросы задаешь.



Сказано тебе по русски: в реестре можно сопоставить иконку с определенным типом файлов. А если тебе надо поменять иконку у самомго файла - то это возхможно тольок если файл EXE, DLL или OCX.



Либо тебе придется создавать ярлык через:



WshShell = CreateObject("WScript.Shell")

strDesktop = WshShell.SpecialFolders("Desktop")

oUrlLink = WshShell.CreateShortcut(strDesktop+"\Microsoft Web Site.URL")

oUrlLink.TargetPath = "http://www.microsoft.com"

oUrlLink.Save



и ему уже цеплять иконку.

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 18.04.2003 (Пт) 17:28

RayShade писал(а):2 vovchikxxx
А если тебе надо поменять иконку у самомго файла - то это возхможно тольок если файл EXE, DLL или OCX.


И ещё у Ico и Cur :)

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 18.04.2003 (Пт) 17:34

Нет. ICO и СUR иконки сами по себе :) . Просто у перечисленных мной файлов может быть прищит ресур с кучей иконок, одна из которых может быть обозначена как default.

vovchikxxx
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 22.01.2003 (Ср) 19:32
Откуда: Сергиев Посад

Сообщение vovchikxxx » 18.04.2003 (Пт) 19:17

Спасибо Всем!!!
Я в принципе был почти уверен в том что иконку поменять нельзя

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 18.04.2003 (Пт) 19:24

МОЖНО!

Нужно создать расширение оболочки explorer'а, которое будет определать иконки для таких то типов файла. Т.е. проверять какой-либо параметр для файлов такого-то типа и выводить иконку для файла в зависимости от этого параметра. Например размер - в таких-то пределах одна иконка, в других пределах другая.

Я как-то объяснял человеку, как это сделать, но сейчас совершенно не в состоянии повторяться. Но я нашел великолепную статью: http://www.codeproject.com/shell/shellextguide9.asp - написано великолепно! Под С++ правда, но, думаю, разберешься. Будет очень нужно, могу помочь написать на C++.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

vovchikxxx
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 22.01.2003 (Ср) 19:32
Откуда: Сергиев Посад

Сообщение vovchikxxx » 18.04.2003 (Пт) 20:37

А вот с Си у меня беда!


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

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

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

    TopList