Страницы

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

Описание JVCL-контролов: закладка Jv Edits

image   JVCL – бесплатная библиотека с открытым исходным кодом, которую можно использовать в ПО с закрытым исходным кодом по лицензии MPL1.1, так и в свободном ПО.

Стоит помнить, что если вы найдёте ошибку (а поработав с этими компонентами вплотную, вы наверняка найдёте не одну недоработку), то не стоит о ней умалчивать. Вы действительно поможете Delphi-сообществу, записав отчёт об ошибке и приложив к нему небольшую программу, иллюстрирующую ошибку в баг-трекере Jedi.

Также, помните о том, что для большинства компонент доступны программы-примеры. Они находятся в папке JVCL\Examples.

Из всех контролов это закладки, мне были интересны только TjvFilenaneEdit, TjvDirectoryEdit, TjvRichEdit и TjvHLEditor (подсветка синтаксиса в Delphi). Тем, кто использует неюникодную версию Delphi может быть интересен TjvHLWideEditor (редактор с подсветкой синтаксиса, поддерживающий юникод).

Общие свойства

DotNetHighlighting – это свойство есть у всех визуальных контролов. Оно отвечает за то, что при наведении на контрол мышки, внутри контрола будет рисоваться яркая синяя рамка. Однако, при включенных темах, рисование этой рамки сопровождается визуальными артефактами, поэтому я не советую использовать это свойство.

Все JVCL контролы имеют события: OnMouseEnter, OnMouseLeave.

Также, поведение JVCL-контролов можно расширять добавляя в проект стандартные JVCL Action-ы. Например, по умолчанию, большая часть JVCL редакторов не поддерживает горячую клавишу Ctrl+A (выделить всё). Чтобы активировать её, необходимо положить на форму ActionList, открыть редактор и добавить TjvEditSelectAll (New Standard Action и в раздел JVCL Edits).

Свойство Caret есть у многих Edit-контролов. Оно позволяет указать картинку, которая будет использоваться для рисования каретки.

Почти у всех есть свойство Flat. У большинства редакторов есть свойство ClipboardCommands – которое позволяет отключать пункты меню по работе с буфером обмена в Popup Menu.

У некоторых контролов есть свойство DataConnector – которое позволяет подключать этот контрол к датасету. У каждого контрола может быть своя реализация этого свойства. Я не тестировал его работу.

Для большинства компонентов JVCL можно найти доступны примеры показывающие, как работать с ними.

TJvEdit

Свойства: Caret, DataConnector, AutoHint – показывать в hint-e содержимое контрола, если текст не помещается в редакторе (не включайте его если Edit используется для ввода пароля в JVCL 3.39 и раньше).

Можно изменить цвет фона (DisabledColor) и шрифта для случая, когда свойство Enabled равно False.

Можно указать текст (EmptyValue), который будет отображаться, если Edit – пуст, и цвет этого текста (EmptyFontColor).

Есть свойство GroupIndex – которое позволяет объединять Edit-ы в группы. После добавления текста в один из Edit-ов, все остальные Edit-ы с тем же индексом будут очищены.

Есть возможность ограничить длину текста по пикселям (MaxPixel).

TJvMaskEdit

Аналог TMaskEdit. Есть свойства: Caret, DisabledColor.

TJvCheckedMaskEdit

TjvMaskEdit с встроенным CheckBox-ом.

TJvComboEdit

TjvComboEdit with Autocomplete on VIsta

MaskEdit c кнопкой. Бывший TrxComboEdit.  Поддерживает автодополнение из списка строк, может подключаться к датасету.

TjvCalcEdit on Vista

TJvCalcEdit

Компонент для ввода десятичных чисел. Бывший TrxCalcEdit. При нажатии на кнопку появляется всплывающее окно с калькулятором.

Редактирование директорий и названий файлов

TJvFilenameEdit

TjvFilenameEdit on VistaБывший TrxFileNameEdit.

Компонент для ввода имени файла со встроенной кнопкой для показа диалога. Все свойства диалога настраиваются. Есть даже выбрать тип диалога, который появится при нажатии на кнопку (загрузить/сохранить, обычный/для картинок).

Есть поддержка Drag’n’Drop, т.е. в этот контрол можно перетащить файл мышкой. Поддерживает автодополнение (при наборе названия файла с клавиатуры появится выпадающий список подходящих файлов).

TJvDirectoryEdit

TjvDirectoryEdit on VistaКомпонент для ввода директории. Бывший TrxDirectoryEdit. Есть поддержка Drag’n’drop, автозавершения, настройки всех опций диалога.

TJvSpinEdit

imageЭто бывший TrxSpinEdit. Стиль рисования кнопок можно менять.

Редактирование даты и времени

TJvDatePickerEdit

TjvDateTimePickerEdit with Checkbox on Vista

Контрол для выбора даты (только даты).

Есть CheckBox для отключения даты. Есть свойство для настройки текста, который будет отображаться, если дата не выбрана.

