Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


понедельник, 2 февраля 2009 г.

JvAppFrm package: Компоненты JvApplication, Forms.

Закладка компонентов Jv Application, Forms

Эта закладка в Jedi Visual Control Library(JVCL), содержит компоненты, позволяющие разработчику без усилий продемонстрировать отстутствие чувства вкуса и в течение пары минут создать приложение с раздражающим дизайном. =) Я говорю о компонентах для создания “анимации” в заголовках форм и наложения фоновой картинки на саму форму. Впрочем, пара полезных компонентов там тоже есть.

JvAppEvents: TJvAppEvents

Компонент предназначен для создания обработчиков событий TApplication и задания значения некоторых свойств TApplication в режиме дизайна. Фактически представляет собой обёртку над классом TApplication. Компонент пришёл в JVCL из библиотеки RxLib.

JvFormMagnet: TJvFormMagnet

Компонент делающий форму “магнитной”. В зависимости от настроек, форма с магнитом начинает прилипать к краям экрана, главной форме, а также может приклеить к себе другую форму, так, что перемещая мышкой по экрану одну форму, вторая будет перемещаться вместе с первой.

JvFormWallpaper: TJvFormWallpaper

Компонент позволяющий указать любую картинку в качестве фона для формы.

image

Пример работы TJvFormWallpaper

Hint: мерцание при изменении размеров формы прекращается если у формы включить свойство DoubleBuffered.

JvTransparentForm: TJvTransparentForm

Этот компонент делает форму прозрачной. Целиком, или по маске. Прозрачными также становятся все компоненты, помещённые на форму. Ниже на картинке можно посмотреть результат работы этого компонента. Имхо, единственное место, где такой приём стоит использовать – это создание окна-заставки(splash form) необычной формы.

 image

“Анимация форм”

JvAppAnimatedIcon: TJvAppAnimatedIcon

Этот компонент меняет иконку запущенной программы по таймеру, создающий эффект анимации. Кадры для анимации берутся из подключенного ImageList. Есть возможность установить задержку для смены кадров.

TJvAppAnimatedIcon  и TJvFormAnimatedIcon в заголовке формы.

пример работы TJvAppAnimatedIcon, TJvFormAnimatedIcon в заголовке формы.

Capture AnimationTaskBarTJvAppAnimatedIcon, TJvFormAnimatedIcon и TJvAnimTitle в панели задач (taskbar)

JvFormAnimatedIcon: TJvFormAnimatedIcon

Компонент, аналогичный TJvAppAnimatedIcon, но меняющий иконку только для отдельной формы.

JvAnimTitle: TJvAnimTitle

Ещё один вредный бесполезный компонент для создания “анимации”. Этот компонент “анимирует” заголовок(Caption) формы. Пример работы можно посмотреть на рисунке выше. Тип анимации не настраивается.

JvFormAnimation: TJvFormAnimation

Компонент, позволяющий прятать/показывать форму с эффектом. Доступны следующие виды “анимации”. Эффект, реализуемый этим компонентом глючит в сочетании с системными эффектами windows. Поэтому я не советую использовать TJvFormAnimation.

Встраиваемые формы

image

Для того, чтобы показать одну форму внутри другой я обычно пользуюсь таким кодом:

 procedure TForm1.Button2Click(Sender: TObject); 
 var 
   tmpForm:TForm1; 
 begin 
   tmpForm:=TForm1.Create(self); 
   tmpForm.Parent:=Panel1; // Panel1 – выступает контейнером для tmpForm 
   tmpForm.BorderStyle:=bsNone; 
   tmpForm.Align:=alClient; 
   tmpForm.Show; 
 end;

Однако JVCL предлагает отдельные компоненты, позволяющие сделать примерно то же самое. Эти компоненты: TJvEmbeddedFormLink, TJvEmbeddedFormPanel и TJvEmbeddedInstanceFormPanel. Опишу их, только для того чтобы, пост был полным. Использовать я их не стал бы, ибо встроенные в JVCL формы у меня ужасно мерцают и иногда не прорисовываются(Delphi 2009 + Windows Vista).

