FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9114
Вход
БИБЛИОТЕКА MSTBUT

Одним из первых желаний при переходе на VFP5 и WINDOWS 95 было создать опухающие кнопки при наведении на них курсора мыши. На конференциях Было достаточно примеров и подходов, чтобы сравнить и выбрать что-то более или менее подходящее.


 
Прислал: SpyFox   Категория: Интерфейс


БИБЛИОТЕКА MSTBUT

Created by SpyFox

Одним из первых желаний при переходе на VFP5 и WINDOWS 95 было создать
опухающие кнопки при наведении на них курсора мыши. На конференциях Было
достаточно примеров и подходов, чтобы сравнить и выбрать что-то более или
менее подходящее. Но одной из основных причин, по которым мне не подходили
имеющиеся варианты, это то, что для каждого состояния кнопки было необходимо
создавать картинку. Т.е. для кнопки по умолчанию, активной кнопки и кнопки
недоступной. Ну рисунок для активной кнопки можно отбросить и обойтись без
неuj, а вот без рисунка для недоступной кнопки никак не получиться нормального
вида программы.
После долгих поисков я нашел способ обходиться одной картинкой и изюминка моего
подхода вот в чем.
Все мы знаем, что рисунок на стандартном объекте COMMANDBUTTON в зависимости от
значения свойства ENABLED принимает тот или иной вид, т.е показывает доступна
кнопка или нет. Вот я и решил это использовать.
Класс COOLBUTTON я создал на основе класса CONTROL, куда и замаскировал объект
COMMANDBUTTON, т.е. использовал этот объект как картинку. Правда при этом пришлось
пожертвовать тем, что нельзя изменять цвет кнопки и вставлять надпись.
После того, как я создал такую кнопку, мне захотелось создать и опухающую кнопку
со списком.
Класс COOLCOMBO я тоже решил создать на основе класса CONTROL, а в нем разместить
две готовые кнопки из класса COOLBUTTON. Правда здесь начались проблемы. Дело в том,
что из методов одной кнопки как бы не существовало другой, вследствии чего мне пришлось
снять с рабочих методов типа HIDEFOCUS, SHOWFOCUS и т.д. атрибут HIDDEN и установить -
PUBLIC.
Хотя я и оставил возможность устанавливать картинку для активной кнопки, пользоваться
этой возможнотью или нет - решать вам.
Хотя по-моему получилось достаточно удачно, не обошлось и без проблем.

Проблемы состоят в следующем:
1. Мне эта проблема до сих пор непонятна, если может кто объяснить, буду очень признателен.
Суть ее вот в чем. Если в форму AS TOP LEVEL встроить TOOLBAR, а на TOOLBAR разместить
кнопку COOLBUTTON и в метод CLICK написать код для завершения работы этой формы, то VFP
"зависает" или невозможно убрать форму с экрана. Поэтому я использую следующий код,
в метод CLICK вписываю KEYBOARD{"ALT+F4"}. При run-time это работает, под оболочкой
возможно "зависание".
2. Класс COOLCOMBO нормально будет работать только на TOOLBAR, который встроен в форму
AS TOP LEVEL. Если его встроить в TOOLBAR на основном окне, то меню будет выводиться
в активной форме, а не возле кнопки, как это расчитано. (Думаю эта проблема в дальнейшем
разрешиться).
3. Есть и другие проблемы, но они так сильно не бросаются в глаза и не всегда проявляются.

Для запуска примера запустите программу MAIN.PRG.
******************************************************************************************

Думаю, что вы не сильно будете судить мое творение, так как я не прошу ничего взамен и
никак не могу вас заставить использовать эти наработки. Может быть кому-то они покажутся
очень даже ничего, а кого-то просто стошнить, так или иначе выставляю это на показ от всей
души и поздравляю с Наступающим Новым Годом Вас и Ваших близких.

28.12.2000 г.

******************************************************************************************

Библиотека MSTBUT.VCX
VFP6+SP3
******************************************************************************************
Основные объекты
******************************************************************************************
1. COOLBUTTON - кнопка
2. COOLCOMBO - кнопка с выпадающим меню
3. COOLSEPARATOR - разделитель между кнопками

******************************************************************************************
Вспомогательные объекты
******************************************************************************************
1. BUTTIMER - таймер, запускающийся при активизации кнопки.
2. COOLSHAPE - объект, вставляющийся вместе COOLSEPARATOR

КЛАСС COOLBUTTON
******************************************************************************************
У класса COOLBUTTON есть следующие дополнительные свойства.
1. ACTIVEPICTURE - содержит имя картинки, которая отображается на кнопке,
при наведении курсора мыши.
2. DEFAULTPICTURE - содержит имя картинки, которая отображается по умолчанию.
3. CHECKTYPE - при установке этого свойства в .T., кнопка работает как CHECKBOX.
4. VALUE - свойство актуально при значении CHECKTYPE=.T., и определяет
в каком положении находится кнопка (вдавленная или нет).
5. TOOLTIPTEXT - содержит текст всплывающей подсказки.
Свойства CMDCAPTION и CMDFONTNAME пока не работают
******************************************************************************************
Следует заметить, во внутреннм механизме кнопки задействовоаны следующие методы.
Init, MouseMove, MouseDown, MouseUp, а также другие дополнительные методы. Поэтому
не забывайте при использовании этих методов вставлять строку DODEFAULT().
*******************************************************************************************
Обработка ошибок отсутствует.
******************************************************************************************

КЛАСС COOLCOMBO
******************************************************************************************
У класса COOLCOMBO есть следующие дополнительные свойства.
1. ACTIVEPICTURE - содержит имя картинки, которая отображается на кнопке,
при наведении курсора мыши.
2. DEFAULTPICTURE - содержит имя картинки, которая отображается по умолчанию.
3. TOOLTIPTEXT - содержит текст всплывающей подсказки.
Свойства CMDCAPTION пока не работает

Помимо основных методов класса добавлены следующие:
1. ONCREATEMENU - вызывается при нажатии на кнопку COMBO, в качестве параметра
передается имя POPUP-меню. В данном методе необходимо
написать код создания выводимого меню. Для большей ясности
смотрите код примера.
2. ONSELECTIONMENU- вызывается при выборе пункта меню. В качестве параметра передается
номер выбранного пункта меню.
******************************************************************************************
Следует заметить, во внутреннм механизме кнопки задействовоаны следующие методы.
Init, MouseMove, MouseDown, MouseUp, а также другие дополнительные методы. Поэтому
не забывайте при использовании этих методов вставлять строку DODEFAULT().
*******************************************************************************************
Обработка ошибок отсутствует.
******************************************************************************************

Скачать дополнителный файл
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.971) Вложение [19.58]kb
Дополнения пользователей
БИБЛИОТЕКА MSTBUT
[+][?]
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика