Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
18 / 0 / 0
Регистрация: 03.07.2011
Сообщений: 64

Форма в ActiveX Dll

01.08.2012, 02:48. Показов 1577. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Немного погуглил и из прочитанного мной английского текста я понял что функцию для создания формы в ActiveX Dll сделать нельзя?? Если можно сделать, то можно простой пример, с WinAPI очень долго возится и очень сложно.

Например:

Visual Basic
1
2
3
4
Public Function Window() As Long
   ' Остальной код
   Window = Me.hWnd
End Function
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2012, 02:48
Ответы с готовыми решениями:

Как определить загружена ли форма, загружаемая из функции ActiveX Document DLL?
Как определить загружена ли форма, загружаемая из функции ActiveX Document DLL

Ошибка при отладке ActiveX.DLL при передаче объекта форма
в вызывающем модуле Функция(Me) в ActiveX Sub Функция(frm as Object) typeof frm is form - выдает False в режиме отладки ActiveX...

ActiveX Document DLL.Результат видет только на компах, где прописана dll
Пробовал создать, получил *.vbd и *.dll На Web сервере запускаю vbd - все ОК. Результат видет только на компах, где прописана dll...

6
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
01.08.2012, 09:23
Цитата Сообщение от SergeyA Посмотреть сообщение
функцию для создания формы
Непонятен вопрос. Что нельзя сделать в ActiveX Dll? Что должна делать функция?
И к чему ты привёл пример?

Не по теме:

Как говорил профессор Преображенский: " Кто на ком стоял? Непонятно.":D

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
01.08.2012, 09:57
Можно, и легко. Посмотрите, например, вот это
2
18 / 0 / 0
Регистрация: 03.07.2011
Сообщений: 64
02.08.2012, 15:57  [ТС]
Сделал на WinAPI.. но, есть ли возможность заменить AddressOf или как его использовать? при компиляции вылетает ошибка..

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
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontW" (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal i As Long, ByVal u As Long, ByVal S As Long, ByVal c As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function UpdateWindow Lib "user32" (ByVal hWnd As Long) As Long
 
Private Const GUI_WINDOW_DEFAULT = (&H20000 Or &HC00000 Or &H80000000 Or &H80000)
Private Const GUI_BUTTON_DEFAULT = (&H10000000 Or &H40000000)
 
Dim ControlInfo() As Long
 
Private Sub Class_Initialize()
    ReDim ControlInfo(3)
End Sub
 
Public Function GUIForm(Optional ByVal Title As String = "", _
                        Optional ByVal Width As Long = 600, _
                        Optional ByVal Height As Long = 450, _
                        Optional ByVal x As Long = -1, _
                        Optional ByVal Y As Long = -1, _
                        Optional ByVal Style As Long = -1, _
                        Optional ByVal ExStyle As Long = -1, _
                        Optional ByVal hParent As Long = 0) As Long
    Dim hWnd As Long
    If x = -1 Then
        x = (((Screen.Width / Screen.TwipsPerPixelX) / 2) - (Width / 2))
    End If
    If Y = -1 Then
        Y = (((Screen.Height / Screen.TwipsPerPixelY) / 2) - (Height / 2))
    End If
    If Style = -1 Then
        Style = GUI_WINDOW_DEFAULT
    End If
    If ExStyle = -1 Then
        ExStyle = 0
    End If
    hWnd = CreateWindowEx(ExStyle, "#32770", Title, Style, x, Y, Width, Height, hParent, 0, App.hInstance, 0)
    Call SetWindowLong(hWnd, (-4), AddressOf WndProc)
    GUIForm = hWnd
End Function
 
Public Function GUIButton(ByVal hWnd As Long, _
                          ByVal Text As String, _
                          ByVal x As Long, _
                          ByVal Y As Long, _
                          Optional ByVal Width As Long = -1, _
                          Optional ByVal Height As Long = -1, _
                          Optional ByVal Style As Long = -1, _
                          Optional ByVal ExStyle As Long = -1) As Long
    Dim Index As Long
    If Width = -1 Then
        Width = 80
    End If
    If Height = -1 Then
        Height = 25
    End If
    If Style = -1 Then
        Style = GUI_BUTTON_DEFAULT
    End If
    If ExStyle = -1 Then
        ExStyle = 0
    End If
    Index = UBound(ControlInfo)
    ReDim Preserve ControlInfo(Index + 1)
    ControlInfo(Index) = CLng(CreateWindowEx(ExStyle, "Button", Text, Style, x, Y, Width, Height, hWnd, Index, App.hInstance, 0))
    SetDefaultFont (ControlInfo(Index))
    GUIButton = Index
End Function
 
Public Function GUIShow(ByVal hWnd As Long, _
                        Optional ByVal State As Long = 5) As Boolean
    Dim iRet As Long
    iRet = ShowWindow(hWnd, State)
    UpdateWindow (hWnd)
    GUIShow = iRet
End Function
 
Public Function CHandle(ByVal Id As Long) As Long
    CHandle = ControlInfo(Id)
End Function
 
Private Function SetDefaultFont(ByVal hWnd As Long) As Long
     Dim hFont As Long
     hFont = CreateFont(14, 0, 0, 0, 400, False, False, False, 1, 0, 0, 0, 0, "Arial")
     SetFont = SendMessage(hWnd, &H30, hFont, True)
End Function
 
Public Function WndProc(ByVal hWnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    'code
End Function
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
02.08.2012, 16:46
AddressOf можно использовать только в модуле, но не в классе...
Но ЗАЧЕМ все это? Неужели нельзя просто включить в проект ActiveX-Dll (Exe) нужное количество любых форм VB?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
02.08.2012, 20:26
Лучший ответ Сообщение было отмечено как решение

Решение

Выкладываю проект - календарь, оформленный в виде ActiveX-Dll, содержащей целых две формы - собственно календарь и About. В упаковке тестовый скрипт для проверки работоспособности (только не забудь зарегистрировать библиотеку).

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
      Set myClnd=CreateObject("PrjB.clsMain")
 
      myClnd.About
 
      myClnd.Cshow
 
      aDat=myClnd.Dat
 
      If Len(aDat)=0 then
 
         Msgbox "Вы отказались от выбора"
 
      else
 
         MsgBox "Вы выбрали дату "+aDat
 
      end if
Миниатюры
Форма в ActiveX Dll  
Изображения
 
Вложения
Тип файла: zip t010.zip (31.7 Кб, 35 просмотров)
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
03.08.2012, 07:53
А вот единственное, что действительно нельзя сделать в ActiveX-Dll - так это отобразить немодальную форму.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.08.2012, 07:53
Помогаю со студенческими работами здесь

GlobalMultiUse в ActiveX DLL
Ситуация: существует групповой проект, состоящий из: 1) Standart EXE проекта. 2) ActiveX DLL. Содержит класс с параметром...

ActiveX dll и ее использование
Не могу понять в чем проблема. Создана dll в VB cde.dll, в которой есть форма Form1 и класс form_class, в классе реализована процедура ...

Создание ActiveX Dll в VB 6
Здравствуйте! У меня имеется .dll, .lib и .hpp файлы, библиотека используется управления контроллером. Хочу создать ActiveX враппер для...

Графический ActiveX DLL.
А реально ли на VB написать DLL, которая на сервере бы строила график (в общем случае - рисовала картинку, но мне нужен именно график),...

Информация об ActiveX Dll
Zaranee izviniaus' za naivnost' voprosa . Mne nygna informacia ob ActiveX Dll : chto eto takoe , dlia chego on nygen ... Ne mogli bi...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru