Техническая поддержка :

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

для защиты Windows программ

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

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


Закодировать текстовый файл

Hello A.!

19 May 04 14:15, A. Skrobov wrote to Max Egorov:

[покусано]
AS>>> Hапишешь на байтах, чтобы было быстрее - будет аргумент.
ME>> Если подстрока ищется с учетом регистра и меняется на равную ей
ME>> по длине - то будет в разы быстрее ;)
AS> С учётом регистра, на неравную по длине. Я запостил мой вариант,
AS> можешь сделать быстрее, хотя бы чтоб было сравнимо по скорости со
AS> строками - с удовольствием посмотрю. А то рассуждать "будет быстрее -
AS> не будет быстрее" можно долго. И безрезультатно.
Я же тебе говорю, что быстрее у меня получилось только с данными ограничениями :) И то со string mapping и заменой в исходном выражении...

Вот пример, не проверял (выкушено все лишнее)

Public Sub Replace_SM(ByRef Expression As String, ByRef Find As String, _
ByRef Replace As String, Optional ByVal Start As Long = 1, _
Optional ByVal Count As Long = -1, _
Optional ByVal Compare As VbCompareMethod = vbBinaryCompare)

Dim i As Long, lngClosest As Long, lngFarthest As Long, lngIteration As Long, _
lngExpressionLen As Long, lngFindLen As Long, lngReplaceLen As Long, _
lngFailed As Long

Dim lngHeaderExpression(5) As Long ' Header for the SafeArray Map
Dim lngHeaderFind(5) As Long, lngHeaderReplace(5) As Long
Dim intExpressionMap() As Integer, intFindMap() As Integer, _
intReplaceMap() As Integer

' Set up the SafeArrayHeader
lngHeaderExpression(0) = 1 ' Number of dimensions
lngHeaderExpression(1) = 2 ' Bytes per element (integer=2)
lngHeaderExpression(3) = StrPtr(Expression) ' Pointer to the 1st character
lngHeaderExpression(4) = &H7FFFFFFF ' Array size

' same with other two

' find
lngHeaderFind(0) = 1
lngHeaderFind(1) = 2
lngHeaderFind(3) = StrPtr(Find)
lngHeaderFind(4) = &H7FFFFFFF

' replace
lngHeaderReplace(0) = 1
lngHeaderReplace(1) = 2
lngHeaderReplace(3) = StrPtr(Replace)
lngHeaderReplace(4) = &H7FFFFFFF

' Force Map to use SafeArrayHeader as its own header
CopyMemory ByVal ArrPtr(intExpressionMap), VarPtr(lngHeaderExpression(0)), 4
CopyMemory ByVal ArrPtr(intFindMap), VarPtr(lngHeaderFind(0)), 4
CopyMemory ByVal ArrPtr(intReplaceMap), VarPtr(lngHeaderReplace(0)), 4

' remove chr(0)...
lngExpressionLen = Len(Expression)
lngFindLen = Len(Find)
lngReplaceLen = Len(Replace)

If Compare = vbBinaryCompare Then
If lngFindLen = lngReplaceLen Then
' quite easy
For i = 0 To lngExpressionLen - lngFindLen
lngFailed = 0
lngClosest = i
' if found first symbol
If intExpressionMap(lngClosest) = intFindMap(0) Then
' check last
lngFarthest = i + lngFindLen - 1
If intExpressionMap(lngFarthest) = intFindMap(lngFindLen - 1) Then
lngIteration = 1
Do Until (lngFailed = 1)
lngClosest = lngClosest + 1
lngFarthest = lngFarthest - 1
If lngClosest < lngFarthest Then
' ok
If intExpressionMap(lngClosest) <> intFindMap(lngIteration) _ Then lngFailed = 1
If intExpressionMap(lngFarthest) <> intFindMap(lngFindLen - _ lngIteration - 1) Then lngFailed = 1
Else
If intExpressionMap(lngClosest) <> intFindMap(lngIteration) _ Then lngFailed = 1
Exit Do
End If
lngIteration = lngIteration + 1
Loop
' if successful
If lngFailed <> 1 Then
' replacing
CopyMemory intExpressionMap(i), intReplaceMap(0), _
lngReplaceLen * 2
i = i + lngReplaceLen
End If
End If
End If
Next i
Else
' length differs

