Страница: 1 |
Страница: 1 |
Вопрос: Мне бы манифест добавит к проекту VB6.
Добавлено: 12.07.04 01:58
Автор вопроса: NorN | Web-сайт:
Мне бы манифест добавит к проекту VB6. Если кто знает, как сделать это, чтобы программа нормально работала и отображала стиль WinXP, помогите.
Вообще-то получается это дело если впихнут манифест, ну или положить его рядом с exe файлам, и включить рижим совместимости с Windows 98,ME, а вот как без этого обойтись, как сделать правильно и корректно?
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 12.07.04 02:07
На сколько мне известно - никак, если конечно же только не воспользоваться редактором ресурсов от VC
Номер ответа: 2
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #2
Добавлено: 12.07.04 03:13
С манифестом надо поосторожнее: бывает, если установлены какие-либо темы на ХР (например из пакета ASUS), некоторые стандартные контролы могут выглядеть очень непривлекательно Сам нарывался на такое. Часто этим грешат радиобуттоны, чекбоксы и менюшки. А вообще, если хочется красоты, то понастоящему привлекательный дизайн надо рисовать вручную, не полагаясь на всякие манифесты. имхо.
Номер ответа: 3
Автор ответа:
kmk
Вопросов: 16
Ответов: 18
Профиль | | #3
Добавлено: 12.07.04 08:25
Привет!
Вот пример
'В модуле
Function XPStyle(Optional AutoRestart As Boolean = True, Optional CreateNew As Boolean) As Boolean
InitCommonControls
On Error Resume Next
Dim XML As String
Dim ManifestCheck As String
Dim strManifest As String
Dim FreeFileNo As Integer
If AutoRestart = True Then CreateNew = False
XML = ("<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?> " & vbCrLf & "<assembly " & vbCrLf & " xmlns=""urn:schemas-microsoft-com:asm.v1"" " & vbCrLf & " manifestVersion=""1.0"">" & vbCrLf & "<assemblyIdentity " & vbCrLf & " processorArchitecture=""x86"" " & vbCrLf & " version=""EXEVERSION""" & vbCrLf & " type=""win32""" & vbCrLf & " name=""EXENAME""/>" & vbCrLf & " <description>EXEDESCRIBTION</description>" & vbCrLf & " <dependency>" & vbCrLf & " <dependentAssembly>" & vbCrLf & " <assemblyIdentity" & vbCrLf & " type=""win32""" & vbCrLf & " name=""Microsoft.Windows.Common-Controls""" & vbCrLf & " version=""6.0.0.0""" & vbCrLf & " publicKeyToken=""6595b64144ccf1df""" & vbCrLf & " language=""*""" & vbCrLf & " processorArchitecture=""x86""/>" & vbCrLf & " </dependentAssembly>" & vbCrLf & " </dependency>" & vbCrLf & "</assembly>" & vbCrLf & ""
strManifest = App.Path & "\" & App.EXEName & ".exe.manifest" 'set the name of the manifest
ManifestCheck = Dir(strManifest, vbNormal + vbSystem + vbHidden + vbReadOnly + vbArchive) 'check the app manifest file.
If ManifestCheck = "" Or CreateNew = True Then 'if not found.. make a new one
XML = Replace(XML, "EXENAME", App.EXEName & ".exe" 'Replaces the string "EXENAME" with the program's exe file name.
XML = Replace(XML, "EXEVERSION", App.Major & "." & App.Minor & "." & App.Revision & ".0" 'Replaces the "EXEVERSION" string.
XML = Replace(XML, "EXEDESCRIBTION", App.FileDescription) 'Replaces the app Describtion.
FreeFileNo = FreeFile 'get the next avilabel file
If ManifestCheck <> "" Then
SetAttr strManifest, vbNormal
Kill strManifest
End If
Open strManifest For Binary As #(FreeFileNo) 'open the file
Put #(FreeFileNo), , XML 'uses 'put' to set the file content.. note that 'put' (binary mode) is much faster than 'print'(output mode)
Close #(FreeFileNo) 'close the file.
SetAttr strManifest, vbHidden + vbSystem
If ManifestCheck = "" Then
XPStyle = False 'return false.. this means that the file does not exist
Else
XPStyle = True
End If
If AutoRestart = True Then 'if in automode (default), the program will restart.
Shell App.Path & "\" & App.EXEName & ".exe " & Command$, vbNormalFocus 'restart the program and bypass command line parameters (if any)
End 'end the session.
End If
Else 'the manifest file exists.
XPStyle = True 'return true.
End If
End Function
'на форме прописать
Private Sub Form_Initialize()
XPStyle True, True
App.Title = "Имя Приложения"
End Sub
после создания ехе работает как в ХР
Номер ответа: 4
Автор ответа:
kmk
Вопросов: 16
Ответов: 18
Профиль | | #4
Добавлено: 12.07.04 08:31
Збыл еще набо в модуле прописать
Declare Function InitCommonControls Lib "Comctl32.dll" () As Long
Номер ответа: 5
Автор ответа:
kmk
Вопросов: 16
Ответов: 18
Профиль | | #5
Добавлено: 12.07.04 08:33
И опять забыл. Тяжко после выходных))
В модуле еще
Sub cMain()
InitCommonControls
XPStyle
End Sub
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 12.07.04 10:46
2 kmk, по-моему он уже знает как использовать манифест, он попросту хочет узнать как это сделать без выкрутасов, редактирования exe файлов или .manifest'ов...
Номер ответа: 7
Автор ответа:
NorN
Вопросов: 7
Ответов: 15
Web-сайт:
Профиль | | #7
Добавлено: 12.07.04 11:24
Не, всё правильно "Он" знает , только понимаете чего, в VB6 у меня не проходит как в VB7 добавить ресурс. Видимо VB6 стара для этого . Попробую как рекомендовал КМК.
Номер ответа: 8
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #8
Добавлено: 12.07.04 12:28
Я для себя сделал "шаблон" ресурса, где есть только ресурс с номером 24 (это и есть манифест). А потом уже в vb6 обычным образом подключаю этот ресурc (+ InitCommonControls) и добавляю в ресурс остальные ресурсы (простите за каламбур) . Если надо могу выслать "шаблон" - не надо будет делать самому.
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 13.07.04 02:41
А я для целей использую PE Explorer..
Он манифест в ехе зашивает.. Проблем пока не было.
Номер ответа: 10
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #10
Добавлено: 13.07.04 02:52
А я вообще не зашиваю в свои проекты манифест, и вообще не пользуюсь темами )
Номер ответа: 11
Автор ответа:
Matrix
Вопросов: 34
Ответов: 62
Web-сайт:
Профиль | | #11
Добавлено: 13.07.04 15:22
а чего как сложно-то??
Я делаю всегда так:
1) Использую common controls 5.0
2) В General формы ставлю Private Declare Function InitCommonControls Lib "Comctl32.dll" () As Long
3) В Form_Initialize() пишу Dim x As Long
x = InitCommonControls
4) Компилирую, кладу в папку манифаест
5) Наслаждаюсь
Номер ответа: 12
Автор ответа:
Matrix
Вопросов: 34
Ответов: 62
Web-сайт:
Профиль | | #12
Добавлено: 13.07.04 15:23
а чего как сложно-то??
Я делаю всегда так:
1) Использую common controls 5.0
2) В General формы ставлю Private Declare Function InitCommonControls Lib "Comctl32.dll" () As Long
3) В Form_Initialize() пишу Dim x As Long
x = InitCommonControls
4) Компилирую, кладу в папку манифаест
5) Наслаждаюсь