Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Visual Basic

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2, средняя оценка - 5.00
Антихакер32
Заблокирован
26.08.2014, 15:06 #121
Модификация мануала от The Trick

Цитата Сообщение от The trick Посмотреть сообщение
Использование ActiveX библиотек без регистрации в VB6
Разработал модуль, который позволяет очень просто работать с незарегистрированными ActiveX библиотеками. В модуле содержится 2 функции:
Цитата Сообщение от The trick Посмотреть сообщение
Использование ActiveX контролов без регистрации в реестре.
Разработал модуль с помощью которого можно работать с ActiveX контролами незарегистрированными в реестре, а также реализована поддержка событий. В нем содержится функция ControlsAdd (аналогия метода формы Controls.Add), с помощью которой можно добавлять контролы используя путь к библиотеке и CLSID контрола. Модуль особо не тестировался, поэтому что-то может не заработать, но ActiveX контролы, созданные в VB, а также несколько стандартных библиотек работали нормально. В качестве примера, я создал 2 тестовые библиотеки и главную программу, в которой используются контролы из этих библиотек.
Многое меня не устраивало в его кодах, а именно
откуда брать CLSID, с потолка ? я там использую кое что по своему
и к чему столько сложностей для использования библиотек,
я решил объеденить все в один класс, а также разделил
на два проекта, где в первом проекте только тэсты
а во втором по суте подготовленная к компиляции ActiveX - библиотека

вот собственно класс этой библиотеки..
Кликните здесь для просмотра всего текста
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
Option Explicit
'
' © Кривоус Анатолий Анатольевич (The trick), 2014
' Модифицированно Антихакер32 (CyberForum.ru)
' Класс, для использования DLL и OCX без регистрации
'
Private Const CLSID_TLI As String = "{8B21775E-717D-11CE-AB5B-D41203C10000}"
Dim oTLI As Object, cTLI As GUID, sTLI As String
Dim mObject As Object, mPath$
Const Def_MiscStatus = 131473
Dim CollPaths As New Collection, NumColl&
Dim CollObj As New Collection
 
Private Sub CollAdd(Obj As Object, Path$)
    On Error Resume Next
    If Obj Is Nothing Then Exit Sub
    CollObj.Add Obj, Obj.Name
    CollPaths.Add Path, Path
End Sub
 
Public Function CreateObject_Int(ByVal Path$, Optional Interface) As Object
    'Использование библиотеки без регистрации
    '
    Dim sClsID$, cID As GUID, ProgID$, Item&, bEx As Boolean
    Dim TLI As Object, CC As Object
    Set TLI = oTLI.TypeLibInfoFromFile(Path)
    If IsMissing(Interface) Then
 
        For Each CC In TLI.CoClasses
            bEx = True: Exit For
        Next
    ElseIf IsNumeric(Interface) Then
 
        For Each CC In TLI.CoClasses
            Item = Item + 1: If Item = Interface Then bEx = True: Exit For
        Next
        If CC Is Nothing Then Err.Raise 1, , "Нет в коллекции CoClasses"
    ElseIf InStr(1, Interface, "{") Then
        Interface = Trim(Interface)
 
        For Each CC In TLI.CoClasses
            If Interface = CC.GUID Then bEx = True: Exit For
        Next
    Else: Interface = Trim(Interface)
        For Each CC In TLI.CoClasses
            If StrComp(Interface, CC.Name, 1) = 0 Then bEx = True: Exit For
        Next
    End If
    If bEx Then
        sClsID = CC.GUID
        CLSIDFromString StrPtr(sClsID), cID
        Set CreateObject_Int = CreateObjectEx(Path, cID)
        CollAdd CreateObject_Int, Path
    End If
 
End Function
 
