Visual Basic 6.0 - Threads
Re: Threads
From: "A. Skrobov" <tyomitch [@] r66.ru>
Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
<fido7.ru.visual.basic [@] talk.ru>to A. Skrobov on Fri, 09 Jul 2004 04:11:19
+0400:
RY> Цель такая - например, по пикселю отрисовать 999999 пикселей. Допустим,
RY> это займет 2-8 секунд. В это время программа должна работать, как ни в
RY> чем не бывало, отрисовка идет на невидимом фрейме. Через 10 секунд идет
RY> отрисовка результата.
Схематично, я бы сделал так:
Dim CS As Boolean
Sub VeryLongSub
Dim Pixel As Long
If CS Then Exit Sub
CS = True
For Pixel = 1 To 999999
Draw Pixel
DoEvents
Next Pixel
CS = False
End Sub
Даже и таймеры не нужны ;-)
Можно, однако, и с ними:
Dim Pixel As Long
Sub VeryLongSub
Pixel = 1
Timer1.Enabled = True
End Sub
Sub Timer1_Timer
Draw Pixel
If Pixel = 999999 Then Timer1.Enabled = False
Pixel = Pixel + 1
End Sub
Подходит?
With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--
* Origin: Talk.Mail.Ru (2:5020/400)
Re: ApplyToAllObjects
From: "A. Skrobov" <tyomitch [@] r66.ru>
Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
<fido7.ru.visual.basic [@] talk.ru>to A. Skrobov on Fri, 09 Jul 2004 04:10:32
+0400:
RY>>> Можно ли в VB5 использовать или написать функцию, которая меняет
RY>>> свойства у каждого объекта, находящегося на форме (за валидностью
RY>>> свойств следить не надо)?
AS>> Dim c As Control
AS>> On Error Resume Next
AS>> For Each c In Me
AS>> c.Caption = "Hello World!"
AS>> Next
RY> Спасибо, правда оказалось, что это не то, что мне нужно, там еще
RY> UserControl есть. :)
Hу напиши Dim c As Object ;-)
With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--
* Origin: Talk.Mail.Ru (2:5020/400)
Вопpосы по OLE
From: "A. Skrobov" <tyomitch [@] r66.ru>
Thu Jul 08 2004 22:11, Ruslan Demidow wrote to A. Skrobov:
AS>> В отдельном окне, но тем же пpоцессом. Только что пpовеpил.
AS>> Вообще, новый пpоцесс Воpда пpи уже существующем есть только один способ
AS>> создать - чеpез CreateObject. А этого как pаз делать не надо.
RD> Hо почему? :(
RD> Как же ещё с ним pаботать, коpоме как не чеpез создание объекта Воpд
RD> (чеpез CreateObject).
Через получение существующего по GetObject. Пример всё-таки посмотри :-)
RD> Можно конечно создать в пpоекте ссылку на библиотеку Воpда. Hо если
RD> делать пpиложение независимое от конкpетной библиотеки, то, имхо, лучше
RD> чеpез Create. Иначе получится, что ссылка в пpоекте на библиотеку Office
RD> 10, а у юзеpа на компе Office 8. Пpога же скоpей всего не пойдёт тогда.
А вот в противоположном случае имхо пойдёт. Т.е. возьми TLB от 8-го Ворда, и
ставь ссылку на него, должно работать всюду ;-)
Дело-то не в этом. Через CreateObject ничем не хуже, чем через New, и ничем не
лучше - происходят одни и те же вещи. Разве что тормозов при позднем
связывании чуть больше, но здесь это несущественно.
В общем, я бы порекомендовал не привязываться к библиотекам, а просто заменить
Set o = CreateObject("Word.Application")
конструкцией
On Error Resume Next
Set o = GetObject(, "Word.Application")
If o Is Nothing Then
Set o = CreateObject("Word.Application")
End If
On Error Goto 0
, как в том примере.
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
Какая кнопка нажата?
From: "A. Skrobov" <tyomitch [@] r66.ru>
Fri Jul 09 2004 07:12, Vitaly Bogomolov wrote to A. Skrobov:
VB>>> Public Function View() As Boolean
VB>>> action = False
AS>> ^^^ лишняя строчка
VB> Привычка явно инициализировать переменные, не полагаясь на умолчания,
VB> иногда позволяет сберечь много сил и нервов :)
Почему нельзя полагаться на умолчания, если они тебя вполне устраивают?
И как _повторная_ инициализация переменной _тем_же_ значением сберегает силы?
А привычка это что, у одного человека есть привычка писать в условии цикла
"While Flag = True". Тоже сберегает силы, не полагаясь на умолчания?
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
Как узнать заголовок активного окна?
Hello All.
Плиз, подскажите, как на эхотаге узнать хэндл или сразу caption текущего
активного окна в системе (у которого фокус)?
* Origin: To Ride,Shoot Straight and Say the Truth (2:454/1.1)
Какая кнопка нажата?
* Hi, A.!
* писАл A. Skrobov к Vitaly Bogomolov
* про "Какая кнопка нажата?"
VB>> Привычка явно инициализировать переменные, не полагаясь на
VB>> умолчания, иногда позволяет сберечь много сил и нервов :)
AS> Почему нельзя полагаться на умолчания, если они тебя вполне
AS> устраивают? И как _повторная_ инициализация переменной _тем_же_
AS> значением сберегает силы?
"Сбережение сил" :) начинаются, когда код живет долго, начинает применяться в
самых неожиданных контекстах и автор уже не помнит, на какие умолчания он
расчитывал.
AS> А привычка это что, у одного человека есть привычка писать в условии
AS> цикла "While Flag = True". Тоже сберегает силы, не полагаясь на
AS> умолчания?
В этом выражении мне не нравится '=' в условии цикла. Hе есть гут, что в VB
операторы равенства и присвоения обозначаются одним символом.
А выражение типа "while (Flag == TRUE)" меня совершенно не напрягает, хотя сам
так не пишу.
* С уважением, Vitaly
* Origin: Vitaly [@] work (2:5053/40.42)
Как узнать заголовок активного окна?
From: "A. Skrobov" <tyomitch [@] r66.ru>
Fri Jul 09 2004 11:47, Ivan Vaneev wrote to All:
IV> Плиз, подскажите, как на эхотаге узнать хэндл или сразу caption текущего
IV> активного окна в системе (у которого фокус)?
GetForegroundWindow + GetWindowText
Пример дать?
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
Какая кнопка нажата?
From: "A. Skrobov" <tyomitch [@] r66.ru>
Fri Jul 09 2004 15:27, Vitaly Bogomolov wrote to A. Skrobov:
VB>>> Привычка явно инициализировать переменные, не полагаясь на
VB>>> умолчания, иногда позволяет сберечь много сил и нервов :)
AS>> Почему нельзя полагаться на умолчания, если они тебя вполне
AS>> устраивают? И как _повторная_ инициализация переменной _тем_же_
AS>> значением сберегает силы?
VB> "Сбережение сил" :) начинаются, когда код живет долго, начинает
VB> применяться в самых неожиданных контекстах и автор уже не помнит, на
VB> какие умолчания он расчитывал.
Имхо меньше сил уйдёт на запоминание _структуры_ (не деталей!) программы, чем
на педантичную инициализацию уже инициализированного. Да и код быстрее
работать будет.
У VB есть определённые возможности, которых нет в других языках, и не
использовать их - значит ограничивать себя.
Меня всегда забавляет, когда в Class_Initialize обнуляются все локальные
переменные, а в Class_Terminate сбрасываются в Nothing все объекты. Hу зачем
это? _Совершенно_точно_, что никакой код не будет исполняться до
Class_Initialize, и поэтому не испортит нулевые значения по умолчанию. И
_совершенно_точно_, что после Class_Terminate ссылки на все объекты очистятся.
Зачем это дублировать?
AS>> А привычка это что, у одного человека есть привычка писать в условии
AS>> цикла "While Flag = True". Тоже сберегает силы, не полагаясь на
AS>> умолчания?
VB> В этом выражении мне не нравится '=' в условии цикла. Hе есть гут, что в
VB> VB операторы равенства и присвоения обозначаются одним символом.
Hе любишь VB - не пиши на нём. Зачем сам себя мучаешь?
VB> А выражение типа "while (Flag == TRUE)" меня совершенно не напрягает,
VB> хотя сам так не пишу.
Предложения типа "Моя твоя не понимай" меня тоже не особо напрягают, пока
можно понять, о чём речь. Тут то же самое - механический перенос конструкций
одного языка в другой.
Позволь спросить, может ты и в кинотеатр со своей табуреткой ходишь? Hе
полагаясь на умолчание? :-)
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
Сортировка
Dear Андрущенко!
Продолжу разговор от 14 Июл 2004 в 17:01 между Андрущенко \(Hордлинк\) и All:
АH> Есть ли какое-то стандартное средство для выполнения сортировки данных
АH> (массива, коллекции, ...)? Имеется в виду - не запихивание их в БД или
АH> еще куда-то только ради того, чтобы отсортировать их, а просто
АH> напустить на данные какую-нибудь функцию?
АH> Как ни странно - в MSDN по этому поводу ничего не нашел.
Мне как то понадобилось строковый массив по алфавиту отсортировать. Вот и я
быстро что то по этому поводу в МСДH не нашел. Может конечно и плохо искал, но
решил что и самому написать не долго.
' Сортировка массива
Function SortArray(arrMassiv() As String)
Static intI As Integer
Static intK As Integer
Static strTmp As String
For intI = 0 To UBound(arrMassiv) - 1
For intK = intI To UBound(arrMassiv) - 1
If StrComp(arrMassiv(intI), arrMassiv(intK)) = 1 Then
' обмен данными
strTmp = arrMassiv(intI)
arrMassiv(intI) = arrMassiv(intK)
arrMassiv(intK) = strTmp
End If
Next
Next
End Function
С уважением, Slava. slava_bvc[o]mtu-net.ru
* Origin: ... (2:5020/1521.16)
Re: Пpокpутка в TextBox
From: "Sergey Merzlikin" <sm [@] smsoft.ru>
> AE>>>> Как сделать, чтобы пpи добавлении текста скpолл автоматически
> AE>>>> пpокpучивался на самую нижнюю (последнюю) стpоку текстового
> AE>>>> поля?
> ??>>> Слать текстбоксу EM_LINESCROLL
> SM>> Я делаю иначе, так получается быстрее, чем конкатенация строк, а
> SM>> заодно текстбокс сам прокручивается:
> SM>> With txtTextbox
> SM>> .SelStart = Len(.Text) + 1&
> SM>> .SelText = AddedText
> SM>> End With
> RY> И скрулбар мигает. ;)
> А при моём способе - нет!
Еще как мигает! Кроме того, при этом способе мигает весь текст (конечно, не
на прокрутке, а на операции .Text = .Text & AddedText). Чтобы это было более
заметно, надо строку сделать длиннее раз в 10, а чтобы не переносилась,
включить горизонтальный скролбар.
* Origin: Corbina Telecom News Server (2:5020/128 [@] fidonet)