234 K

Июнь 2010

 


Ваши приложения VFP 9.0 SP1 уже работают в ОС Windows Vista?

Маркус Винхард (Markus Winhard)

Мои заказчики не согласны дожидаться сервисного пакета SP2, в котором будут исправлены проблемы работы VFP9 в операционной системе Vista. Наверное, и ваши заказчики тоже не могут ждать, пока созданные вами приложения начнут работать в ОС Vista. В этой статье вы найдете мои идеи относительно того, как обойти проблемы, которые могут возникнуть у приложений, созданных в версии VFP 9.0 SP1, при работе в среде Windows Vista. Не могу гарантировать, что все способы, работающие у меня, будут также работать и у вас. Но мне хотелось бы получить от вас сообщение в том случае, если у вас что-то не ладится. Кстати, к вопросу о «не работает»: программа просмотра из системы управления версиями Visual SourceSafe, которая позволяет видеть отличия одной версии от другой, также работает некорректно в операционной системе Vista. Левая панель обычно остается пустой до тех пор, пока вы не выберете программный код с помощью мыши или не нажмете комбинацию клавиш, предусмотренную для демонстрации имеющего отличия фрагмента исходного кода (например, CTRL+HOME или CLTR+END). Проблемы испытывают обе версии: VSS 6.0 и VSS 2005.


Исправьте свои формы, чтобы их границы были нарисованы правильно в системе с интерфейсом Vista Aero

Кэлвин Ся (Calvin Hsia)

Похоже, в ОС Windows Vista неправильно рисуются границы (borders) некоторых форм. При выполнении формы ядро Fox обращается к операционной системе Windows с запросом о создании окна, а затем настраивает свойство BorderStyle этого окна. Очевидно, при использовании интерфейса Vista Aero (за исключением случаев выполнения с правами администратора) свойство BorderStyle нельзя настроить после того, как окно уже создано. Чтобы воспроизвести эту проблему, запустите Visual FoxPro (я протестировал также младшие версии, включая версию VFP7, которая появилась летом 2001 года):

  • Выберите в меню File->New->Form.

  • В списке свойств дважды щелкните мышью по свойству BorderStyle, чтобы присвоить ему значение 1 или 2:

    0 = No border (нет проблем, потому что границы не рисуются).

    1 = Fixed Single.

    2 = Fixed Dialog.

    3 = Sizable (Default) (нет проблем, потому что это значение используется по умолчанию).

  • Нажмите комбинацию клавиш Ctrl-E или щелкните мышью по кнопке со значком “!” в инструментальной панели, чтобы выполнить форму.

  • Присвойте форме какое-то имя.

  • Переместите эту форму куда-нибудь в другое место, чтобы появилась необходимость перерисовать ее границы или строку заголовка (title bar)

  • Результат: окно ведет себя так, как будто у него нет границ, они не будут перерисованы.

Довольно удивительно: выполните эту же форму с правами администратора, и вы увидите, что проблема исчезла. Возможно, изменение значения свойства BorderStyle в приложении, которое не обладает правами администратора, могло бы создать угрозу безопасности: у такого приложения могла бы появиться возможность захватить дескриптор окна из другого процесса и имитировать экранную форму с учетными данными пользователя (Credentials) или нечто подобное.


Функция MessageBox с дополнительными возможностями


Функция BindEvent на стероидах

Крег Бойд (Craig Boid)

Встроенная в Visual FoxPro 9 функция BindEvent демонстрирует замечательную способность перехватывать события отправки сообщений (windows message events). Нет сомнений в том, что где-то в своем исходном коде эта функция обращается к API-функции SetWindowLong (http://msdn.microsoft.com/en-us/library/ms633591) и обеспечивает волшебство за счет создания подкласса целевого окна (http://msdn.microsoft.com/en-us/library/ms633570).

Снимаю шляпу перед командой Fox Team за то, что они предоставили эту возможность. Но как быть в том случае, если вам необходимо модифицировать окно сообщения messagebox прежде, чем оно появится на экране (например, изменить надписи на кнопках и поместить это окно в центре вызвавшей его формы), или что, если вам хочется создать глобальный обработчик клавиатурных прерываний (Global Keyboard Hook)? В общем, как быть в том случае, если вы, будучи разработчиком Visual FoxPro, захотите воспользоваться преимуществами API-функции SetWindowsHookEx (http://msdn.microsoft.com/en-us/library/ ms644990) и заглянуть во все двери, которые открывает эта функция? Возможно, я что-то упустил из виду, но не похоже, чтобы функция BindEvent могла справиться с этим.

Некоторые идеи относительно того, какие возможности мне хотелось бы иметь в Visual FoxPro, возникли у меня задолго до появления проекта Sedna, и для реализации некоторых из них требовалась возможность использовать функцию SetWindowsHookEx. Итак, сегодня я решил выяснить, как мы (сообщество Visual FoxPro) могли бы это сделать.


Возврат на основную страницу

К архивам

© Edel Ltd. Все права защищены. 2010 г.

Hosted by uCoz