Public Function ControlsAdd_Int(ByVal Path$, Parent As Object, Optional ByVal Interface, Optional _
ByVal Name$, Optional Container As Object, Optional LicensesKey$) As Object
    Dim sClsID$, cID As GUID, ProgID$, i&, Item&, bEx As Boolean
    Dim TLI As Object, CC As Object
    Set TLI = oTLI.TypeLibInfoFromFile(Path)
 
    If IsMissing(Interface) Then
        'Проверяются в коллекции CoClasses только контроллы
        '
        For Each CC In TLI.CoClasses
            If Not (CC.DefaultEventInterface Is Nothing) Then bEx = True: Exit For
        Next
    ElseIf IsNumeric(Interface) Then
 
        For Each CC In TLI.CoClasses
            'Если в Interface стоит номер,
            'то присвоение, по его очередности, в числе контроллов
            '
            If Not (CC.DefaultEventInterface Is Nothing) Then
                Item = Item + 1: If Item = Interface Then bEx = True: Exit For
            End If
        Next
        If CC Is Nothing Then Err.Raise 1, , "Нет в коллекции CoClasses"
    ElseIf InStr(1, Interface, "{") Then
        Interface = Trim(Interface)
 
        For Each CC In TLI.CoClasses
 
            If Not (CC.DefaultEventInterface Is Nothing) Then
                If Interface = CC.GUID Then bEx = True: Exit For
            End If
        Next
    Else: Interface = Trim(Interface)
 
        For Each CC In TLI.CoClasses
 
            If Not (CC.DefaultEventInterface Is Nothing) Then
                If StrComp(Interface, CC.Name, 1) = 0 Then bEx = True: Exit For
            End If
        Next
    End If
 
    If bEx Then
        sClsID = CC.GUID
        ProgID = TLI.Name & "." & CC.Name
 
        If Len(Name) = 0 Then
            Do: i = i + 1
                If Not ObjExists(Parent, CC.Name & i) Then Exit Do
            Loop
            Name = CC.Name & i
        ElseIf ObjExists(Parent, Name) Then
            Err.Raise 1, , "Объект с именем: " & Name & " существует"
        End If
 
        If Not LicensesExists(ProgID) Then
            gLicensesKey = LicensesKey
            CLSIDFromString StrPtr(sClsID), cID
            Set ControlsAdd_Int = ControlsAdd(Path, cID, ProgID, Def_MiscStatus, Parent, Name)
            CollAdd ControlsAdd_Int, Path
        Else
            Set ControlsAdd_Int = Parent.Controls.Add(ProgID, Name, IIf(Container Is Nothing, Parent, Container))
        End If
    End If
End Function
 
Private Function LicensesExists(ProgID$) As Boolean
    On Error Resume Next
 
    If IsError(Licenses(ProgID).LicenseKey) Then
    Else: LicensesExists = True
    End If
End Function
 
Private Function ObjExists(Parent As Object, Name$) As Boolean
    On Error Resume Next
 
    If IsError(Parent.Controls(Name)) Then
    Else: ObjExists = True
    End If
End Function
 
Public Function GetTypeLibInfoFromFile(ByVal Path$) As Object
    Set GetTypeLibInfoFromFile = oTLI.TypeLibInfoFromFile(Path)
End Function
 
Private Sub Class_Initialize()
    sTLI = App.Path & "\TLBINF32.DLL"
    CLSIDFromString StrPtr(CLSID_TLI), cTLI
    Set oTLI = CreateObjectEx(sTLI, cTLI)
End Sub
 
Private Sub Class_Terminate()
    Dim v
    Set oTLI = Nothing
    Call UnloadLibrary(sTLI) 'Выгружаем TLI
    '================
    For Each v In CollObj: Set v = Nothing: Next
    'Выгружаем библиотеки
    For Each v In CollPaths: Call UnloadLibrary(CStr(v)): Next
End Sub



и картинка, по традиции..


Добавлено через 2 минуты
..Да чуть не забыл,
вот архив со всеми исходниками

DLL-OCX БезРег.rar (90.5 Кб)


Добавлено через 4 минуты
Прощще-же теперь это использовать ?