В качестве всплывающего календаря используется стандартный Windows-календарь. Есть возможность настроить свойства этого календаря.

 

TJvDateEdit

TjvDateEdit on VistaКонтрол для выбора даты. Бывший TrxDateEdit.

В качестве всплывающего календаря использует собственный календарь, который позволяет выбирать дату, начиная с 1752 года.

Может работать с датасетом (есть свойство DataConnector).

Минус: в режиме редактирования стрелки вверх/вниз не работают.

TJvTimeEdit

TjvTimeEdit on Vista Контрол для выбора времени. Может работать c датасетом (есть свойство DataConnector).

В остальном, контрол уступает стандартному TDateTimePicker-у в режиме dtkTime.

Другие контролы

TJvIPAddress

Контрол для ввода IP4-адреса. Позволяет получить адрес как в виде текста, так и в виде longword. Может работать с датасетом через свойство DataConnector.

TJvValidateEdit

Edit-контрол позволяющий проверить правильность введённого значения и отреагировать, если что-то не так (например, изменить цвет шрифта, если число выходит за пределы). См демку JvValidateEdit.

Вместо этого контрола, лучше воспользоваться полноценными валидаторами с закладки Jv Validators.

Многострочные редакторы текста

TJvMemo

Немного доработанный TMemo. Помимо общих JVCL свойств, имеет следующие новые свойства:

  • MaxLines – максимальное число строк
  • События: OnVerticalScroll, OnHorizontalScroll
TJvRichEdit

Существенно доработанный TrxRichEdit. Поддерживаются функции Rich Edit версий 1, 2 и 3. См. скриншот демки:

TjvRichEdit demo

Поддерживается:
  • форматирование фрагментов текста: bold, italic, underline (c разными типами и цветами подчёркивания), subscript, superscript, цвет, размер, шрифт;
  • форматирование параграфов: отступы слева, справа, сверху, снизу, выравнивание, межстрочный интервал.
  • табуляция;
  • защита фрагмента текста от изменений, установка ему свойства Disabled, возможность сделать фрагмент текста невидимым;
  • вставка картинок и объектов (например, таблицу Excel или документ OpenOffice);
  • многоуровневое Undo и Redo
Не поддерживаются:
  • таблицы;
  • свойства, добавленные в Rich Edit только для совместимости с MS Word;
  • морально устаревшие эффекты типа Emboss (хотя в RxLib они были).

Также обратите внимание на компонент TJvRichEditToHtml (закладка Jv Internet, Network), который умеет конвертировать Rich Text в Html (только текст с форматированием). Для этого компонента есть хороший пример.

TJvEditor

TjvEditor

Многострочный редактор. Умеет организовывать текст в столбцы, умеет подсвечивать парные скобки. Поддерживает автовыравнивание, автозавершение, шаблоны, умные табы. Является базовым классом для нижеперечисленных.

TJvHLEditor

TjvEditor с подсветкой синтаксиса. Поддерживает следующие типы подсветки:

  1. Pascal
  2. C Builder
  3. SQL
  4. Python
  5. Java
  6. Javascript
  7. Visual Basic
  8. Html
  9. Perl
  10. Ini
  11. Php
  12. C#
  13. Coco/R
  14. NQC
  15. настраиваемый

Позволяет настраивать цвета для разных типов ключевых слов (св-во Colors).

TJvHLEdPropDlg

Диалог для настройки опций и схемы подсветки синтаксиса для JvHLEditor-a.

 Диалог настройки подсветки синтаксиса в программе на Delphi.

TJvWideEditor

Версия TJvEditor, поддерживающая Unicode в старых версиях Delphi.

TJvWideHLEditor

TjvHLEditor с поддержкой юникода. Работает даже в старых версиях Delphi.

Ссылки по теме

7 комментариев:

  1. Спасибо за статью!

    Не сравнивал jvHLEditor и SynEdit?

    ОтветитьУдалить
  2. Я с SynEdit вообще не работал. Мне от подсветки нужно только подсвечивание синтаксиса SQL. И TjvHLEditor полностью удовлетворяет.

    ОтветитьУдалить
  3. Не работает компонент JvIPAddress, подскажите пожалуйста в чем проблема. Заранее спасибо

    ОтветитьУдалить
    Ответы
    1. Проблема в том, что он поломался. Почините его и он будет снова работать! Заранее пожалуйста.

      Удалить
  4. Анонимный, на вопрос поставленный таким образом НЕВОЗМОЖНО дать ответ. Попробуйте задать его на каком каком-нибудь форуме. =)

    Hint: TjvIpAddress описан в юните JvComCtrls.pas.

    ОтветитьУдалить
  5. Очень интересная статья.
    Для себя я почерпнул в ней много полезного и поучительного.
    Огромная благодарность автору.

    ОтветитьУдалить
  6. В TjvEditor (и скорее всего во всем семействе редакторов) не реализована функция Redo, что очень усложняет его использование.

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