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

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

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

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

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


Re: Можно ли...

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

16 Jan 04 20:29:07 в RU.VISUAL.BASIC Alexander Belinsky -> All:

AB> Можно ли не компиллируя проект работать с командной строкой?
AB> А то я уже заколебался через компилляцию отлаживать...

Project -> Properties... -> вкладка Make -> Command Line Arguments

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

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


Shareit!

From: "Sergei Ho"

Прошу программистов, работающих с Shareit,
откликнуться на мой адрес shareit [@] hotbox.ru
Есть пара конкретных вопросов.

Сергей.


* Origin: MTU-Intel ISP (2:5020/400)


Re: Word и формы

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

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

> А что делает форма и как она вызывается? Может, она не отдает управление
> Word'у, пока не закроется?

Форма является основным элементом программы спец. проверки орфографии,
устроенной по идеологии казенного Word'овского орфопроверяльщика, т. е.
когда нахожу первую ошибку - отображаю форму примерно аналогичного вида и
продолжаю работать, постоянно держа эту форму на экране, пока проверяемый
текст не закончится. Оформил всё это хозяйство в виде ActiveX EXE и вызываю
его из Word'овского макроса. По завершении работы возвращаюсь в макрос.
Т. е. весь процесс происходит внутри ActiveX EXE.

> >
> > 2. Когда открыта моя форма, то я не могу из формы перейти в текст
> документа;
> > когда открыта казенная форма, то я могу спокойно переключаться с формы
на
> > документ и обратно. Если я щелкаю по тексту документа, то форма
зрительно
> > становится неактивной, и фокус с нее уходит - однако события
> > Deactivate/Activate и LostFocus/GotFocus не возникают.
>
> Сделал тестовый проект - ничего подобного не наблюдаю: отлично перехожу на
> документ и обратно.
>

Может, это обусловлено вышесказанным?

> > 3. Если я начинаю таскать свою форму, то за ней остается след.
>
> У меня никакого следа нет.

У меня остается след и в том случае, если пытаюсь тащить Common dialog для
выбора файлов, вызываемый из того же проекта. Это в Ворде XP под Win XP. А
вот в Ворде 97 под Win 98SE Common dialog хоть и с порядочной задержкой, но
место под собой очищает. А вот моя форма в любом случае не очищает.

> > 4. Когда открыта казенная форма, то я могу переключиться в другое
> приложение
> > (на Панели задач) и вернуться обратно - и всё Вордовское окно вместе с
> > казенной формой показывается правильно. Когда открыта моя форма, то
> обратно
> > в Word я вернуться уже не могу - получаю белый экран.
>
> Hе наблюдаю такого эффекта. Проверял в Word97 в Windows XP. Hе думаю, что
> другие комбинации будут отличаться худшим поведением.

У меня это стабильно и в Ворде XP под Win XP, и Ворде 97 под Win 98SE.
Причем если в Win XP я хоть могу выйти из положения, щелкнув по всем
приложениям на Панели задач, чтобы они свернулись - тогда появляется моя
форма. А в Win 98SE этого режима нет.

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


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


Re: Word и формы

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

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

> > > 3. Если я начинаю таскать свою форму, то за ней остается след.
> >
> > У меня никакого следа нет.
>
> У меня остается след и в том случае, если пытаюсь тащить Common dialog для
> выбора файлов, вызываемый из того же проекта. Это в Ворде XP под Win XP. А
> вот в Ворде 97 под Win 98SE Common dialog хоть и с порядочной задержкой,
> но место под собой очищает. А вот моя форма в любом случае не очищает.

Вру. Поведение одинаковое и у Common dialog, и у моей формы: в Ворде 97 под
Win 98SE след возникает, но очищается. В Ворде XP под Win XP (но на другой
машине!) след так и остается.

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


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

SUBJ: Re:
Re:

From: Alexander Asyabrik

Привет, Artem.

Вы, было дело, писали, 0:37 17.01.04:


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

Без задержки? Это смотря о какой задержке речь:

The RegFlushKey function [...] Calling this function excessively can
have a negative effect on an application's performance.

An application should only call RegFlushKey if it requires absolute
certainty that registry changes are on disk. In general, RegFlushKey
rarely, if ever, need be used.

(с) Win32 Programmer's Reference

И зачем нам это надо, чтобы ключ был записан именно в _файл_ реестра?
В памяти-то все изменения уже будут и без этого. Работа с памятью
всегда самая быстрая. Hа кой ляд тормозить и так не очень быстрое
приложение на VB?


--
Alexander



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


Resize