Visual Basic
1
2
3
    Set Obj = myClass.CreateObject_Int(App.Path & "\TestDLL\TrickUnregDllTest.dll")
    Obj.Text = "Привет пиплы ! (это текст из библиотеки)"
    MsgBox Obj.Text
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2014, 15:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Готовые решения и полезные коды на Visual Basic 6.0 (Visual Basic):

Продам готовые коды и решения на Visual Basic за 400 рублей - Visual Basic
душу продаю:cry: Продам коды исходные на VB !!10 лет копил за 400р !!размер тока кодов 312метров там есть все ! мыло контакты удалены....

Коды на Visual Basic - Visual Basic
Ребята всем привет,я начел изучать "Visual Basic"! Очень буду благодарен за коды по этому языку, очень интиресный язык)))! Бросайте сюда...

Вывод решения вместо Immediate в textbox (visual basic 6.0) - Visual Basic
программа выводит решение в Immediate а я хочу разместить на форме text1 и что бы решение выводилось туда ,менял код менял не че не...

Вычисление значений функции двух переменных в Visual Basic - Visual Basic - Visual Basic
Помогите пожалуйста! В среде VB написать программу вычисления значений функции двух переменных. Ориентировочный вид окна программы и...

Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net ? - Visual Basic
Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net

Visual Basic Используя условный оператор if…then, if…then…else или if…then…elseif, разработайте проект для решения следующих заданий: - Visual Basic
Пройдет ли кирпич со сторонами а, b и с сквозь прямоугольное отверстие со сторонами p и q? Стороны отверстия должны быть параллельны граням...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
The trick
Модератор
7195 / 2427 / 741
Регистрация: 22.02.2013
Сообщений: 3,476
Записей в блоге: 74
03.09.2014, 05:02 #122
TrickControls
Всем привет.
Здесь я буду собирать библиотеку контролов (OCX) вместе с исходными кодами по мере свободного времени.
4
Миниатюры
Готовые решения и полезные коды на Visual Basic 6.0   Готовые решения и полезные коды на Visual Basic 6.0   Готовые решения и полезные коды на Visual Basic 6.0  

The trick
Модератор
7195 / 2427 / 741
Регистрация: 22.02.2013
Сообщений: 3,476
Записей в блоге: 74
07.09.2014, 00:57 #123
Класс для асинхронного ожидания объектов ядра

Разработал класс для асинхронного ожидания объектов ядра. Класс генерирует событие при установке объекта в сигнальное состояние или при таймауте. Класс имеет 3 метода vbWaitForSingleObject, vbWaitForMultipleObjects, IsActive, Abort. Первые два аналогичны вызову одноименных API функций без префикса "vb" и запускают ожидание объекта в новом потоке. Методы завершаются немедленно. При завершении функций в новом потоке генерируется событие OnWait, в параметрах которого содержится описатель объекта и возвращенное значение. При удачном завершении методы возвращают True, иначе False, также генерируются исключения.

Ссылка.
4
Миниатюры
Готовые решения и полезные коды на Visual Basic 6.0  
The trick
Модератор
7195 / 2427 / 741
Регистрация: 22.02.2013
Сообщений: 3,476
Записей в блоге: 74
29.09.2014, 00:00 #124
DirectX слоеное окно

По просьбе Pro_grammer'а написал пример слоеного Direct3D окна. В окне отображается 3D модель, используется мультитекстурирование, в качестве отражения используется интерактивный скриншот экрана. Используется DirectX8.
Для работы нужна библиотека dx8vb.dll

Ссылка.

7
Yury Komar
1988 / 1897 / 298
Регистрация: 27.01.2014
Сообщений: 3,364
Завершенные тесты: 1
09.10.2014, 17:28 #125
yk-ColorSet
Как известно, если вшить манифест в VB6.exe для отображения стиля контролов Windows, то в оболочке Visual Basic пропадает отображение стандартной палитры цветов, в окне параметров\свойств выбранного элемента.

