Страницы

вторник, 16 февраля 2010 г.

Переход с RxLib на Jvcl. Какие изменения?

Это материал для тех, кто ещё использует библиотеку RxLib и рассматривает возможность перехода на юникод. В 2002-году библиотека RxLib была официально включена в состав JVCL. В JVCL есть утилита для быстрой замены всех Rx компонентов, функций и юнитов на JVCL-версии. См. пост Jvcl Dev Tools: JvclConvert.

Почему стоит перейти на JVCL:

  1. В отличие от RxLib, JVCL развивается. Ошибки исправляются. Регулярно выходят версии с поддержкой новых версий Delphi.
  2. JVCL контролы поддерживают новые версии Windows и Windows-стили.

В этом посте перечислены все Rx компоненты. Для каждого указан соответствующий Jvcl компонент, package, и краткий список отличий.

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

Следующие свойства были заменены у всех компонентов:

  • Свойство Ctl3D заменено на Flat.
  • Свойство Opaque заменено на Transparent.

Закладка Rx Tools

Закладка Jv Non-Visual

TrxWindowHook –> TjvWindowHook

TrxTimerList –> TjvTimerList. У TrxTimerTimerEvent есть свойство Tag, а у TJvTimerEvent его нет.

TrxPageManager –> TjvPageManager

TrxMergeManager –> TjvMergeManager

TrxMruManager –> TjvMruManager. Доработан.

imageTrxMainMenu –> imageTjvMainMenu. Интегрирован с остальными JVCL-компонентами, добавлена поддержка стилей, ItemPainter, отдельные ImageLists для разных состояний.

TrxPopupMenu –> TjvPopupMenu. Существенно доработан. Интегрирован с остальными JVCL-компонентами, есть поддержка стилей и ItemPainter, отдельные ImageLists для разных состояний.

TStrHolder –> TjvStrHolder

imageTrxTrayIcon –> imageTjvTrayIcon. Компонент был немного доработан.

imageTrxCalculator –> imageTjvCalculator. Новые события: OnClose и OnShow

Закладка Jv Application, Forms

TrxAppEvents –> TjvAppEvents

TrxGradientCaption –> TjvGradientCaption. Доработан.

Закладка Jv System

imageTrxFolderMonitor –> Этого компонента нет в JVCL. Наиболее подходящая замена – это TjvChangeNotifyimage.

TClipboardViewer –> TjvClipboardViewer

Закладка Jv Dialogs

TrxLoginDialog-> TjvLoginDialog. Существенно доработан. Вместо Ini-файла теперь использует TjvAppStorage.

TDualListDialog –> TjvDualListDialog. Доработан.

Закладка Jv Bars, Panels

TSecretPanel -> TjvSecretPanel

TSpeedBar -> TjvSpeedBar.

Закладка Jv Persistence

imageTFormPlacement и imageTFormStorage –> imageTjvFormStorage. TjvFormStorage были существенно доработаны. Позволяет хранить настройки не только в Ini-файле и в Registry, но и в XML, и базе данных. Этот компонент используется другими JVCL компонентами для хранения внутренних настроек.

Закладка Jv Images, Animators

TPicClip –> TJvPicClip

Rx Controls

У всех визуальных контролов появилась поддержка тем Windows.

Закладка Jv Edits

TrxComboEdit –> TjvComboEdit. Добавлена поддержка стилей Windows, свойство Action, поддержка DataConnector (работа с БД).

TFilenameEdit –> TjvFileNameEdit. Добавлена поддержка стилей, обновлена иконка на кнопке, добавлено автодополнение (при наборе названия файла с клавиатуры появится выпадающий список подходящих файлов), поддержка ImageList для картинки на кнопке.

TDirectoryEdit –> TjvDirectoryEdit. Добавлена поддержка стилей, обновлена иконка на кнопке. Добавлена возможность настраиваться опции Win32 диалога. Используется обновлённый диалог. Добавлено автодополнение (при наборе названия файла с клавиатуры появится выпадающий список подходящих файлов), поддержка ImageList для картинки на кнопке.

TDateEdit –> TjvDateEdit. Добавлено: БД (через DataConnector), Action.

TCurrencyEdit –> нет.

TrxCalcEdit –> TjvCalcEdit

TrxSpinEdit –> TjvSpindEdit. Немного доработан.

TrxRichEdit –> TjvRichEdit. Функционал существенно расширен. Подробнее смотрите здесь: TjvRichEdit.

Закладка Jv Lists, Combos, Trees

image262TFontComboBox –> TjvFontComboBox. Расширены опции, добавлена поддержка MRU (Most Recently Used), добавлено отображение иконки типа шрифта, немного изменён режим preview.

TColorComboBox –> TjvColorComboBox. Немного доработан.