H!, _[Dmitry]_!
DF> В обpаботчике OnResize ставь фиксиpованные pазмеpы фоpмы.
Это я додумался сделать, но когда минимизиpуешь фоpму ошибка...
DF> Да и сделай check там же на pекуpсию вызова onresize .
Пpоблема pишилась. Hе уж то никто никогда не делал Fixed Dialog, MinButton=True.
Так легко и пpосто.


g'bye and g'luck, _[Dmitry]_!
* Origin: Down/Upload Soft: Svalka.Tk (2:5054/29.33)


Работа с множественными выделениями в Word

From: "Sergei Ho"

В последних версиях Word, можно выделять
куски текста. При этом выделение не является единым целым,
а представляет из себя несколько, выделенных в разных местах
документа, фрагментов.

Как из VBA перебирать эти выделения и анализировать их?
Как из VBA сделать такие множественные выделения?

Сергей.


* Origin: MTU-Intel ISP (2:5020/400)


Re: Word и формы

From: "Sergey Merzlikin"

> Форма является основным элементом программы спец. проверки
орфографии,
> устроенной по идеологии казенного Word'овского орфопроверяльщика, т. е.
> когда нахожу первую ошибку - отображаю форму примерно аналогичного вида и
> продолжаю работать, постоянно держа эту форму на экране, пока проверяемый
> текст не закончится. Оформил всё это хозяйство в виде ActiveX EXE и
вызываю
> его из Word'овского макроса. По завершении работы возвращаюсь в макрос.
> Т. е. весь процесс происходит внутри ActiveX EXE.

Пока не завершился макрос, - это не совсем немодальный вызов. Если во
внешнем ActiveX DLL делать DoEvents, шлейфов не будет. Более того, Word даже
позволяет при этом работать с документом. С ActiveX EXE этот фокус не
пройдет, и навскидку даже не представляю, как эту проблему решить. Полагаю,
что ActiveX EXE не годятся для такого рода вызовов.

Вызов будет чисто немодальным, если внешний компонент (DLL или EXE) сразу
после отображения окна вернет управление в макрос, а макрос сразу после
этого завершится. Результат работы внешнего компонента можно передать в Word
путем прямого доступа из этого компонента к объектной модели Word'а или
путем вызова другого макроса.

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

Word - поддерживает. Модальную сделать сложнее.

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


* Origin: Sovintel (2:5020/400)


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

From: "Sergey Merzlikin"

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

В принципе вставлять можно куда угодно, лишь бы после изменения формы и до
начала длинного процесса, не дающего ей отрисоваться.
Я бы педпочел вставлять DoEvents в код, вызывающий метод класса, поскольку у
программиста остается выбор, ставить здесь DoEvents или считать, что его код
и так достаточно быстро возвращает управление в обработчик событий. К тому
же, DoEvents изменяет порядок обработки событий, что иногда стоит учитывать.
Если вызов DoEvents закопан достаточно глубоко, про этот эффект можно и
забыть.
Вообще говоря, если в программе есть длительные циклические процессы, в них
нужно обязательно как минимум каждые 1-2 секунды вызывать DoEvents, иначе
система будет считать, что приложение зависло, причем возможны самые
неожиданные эффекты вплоть до подвисания оболочки системы - explorer.exe.

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

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


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


* Origin: Sovintel (2:5020/400)


Re: Word и формы

From: "Sergey Merzlikin"

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

Вот в это "что-то сделала", если оно длится не доли секунды, и нужно
вставить DoEvents. После этого управление возвращается в макрос, и больше
никаких DoEvents не нужно. Если же там имеется бесконечный цикл (чего я
делать не советую), не возвращающий управление, пока не нажата кнопка, туда
тоже нужно вставить DoEvents.

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

С Word 95 отдельная история, там совсем другой язык программирования, и я
уже плохо помню, как это у него устроено. Вполне может быть, что это так, но
сейчас мне это негде проверить.

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

Модальная - это когда невозможно переключиться в другое окно приложения,
пока открыта эта форма. Word (97 и далее как минимум) позволяет работать с
документом даже если текущий макрос не завершен. Чтобы сделать форму
модальной, нужно искусственно временно сделать неактивным окно Word'а, в чем
и заключается сложность. Разумеется, если форма, вызванная из макроса,
крутит бесконечные циклы без DoEvents, Word просто не имеет возможности ни
обновить окно, ни дать возможность работать с документом. С некоторой
натяжкой это можно назвать модальной формой, но, на мой взгляд, просто так
делать нельзя.
Искусственный бесконечный цикл - штука чреватая и не согласующаяся с
событийной моделью программирования. Hе надо ждать, пока кнопка нажмется,
пусть макрос завершится сразу после показа формы. А кнопка пусть породит
свое событие, от которого или запустится другой макрос, или все нужные
действия над документом будут выполнены прямо из VB.

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


* Origin: Sovintel (2:5020/400)



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