Вопрос № 27913: Здраствуйте!
Нужен такой хитрый кодик: нажимаешь на кнопку(command1) и в text1 показывается текущее время, потом нажимаешь на command2 и в text2 показывается тек. время, а в text3 показывается сколько час. мин. сек. прошло между этими двумя време...Вопрос № 27915: zdrast'
(.NET)
kak zdelat' shtob docer'skaia forma vozvrasheala znacenie _parent formi??
v forme string?...Вопрос № 27944: Как программно эмулировать нажатие клавиш на мышке ???...
Вопрос № 27.913
Здраствуйте!
Нужен такой хитрый кодик: нажимаешь на кнопку(command1) и в text1 показывается текущее время, потом нажимаешь на command2 и в text2 показывается тек. время, а в text3 показывается сколько час. мин. сек. прошло между этими двумя временами!
Отвечает: Puma
Здравствуйте, Dushin Igor!
Для определения времени между двумя событиями можно использовать системный таймер.
Далее идет Модуль класса. Назовите как нибудь и пользуйтесь
Private plngStart As Long
Private Pack As New CIntLongLarge
Private Type LARGE_INTEGER
lngLowWord As Long
lngHiWord As Long
End Type
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As LARGE_INTEGER) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long
Private Начало As LARGE_INTEGER
Private Конец As LARGE_INTEGER
Private Результат As LARGE_INTEGER
Private Частота As LARGE_INTEGER
Public Sub StartTimer()
plngStart = timeGetTime
End Sub
Public Function StopTimer() As Long
StopTimer = (timeGetTime - plngStart)
End Function
Public Function BeginTimer() As Long
BeginTimer = timeGetTime
End Function
Public Function EndTimer(BeginTimer As Long) As Long
EndTimer = (timeGetTime - BeginTimer)
End Function
--------- Куда б я ни пошел, оно со мною: на форумах, в e-mail иль в ICQ. Мое ИМХО могучею скалою поддержит точку зрения мою.
Ответ отправил: Puma (статус: Практикант)
Отправлен: 18.10.2005, 22:41
Отвечает: Licvidator
Здравствуйте, Dushin Igor!
Private current_day As Byte
Private current_hour As Byte
Private current_minute As Byte
Private current_month As Byte
Private current_year As Integer
Private Sub Command1_Click()
Text1 = Time
current_day = Day(Date)
current_hour = Hour(Time)
current_minute = Minute(Time)
current_month = Month(Date)
current_year = Year(Date)
End Sub
Private Sub Command2_Click()
Dim d As Long
Dim h As Long
Dim m As Long
Dim yy As Long
Dim mmm As Long
Dim all_in_min_current As Long
Dim all_in_min As Long
Dim vrema As String
Dim a As Long, b As Long, q As Long, Y As Long, mm As Long
Text2 = Time
a = current_day
b = current_hour
q = current_minute
Y = current_month
mm = current_year
d = Day(Date)
h = Hour(Time)
m = Minute(Time)
yy = Month(Date)
mmm = Year(Date)
all_in_min_current = a * 24 * 60 + b * 60 + q
all_in_min = d * 24 * 60 + h * 60 + m
d = (all_in_min - all_in_min_current) 60 24
If d <> 0 Then vrema = d & "д"
h = (all_in_min - all_in_min_current) 60 Mod 24
If h <> 0 Then vrema = vrema & " " & h & "ч"
m = (all_in_min - all_in_min_current) Mod 60
If m <> 0 Then vrema = vrema & " " & m & "м"
vrema = Trim(vrema)
If vrema = "" Then vrema = "0м"
If yy <> Y Or mmm <> mm Then vrema = "N/A"
Text3 = vrema
End Sub
PS этот код я писал для своих нужд, он считает сколько прошло дней, часов и минут, причем учитывает переходы на др. месяц и даже год. Посмотрите, разберитесь, и переделайте под свои задачи.
Ответ отправил: Licvidator (статус: Профессор)
Отправлен: 18.10.2005, 23:27
Отвечает: Залетин Виталий Викторович
Здравствуйте, Dushin Igor!
Совет: пользуйтесь АПИ функцией timegettime и стандартными фкнкциями бейсика (например, функцией DateDiff. Можно и дату определять на АПИ, но это кому как... И где хитрость?
--------- Учиться никогда не поздно. Особенно программированию!
zdrast'
(.NET)
kak zdelat' shtob docer'skaia forma vozvrasheala znacenie _parent formi??
v forme string?
Отправлен: 18.10.2005, 23:14
Вопрос задал: spider (статус: 3-ий класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Залетин Виталий Викторович
Здравствуйте, spider!
parent в форме string?
Вообщето, по-моему, parent - это объект. Как его переделать в строку - я не догадываюсь. Выйдет - скажите!
--------- Учиться никогда не поздно. Особенно программированию!
Отвечает: Licvidator
Здравствуйте, Коростелев Евгений Николаевич!
Если известен хенделл окна, где нужно осуществить клик, то через АПИ-функцию SendMessage. В противном случае используйте mouse_event.
Описание:
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
dwFlags - означает, какое событие в данный момент должно происходит
dx,dy - величины, характеризующие перемещение курсора от текущего положения курсора
dx - перемещение по горизонтали (если значение положительное - перемещение идет вправо, если отрицательно - влево)
dy - перемещение по вертикали (если значение положительное - перемещение идет вниз, если отрицательно - вверх).
Непосредственное использование:
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Sub Form_Load()
mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0& 'нажатие на левую клавишу мыши
mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0& 'отпускание левой клавиши мыши
End Sub
В этом случае будет произведен "клик" в том месте, находился курсор при загрузке проекта. Если же нужно в каком-то определенном месте кликнуть, то передвигайте курсор, указав нужные координаты вместо dx и dy (или же через SetCursorPos). Получить текущие координаты можно через GetCursorPos.
Подробнее можете прочитать в google.ru по сабжу "mouse_event visual basic"
Ответ отправил: Licvidator (статус: Профессор)
Отправлен: 19.10.2005, 15:12
Отвечает: Ерёмин Андрей
Здравствуйте, Коростелев Евгений Николаевич!
Вам следует воспользоваться API-функцией mouse_event. В качестве первого параметра можно использовать: MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_LEFTUP, MOUSEEVENTF_RIGHTDOWN, MOUSEEVENTF_RIGHTUP. Существуют и другие значения, но о них в другой раз :) Второй параметр - это координата по x на экране, где следует произвести нажатие, третий параметр - по y. Следующие два параметра можно поставить нулями. После того, как "нажали" (..DOWN) одну из кнопок, лучше всего отправить сообщение о том, что кнопка "отпущена"
(..UP), т.к. в некоторых случаях может возникнуть глюк.
Приложение:
--------- Бог создал мир за семь дней и до сих пор система работает, не требуя перезагрузки, потому что у него не было необходимости поддерживать совместимость с предыдущими версиями...
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 19.10.2005, 16:08
Отвечает: Залетин Виталий Викторович
Здравствуйте, Коростелев Евгений Николаевич!
А не легче послать сообщение WM_NCxxxxx?
--------- Учиться никогда не поздно. Особенно программированию!