TrxDrawGrid –> TjvDrawGrid.

TTextListBox –> TjvTextListBox.

TrxCheckListBox –> TjvxCheckListBox (или TjvCheckListBox). Пропало свойство HintSource.

Закладка Jv Labels

TrxLabel –> TjvLabel. Существенно доработан.

Закладка Jv Visual

TrxClock –> TjvClock. Появилась возможность отображать дату.

Закладка Jv Trackers, Sliders, Splitters

TrxSlider –> image202 TjvxSlider. При перемещении бегунка курсор больше не изменяется. Поддержки тем Windows нет.

TrxSplitter –> TjvxSplitter. Поддержки тем Windows нет.

Закладка Jv Visual

TrxDice –> TjvDice  (интересно, этот компонент хоть кто-нибудь всерьёз использует?:))

Закладка Jv Images, Animators

TAnimatedImage –> TjvAnimatedImage. Свойство Opaque переименовано в Transparent.

TrxGifAnimator –> TjvGifAnimator. Добавлено свойство Threaded.

Закладка Jv Buttons

TrxSpinButton –> TjvSpinButton.

TrxSpeedButton –> TjvSpeedButton. Появилась настройка Hot Track Options.

TrxSwitch –> TjvSwitch

Rx DbAware

Закладка Jv Data Controls

TRxDBGrid -> TjvDBGrid. Существенно доработан. См. описание Jvcl DbGrid-ов.

TrxDbComboEdit –> TjvDbComboEdit

TrxDbDateEdit –> TjvDbDateEdit

TRxDBLookupList -> TjvDbLookupList

TRxDBLookupCombo -> TjvDbLookupCombo

TRxLookupEdit -> TjvDbLookupEdit

TDBDateEdit -> TjvDbDateEdit.

TRxDBCalcEdit -> TjvDbCalcEdit

TRxDBRichEdit -> TjvDBRichEdit. Включает те же улучшения что и TjvRichEdit

TDBStatusLabel -> TjvDbStatusLabel

TRxDBComboBox -> TjvDbComboBox

Закладка Jv Data Access

TRxMemoryData -> TjvMemoryData. Доработан: добавлены новые свойства и события.

Закладка Jv BDE

TRxQuery -> TjvQuery

TSQLScript -> TjvSQLScript

TMemoryTable -> TjvBDEMemoryTable

TDBSecurity -> TjvDbSecurity. Свойство IniFileName заменено на AppStorage и AppStoragePath.

TQBEQuery -> TJvQBEQuery

TRxDBFilter -> TjvDbFilter

TDBProgress -> TJvDbProgress

TBdeItems -> TjvBDEItems

TTableItems -> TjvTableItems

TDatabaseItems -> TjvDatabaseItems

TDBIndexCombo -> TjvDbIndexCombo

 

Необходимые JVCL пакеты

