Страница: 1 |
Страница: 1 |
Вопрос: Class & Timer
Добавлено: 12.07.07 12:20
Автор вопроса: KreAtoR
вопрос таков. Можно ли создавая класс в VB6 сделать в нем timer чтоб на форме его не ставить и класс можно было применить в любой другой проге не заботясь о таймере
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 12.07.07 18:46
Можно. В WIN32API функция SetTimer, поместить в какой-нибудь метод создаваемого класса. В модуле написать функцию обратного вызова (CALLBACK) TimerProc. Из нее вызывать другой метод класса.
И в этом методе - RaizeEvent.
А тебе зачем?
Номер ответа: 2
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #2
Добавлено: 13.07.07 00:18
И в этом методе - RaizeEvent.
RaiseEvent
Придется изрядно поморочится с множественными инстанциями класса, надавая им идентификаторы чтобы различить кому какой колбек пришел. Идентификатор задается как ObjPtr(инстанция класса) и уникален так как по одному адресу памяти может находиться только 1 класс.
Но действительно хотелось бы понять вот зачем это надо? Если уж так невтерпеж тебе эта форма, ну воспользуйся ты ATLTimer (погугли, кажись оно так называлось) - библа, подгружаемая к вб, позволяющая делать таймеры без форм.
зы Я помню кто-то делал такой класс без модуля (колбек процедура находится как binary в массиве байт), но не знаю каков исход, запользуй поиск по форуму
Номер ответа: 3
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #3
Добавлено: 13.07.07 00:56
Акцентируя мою орфографию, убедись в безупречности своей.
И что мешает "надавать"? Посмотри на сигнатуру функции, может увидишь.
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 13.07.07 02:33
Номер ответа: 5
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #5
Добавлено: 13.07.07 02:35
P.S. Как это я пропустил насчет ObjPtr.
Вот уж точно он не нужен.
Болванка такая:
в модуле:
Option Explicit
Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Integer, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public colcls As New Collection
Public Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Integer, ByVal dwTime As Long)
Dim cls As Class1
For Each cls In colcls
If cls.IsMyId(idEvent) Then
cls.TempSub
End If
Next
End Sub
в классе:
Option Explicit
'Event TempEvn()
Private mytm As Integer
Public Sub StartTm(elaps As Long)
mytm = SetTimer(0, 0, elaps, AddressOf TimerProc)
End Sub
Public Function IsMyId(id As Integer) As Boolean
IsMyId = (mytm = id)
End Function
Public Sub TempSub()
' RaiseEvent TempEvn
Debug.Print "зачем нужен ObjPtr " & ObjPtr(Me)
End Sub
Private Sub Class_Initialize()
colcls.Add Me
End Sub
Private Sub Class_Terminate()
KillTimer 0, mytm
Dim cls As Class1
Dim i As Integer
For Each cls In colcls
i = i + 1
If cls Is Me Then
colcls.Remove i
End If
Next
End Sub
вызов:
Option Explicit
Dim s1 As Class1
Dim s2 As Class1
Private Sub Form_Load()
Set s1 = New Class1
Set s2 = New Class1
s1.StartTm 100
s2.StartTm 500
End Sub
Номер ответа: 6
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #6
Добавлено: 13.07.07 02:38
Ну че бы по приколу не потаскать, запас карман не тянет.
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 13.07.07 18:22
дык проще уже всё сделать модулем... и тогда не таскать класс
Номер ответа: 8
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #8
Добавлено: 13.07.07 18:29
- Этат артыст очен пахож на меня, памоему его нада расстрелять.
- Товарищ Сталин! Может не надо расстреливать? Может просто усы сбрить?
- Ну, или так.
Номер ответа: 9
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #9
Добавлено: 16.07.07 13:58
Идея была проста. Создать класс который бы выводил опции МедиаЭнкодера и одной карты. В нем создается окно, все нужные вещи и ТАЙМЕР к томуже.
Смысл был в том, что я эту часть программы очень часто использую, в других программах не или могу использовать в будущих программах. а модуль лепить не хотел. вот и появилась идея создания токакого муню
а что насчет класс+модуль, неее это уже будет слишком )))) плюс форма это уелая программа получается а не часть ее ))))