заставка, простой программы более определённого времени ...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

заставка, простой программы более определённого времени ...

Сообщение НиколайП » 24.12.2005 (Сб) 20:54

подскажите как сделать такую вещь :
если на форме более ,допустим, 10 мин не происходят какие-либо действия, тогда запускается другая форма (заставка).
Я пытался сделать так:
Form1 - рабочая форма
Form5 - заставка


если мышка без движения- таймер отсчитывает 10 мин, после этого запускает форму заставку, после каждого движения мыши таймер начинает отсчитывать каждый раз поновой. Из такой логики следует что заставка может запуститься при условии что мышь будет недвижима более 10 мин.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Timer1.Enabled = False
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Form5.Show
Timer1.Enabled = False
Unload Me
End Sub


Вроде именно то что мне и необходимо, но на форме у меня более 10 фреймов и много других контролов, по моей схеме мне прийдётся прописывать MouseMove для каждого контрола, это не есть ГУД :( , подскажите как мне реализовать всё это более грамотно и профессионально.

Шнурок
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 12.11.2004 (Пт) 19:28
Откуда: Санкт-Петербург

Сообщение Шнурок » 24.12.2005 (Сб) 21:01

Можно следить движется ли мышь вообще :roll:

Код: Выделить всё
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
    X As Long
    Y As Long
End Type
Dim recX As Long
Dim recY As Long
Dim pt As POINTAPI
Private Sub Timer1_Timer()
    GetCursorPos pt
    recX = pt.X
    recY = pt.Y
    Label1.Caption = recX
    Label2.Caption = recY
End Sub
Private Sub Label1_Change()
    ну дальше наверное понятно...
End Sub
02.01.2004

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 24.12.2005 (Сб) 21:04

спасибо !

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 24.12.2005 (Сб) 21:46

:( , блин, что то не идёт ... лабелы даже не показывают значения координат мыши ...

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.12.2005 (Сб) 22:15

Timer1.Interval=1?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 24.12.2005 (Сб) 22:33

да,моя ошибка была в интервале таймера1.
Но всё равно что то не получается то что мне надо ...


Private Sub Label10_Change() 'лабел который следит за координатами 'мыши
Timer2.Enabled = False
Timer2.Enabled = True
End Sub

Private Sub Timer2_Timer()
Form5.Show 'форма заставка
Unload Form2 ' рабочая форма
Unload Form3 'рабочая форма
Unload Form4 'рабочая форма
Timer2.Enabled = False
Unload Me
End Sub


один раз срабатывает, появляется заставка, а следующие разы только форма мигает,когда срабатывает таймер2, а заставка так и не появляется ... :(

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.12.2005 (Сб) 22:47

Код: Выделить всё
Option Explicit

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Declare Function GetCursorPos Lib "user32.dll" _
        (ByRef lpPoint As POINTAPI) As Long

Private Sub Form_Load()
    Dim CP As POINTAPI
    Dim X As Single, Y As Single
    Dim lTime As Long
    Call GetCursorPos(CP)
    X = CP.X: Y = CP.Y
    lTime = Minute(Time)
    Do Until X <> CP.X Or Y <> CP.Y
        Call GetCursorPos(CP)
        If lTime + 1 < Minute(Time) Then
            MsgBox "Код заставки..."
            GoTo ExitDo
        End If
    Loop
    MsgBox "Вот тут и сбилось..."
ExitDo:
    'End
End Sub
Последний раз редактировалось BV 24.12.2005 (Сб) 23:25, всего редактировалось 1 раз.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 24.12.2005 (Сб) 22:57

блин , вообще запутался ...
с таким кодом, в смысле последним.
Если мышкой не шевелю, заставка появляется нормально, при перемещении мыши заставка всё равно появляется но ещё и срабатывает MsgBox "Вот тут и сбилось..."
туплю по полной, нифига понять уже не могу ... :(

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.12.2005 (Сб) 23:27

Смотри выше.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 24.12.2005 (Сб) 23:40

замутил такую фишку :
в загрузке формы определяю координаты мыши и заношу в лабел, таймер срабатывает через 5 минут и сравнивает координаты из лабела и текущие, если координаты совпадают - тогда запускается заставка:
Private Sub Form_Load()
GetCursorPos pt
recX = pt.X
recY = pt.Y
Label10.Caption = recX
End Sub

Private Sub Timer1_Timer()
GetCursorPos pt
recX = pt.X
recY = pt.Y
If Label10.Caption = recX Then
'MsgBox ("заставка")
zastavka
Else
Label10.Caption = recX
End If
'Label11.Caption = recY
End Sub

Public Sub zastavka()
Unload Form2 'рабочая форма
Unload Form3 'рабочая форма
Unload Form4 'рабочая форма
Form5.Show ' заставка
Unload Me
End Sub

вроде всё нормально, НО если оставить рабочим msgbox,после нажатия ОК заставка появляется исправно, ЕСЛИ его закоментировать тогда форма просто мигает ...............

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 25.12.2005 (Вс) 2:23

Ты мой код видел? Почему не использовал? Не знаешь как?

Код: Выделить всё
Option Explicit

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Declare Function GetCursorPos Lib "user32.dll" _
        (ByRef lpPoint As POINTAPI) As Long

Private Sub Form_Activate()
    Dim CP As POINTAPI
    Dim X As Single, Y As Single
    Dim lTime As Long
    Dim hForm As Form
    Call GetCursorPos(CP)
    X = CP.X: Y = CP.Y
    lTime = Minute(Time)
    Do Until X <> CP.X Or Y <> CP.Y
        DoEvents
        Call GetCursorPos(CP)
        If lTime + 1 < Minute(Time) Then
            'MsgBox "Код заставки..."
            For Each hForm In VB.Forms
                hForm.Hide
            Next hForm
            frmScreensaver.Show vbModal
            GoTo ExitDo
        End If
    Loop
    'MsgBox "Вот тут и сбилось..."
ExitDo:
    For Each hForm In VB.Forms
        Unload hForm
    Next hForm
End Sub
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 25.12.2005 (Вс) 8:30

BV
Ты мой код видел? Почему не использовал? Не знаешь как?


я ответ писал по первому предложенному тобой коду:
Если мышкой не шевелю, заставка появляется нормально, при перемещении мыши заставка всё равно появляется но ещё и срабатывает MsgBox "Вот тут и сбилось..."


по последнему твоему коду:
заменил frmScreensaver.Show на Form5.Show( это форма моей заставки), результат такой:
при движении мыши вылетают все формы включая заставку ...
я только учусь работать на VB, поэтому может чего и не понимаю, но никак не могу подогнать предложенный тобой код под свои нужды :( , если можно, тогда желательно коментировать код ... :oops:

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 25.12.2005 (Вс) 14:22

Код: Выделить всё
MsgBox "Вот тут и сбилось...


Это и есть та часть, на которую переходит программа при движении мыши. А что нужно, если мышь задвигалась? Правильно, обнулить таймер и ждать по новой.

Код: Выделить всё
Private Sub Form_Activate()
    Dim CP As POINTAPI
    Dim X As Single, Y As Single
    Dim lTime As Long
    Dim hForm As Form
Begin:
    Call GetCursorPos(CP)
    X = CP.X: Y = CP.Y
    lTime = Minute(Time)
    Do Until X <> CP.X Or Y <> CP.Y
        DoEvents
        Call GetCursorPos(CP)
        If lTime + 1 < Minute(Time) Then
            'MsgBox "Код заставки..."
            For Each hForm In VB.Forms
                hForm.Hide
            Next hForm
            frmScreensaver.Show vbModal
            GoTo ExitDo
        End If
    Loop
    'MsgBox "Вот тут и сбилось..."
    GoTo Begin
ExitDo:
    For Each hForm In VB.Forms
        Unload hForm
    Next hForm
End Sub
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 26.12.2005 (Пн) 8:16

Это и есть та часть, на которую переходит программа при движении мыши. А что нужно, если мышь задвигалась? Правильно, обнулить таймер и ждать по новой.

да, правильно.

на форме заставки (Form5) у меня такой код:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Form1.Show (главная рабочая форма)
Unload Me
End Sub


используя последний предложенный код, при появлении заставки вылетает ошибка:
Can't show non modal form when modal form is displayed

как избежать этой ошибки ?

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 26.12.2005 (Пн) 9:26

Или вызывай форму модально или сначала выгружай а потом показывай.
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: заставка, простой программы более определённого времени

Сообщение Andrey Fedorov » 26.12.2005 (Пн) 10:18

НиколайП писал(а):подскажите как сделать такую вещь :
если на форме более ,допустим, 10 мин не происходят какие-либо действия, тогда запускается другая форма (заставка).


И чем это лучше обычной заставки Windows?
IMHO: Опять лисапед изобретается...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

HotKitten
Дятил
Дятил
Аватара пользователя
 
Сообщения: 400
Зарегистрирован: 24.01.2005 (Пн) 21:48
Откуда: из дома

Сообщение HotKitten » 26.12.2005 (Пн) 14:49

а если кино смотреть?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!
мышку двигать всё время?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!

я такую прогу делал через загрузку проца т.е
если в течении времени Х загрузка проца >5 (допустим) то..... действие
а если мышкой подрыгать то загрузка проца подскакивает немного!!!!!!!
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.12.2005 (Пн) 14:53

HotKitten писал(а):а если кино смотреть?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!
мышку двигать всё время?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!


Вообще-то проигрыватель во время проигрывания отключает заставку и прочие зелености - т.е нет необходимости дергать ни мышкой ни ножкой. По крайней мере у меня так. Проигрыватель - обычный WMP 10.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Re: заставка, простой программы более определённого времени

Сообщение НиколайП » 26.12.2005 (Пн) 20:03

Andrey Fedorov писал(а):
НиколайП писал(а):подскажите как сделать такую вещь :
если на форме более ,допустим, 10 мин не происходят какие-либо действия, тогда запускается другая форма (заставка).


И чем это лучше обычной заставки Windows?
IMHO: Опять лисапед изобретается...


не совсем понял, по твоему легче написать скринсейвер и инсталировать его вместе с программой ??? или устанавливать необходимую заставку в ОС каждому пользователю программы ???

Vladimir!
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 19.09.2005 (Пн) 21:47
Откуда: Пермь

Сообщение Vladimir! » 26.12.2005 (Пн) 23:32

Код BV + коммент. Matew

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: заставка, простой программы более определённого времени

Сообщение alibek » 27.12.2005 (Вт) 8:42

НиколайП писал(а):не совсем понял, по твоему легче написать скринсейвер и инсталировать его вместе с программой ??? или устанавливать необходимую заставку в ОС каждому пользователю программы ???

Необходимая заставка -- это как?
Lasciate ogni speranza, voi ch'entrate.

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 27.12.2005 (Вт) 8:56

Matew писал(а):Или вызывай форму модально или сначала выгружай а потом показывай.


если не очень сложно, тогда пожалуйсто приведи пример кода.
Form1 - рабочая форма
Form2 - рабочая форма
Form3 - рабочая форма
Form4 - рабочая форма

Form5 - форма заставка

я так понял: код предложенный BV необходимо разместить на всех рабочих формах, а что дальше ?, форма заставка должна убираться при движении ,на ней, мышки, какой необходимо код разместить на заставке ?
извините за надоедливость, но что-то никак не могу справиться с заставкой ... :cry:

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Re: заставка, простой программы более определённого времени

Сообщение НиколайП » 27.12.2005 (Вт) 9:09

alibek писал(а):
НиколайП писал(а):не совсем понял, по твоему легче написать скринсейвер и инсталировать его вместе с программой ??? или устанавливать необходимую заставку в ОС каждому пользователю программы ???

Необходимая заставка -- это как?


на заставке имеется информация о самой программе, бегущая строка с текущей информацией и на заставку будет , возможно, возлагаться определённая задача, см. тему "VB + Web камера USB", если конечно получиться реализовать ...
Ну короче, заставка должна быть не просто заставкой, а частью программы.

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Re: заставка, простой программы более определённого времени

Сообщение НиколайП » 27.12.2005 (Вт) 9:12

alibek писал(а):
НиколайП писал(а):не совсем понял, по твоему легче написать скринсейвер и инсталировать его вместе с программой ??? или устанавливать необходимую заставку в ОС каждому пользователю программы ???

Необходимая заставка -- это как?


на заставке имеется информация о самой программе, бегущая строка с текущей информацией и на заставку будет , возможно, возлагаться определённая задача, см. тему "VB + Web камера USB", если конечно получиться реализовать ...
Ну короче, заставка должна быть не просто заставкой, а частью программы.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.12.2005 (Вт) 9:12

И в чем заключается сложность написания скринсейвера?
Если ты не знаешь, это обычный EXE с расширением SCR, который должен обрабатывать некоторые аргументы, передаваемые в командной строке.
Lasciate ogni speranza, voi ch'entrate.

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 27.12.2005 (Вт) 9:21

Ну например так:
(В форме 5)
Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Form1.Show  [b]vbModal, me[/b](главная рабочая форма)
Unload Me
End Sub

А лучше так:
Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Unload Me
' но если ты вызываешь Form5 модально, то Form1 или другая должны быть видны, т.ч. решай нужна ли следующая строчка...
Form1.Show (главная рабочая форма)
End Sub

А самое простое не вызывай Form5 модально :)
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 27.12.2005 (Вт) 9:26

alibek писал(а):И в чем заключается сложность написания скринсейвера?
Если ты не знаешь, это обычный EXE с расширением SCR, который должен обрабатывать некоторые аргументы, передаваемые в командной строке.

да, я не знаю как писать скринсейверы. Я только начинаю работать с VB . Но думаю что практичнее сделать заставку из формы основной программы чем делать её отдельной програмой.
может я и не прав,профессионалам виднее ...

HotKitten
Дятил
Дятил
Аватара пользователя
 
Сообщения: 400
Зарегистрирован: 24.01.2005 (Пн) 21:48
Откуда: из дома

Сообщение HotKitten » 27.12.2005 (Вт) 13:17

вот мой пример
Вложения
TrayAgent.rar
вот из моей проги вырезал
(3.2 Кб) Скачиваний: 18
Изображение

НиколайП
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 06.12.2005 (Вт) 22:16

Сообщение НиколайП » 27.12.2005 (Вт) 23:57

Forma1 (рабочая)

Option Explicit

Private Type POINTAPI
X As Long
Y As Long
End Type

Private Declare Function GetCursorPos Lib "user32.dll" _
(ByRef lpPoint As POINTAPI) As Long

Private Sub Form_Activate()
Dim CP As POINTAPI
Dim X As Single, Y As Single
Dim lTime As Long
Dim hForm As Form
Begin:
Call GetCursorPos(CP)
X = CP.X: Y = CP.Y
lTime = Minute(Time)
Do Until X <> CP.X Or Y <> CP.Y
DoEvents
Call GetCursorPos(CP)
If lTime + 1 < Minute(Time) Then
For Each hForm In VB.Forms
hForm.Hide
Next hForm
Unload Me
Form5.Show 'vbModal
GoTo ExitDo
End If
Loop
GoTo Begin
ExitDo:
' For Each hForm In VB.Forms
' Unload hForm
' Next hForm
End Sub


Forma5 (заставка)
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Unload Me
Form1.Show
End Sub


не работает :( , один раз срабатывает , потом Forma1 просто моргает когда должна появиться заставка ... :(
если этот код
For Each hForm In VB.Forms
Unload hForm
Next hForm

раскоментировать, и оставить
Form5.Show vbModal

без
Unload Me

(в форме 1) тогда вообще программа в момент появления заставки вылетает ...
блин , замучился уже с этой заставкой ...
кто-нибудь может прокоментировать эту часть кода:
For Each hForm In VB.Forms
hForm.Hide
Next hForm
Unload Me
Form5.Show 'vbModal
GoTo ExitDo
End If
Loop
GoTo Begin
ExitDo:
' For Each hForm In VB.Forms
' Unload hForm
' Next hForm

... я только начинаю изучать VB, не ругайтесь сильно :)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 28.12.2005 (Ср) 1:13

Ну что, что тебе неясно-то?

http://www.google.com/search?client=ope ... 8&oe=utf-8
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 144

    TopList