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

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

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

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


Re: Threads

From: "A. Skrobov"

Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
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"

Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
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"

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 (2:5020/175.2)


Какая кнопка нажата?

From: "A. Skrobov"

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 (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"

Fri Jul 09 2004 11:47, Ivan Vaneev wrote to All:

IV> Плиз, подскажите, как на эхотаге узнать хэндл или сразу caption текущего
IV> активного окна в системе (у которого фокус)?
GetForegroundWindow + GetWindowText
Пример дать?

* Origin: FidoNet Online (2:5020/175.2)


Какая кнопка нажата?

From: "A. Skrobov"

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 (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"

> 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)



Назад Содержание Вперед