Чтобы не держать в готове все номера цветов, я решил написать маленькую палитру, точную копию той, что в Visual Basic 6.0, плюс реализовал возможность управления блоком своей свобственной палитры, с тем чтобы легко добавлять и удалять свои цвета...
Плюс ко всему, спасибо хочу сказать The trick, реализовал возможность сохранения своей палитры прямо в ресурсы EXEшника, теперь ваша палитра никогда не потеряется при перемещении исполняемого файла...
Программа не требует никаких дополнительных библиотек, всего одни файл...
При запуске помещается в Системный Трей и вызывается оттуда нажатием на иконку...

Лично для меня очень помогает, надеюсь будет полезна и другим ребятам...

P.S. тестировалась только на Windows 7 Ultimate x64. О каких либо замечаниях при тестировании в других версиях - буду рад услышать.
В архив добавил и исходник, но, небыло времени его оформить красиво, с комментариями, за что прошу прощения.
3
Миниатюры
Готовые решения и полезные коды на Visual Basic 6.0  
Вложения
Тип файла: zip yk-ColorSet by Yury Komar.zip (79.7 Кб, 38 просмотров)
Антихакер32
Заблокирован
09.10.2014, 18:12 #126
Похвально видеть ваши старания, но..
есть еще приложение
Add-in VB Style Code ✰
Кликните здесь для просмотра всего текста

которое исправляет подобные ньюансы связанные с манифестом и палитрой цветов

Вот, как выглядет моя среда разработки, с манифестом:
Кликните здесь для просмотра всего текста
1
Антихакер32
Заблокирован
13.10.2014, 01:22 #127
Сохранение свойств объектов в файле ✰

Существует возможность сохранять настройки в реестре,
для этого есть такие методы:
SaveSetting.. // GetSetting AppName, Section, Кеу, [Value]

недостатки в том, что можно сильно засорить реестр, если не заботиться
об правильном удалении настроек, и тд

я же решил очень упростить возможность сохранения и приминения настроек
например можно просто в событии загрузки формы написать пару строчек

Visual Basic
1
2
3
Private Sub Form_Load()
    SettingsAdd Me, "left", "top"
    LoadSettingsINI
а в событии выхода написать одну инструкцию
Visual Basic
1
2
3
4
Private Sub Form_Unload(Cancel As Integer)
    SaveSettingsINI
    End
End Sub
дело в том, что при загрузке, данные храняться в коллекции, и для сохранения,
их уже указывать необязательно..
совпадений по именам не будет так-как, ключи с именем контролов, сохраняются с именем
родителя (разделяясь через точку) а так-же, сохраняется индекс контрола( или формы)...
вот пример, как в файле это выглядит...
Кликните здесь для просмотра всего текста
[Form1]
left=2220
top=1200
[Form1.Check1]
value=1
[Form2]
left=4515
top=3450
Width=5685
Height=4485
[Form2.HScroll1]
value=20370
[Form1.Option1_0]
value=True
[Form1.Option1_1]
value=False


и таким образом, все настройки, храняться компактно,
и код выглядит тоже очень компактно, решил полдня потратить на эту портянку,
все там продумал, и в дальнейшем можно этот модуль использовать для любых нужд

порядок выполнения комманд должен быть таким:
  • SettingsAdd (создаёт коллекцию с настройками)
  • LoadSettingsINI (загружает файл и/или конфигурирует и загружает)
  • SaveSettingsINI (сохраняет измененные настройки)

А что если я не хочу сохранять все свойства из интерфейса
а нужны только Value или Caption
к тому-же в моём примере, не используются сторонние библиотеки
и нет необходимости их подключать

кстати, еще немного улучшил свой алгоритм, теперь существует возможность
записывать целиком массив контролов (форм)

вот как это в стартовой форме
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Form_Load()
    'Добавляем в коллекцию имена свойств для загрузки/сохранения
    SettingsAdd Me, "left", "top"
    SettingsAdd Check1, "value"
    SettingsAdd Form2, "left", "top", "Width", "Height"
    SettingsAdd Form2.HScroll1, "value"
    'Можно записать так (элемент из массива)
