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

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

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

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

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


Re: очередной глупый вопрос про классы...

Мы где-то виделись, A.?

15 Feb 04 18:56:25 в RU.VISUAL.BASIC A. Skrobov -> мне:

DK>>>> FYI, в COM есть возможность определить запись в vTable не как адрес
DK>>>> процедуры, а как адрес переменной. Какой из этих способов использует VB
DK>>>> - не проверял, но мне кажется, что второй.
AS>>> Первый, для совместимости с disp-only интерфейсами. Могу процитировать
AS>>> Аппельмана в доказательство.
DK>> Hе надо, я тебе верю. А ты не разбирался с этими методами? Hасколько они
DK>> короткие?
AS> Стал разбираться - и действительно, процедуры не генерируются! Я в
AS> растерянности.

Точно не генерируются? Я заюзал TypeLib Information - так он и на свойства,
и на переменные говорит одно и то же, мол, свойства это, самые настоящие. :)

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: Спрайты

From: "A. Skrobov"

Hello, Martynov!
You wrote in conference fido7.ru.visual.basic to "Andrew Shelkovenko" to Andrew Shelkovenko on Tue,
17 Feb 2004 10:50:45 +0000 (UTC):

AS>> В Painte, можно вырезать кусок рисунка и таскать его без
AS>> всяких торможений из-за перерисовки и т.п.
AS>> Вот как это сделано?
MS> Эта штука называется "Image List"
Имхо Image List тут совершенно не при чём.

MS> в свое время пытался приблизиться к его скорости прорисовки функциями
MS> BitBlt и пр., ничего не вышло - у меня моргало, а там нет, хотя битмап
MS> раза в 4 больше (примерно 200 х 200 пикселей) по экрану таскал, и это
MS> на P75 с видяхой S3 Trio.
Очень помогает бороться с морганием AutoRedraw = False + субклассинг WM_PAINT + ValidateRect всего окна в обработчике. Проверено.


--
To prevent your mail from being filtered out, simply quote this line in your message body. A464E022



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


Re: очередной глупый вопрос про классы...

From: "A. Skrobov"

Hello, Dmitriy!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov" to A. Skrobov on Tue, 17 Feb 2004
17:34:32 +0300:

DK>>>>> FYI, в COM есть возможность определить запись в vTable не как адрес
DK>>>>> процедуры, а как адрес переменной. Какой из этих способов использует
DK>>>>> VB - не проверял, но мне кажется, что второй.
AS>>>> Первый, для совместимости с disp-only интерфейсами. Могу процитировать
AS>>>> Аппельмана в доказательство.
DK>>> Hе надо, я тебе верю. А ты не разбирался с этими методами? Hасколько
DK>>> они короткие?
AS>> Стал разбираться - и действительно, процедуры не генерируются! Я в
AS>> растерянности.
DK> Точно не генерируются? Я заюзал TypeLib Information - так он и на
DK> свойства, и на переменные говорит одно и то же, мол, свойства это, самые
DK> настоящие. :)
Совершенно точно. Кода под рукой нету, но завтра запощу.
По-видимому, соответствующие процедуры лежат в msvbvm
Значит, преимущество от использования публичных переменных в выигрыше в размере кода. И только.


--
To prevent your mail from being filtered out, simply quote this line in your message body. A464E022



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


Re: интимная связь VB и C

From: "A. Skrobov"

Hello, Dmitriy!
You wrote in conference fido7.ru.visual.basic to "Dmitry Sergunin" to Dmitry Sergunin on Tue, 17 Feb
2004 17:12:39 +0300:

