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

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

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

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

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


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

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

"Sergey Merzlikin" сообщил/сообщила в новостях следующее:
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"

>
> 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'у, пока не закроется?


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


* Origin: Sovintel (2:5020/400)


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

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

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

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

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

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

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

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


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

SUBJ: Re:
Re:

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

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

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ордлинк\)"

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

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

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

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


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


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

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

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

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

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

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


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


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

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

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

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

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


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


Re: Word и формы

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

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

> Если во
> внешнем 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)



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




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