Для перехода понадобятся следующие JVCL пакеты:

  • JVCL Application and Form Components - TjvAppEvents, TjvGradientCaption
  • JVCL BDE Components - компоненты с закладки Jv Bde
  • JVCL Core Components – AppIni
  • JVCL Custom Controls – TjvTrayIcon
  • JVCL Database Components - Db контролы
  • JVCL Dialog Components – TjvDualListDialog, TjvLoginDialog
  • JVCL Multimedia and Image Componets – TjvAnimatedImage, TjvGifAnimator
  • JVCL Non-Visual Components – TjvMergeManager, TjvPageManager, TjvStrHolder
  • JVCL Standard Controls – большая часть редакторов (эдиты, комбобоксы)
  • JVCL System Components – TjvFormStorage, TjvChangeNotify, TjvClipboardViewer, TjvMRUManager, TjvWindowHook
  • JVCL Visual Controls – TjvxSplitter, TjvSpeedBar, TjvClock, TjvDice

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

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

  1. Это конечно хорошо, но тут только вершина айсберга. Некоторые компоненты изменили названия свойств, методов и их типы (как следствие необходимо переписывать dfm, если конечно говорить о переходе с rx на jedi), у некоторых так вовсе нет прямой совместимости. Вот если бы были описаны все подводные камни с которыми встречаешься при переводе проекта с rx на jedi...

    ОтветитьУдалить
  2. Спасибо за комментарий, Сергей.

    На первый взгляд, в JVCL сохранён очень высокий уровень совместимости с RxLib.
    Как видно из поста, все компоненты сохранились(кроме 2х).
    Названия published свойств совпадают на 95%. Я упомянул изменившиеся свойства, из тех, что заметил. Я очень подробно сравнивал свойства у компонентов упомянутых в начале поста. Потом мне надоело - слишком большой объём ненужной работы.

    Единственно, я не сравнивал public и protected методы и свойства. А также не проверял функции из библиотеки RxLib. Это лишняя работа, так как я уверен, что на 100% RxLib всё-равно никто не использует.

    Сам я ещё не конвертировал свои проекты на JVCL, - но буду это делать, в ближайшие месяцы. О результатах отпишусь.

    К слову, в Delphi 2010 расширилась поддержка RTTI, и это даёт возможность автоматизировать сравнение не только свойств, но и методов.

    ОтветитьУдалить
  3. Недавно портировал довольно большой проект 2.5 Мб исходного текста на D2010. Проект был серьезно завязан на Rx. Решил сменить Rx на JVCL. JclConvert не впечатлил. Переход осуществен очень быстро примитивным скриптом в 1Кб к sed. Детального тестирования пока не проводилось, но программа скомпилировалась без проблем и в целом функционирует в первом приближении корректно.

    ОтветитьУдалить
  4. Здравствуйте, уважаемые коллеги! Простите, что не совсем по теме - просто уже не знаю у кого просить. Такая проблема:
    Работаю в C++ Embarcadero RAD Studio 2010. Начал недавно пользоваться библиотекой jvcl. Нашел много интересного и удобного. Но сейчас требуется создать автономный вариант приложения. Я привычно устанавливаю Project->Options->Linker->Dinamic RTL=false, сбрасываю флажок Project->Options->Packages->Build with runtime packages, но при попытке компиляции получаю следующие сообщения:
    [LINK32 Error] Error: Unable to open file 'JVDBGRID.RES'
    ...
    [LINK32 Error] Error: Unable to open file 'JVDBGRIDSELECTCOLUMNFORM.DFM'
    [LINK32 Error] Error: Unable to perform link
    Failed
    Попробовал указать в Project->Options->Resource compiler->Derictories and Conditionals->Include file search path путь к ненайденным ресурсным файлам, но никакого эффекта не добился. Подскажите, что делать

    ОтветитьУдалить
  5. И вы здравствуйте, уважаемый анонимный коллега!

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

    Описываемое вами явление по идее должно работать, и шаги Вы предприняли, самые, что ни на есть верные.
    Однако ж попробуйте всё же ещё добавить путь к JVDBGRIDSELECTCOLUMNFORM.DFM файлу в Project Options->Delphi Compiler->Search Path. Или в Tools->Options->Library Win32->Search path

    ОтветитьУдалить
  6. Спасибо за помощь! Я неждано-негадано нашел такое решение: выискал поиском все файлы, которые RAD Studio не сумел

    открыть и скопировал их в папку моего проекта. Грубоватое решение, но помогло :-)

    ОтветитьУдалить
  7. >А чем не подошёл JvclConvert?
    Тем что об его существовани я узнал только после этого поста. :)

    Было интересно попробовал JclConvert на своем проекте, он не смог открыться, неверные названия классов в DFM, соответствие старых и новых классов отлаживалось году в 2002, и судя по всему с тех пор что то ушло вперед в JVCL. Не стал дальше разбираться, у меня же есть рабочий скрипт sed.

    ОтветитьУдалить
  8. Добрый день.
    А приходилось ли вам самому пользоваться TJvFormStorage?
    Я столкнулся с такой проблемой - когда открывашь форму на полный экран, то при повторном открытии она появляется в верхнем левом углу такого размера, как будто форма не Maximized.
    Вот нашел такую же проблему, но решения там вроде нет. http://www.delphigroups.info/3/11/168250.html

    ОтветитьУдалить
  9. vsmihaylovsky, да я использую TJvFormStorage (раньше использовал TRxFormPlacement и TRxFormStorage).

    Я сталкивался с проблемой похожей на вашу. И если речь идёт об MDI-приложении, и проблема появляется только с MDI-Child формами, то скорее всего это была та же самая проблема. Точно воспроизвести проблему в новой программе мне не удалось, как и найти идеальное решение.

    Насколько мне известно, проблема появляется не со всеми формами, и зависит от количества контролов находящихся на форме. Проще, говоря, если удалять с формы по одному контролу (особенно TPageControl, TTabControl и TPanel), то в какой-то момент форма начнёт работать нормально. Иногда помогает пересоздание проблемных контролов.

    ОтветитьУдалить
  10. Aleksey Timohin, спасибо.
    Пересоздал панель, на которой множество других панелей, сплиттеров, гридов, и стала форма работать правильно.
    Ато:

    if WindowState = wsMaximized then
    begin
    Perform(WM_SETREDRAW, 0, 0);
    WindowState := wsNormal;
    WindowState := wsMaximized;
    Perform(WM_SETREDRAW, 1, 0);
    end;

    так себе решение. Некрасиво форма появляется.

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