'    SettingsAdd Option1(0), "value"
'    SettingsAdd Option1(1), "value"
    'А можно и так, тогда сохраниться вся группа объектов из массива
    SettingsAdd Option1, "value"
 
    LoadSettingsINI
End Sub




Вот модуль с названием mSettings:
Кликните здесь для просмотра всего текста

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
Option Explicit
'
'Модуль для сохранения (или применения) настроек в файле
'первая в программе должна выполнится SettingsAdd
'при загрузке и при сохранении настроек, будут обращения по именам из коллекции
'© Антихакер32 (CyberForum.ru).
'
Const q$ = "[", w$ = "]", rv$ = "=", t = ".", rm = "_"
Const prompt = _
"Данные для применения настроек пусты" & vbCrLf & _
"Необходимо указать с помощью SettingsAdd", ErrNum = 101
Const m_Def_FileName = "Settings.ini"
Dim m_FileName$, m_fso As Object
Dim f&, j$(), s$, u&, v, Key$, mApply As Boolean
Dim Co As New Collection, coDat As New Collection
 
Public Sub SettingsAdd(Obj As Object, ParamArray arg())
    'Необходимо указать форму или контрол, и имена свойств для сохранения
    'напимер: SettingsAdd Form1, "left","top"
    Dim SingleObject As Object, count&
    v = arg: ReDim Preserve v(UBound(v) + 2)
    If UBound(v) = 1 Or Obj Is Nothing Then Exit Sub '>>Выход
    On Error Resume Next
    If Not TypeName(Obj) = "Object" Then
        Set SingleObject = Obj: GoTo 101
    Else
        For Each SingleObject In Obj
101
            Key = GetKey(SingleObject): If KeyExists(Key) Then Co.Remove (Key)
            Set v(UBound(v) - 1) = SingleObject: v(UBound(v)) = Key: Co.Add v, Key
        Next
    End If
End Sub
 
Private Function KeyExists(Key$) As Boolean
    'Возвращает утверждение о наличии ключа
    On Error Resume Next
    KeyExists = Not IsError(Co(Key))
End Function
 
Private Function GetFso() As Object
    If m_fso Is Nothing Then Set m_fso = CreateObject("scripting.FileSystemObject")
    Set GetFso = m_fso
End Function
 
Private Function GetKey(Obj As Object)
    On Error Resume Next
    GetKey = Obj.Name: GetKey = Obj.Parent.Name & t & GetKey: GetKey = GetKey & rm & Obj.Index
End Function
 
Public Sub ApplySettings(Obj As Object)
    'Применение настроек для одного указанного объекта
    If coDat.count = 0 Then mApply = True: LoadSettingsINI: mApply = False
    On Error GoTo ERRR
    v = Co(GetKey(Obj)): u = UBound(v)
    For f = 0 To u - 2: CallByName v(u - 1), v(f), VbLet, coDat(v(u) & t & v(f)): Next
ERRR:
End Sub
 
Public Sub LoadSettingsINI(Optional FileName$ = m_Def_FileName)
    'Загрузка и приминение всех настроек
    'Арг. имя файла (по умолчанию "Settings.ini")
    Dim f2&, j1$(), j2$(), j3$()
    If Co.count = 0 Then Err.Raise ErrNum, , prompt
    On Error Resume Next
    m_FileName = App.Path & "\" & FileName
    If Not GetFso.FileExists(m_FileName) Then SaveSettingsINI
    s = GetFso.OpenTextFile(m_FileName).ReadAll
    j = Split(s, q)
    For f = 1 To UBound(j)
        j1 = Split(j(f), w)
        j2 = Split(j1(1), vbCrLf)
        For f2 = 1 To UBound(j2) - 1
            j3 = Split(j2(f2), rv)
            coDat.Add j3(1), j1(0) & t & j3(0)
    Next: Next
    If mApply Then Exit Sub '>>Если вызванно процедурой ApplySettings
    For Each v In Co: u = UBound(v) '---------Применение настроек
        For f = 0 To u - 2
            CallByName v(u - 1), v(f), VbLet, coDat(v(u) & t & v(f))
    Next: Next