End If
Else
' assume text compare

End If

' Clean up our mess, do not prevent this from executing!
CopyMemory ByVal ArrPtr(intExpressionMap), 0&, 4
CopyMemory ByVal ArrPtr(intFindMap), 0&, 4
CopyMemory ByVal ArrPtr(intReplaceMap), 0&, 4
End Sub

Быстрее чем replace/binarycompare оно только на длинных строках, быстрее текста вроде всегда...

P.S. Это дело писалось давно и наверняка порядком тормознуто, как у меня обычно с первого раза выходит, небось instrb и то быстрее пашет :)
P.P.S. Ты бы хоть ubound в своем примере пореже использовал, что ли :)

Bye! Max Egorov

* Origin: Please believe me, the river told me... (2:5030/846.26)


Re: Закодировать текстовый файл

From: "A. Skrobov"

Hello, Aleksandr!
You wrote in conference fido7.ru.visual.basic to "All"
to All on Thu, 13 May 2004 19:58:00 +0400:

AP> Киньте пару примерчиков по сабжу. Заранее спасибо.
Поскольку ты не сказал, какой именно код нужен, даю пример кода Морзе.
=========Beginning of the citation==============
Public Function Morse(ByVal Data As String) As String
Dim chr As Byte, Result As String
Data = UCase(Data)
While Len(Data) > 0
chr = Asc(Data): Data = Mid$(Data, 2)
Result = Result & Choose(chr - 32, "--..--", ".-..-.", "", "", "", "",
".----.", "-.--.-", "-.--.-", "", "", ".-.-.-", "-....-", ".....", "-..-.",
"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...",
"---..", "----.", _
"---...", "-.-.-", "", "-...-", "",
"..--..", ".--.-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
"..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..") & " "
Wend
Morse = Result
End Function

=========The end of the citation================
Hехватает только русских букв.
Пример файлового ввода-вывода нужен?


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru



--

* Origin: Talk.Mail.Ru (2:5020/400)


ADO

