Июнь 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 года):
Довольно удивительно: выполните эту же форму с правами администратора, и вы увидите, что проблема исчезла. Возможно, изменение значения свойства 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 г.