JvEmbeddedFormLink: TJvEmbeddedFormLink

Компонент, который делает форму встраиваемой. Применяется в связке с компонентами TJvEmbeddedFormPanel и TJvEmbeddedInstanceFormPanel. Т.е. форму, на которой лежит TJvEmbeddedFormLink можно будет показать внутри TJvEmbeddedFormPanel или TJvEmbeddedInstanceFormPanel. Фактически, компонент ничего не делает, а просто используется как способ сказать компонентам TJvEmbeddedFormPanel и TJvEmbeddedInstanceFormPanel, какую форму им показывать.

JvEmbeddedFormPanel: TJvEmbeddedFormPanel

Этот компонент типа панели, в которую можно встроить другую форму(TForm) с TJvEmbeddedFormLink. Что-то типа фреймов(Tframe), но без визуального наследованию-редактирования и с формами(TForm). Чтобы указать, какую форму отображать в этой панели, необходимо присвоить свойству LinkForm соответствующий компонент TJvEmbeddedFormLink с другой формы. Чтобы этот компонент работал, на момент создания формы-хозяйки(с TJvEmbeddedFormPanel), встраиваемая форма(форма с TJvEmbeddedFormLink) уже должна быть создана! Т.е. TJvEmbeddedFormPanel показывает конкретный экземпляр встроенной формы.

JvEmbeddedInstanceFormPanel: TJvEmbeddedInstanceFormPanel

Этот компонент делает то же, что и TJvEmbeddedFormPanel, но с тем отличием, что для каждой TJvEmbeddedInstanceFormPanel создаётся новый экземпляр формы. Т.е. фактически TJvEmbeddedInstanceFormPanel запрашивает у TJvEmbeddedFormLink имя класса формы, которую нужно встроить и создаёт новый экземпляр.

Альтернативно функционирующие компоненты =)

JvGradientCaption: TJvGradientCaption

А этот компонент вероятно должен позволять рисовать градиентный заголовок(Caption) формы и выводить текст заголовка разными шрифтами, но… При включенных темах в Windows Vista, подозреваю, что и в XP, он не работает. И это хорошо, так как, это компонент от которого на мой взгляд вреда больше, чем пользы.

JvApplicationHotKey: TJvApplicationHotKey

По идее этот компонент должен уметь регистрировать глобальную горячую клавишу в Windows и вызывать обработчик события, каждый раз когда нажата эта клавиша. Но у меня он не заработал.

JvFormAutoSize: TJvFormAutoSize

Компонент, пытающийся автоматически масштабировать положение и размеры контрол��в, при изменении размера родительской формы, без использования свойств компонентов align и anchors. Если изменить anchors – то контролы начинают в прямом смысле путешествовать по форме. Компонент скорее не работает, чем работает. Впрочем, чудес и не бывает.

Смотрите также

3 комментария:

  1. Анонимный19 июня 2009 г., 11:42

    Aleksey Timohin, не обращай внимания на всяких козлов!
    пиши исче, мне например помогло, куча компонентов а непонятно что и для чего)

    Вопрос, анимацию для заголовка можно в трее отображать этим компонентом?
    а то если самому сделать через таймер, то когда кончаються картинки идет 1 пустой кадр.

    ОтветитьУдалить
  2. Спасибо, Анонимный.

    Для трея там есть отдельный компонент: TjvTrayIcon. И анимацию он отображает нормально. Пустой кадр скорее всего из-за пустой картинки в ImageList.

    ОтветитьУдалить
  3. TJvFormAutoSize у меня заглючил, а вот TJvApplicationHotKey сработал нормально (WinXP x64, Delphi 7)

    ОтветитьУдалить

Постоянные читатели