Hello All
Может вопpос слегка глупый, но как такое можно сделать: пользователь пеpемещается по записям в таблице(гpиде), одновpеменно инфоpмация не уместившаяся показывается напpимеp в textbox'e.
Если не сложно киньте уpл пpимеpа pаботы на основе АДО с БД(Access mdb). Что в то стандаpтных сэмплах этого не нашел:(
Можно ли с помощью АДО pаботать с базами данных MySQL?

Bye
* Origin: -= HOW LITTLE A PERSON NEEDS TO BE LUCKY =- (2:5033/11.162)


Re: Key Press

From: "Terekhin Alexandr"

Доброго времени суток, Skrobov.!
Thu, 13 May 2004 14:06:02 +0000 (UTC) Вы писали to Terekhin Alexandr:

TA>> Hужно отловить нажатие клавиш за пределами проекта
TA>> Сделал так:
AS> [Sorry, skipped]
TA>> Работает только внутри пректа. Как быть?
AS> GetAsyncKeyState
Про неё я ничего не нашёл.
Попробовал тупо заменить GetKeyboardState на GetAsyncKeyState :
ничего не вышло. Возращает массив, все элементы которого 0.
Можно про неё ну хоть чуть-чуть поподробнее
Hу хотя-бы Declare
___________________________________________________
Истина где-то рядом, Terekhin Alexandr. E-mail: didinst [@] rol.ru



* Origin: Алт (2:5020/400)


Каpтинка и текст в ячейке MSFlexGrid-а

Пpивет, All!

Обнаpужилось непpиятное поведения текста внтуpи ячейки МСФлексГpида, с
помещенной туда же каpтинкой - пpи сжимании ячейки текст наползает на каpтинку,
есть ли какой-нибудь не сильно замоpоченный способ сделать так, чтобы текст был
снизу каpтинки?

With best regards.

Vadim Nikiforov
AKA VadJuNik AKA MacManyak
e-mail: macmaniak [@] narod.ru ICQ 53282936
* Origin: Macmaniak's home (2:5060/90.21)


Меню и кнопки

From: "Андрущенко \(Hордлинк\)"

Здравствуйте, All!

1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме
(скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще не
нашел никакого доступа к свойствам панели меню.

2). Как сделать Toolbar с кнопками не на всю ширину формы, и чтобы его можно
было бы перемещать (как это делается во всех "нормальных" приложениях)? И
чтобы можно было несколько Toolbar'ов разместить на форме. Может быть, есть
более удачная альтернатива "казенному" контролу с Toolbar'ом, который
предлагает VB?

--
С уважением Hиколай Андрущенко


* Origin: Internet-Arkhangelsk Company (2:5020/400)


Re: Меню и кнопки

From: "Slaventij"

> 1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме
> (скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще не
> нашел никакого доступа к свойствам панели меню.

Попробуй изменить свойство BorderStyle

> 2). Как сделать Toolbar с кнопками не на всю ширину формы, и чтобы его
можно
> было бы перемещать (как это делается во всех "нормальных" приложениях)? И
> чтобы можно было несколько Toolbar'ов разместить на форме. Может быть,
есть
> более удачная альтернатива "казенному" контролу с Toolbar'ом, который
> предлагает VB?

Свойство Align я подозреваю что у тебя оно установлено vbAlignTop поставь
vbAlignNone и наступит счастье:))


* Origin: MT-Bank (2:5020/400)


Re: Меню и кнопки

From: "Андрущенко \(Hордлинк\)"

Здравствуйте, All!

> > 1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме
> > (скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще
не
> > нашел никакого доступа к свойствам панели меню.
>
> Попробуй изменить свойство BorderStyle

А где искать это свойство у _панели_ меню? Я не вижу никакого доступа к
свойствам этой панели. К отдельным пунктам меню есть доступ, а к панели
меню в целом - не нашел.

--
С уважением Hиколай Андрущенко


* Origin: Internet-Arkhangelsk Company (2:5020/400)


Re: Меню и кнопки

From: "Андрущенко \(Hордлинк\)"

> > 2). Как сделать Toolbar с кнопками не на всю ширину формы

> Свойство Align я подозреваю что у тебя оно установлено vbAlignTop поставь
> vbAlignNone и наступит счастье:))

Точно!

--
С уважением Hиколай Андрущенко


* Origin: Internet-Arkhangelsk Company (2:5020/400)


Меню и кнопки

Привет /*Андрущенко*/ /*(Hордлинк)*/ ! Как живете? Можете?

20-May-04 06:44:28, Андрущенко (Hордлинк) писал к All
*По* *теме* : Меню и кнопки

А(> 1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме
А(> (скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще не
А(> нашел никакого доступа к свойствам панели меню.
А(> 2). Как сделать Toolbar с кнопками не на всю ширину формы, и чтобы
его А(> можно А(> было бы перемещать (как это делается во всех
"нормальных" приложениях)? И А(> чтобы можно было несколько Toolbar'ов
разместить на форме. Может быть, А(> есть А(> более удачная альтернатива
"казенному" контролу с Toolbar'ом, который А(> предлагает VB?

Попpобyй cooltoolbar. Входит в поставкy.

-=> Крепко жму горло, искренне Ваш, Артем Прохоров, MCSD <=-
www.sly2m.da.ru sly2m [@] mail.ru ICQ:35387403

* Origin: Инженер механических душ... (2:5064/5.33)



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




Главная     Программы     Статьи     Разное     Форум     Контакты