Консультация № 156910
07.01.2009, 17:39
0.00 руб.
0 8 0
Здравствуйте!
Скажите, пожалуйста, какой функцией можно узнать - дробное ли число (или вернуть значение дробной части) ? Язык: Visual Basic 6.
Спасибо!

Обсуждение

давно
Модератор
137394
1850
07.01.2009, 18:30
общий
Не программирую в VB6, но подозреваю, что функции похожи. В VBA

a= 95.9
b = a - Int(a) ' Здесь b= 0.9
b = a - Fix(a) ' Здесь b= 0.9

a=-95.9
b = a - Int(a) ' Здесь b= 0.1
b = a - Fix(a) ' Здесь b= -0.9
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
07.01.2009, 19:52
общий
Спасибо! Вы очень помогли!
Неизвестный
07.01.2009, 21:29
общий
А вы не знаете, как использовать оператор DoEvents ? Что он из себя представляет?
давно
Модератор
137394
1850
07.01.2009, 23:26
общий
Опять же, для VBA (по VB6 под руками ничего нет)
Цитата: Из Хелпа VBA для Excel
DoEvents Function

Yields execution so that the operating system can process other events.

Syntax

DoEvents( )

Remarks

The DoEvents function returns an Integer representing the number of open forms in stand-alone versions of Visual Basic, such as Visual Basic, Professional Edition. DoEvents returns zero in all other applications.

DoEvents passes control to the operating system. Control is returned after the operating system has finished processing the events in its queue and all keys in the SendKeys queue have been sent.

DoEvents is most useful for simple things like allowing a user to cancel a process after it has started, for example a search for a file. For long-running processes, yielding the processor is better accomplished by using a Timer or delegating the task to an ActiveX EXE component.. In the latter case, the task can continue completely independent of your application, and the operating system takes case of multitasking and time slicing.

Caution Any time you temporarily yield the processor within an event procedure, make sure the procedure is not executed again from a different part of your code before the first call returns; this could cause unpredictable results. In addition, do not use DoEvents if other applications could possibly interact with your procedure in unforeseen ways during the time you have yielded control.

DoEvents Function Example
This example uses the DoEvents function to cause execution to yield to the operating system once every 1000 iterations of the loop. DoEvents returns the number of open Visual Basic forms, but only when the host application is Visual Basic.

' Create a variable to hold number of Visual Basic forms loaded
' and visible.
Dim I, OpenForms
For I = 1 To 150000 ' Start loop.
If I Mod 1000 = 0 Then ' If loop has repeated 1000 times.
OpenForms = DoEvents ' Yield to operating system.
End If
Next I ' Increment loop counter.


Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
07.01.2009, 23:46
общий
Ээээ... если честно, у меня с английским не лады.Дело в том, что у меня есть программа, написанная мной на VB6, но там есть алгоритм для передачи файлов, в процессе работы которого программа недоступна, т.е. программа "висит" пока все не передаст. Моя задача сделать "параллелизм", т.е. чтобы я мог, к примеру, чатиться и одновременно скачивать файлы. У Вас есть какие-нпибудь мысли по этому поводу ?
давно
Профессионал
848
1596
10.01.2009, 21:06
общий
2 AkaProc
если еще интересно про DoEvents, то так в 2-х словах. Этот оператор служит разрешения обработки системных событий. Обычно этот оператор применяют в циклах -чтобы не было эффекта подвисания, а также чтоб сделать возможность выхода из цикла. Как пример -вот цикл простого счетчика из которого выход возможен если BOOL = True
Код:

Dim BOOL As Boolean
Private Sub Command1_Click()
BOOL = False
For i = 0 To 1000000
Label1.Caption = Str(i)
DoEvents
If BOOL Then
MsgBox "True"
Exit For
End If
Next
End Sub

Private Sub Command2_Click()
BOOL = True
End Sub

так вот если закоментировать DoEvents то Command2 вы никагда не нажмете пока цикл не закончится, а также Label1 не будет отрисовывать счетчик цикла, также если эту форму перекрыть другим любым окном, окном браузера, проводника и т.д., а потом свернуть это окно, то наша форма останетя "белой" - не отрисованной -что обычно считают зависшим приложением. НО, но цикл без DoEvents выполнится гораздо быстрее чем с обработкой сист событий ;-)
В вашем случае конечно нужно применять DoEvents. Но думаю чтоб одновременно вам передавать файлы и чатится вам нужно иметь и 2 одновременных подключения, например на разных портах, хотя наверно можно и на 1. Т.к. по 1 подключению вам тогда придеца придумывать как прога должна понимать что за данные пришли -кусок файла или строка чата ;-)
Возможно интересно будет посмотреть пример реализации многопотоковости на VB, сам прада не пробывал:-)
Пример здесь.
Неизвестный
11.01.2009, 17:23
общий
Огромное спасибо! Буду разбираться!!
А можно ли сделать так, чтобы, если я сворачиваю приложение, то на панели задач (в моем свернутом приложении) отображалось то, что я вывожу при вычислениях? А то у меня получается так, что как только я свертываю окно своей проги, то у меня на caption формы, т.е. на панели задач (на моем свернутом приложении) отображается только та информация, которая была на caption ДО сворачивания.
давно
Профессионал
848
1596
12.01.2009, 13:20
общий
я что-то не нашел примеров, и у самого ничего не получилось чтоб caption формы на таксбаре обновлялся сам:-((( Если что попадется я напишу вам...
но интересно то, что под Win2000Sp3 при свернутой форме все нормально - счетчик на таскбаре бежит как вам надо, а на XP замораживается....и UpdateWindow таскбара тож не помогает :-((((
Форма ответа