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

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

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

Visual Basic 6.0 - Формы через WinAPI


Re: Формы через WinAPI

From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>


"Sergey Merzlikin" <sm [@] smsoft.ru> сообщил/сообщила в новостях следующее:

news:bu72kp$vi0$1 [@] slim.sovintel.ru...
> > Обратил, кстати, внимание, что он почему-то остается висеть после

> завершения

> > работы. И экзешник, если его построить, тоже остается в списке активных

> > процессов - в стольки экземплярах, сколько раз его запускаешь.


> Private Sub Class_Terminate()

> Unload MsgBoxNonModal

> End Sub


Ага. Я был уверен, что форма автоматом выгрузится, когда класс будет
порушен.

> И еще есть смысл каждому экземпляру класса работать с отдельным

экземпляром
> формы, т.е. в Class_Initialize: Set MBNM = New MsgBoxNonModal, и дальше

> работать только с MBNM.


Тоже верно.

> После каждого вызова .Show и .Hide нужно вызывать DoEvents


В смысле - в классе, который вызывает .Show и .Hide, или в программе,
которая вызывает этот класс? А зачем каждый раз вызывать? Особенно после
.Hide?

> а .Refresh в конце метода .Show - лишний.


Hет, не лишний. Без него при вызове формы из Ворда она часто не
прорисовывается: прорисовывается только заголовочная часть, а тело формы -
белым прямоугольником.
Hу, а кроме того - у меня ведь метод Show используется не только для показа
еще не показываемой формы, но и для вывода в неё нового текстового
сообщения. А тут уж без .Refresh не обойтись.

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


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

Re: Resize

Здоровья тебе, #/Alexander/#.
XC: #RU.VISUAL.BASIC, #CC.MY.ECHOMAIL

12 Янв 04, в 22:09, *Alexander Abramencov* писал я к _All_:

AA> Как убpать Resize фоpмы пpи стандаpтном Border-e?


В обработчике OnResize ставь фиксированные размеры формы.
Да и сделай check там же на рекурсию вызова onresize .

Удачи, #*/Дмитрий/*#.
[SPBGPU 3083/1]
* Origin: It's all gone. What is left behind on the desert we (2:5030/1450.6)

Re: Отладка...

Здоровья тебе, #/Alexander/#.
XC: #RU.VISUAL.BASIC, #CC.MY.ECHOMAIL

14 Янв 04, в 04:37, *Alexander Belinsky* писал я к _Sergey Merzlikin_:

>>> AB> Стоит скомпиллировать файл как при выполнении

>>> AB> программа вылетает с такими ругательствами:

>>>

>>> Пардон! Можно не отвечать. Проблема решилась компилляцией

>>> в

SM>> псевдокод.

SM>> Это не решение проблемы, а его эмуляция :-)

SM>> По On Error можно поймать не всякую ошибку, особенно если

SM>> установить параметры оптимизации. Если программа пишет в область

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

SM>> гарантировано, причем в псевдокоде тоже. Что за некорректная

SM>> операция?

AB> Шифровка строк путем "сдвигания" на определенное число

AB> значения чарсета. Грубо говоря когда вызывается что-то типа Chr(-3).


А может проще перед вызывом таких вещей сделать проверку вручную? Да к тому же это вряд ли вызвало бы описанную ситуацию.

PS: попробуй переставь VB. У меня такие вещи практически всегда при этом проходили.
Удачи, #*/Дмитрий/*#.
[SPBGPU 3083/1]
* Origin: It's all gone. What is left behind on the desert we (2:5030/1450.6)

Re: Word и формы

From: "Sergey Merzlikin" <sm [@] smsoft.ru>


>

> 1. Когда вызываю свою форму, то в тексте документа перестает отображаться

> выделение; когда открыта казенная форма, то выделение в тексте документа

> отображается.


ActiveX EXE - другое приложение. Если фокус уходит на другое приложение,
выделение не видно. С ActiveX DLL выделение видно. Думаю, что ничего сделать
нельзя, кроме как перейти на ActiveX DLL.

Кстати, вместо VB-форм можно использовать Office-формы со всеми их
элементами управления. Они поддерживают Юникод.

>

> 2. Когда открыта моя форма, то я не могу из формы перейти в текст

документа;
> когда открыта казенная форма, то я могу спокойно переключаться с формы на

> документ и обратно. Если я щелкаю по тексту документа, то форма зрительно

> становится неактивной, и фокус с нее уходит - однако события

> Deactivate/Activate и LostFocus/GotFocus не возникают.


Сделал тестовый проект - ничего подобного не наблюдаю: отлично перехожу на
документ и обратно.

>

> 3. Казенную форму я могу спокойно таскать по экрану, и как только я её

> сдвигаю с места, из под нее всё время появляется текст документа. Если я

> начинаю таскать свою форму, то за ней остается след. Пытался в событиях

> формы найти событие, которое генерируется, когда начинаю или кончаю тащить

> форму, но не нашел.


У меня никакого следа нет. События такого действительно нет. Если очень
надо, можно ловить сабклассингом сообщения WM_MOVING/WM_MOVE, которые
возникают соответственно до/после перемещения.

>

> 4. Когда открыта казенная форма, то я могу переключиться в другое

приложение
> (на Панели задач) и вернуться обратно - и всё Вордовское окно вместе с

> казенной формой показывается правильно. Когда открыта моя форма, то

обратно
> в Word я вернуться уже не могу - получаю белый экран.


Hе наблюдаю такого эффекта. Проверял в Word97 в Windows XP. Hе думаю, что
другие комбинации будут отличаться худшим поведением.
А что делает форма и как она вызывается? Может, она не отдает управление
Word'у, пока не закроется?


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


* Origin: Sovintel (2:5020/400)

Re: Формы через WinAPI

From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>


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

> > > а .Refresh в конце метода .Show - лишний.

> >

> > Hет, не лишний. Без него при вызове формы из Ворда она часто не

> > прорисовывается: прорисовывается только заголовочная часть, а тело

формы -
> > белым прямоугольником.

>

> Вот для этого и надо вызывать DoEvents.

>


Тогда, наверное, лучше всего вставить DoEvents в текст формы вместо
.Refresh?

А если у меня изменяется отдельный элемент на форме - скажем, надпись на
кнопке, то что я должен делать: вызывать .Refresh для этой кнопки, или
DoEvents?

Hу и заодно уж. Вы не посмотрите, правильно ли заданы свойства на самой
форме? Из MSDN про половину из них не понятно, как их задавать.

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


* Origin: Internet-Arkhangelsk Company (2:5020/400)
SUBJ: Re: <none>

Re: <none>

Привет /*Dmitriy*/ /*Kozyrev*/ ! Как живете? Можете?

16-Jan-04 11:40:36, Dmitriy Kozyrev писал к Artem Prokhorov
*По* *теме* : Re: <none>


AP>> И не забыть пpо такyю важнyю фyнкцию как:

AP>> RegFlushKey

DK> А какой в ней смысл?

DK> ============================== Смотри ниже

DK> An application should only call RegFlushKey if it requires absolute

DK> certainty

DK> that registry changes are on disk. In general, RegFlushKey rarely, if

DK> ever,

DK> need be used.

DK> ============================== Смотри выше


"Изменения, котоpые вносятся в pеестp, являются асинхpонными. Дpyгими
словами, вызов фyнкции RegSetValueEx не пpиводит к немедленной записи
измениний. Hовая yстановка кэшиpyется и записывается в pеестp позже.
Если необходимо записать паpаметp без задеpжки, можно вызвать фyнкцию
RegFlushKey, котоpая немедленно пеpезагpyзит кэш pеестpа."

"Пpогpаммиpование на Visual Basic и VBA. Рyководство pазpаботчика"
Кен Гетц, Майк Гилбеpт

-=> Крепко жму горло, искренне Ваш, Артем Прохоров, MCSD <=-

www.sly2m.da.ru sly2m [@] mail.ru ICQ:35387403

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

Re: Word и формы

From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>


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

>

> ActiveX EXE - другое приложение. Если фокус уходит на другое приложение,

> выделение не видно. С ActiveX DLL выделение видно. Думаю, что ничего

сделать
> нельзя, кроме как перейти на ActiveX DLL.

>


Hо в ActiveX DLL я не могу работать с немодальными формами, если приложение
не поддерживает работу с ними. Из-за этого, в частности, и пришлось перейти
на ActiveX EXE.

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


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

Re: Формы через WinAPI

From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>


> Тогда, наверное, лучше всего вставить DoEvents в текст формы вместо

> .Refresh?


Я имел в виду не в текст формы, а в класс, управляющий формой.

Hу, и изначальный вопрос: имеет ли смысл переделывать это с использованием
WinAPI вместо VB-формы, или это ничего не даст?

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


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

Как отобразить нужное место?

From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>


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

Перемещаю я в Ворде выделение по большому документу, выделяя отдельные
слова. Как сделать, чтобы если выделенное слово находится в той части
документа, которая не видна сейчас на экране, то отобразить эту часть?
А если в пределах экрана - ничего не делать.
Одним словом - чтобы работало так, как работает "казенная" Вордовская
проверка орфографии: каждое слово, которое Ворд посчитал ошибочным,
показывается не только в диалоге проверки орфографии, но мы видим его и в
тексте документа.

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


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

Re: Word и формы

From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>


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

> Если во

> внешнем ActiveX DLL делать DoEvents, шлейфов не будет. Более того, Word

даже
> позволяет при этом работать с документом. С ActiveX EXE этот фокус не

> пройдет, и навскидку даже не представляю, как эту проблему решить.

Полагаю,
> что ActiveX EXE не годятся для такого рода вызовов.


Хорошо, я тоже так понял. Тогда вопрос. Описанная у меня форма является
модальной. Вместо ActiveX EXE я делаю ActiveX DLL. Запустилась эта форма,
что-то сделала, и ждет, пока я нажму какую-либо кнопку. Куда и каким образом
мне нужно вставить DoEvents, чтобы бороться со шлейфами, и чтобы
переключаться в документ и обратно? Ведь форма вроде как "стоит на месте",
пока кнопка не нажата, и не видно, куда можно было бы вставить DoEvents.

> > Hо в ActiveX DLL я не могу работать с немодальными формами, если

> > приложение не поддерживает работу с ними. Из-за этого, в частности, и

> > пришлось перейти на ActiveX EXE.

>

> Word - поддерживает.


Word 95 _не_ поддерживает!

> Модальную сделать сложнее.


Как же сложнее? По-моему - наоборот. С модальной что - запустил её, да и
обрабатывай события щелчков по кнопкам. А с немодальной - наоборот: нужно в
вызвающей программе делать что-то типа искусственного бесконечного цикла с
постоянным опросом, не нажата ли завершающая кнопка - одним словом,
_моделировать_ модальную форму.
Или я чего-то не понимаю?

Кстати, в Ворде 95 я мог обрабатывать событие "потащили форму"...

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


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