End Sub
 
Public Sub SaveSettingsINI()
    'Сохранение настроек
    If Co.count = 0 Then Err.Raise ErrNum, , prompt
    If Len(m_FileName) = 0 Then m_FileName = App.Path & "\" & m_Def_FileName
    With GetFso.CreateTextFile(m_FileName)
        On Error Resume Next
        For Each v In Co
            u = UBound(v)
            v(u - 1).WindowState = 0
            .WriteLine q & v(u) & w
            For f = 0 To u - 2
                 .WriteLine v(f) & rv & CStr(CallByName(v(u - 1), v(f), VbGet))
    Next: Next: End With
End Sub
0
Вложения
Тип файла: rar Демонстрация.rar (3.6 Кб, 37 просмотров)
Тип файла: rar Work INI.rar (11.5 Кб, 31 просмотров)
Catstail
Модератор
22615 / 10976 / 1779
Регистрация: 12.02.2012
Сообщений: 18,118
13.10.2014, 17:22 #128
Сохранять объекты - дело правильное... А вот подход (при котором пользователь программы должен свойства перечислять) - несколько напрягает. Мне кажется, гораздо правильнее дать интерфейс с двумя методами: сохранить_объект(объект,имя_файла) и восстановить_объекты(имя_файла). Ведь все объекты VB - это COM-объекты. А у COM-объекта можно получить всю коллекцию свойств без утомительного перечисления. Примерно вот так:

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
Sub SaveObj(O As Object, fname As String)
Dim appTLI As TLI.TLIApplication
Dim inte   As TLI.InterfaceInfo
    fo% = FreeFile
    Open fname For Append As #fo%
    Print #fo%, "[Object:"; CStr(VarPtr(O)); "]"
    Set appTLI = New TLIApplication
    Set inte = appTLI.InterfaceInfoFromObject(O) '::: ссылка на интерфейс
    n% = inte.Members.Count
    For ii% = 1 To n%
        nam$ = inte.Members(ii%).Name
        Typ% = inte.Members(ii%).InvokeKind
        Res% = inte.Members(ii%).ReturnType.VarType
        If Typ% = 2 Then '::: Свойство (Property Get)
           vv = CallByName(O, nam$, VbGet) '::: значение свойства
           If VarType(vv) = 8204 Then '::: массив
              b% = LBound(vv, 1)
              e% = UBound(vv, 1)
              txt$ = "("
              For j% = b% To e%
                  txt$ = txt$ + CStr(vv(j%)) + ","
              Next j%
              txt$ = txt$ + ")"
           Else
              txt$ = CStr(vv)
           End If
           Select Case (Res%)
                  Case 2, 3, 12
                     Print #fo%, nam$; "="; txt$
           End Select
        End If
    Next ii%
    Print #fo%, "[/Object]"
    Close #fo%
End Sub
 
Sub Test()  '::: Проверка
Dim O As clsO
    Set O = New clsO
    O.ma = 123
    O.mb = 67654
    O.mc = Array(1, 2, 3, 4)
    HomeDir$ = ThisWorkbook.Path
    SaveObj O, HomeDir$ + "\O_save.txt"
    MsgBox "OK"
End Sub
 
'::: Тестовый класс
 
Private maLoc As Integer
Private mbLoc As Long
Private mCLoc As Variant
 
Public Property Get ma() As Integer
       ma = maLoc
End Property
 
Public Property Let ma(a As Integer)
       maLoc = a
End Property
 
Public Property Get mb() As Long
       mb = mbLoc
End Property
 
Public Property Let mb(a As Long)
       mbLoc = a
End Property
 
Public Property Get mc() As Variant
       mc = mCLoc
End Property
 
Public Property Let mc(a As Variant)
       mCLoc = a
End Property
 
Public Sub Show()
       Debug.Print "OK!"
End Sub
Это, разумеется, только набросок...
3
Dragokas
Эксперт WindowsАвтор FAQ
15932 / 6747 / 816
Регистрация: 25.12.2011
Сообщений: 10,453
Записей в блоге: 16
14.10.2014, 17:32  [ТС] #129
Компиляция проекта VB6 с указанием версии или автоинкрементом (опционально) + UPX
Скачать можно из блога.

Не нравится мне встроенный в VB6 IDE автоинкремент.
Ну вот хочу я в следующей версии изменить уже не Revision, а Major или Minor.
Лезть для этого в опции далеко и лень. Каждый раз править в файле .VBP мне тоже лень.

Решение - положить файлик _Make+Ver+Backup+Manifest+Ico+UPX.cmd в папку проекта и запустить.
Просто ENTER - это автоинкремент Revision.
Нажатие - (дефиса) и ENTER - оставить старый номер версии.
Ввод любой своей версии + ENTER -> здесь понятно.
-> получаем на выходе EXE.

Если проект не был закрыт до начала компиляции, будет отправлен безопасный сигнал о его закрытии.
Если проект содержит ошибки, будет предложено вернуть старый номер версии в файл VBP по нажатию ENTER
-> + откроется сам проект.

Доп. фича - упаковка в UPX. По-умолчанию, включено. Чтобы отключить, изменить в строке:
set NoUPX=false слово false на true.

Чтобы вывести в окно формы указанную таким образом версию, Вы можете воспользоваться свойствами объекта App:
Visual Basic
1
AppVer = App.Major & "." & App.Minor & ".0." & App.Revision
Написано на языке командного интерпретатора CMD + программы других разработчиков (см. в блоге).
В версии 1.1. добавлено несколько новых фишек.
1
The trick
Модератор
7195 / 2427 / 741
Регистрация: 22.02.2013
Сообщений: 3,476
Записей в блоге: 74
08.11.2014, 03:47 #130
Хеш-таблица VB6

Как-то я уже делал реализацию простой хеш-таблицы для демонстрации использования IEnumVariant интерфейса для перечисления в цикле For Each. Представляю автономный класс реализующий хеш-таблицу, который во многих случаях может стать заменой словаря (Dictionary) из Scripting runtime. Реализованы все те же методы что и у словаря, а также добавлены новые.
Включена поддержка перечисления через For Each, также можно задавать режим перечисления ключи/значения, также по сравнению с предыдущей версией исправлены баги вылета из среды при остановки в теле циклов For Each, а также нет никаких ограничений на вложенные циклы. Работает достаточно быстро, на моей машине приблизительно также (даже чуть быстрее) как словарь при двоичном сравнении, при текстовом сравнении работает почти в 2-раза быстрее словаря. В качестве ключей допускаются Variant переменные с типам от vbEmpty до vbDecimal включительно. Числовые ключи должны быть уникальны, т.е. -1, True, -1e0 - один и тот же ключ как и в словаре.
Новый метод EnumMode - определяет текущий режим перечисления. Допустимые значения ENUM_BY_KEY, ENUM_BY_VALUE. При входе в цикл For Each начинает перечисляться тот параметр, который задан этим свойством. Например можно перечислять в главном цикле ключи, во вложенном значения, или сначала ключи потом значения. Также задавая это свойство в окнах Locals или Watch можно переключать отображение с ключей на значения и обратно.

Ссылка.

Готовые решения и полезные коды на Visual Basic 6.0
2
The trick
Модератор
7195 / 2427 / 741
Регистрация: 22.02.2013
Сообщений: 3,476
Записей в блоге: 74
15.11.2014, 22:05 #131
Драйвер на VB6

Всем привет. Появилось время и решил написать что-то необычное на VB6, а именно попытаться написать драйвер. Сразу скажу до этого я никогда не писал драйвера и не имею никакого опыта программирования в режиме ядра. Драйвер, по моим задумкам, должен будет читать память недоступную в пользовательском режиме, а именно в диапазоне 0x80000000 - 0xffffffff (в режиме по-умолчанию, без IMAGE_FILE_LARGE_ADDRESS_AWARE). Сразу приведу исходный код драйвера который получился...