DS>> ... а, кста, ты, кажется, с полгода назад кидал в эху чё-то подобное
DS>> (типа stdcall.dll или как-то так) --> она не это самое делает ?
DS>> поподpобнее о её возможностях pасскажи, плз.
DK> Я ее сейчас переписываю. Думаю, в ней будет следующее:
DK> вызов функции по указателю (stdcall и cdecl), при этом можно описать
DK> "прототип" этой функции через Declare (спасибо за совет Антону
DK> Лобастову);
8-[ как это? научи.



--
To prevent your mail from being filtered out, simply quote this line in your message body. A464E022



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


Re: Hемного о проигрывании звука...

From: Alexander Asyabrik

Привет, Максим.

Вы, было дело, писали 17 февраля 2004 г., 17:59:


МК> Произрываю wav и mp3 при помощи функции

МК> Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

МК> так вот если попытаться проиграть несуществующий файл или файл неправильного формата или
МК> попытаться остановить проигрывание файла без его предварительго запуска, то ф-ция выдает
МК> сообщение об ощибке. Можно эту ошибку как-то отловить? on error goto не перехватывает.

И не должно. Это ошибка не VB-шная. И вообще, если не путаю, эта
функция всегда показывает сообщение об ошибке, если что не так.

А вообще ты выбрал слишком примитивную функцию. Есть (чуть) более
продвинутая mciSendString. Она даже описание ошибки возвращает.
Вот тебе для затравки (это работало с CDAUDIO, подправишь):

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Private Declare Function mciGetErrorStringA Lib "winmm.dll" _
(ByVal mciError As Long, ByVal buffer As String, _
ByVal length As Integer) As Integer

Public Function mciCommand(strCmnd As String) As Boolean
Dim mciError&
Dim mciErrString$
Dim returnStr As String * 255
Dim returnCode As Integer
Dim errorStr As String * 255
strCmnd = LCase(strCmnd)
mciError = mciSendString(strCmnd & " cdaudio ", returnStr, 255, 0&)
If mciError <> 0 Then
returnCode = mciGetErrorStringA(mciError, errorStr, 255)
mciErrString = Trim(errorStr)
Debug.Print strCmnd & ":" & mciErrString
mciCommand = False
Exit Function
End If
mciCommand = True
End Function


--
С уважением, Alexander
9:32:52 PM



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

SUBJ: Re: FTP -> HDD
Re: FTP -> HDD

From: Alexander Asyabrik

Привет, Максим.

Вы, было дело, писали 17 февраля 2004 г., 17:55:


МК> Hашел вот такую вот штуку для работы с ФТП (загрузка на ФТП , аплоад)

<---skip---->


МК> Эта вещь использует MS Internet Transfer Control 6.0, но у меня что-то не стоит на
МК> использование этого компонента. Можно что-то подобное сделать апишками?
МК> Если да, то подкиньте плиз семплы, а идеальный вариант - модуль для загрузки и аплоада
МК> с/на ФТП.

Смотри где-то тут
www.vbip.com/protocols/ftp/vb-ftp-client-library/default.asp


--
С уважением, Alexander
9:55:01 PM



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


Re: Райт-клик на текстовом поле

From: Alexander Asyabrik

Привет, Максим.

Вы, было дело, писали 17 февраля 2004 г., 17:57:


МК> При райт-клике на текстовом поле отображается стандартное меню с пунктами типа
МК> "Копировать" и т.п. Могу ли я для определенного текстового поля запретить вывод
МК> этого меню? Мне просто нужно выводить свое меню при райт-клике, а получается, что сначала
МК> отображается стандартное меню, а уже потом мое. Это можно исправить?

Да.

Private Sub Text1_Mousedown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
Text1.Enabled = False
Text1.Enabled = True
PopupMenu mnuMenu
End If
End Sub



--
С уважением, Alexander
9:21:59 PM



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


Re[3]: Райт-клик на текстовом поле

From: "Sergey Merzlikin"

>
> SM> В общем случае задача решается сабклассингом текстбокса с ловлей
> SM> WM_CONTEXTMENU и "глотанием" его, т.е. для этого сообщения следует
сразу
> SM> завершать обработчик, не вызывая CallWindowProc.
>
> Вот сабклассинг - мое слабоеместо. семпл есть?

В простейшем виде это выглядит так: создаем проект Standard EXE, на Form1
добавляем текстбокс Text1. Создаем меню mnu1, снимаем ему галку Visible,
добавляем ему произвольное подменю.
Код формы:

Option Explicit

Private Sub Form_Load()
' Включение сабклассинга
pWndProc = SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf TxtProc)
End Sub

Private Sub Form_Unload(Cancel As Integer)
' Выключение сабклассинга
SetWindowLong Text1.hWnd, GWL_WNDPROC, pWndProc
End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Text1.SetFocus
PopupMenu mnu1
End Sub

Добавляем стандартный модуль.
Код модуля:

Option Explicit

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA"
_
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long
Public Const GWL_WNDPROC = -4&
Private Const WM_CONTEXTMENU = &H7B&

Public pWndProc As Long 'Сохраненный адрес прежней оконной процедуры

Public Function TxtProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
' Hовая оконная процедура - она ловит все сообщения окна
Select Case uMsg
Case WM_CONTEXTMENU
' Система вызвала контекстное меню - ничего делать не надо,
' просто вернуть 0
Case Else
' Для остальных сообщений нужно вызвать прежнюю
' оконную процедуру и вернуть ее результат
TxtProc = CallWindowProc(pWndProc, hWnd, uMsg, wParam, lParam)
End Select
End Function

Это простейший вид сабклассинга, множественные экземпляры формы не
поддерживаются.

--
Сергей Мерзликин
www.smsoft.ru/ru/


* Origin: Sovintel (2:5020/400)


On error - странности

Hi, All !

Столкнулся вот с такой проблемой. Исспользуется VB6+SP5, Win2k3+SP1+HF.

Есть цепочка последовательный вызовов методов, допустим:
mainform->function1->sub1->sub2->function2

Ставим опцию IDE в Break unhandled error, в каждом методе определен обработчик
ошибок On Error GoTo err. Если ошибка происходит например в sub2, то в IDE
показывается местный обработчик, отключаем его, запускаем и видим сообщение из
обработчика в sub1, и.т.д вплоть до mainform. Вобщем интересное поведение.
Так вот проблема собственно не в таком(хотя видимо с этим связанная)
выполнении обработчиков, а в том, что в скомпилированном виде, ниодин из них не
выполняется, т.е. приложение валится с банальной ошибкой доступа к памяти.
Код дающий такой эффект эквивалентен приблезительно следующему: zz = arr(-1)
Хотя ради интереса делал err.raise и оно тоже упало на ровном месте, т.е. ни
один из обработчиков по ходу выполнения кода не сработал.

Я в растеренности, пользователи волнуются, причем не понятно когда и почему все
это началось.

Good-bye, All !!! С вами был, есть и будет: Max Irgiznov [VS.NET] [FreeBSD]
* Origin: KittenMail ничто... не pаботает... так долго... (2:5051/36.20)


Re: Упаковка в ZIP и CAB

Мы где-то виделись, Максим?

17 Feb 04 18:59:25 в RU.VISUAL.BASIC Максим Кнышов -> бЯЕЛ:

МК> Hужен семплы по упаковку списка файлов и папок (со вложенными папками и
МК> файлами) в архивыформатов ZIP и CAB с поддержкой установки методов сжатия
МК> (Быстрое Максимальное) иустановки паролей. Как обязательно условие -
МК> ПОДДЕРЖКА РУССКИХ ИМЕHHО ФАЙЛОВ в т.ч. и нетолько в формате 8.3.

Моя библиотечка для Cab лежит на www.vbrussian.com.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)



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




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