Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 139
от 24.10.2005, 16:30

Администратор:Калашников О.А.
В рассылке:Подписчиков: 125, Экспертов: 21
В номере:Вопросов: 3, Ответов: 7


Вопрос № 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 показывается сколько час. мин. сек. прошло между этими двумя временами!
Отправлен: 18.10.2005, 21:55
Вопрос задал: Dushin Igor (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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. Можно и дату определять на АПИ, но это кому как... И где хитрость?
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: 5-ый класс)
Отправлен: 22.10.2005, 17:35


Вопрос № 27.915
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 - это объект. Как его переделать в строку - я не догадываюсь. Выйдет - скажите!
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: 5-ый класс)
Отправлен: 22.10.2005, 17:10


Вопрос № 27.944
Как программно эмулировать нажатие клавиш на мышке ???
Отправлен: 19.10.2005, 14:57
Вопрос задал: Коростелев Евгений Николаевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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?
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: 5-ый класс)
Отправлен: 22.10.2005, 17:23


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Rambler's Top100 Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.basicvba
Архив рассылки
Отписаться
Вспомнить пароль

В избранное