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

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

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

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

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


Создание дистрибутива

Я приветствую тебя Alexander!

Sat Feb 14 2004 12:56, Alexander Shherbakov (2:5020/794.77) wrote to Kapaev Alex:

AS> Есть такой сетапер, бесплатный, InnoSetup. С директориями умеет.
AS> Зарегистрирует что покажешь. Размер - порядка мегабайта.
Да, неплохой сетапер. Только он почему то под ХР при установке не всё регистрирует :( или неправельно регистрирует - может я что то не то делаю?

С глубочайшим уважением Sergey

* Origin: Latona (FidoNet 2:4651/18.50)


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

Добpый день\утpо\вечеp\ночь, достопочтимый Sergey !

19 февpаля 04 Sergey Merzlikin (2:5020/400) => Максим Кнышов

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

[... малость поскипано ...]

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

я вот пpоще от стандаpтного меню избавился, когда своё надо было вывести:

Private Sub Пpимечания_MouseDown(Button As Integer, Shift As Integer, x As
Single, y As Single)
If Button And vbRightButton Then
Пpимечания.Enabled = False 'избавляемся от стандаpтного меню
Пpимечания.Enabled = True
PopupMenu mnuPopupMyMenu
End If
End Sub

ЗЫ хз почему TextBox так pаботает,
но пеpедёpгивание .Enabled = False/True
помогает ...


С бестами и pегаpдами
Dmitry ds [@] u-kon.ru
* Origin: Hичто не слишком! (2:5015/23.70)


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

From: Максим Кнышов

Привет Dmitry!

DS> ЗЫ хз почему TextBox так pаботает, но пеpедёpгивание .Enabled = False/True помогает ...
Тоже хорошая идея...

--
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Максим Кнышов [ knyshow#mail.dsip.net ] [ gbu.dvostok.com ]
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Последняя версия программы Golden BackUp ( gbu.dvostok.com ) - 0.0.188 Beta 9
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•














* Origin: КПКП "Транс Агентство" (2:5020/400)


Упал... в унитаз упал

From: Mike

Hа компьютере (Windows 2000 SP4 и Visual Basic 6.0 SP5) имеется несколько
приложений на Бэйсике, еще месяц назад отлаженных, откомпилированных и
благополучно забытых.

И вот пару дней назад понадобилось их открыть и чего-то там поменять. Hо с
одним из них творится странное: открываем проект, запускаем его прямо из
VB, и сразу же выдается:

VB6.EXE - Application Error
The instruction at "0x********" referenced memory at "0x********". The
memory could not be "written".
Click on OK to terminate the program
Click on CANCEL to debug the program

и Бэйсик вылетает к чертовой бабушке. Один коллега сказал, что иногда
такое бывает, если при запуске не открыта ни одна форма. Открыл форму,
запустил - то же самое. Открыл две формы, три - не помогло. Запуск Trace
Into, Step Over или Start with full compile дает тот же эффект. Hо если
сделать File->Make и запустить полученный экзешничек, то все проходит
нормально.

Все это только в одном VB-приложении - запуск из VB любого другого проекта
происходит нормально. В то же время на другой машине (Win 2000 SP3 и VB
6.0 SP5) и этот проект запускается без проблем. Подскажите, пожалуйста,
как бороться - не хочется из-за этого винды переставлять.

--
Best regards
(M)ike
При ответе на e-mail убрать из адреса NOS

* Origin: Best antimagic/antiUFO cure: skeptik.net (2:5020/400)


.NET Х Win32

оПХБЕРЯРБСЧ!

я ОКЮРТHПЛHИ .NET ДЕК МЕ ХЛЕК. мH ОЮПС ВЕКHБЕЙ СРБЕПФДЮКХ, ВРH Б VS7 ЛHФМH
ОHКСВХРЭ МHПЛЮКЭМШИ exeЬМХЙ ОHД Win32. бВЕПЮ ОHЯРЮБХК VS7, МH ОHКСВХРЭ
exeЬМХЙ ОHД Win32 ОHКСВХКHЯЭ РHКЭЙH МЮ C++. бЮЯХЙ Х C# ОПЕДКЮЦЮЧР РHКЭЙH ОHД
.NET. цДЕ ЯHАЮЙЮ ГЮПШРЮ?

юМДПЕИ.


* Origin: Zenon N.S.P. news server (2:5020/52.0)


Еще раз .NET Х Win32 (Пардон за кодировку)

Приветствую!

С платформой .NET дел не имел. Hо пару человек утверждали, что в VS7 можно
получить нормальный exeшник под Win32. Вчера поставил VS7, но получить
exeшник под Win32 получилось только на C++. Васик и C# предлагают только под
.NET. Где собака зарыта?

Андрей.


* Origin: Zenon N.S.P. news server (2:5020/52.0)


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)


Threading...

From: "A. Skrobov"

Tue Feb 24 2004 23:53, Savelov Anton wrote to All:

SA> Есть вопрос .... написал я прогу в ней создаю отдельный процесс
SA> для функции с помощью: CreateEvent и CreateThread,
Процессы и нити, кстати, - разные вещи.

SA> но столкнулся с проблемой, а как этот процесс выгрузить?
SA> Пробывал ExitThread и TerminateThread, но в итоге выгружается
SA> вся прога :( (или зависает)
SA> Может кто подскажет как тут быть? (можно с примером, plzzz)
Вообще же, посмотри здесь:
www.jasonbock.net/vbthread.html
www.freevbcode.com/ShowCode.asp?ID=1287

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


Re: Многоязыковая поддержка...

From: Alexander Asyabrik

Привет, Artem.

Вы, было дело, писали, 2:28 25.02.04:


AP> Обpащаясь с вопоpосом ко всем:
AP> Уже не один pаз встpечаю коммеpческие многоязыковые пpогpаммы, в котоpых
AP> есть диpектоpия Languages, а в ней файлы типа russian.lng, english.lng и
AP> так далее.
AP> Откpыв этот файл видим пpостой список типа:
AP> &Файл
AP> &Hовый
AP> &Откpыть
AP> и т.д.

AP> Пеpвое, что пpиходит на yм, откpыть файл как текст, pазбить по стpокам,
AP> split и в массив их.
AP> Hо это означает, что все меню и вообще все текстовые сообщения в пpогpамме
AP> пpидется yказывать как:
AP> myLable1.Caption = lngArray(123) ' и томy подобное.
AP> А это же гемоppой жyткий. И пpямой пyть к ошибкам, пеpепyтанным стpокам...


А попробуй-ка теперь вот перепутать:

Public Enum Mesages
msg_myLable1Caption = 1
msg_myLable1ToolTipText = 2
........................
msg_CantOpenFile = 666
' etc...
End Enum

Public Function GetMesage(index As Mesages) As String
GetMesage = lngArray(index)
End Function

Public Sub SetLanguage(LangFile As String)

'Bla-Bla, сам напишешь код

myLable1.Caption = GetMesage(msg_myLable1Caption)
myLable1.ToolTipText = GetMesage(msg_myLable1ToolTipText)
'etc...

End Sub


Private Sub Command1_Click()
If GetFile(FileToOpen) = False Then
MsgBox GetMesage(msg_CantOpenFile) & FileToOpen, vbCritical
End If
End Sub



--
Alexander



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


Создание дистрибутива

Я приветствую тебя Alexander!

Sat Feb 14 2004 12:56, Alexander Shherbakov (2:5020/794.77) wrote to Kapaev Alex:

AS> Есть такой сетапер, бесплатный, InnoSetup. С директориями умеет.
AS> Зарегистрирует что покажешь. Размер - порядка мегабайта.
Да, неплохой сетапер. Только он почему то под ХР при установке не всё регистрирует :( или неправельно регистрирует - может я что то не то делаю?

С глубочайшим уважением Sergey

* Origin: Latona (FidoNet 2:4651/18.50)



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




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