Современные решения

для защиты Windows приложений

и восстановления исходного кода

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)