Ссылка.

Готовые решения и полезные коды на Visual Basic 6.0
4
Dragokas
Эксперт WindowsАвтор FAQ
15932 / 6747 / 816
Регистрация: 25.12.2011
Сообщений: 10,453
Записей в блоге: 16
16.11.2014, 18:18  [ТС] #132
Программа распознавания кодировки - DOS или WIN

от zink0000

от The Trick
3
The trick
Модератор
7195 / 2427 / 741
Регистрация: 22.02.2013
Сообщений: 3,476
Записей в блоге: 74
01.12.2014, 19:13 #133
Вокодер на VB6.

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

Ссылка.

6
Dragokas
Эксперт WindowsАвтор FAQ
15932 / 6747 / 816
Регистрация: 25.12.2011
Сообщений: 10,453
Записей в блоге: 16
13.12.2014, 00:00  [ТС] #134
VBCorLib - аналог .NET Framework 2.0 на VB6.

http://www.kellyethridge.com/vbcorlib/index.shtml
3
Миниатюры
Готовые решения и полезные коды на Visual Basic 6.0  
Dragokas
Эксперт WindowsАвтор FAQ
15932 / 6747 / 816
Регистрация: 25.12.2011
Сообщений: 10,453
Записей в блоге: 16
28.12.2014, 15:38  [ТС] #135
Выравнивание файла по 4-байтовой границе.

Используется для модификации файла перед внесением его в ресурсы проекта.
В конец файла дописываются знаки <NUL> (ASCII = 0).

Как известно при загрузке ресурса через LoadResData скомпилированное приложение
в отличие от режима IDE автоматически дописывает байты до 4-байтовой границы.
*
Чтобы избечь случайных данных в конце ресурса, дописываем <NUL> самостоятельно.

Использование - из командной строки или батника:

Bash
Align4byte.exe file.txt
Кликните здесь для просмотра всего текста
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
Option Explicit
 
Sub Main()
    Dim sFile   As String
    Dim ff      As Integer
    Dim Size    As Long
    Dim Rest    As Long
    
    sFile = Command()
    
    If Len(sFile) = 0 Then MsgBox "Использование: " & App.EXEName & " " & "file.txt": End
    
    ff = FreeFile()
    
    sFile = UnQuote(sFile)
    
    Open sFile For Binary Access Read Write As #ff
        Size = LOF(ff)
        Rest = 4 - (Size Mod 4)
        If Rest <> 0 And Rest <> 4 Then
            Put #ff, Size + 1, String$(Rest, Chr$(0))
        End If
    Close #ff
    
End Sub
 
Function UnQuote(Str As String) As String   ' Убрать обрамление кавычками
    Dim s As String: s = Str
    Do While Left$(s, 1&) = """"
        s = Mid$(s, 2&)
    Loop
    Do While Right$(s, 1&) = """"
        s = Left$(s, Len(s) - 1&)
    Loop
    UnQuote = s
End Function


* На самом деле эта проблема возникает у владельцев VB6 без установленного sp6.
3
Вложения
Тип файла: zip Align4byte.zip (6.1 Кб, 12 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2014, 15:38
Привет! Вот еще темы с ответами:

Visual Basic 6 и Visual Basic .NET - в чем различия? - Visual Basic
Visual Basic и Visual studio это не одно и тоже? если нет то в чём разница, по мимо оформления?

Отличия версий Visual Basic 6.0 от Visual Basic 6.5? - Visual Basic
У меня 3 вопроса: 1.Чем отличается версия Visual Basic 6.0 от Visual Basic 6.5? 2.Можно ли запустить проект созданный раннее в Visual...

Кто пишет программы в Visual Studio 2010 на Visual Basic? - Visual Basic
Кто пишет программы в Visual Studio 2010 на Visual Basic?

Проблема с установкой Visual Studio вообще и Visual Basic - Visual Basic
Точнее, с установкой Visual Studio вообще и Visual Basic в частности. В самом конце установки, при setup is updating your system,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.12.2014, 15:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru