Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Ответ
 
Опции темы
Старый 22.12.2011, 17:06   #1
 Пехотинец
Аватар для daff26
 
daff26 на правильном пути
Регистрация: 06.02.2011
Сообщений: 69
Популярность: 49
Сказал(а) спасибо: 102
Поблагодарили 54 раз(а) в 31 сообщениях
 
По умолчанию На Visual Basic

DLL (Dynamic Link Library) - динамически подключаемые библиотеки представляют собой совокупность процедур и функций, которыми могут пользоваться внешние программы. Причем одну и ту же библиотеку можно подключить к любому языку программирования т.е. библиотеки, написанные на одном языке программирования можно использовать на других языках. DLL делятся на обычные и ActiveX. Основное отличие ActiveX DLL от обычной - это интерфейс, который связывает вызывающую программу с библиотекой. Такая DLL подключается к программе в процессе разработки и Вы можете увидеть все ее свойства и методы. Процедуры же из обычной DLL вызываются в процессе выполнения программы. Примером могут послужить такие библиотеки как Shell32.dll, User32.dll и т.д., включающие в себя всем известные API функции. VB может создавать только ActiveX библиотеки. Стоит отметить, что с появлением VS.NET ActiveX библиотеки стали называть COM объектами.

Итак приступим к созданию библиотеки. Откройте стандартный проект: File->New Project->Standard EXE. В этом проекте будут тестироваться созданные в DLL проекте функции. Затем добавьте новый проект - ActiveX DLL: File->Add Project->ActiveX DLL. В простейшем случае проект ActiveX DLL состоит из одного модуля класса. По сути, модуль класса представляет собой объект, включающий свойства, методы и события. Теперь придумаем название DLL проекту. В окне Project Explorer выберете Project2. В окне свойств введите имя TestDLL. Подключим эту библиотеку к первому проекту. Перейдите к первому проекту щелкнув два раза по Project1 в окне Project Explorer. Откройте окно Object Browser. Затем щелкните по нему правой кнопкой мыши и выберите в появившемся меню пункт References:
[IMG]http://*********/lk/delfiles.php?i=31670&k=9fbc305ddcb27018478e10255a9 e8688[/IMG]


Появится окно References, где перечислены все зарегистрированные ActiveX библиотеки. Там же будет находиться и проект TestDLL. Отметьте его галочкой тем самым включив его в первый проект и нажмите OK:

[IMG]http://*********/fd31672[/IMG]


Напишем первую функцию. Пусть она будет представляет собой сумму двух целых чисел. В окне кода модуля класса введите:

Код:
Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer
Sum = a + b
End Function
Итак первая функция готова. Перейдите в окно кода формы первого проекта и введите

Код:
Private Sub Form_Load()
Dim Class As New Class1
MsgBox Class.Sum(10, 5)
End Sub
При запуске программа покажет 15. Обратите внимание на первую строчку, где происходит связывание переменной Class с классом библиотеки Class1. Это называется ранней привязкой. Аналогично можно было бы использовать позднюю привязку:

Код:
Dim Class As Class1
Set Class = New Class1
В данном случае позднюю привязку использовать неуместно. Но существуют случаи, когда без поздней привязки не обойтись. Теперь создадим метод чуть посложнее. Этот метод будет закрашивать указанное окно градиентной заливкой, переходящей из зеленого в синий цвет. Введите в модуле класса следующий код:

Код:
Public Sub GradientFill(ByVal Pic As Object)
Dim i As Integer
Dim d As Single
Pic.ScaleMode = vbPixels
Pic.AutoRedraw = True
For i = 0 To Pic.ScaleWidth - 1
d = i / Pic.ScaleWidth
Pic.Line (i, 0)-(i, Pic.ScaleHeight - 1), _
RGB(0, 255 - CByte(255 * d), CByte(255 * d))
Next
End Sub
Чтобы воспользоваться этим методом введите в окне кода формы первого проекта:

Код:
Private Sub Form_Load()
Dim Class As New Class1
Class.GradientFill Form1
End Sub
Теперь создадим свойство для класса:

Код:
Dim m_Text As String

Public Property Get Text() As String
Text = m_Text
End Property

Public Property Let Text(ByVal New_Text As String)
m_Text = New_Text
End Property
Как Вы видите выше, для создания свойства используются две процедуры: Property Get и Property Let. Первая процедура вызывается, когда внешняя программа запрашивает значение свойства, а вторая - когда внешняя программа изменяет значение свойства. Конечно, в данном случае все это можно было бы заменить одной строкой:

Код:
Public Text as String
Но использование отдельных процедур удобно, когда при запросе/присвоении свойству нового значения требуется выполнить какое-либо действие. К примеру видоизменим приведенный выше текст следующим образом:

Код:
Dim m_Text As String

Public Property Get Text() As String
Text = m_Text
End Property

Public Property Let Text(ByVal New_Text As String)
MsgBox "Вы задали новое значение для свойства Text"
m_Text = New_Text
End Property
Теперь введите в коде формы первого проекта:

Код:
Private Sub Form_Load()
Dim Class As New Class1
Class.Text = "helloword"
End Sub
При запуске программы появится окошко с сообщением об изменении свойства.

Сделаем свойство посложнее на основе выше приведенной градиентной заливки. При запросе значения свойства будут возвращаться цвета границ заливки, а при задании значения для свойства форма будет закрашиваться градиентной заливкой:

' Таким образом можно объявить
' в модуле класса глобальные константы
Код:
Public Enum FillConst
RedGreen = 1
GreenRed = 2
RedBlue = 3
BlueRed = 4
GreenBlue = 5
BlueGreen = 6
End Enum
Код:
Dim m_FormFill As FillConst

Public Property Get FormFill(Pic As Object) As FillConst
FormFill = m_FormFill
End Property

Public Property Let FormFill(Pic As Object, ByVal New_FormFill As FillConst)
Dim i As Integer
Dim d As Single
Dim Color As Long
Pic.ScaleMode = vbPixels
Pic.AutoRedraw = True
' Закрашиваем форму
For i = 0 To Pic.ScaleWidth - 1
d = i / Pic.ScaleWidth
Select Case New_FormFill
	Case RedGreen
	Color = RGB(255 - CByte(255 * d), CByte(255 * d), 0)
	Case GreenRed
	Color = RGB(CByte(255 * d), 255 - CByte(255 * d), 0)
	Case RedBlue
	Color = RGB(255 - CByte(255 * d), 0, CByte(255 * d))
	Case BlueRed
	Color = RGB(CByte(255 * d), 0, 255 - CByte(255 * d))
	Case GreenBlue
	Color = RGB(0, 255 - CByte(255 * d), CByte(255 * d))
	Case BlueGreen
	Color = RGB(0, CByte(255 * d), 255 - CByte(255 * d))
End Select
Pic.Line (i, 0)-(i, Pic.ScaleHeight - 1), Color
Next
' Изменяем значение свойства
Код:
m_FormFill = New_FormFill
End Property
Чтобы воспользоваться данным свойством введите в окне кода формы:

Код:
Private Sub Form_Load()
Dim Class As New Class1
' Закрашиваем форму градиентной заливкой
' переходящей из красного в зеленый цвет
Код:
Class.FormFill(Form1) = RedGreen
' Выводим текущий цвет заливки
' В нашем случае 1
' соответствующий константе RedGreen
Код:
MsgBox Class.FormFill(Form1)
End Sub
Теперь рассмотрим события. В качестве примера сделаем событие, отслеживающее перемещение формы по экрану:

' Объявляем событие
Код:
Public Event FormMove(Left As Single, Top As Single)

Public Sub Begine(Form As Object)
Dim Left As Single, Top As Single
Left = Form.Left
Top = Form.Top
Do
' Если координаты формы не соответствуют
' прежним, то генерируем событие FormMove
Код:
If Left  Form.Left Or Top  Form.Top Then
Left = Form.Left
Top = Form.Top
RaiseEvent FormMove(Left, Top)
End If
' Передаем управление другим процедурам
Код:
DoEvents
Loop
End Sub
Теперь поместите на форму две надписи (Label) и введите следующий код:

' Таким образом объявляются классы, содержащие события
Код:
Dim WithEvents Class As Сlass1

Private Sub Form_Load()
Set Class = New Сlass1
' Показываем форму
Form1.Show
' Запускаем процедуру для отслеживания события перемещения формы
Код:
Class.Begine Form1
End Sub
Код:
Private Sub Class_FormMove(Left As Single, Top As Single)
' При перемещении формы отображаем ее координаты
Label1 = Left
Label2 = Top
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
End
End Sub
Помимо классов DLL могут также включать в себя формы, которые могут использоваться в качестве диалоговых окон. Для примера создадим диалоговое окно выбора цветов. Для этого в DLL проект добавьте форму. На форму поместите два PictureBox и одну кнопку. В окне свойств укажите у формы свойство BorderStyle = Fixed Dialog, а Caption = Выбор цвета. В результате форма должна выглядеть примерно так:


Окошко слева назовите Picture1, окошко справа - Picture2. В окно кода этой формы введите:

Код:
Private Sub Form_Load()
Dim i As Integer, j As Integer
Dim b1 As Single, b2 As Single
Picture1.AutoRedraw = True
Picture1.ScaleMode = vbPixels
For i = 0 To Picture1.ScaleWidth - 1
For j = 0 To Picture1.ScaleHeight - 1
b1 = 255 / Picture1.ScaleWidth
b2 = 255 / Picture1.ScaleHeight
Picture1.PSet (i, j), RGB(255 - CByte(b1 * i), CByte(b1 * i), CByte(b2 * j))
Next
Next
End Sub
Код:
Private Sub Picture1_MouseDown(Button As Integer,
                               Shift As Integer,
                               X As Single,
                               Y As Single)
Picture2.BackColor = Picture1.Point(X, Y)
End Sub

Private Sub Command1_Click()
Form1.Hide
End Sub
В окно кода модуля класса введите:
Код:
Public Function GetColor() As Long
Form1.Show vbModal
GetColor = Form1.Picture2.BackColor
End Function
Таким образом функция GetColor вызовет диалоговое окошко выбора цвета, а затем возвратит выбранный цвет. В качестве примера использования данной функции в окне кода формы первого проекта введите:

Код:
Dim Class As New Class1

Private Sub Form_Click()
Form1.BackColor = Class.GetColor
End Sub
После того как библиотека будет готова ее нужно откомпилировать. Выберете DLL проект в окне Project Explorer. Затем File->Make TestDLL.dll. Откомпилированную библиотеку можно будет использовать в любой Вашей программе на любом языке программирования, поддерживающем ActiveX. Подключение библиотеки производится также как описывалось выше при работе двух проектов.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
moloko911 (24.12.2011), OrBiT_DaRk (16.01.2013)
Старый 29.12.2011, 12:27   #2
 Пехотинец
Аватар для ECONOMIX
 
ECONOMIX лучик света в грозовом небеECONOMIX лучик света в грозовом небеECONOMIX лучик света в грозовом небеECONOMIX лучик света в грозовом небеECONOMIX лучик света в грозовом небеECONOMIX лучик света в грозовом небеECONOMIX лучик света в грозовом небе
Регистрация: 24.03.2011
Сообщений: 57
Популярность: 817
Сказал(а) спасибо: 333
Поблагодарили 48 раз(а) в 33 сообщениях
Отправить сообщение для ECONOMIX с помощью Skype™
 
По умолчанию Re: На Visual Basic

как сохранить прогу што открывалась отдельно
а то щас открывает вместе с визуал бейсик 11
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Basic Nеxus Общение и обсуждение 2 24.11.2011 19:06
[Программа] Visual Basic 6.0 shkеt667 Общение и обсуждение 1 15.09.2011 23:25

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 12:46.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net