Это материал для тех, кто ещё использует библиотеку RxLib и рассматривает возможность перехода на юникод. В 2002-году библиотека RxLib была официально включена в состав JVCL. В JVCL есть утилита для быстрой замены всех Rx компонентов, функций и юнитов на JVCL-версии. См. пост Jvcl Dev Tools: JvclConvert.
Почему стоит перейти на JVCL:
- В отличие от RxLib, JVCL развивается. Ошибки исправляются. Регулярно выходят версии с поддержкой новых версий Delphi.
- 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. Доработан.
TrxMainMenu –> TjvMainMenu. Интегрирован с остальными JVCL-компонентами, добавлена поддержка стилей, ItemPainter, отдельные ImageLists для разных состояний.
TrxPopupMenu –> TjvPopupMenu. Существенно доработан. Интегрирован с остальными JVCL-компонентами, есть поддержка стилей и ItemPainter, отдельные ImageLists для разных состояний.
TStrHolder –> TjvStrHolder
TrxTrayIcon –> TjvTrayIcon. Компонент был немного доработан.
TrxCalculator –> TjvCalculator. Новые события: OnClose и OnShow
Закладка Jv Application, Forms
TrxAppEvents –> TjvAppEvents
TrxGradientCaption –> TjvGradientCaption. Доработан.
Закладка Jv System
TrxFolderMonitor –> Этого компонента нет в JVCL. Наиболее подходящая замена – это TjvChangeNotify.
TClipboardViewer –> TjvClipboardViewer
Закладка Jv Dialogs
TrxLoginDialog-> TjvLoginDialog. Существенно доработан. Вместо Ini-файла теперь использует TjvAppStorage.
TDualListDialog –> TjvDualListDialog. Доработан.
Закладка Jv Bars, Panels
TSecretPanel -> TjvSecretPanel
TSpeedBar -> TjvSpeedBar.
Закладка Jv Persistence
TFormPlacement и TFormStorage –> TjvFormStorage. 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
TFontComboBox –> 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 –> 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
Отличный пост!
ОтветитьУдалитьСпасибо. =)
ОтветитьУдалитьЭто конечно хорошо, но тут только вершина айсберга. Некоторые компоненты изменили названия свойств, методов и их типы (как следствие необходимо переписывать dfm, если конечно говорить о переходе с rx на jedi), у некоторых так вовсе нет прямой совместимости. Вот если бы были описаны все подводные камни с которыми встречаешься при переводе проекта с rx на jedi...
ОтветитьУдалитьСпасибо за комментарий, Сергей.
ОтветитьУдалитьНа первый взгляд, в JVCL сохранён очень высокий уровень совместимости с RxLib.
Как видно из поста, все компоненты сохранились(кроме 2х).
Названия published свойств совпадают на 95%. Я упомянул изменившиеся свойства, из тех, что заметил. Я очень подробно сравнивал свойства у компонентов упомянутых в начале поста. Потом мне надоело - слишком большой объём ненужной работы.
Единственно, я не сравнивал public и protected методы и свойства. А также не проверял функции из библиотеки RxLib. Это лишняя работа, так как я уверен, что на 100% RxLib всё-равно никто не использует.
Сам я ещё не конвертировал свои проекты на JVCL, - но буду это делать, в ближайшие месяцы. О результатах отпишусь.
К слову, в Delphi 2010 расширилась поддержка RTTI, и это даёт возможность автоматизировать сравнение не только свойств, но и методов.
Недавно портировал довольно большой проект 2.5 Мб исходного текста на D2010. Проект был серьезно завязан на Rx. Решил сменить Rx на JVCL. JclConvert не впечатлил. Переход осуществен очень быстро примитивным скриптом в 1Кб к sed. Детального тестирования пока не проводилось, но программа скомпилировалась без проблем и в целом функционирует в первом приближении корректно.
ОтветитьУдалитьА чем не подошёл JvclConvert?
ОтветитьУдалитьЗдравствуйте, уважаемые коллеги! Простите, что не совсем по теме - просто уже не знаю у кого просить. Такая проблема:
ОтветитьУдалитьРаботаю в 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 путь к ненайденным ресурсным файлам, но никакого эффекта не добился. Подскажите, что делать
И вы здравствуйте, уважаемый анонимный коллега!
ОтветитьУдалитьПрельстиво и любо слышать, что данная библиотека оказалась Вам полезной и удобной.
Описываемое вами явление по идее должно работать, и шаги Вы предприняли, самые, что ни на есть верные.
Однако ж попробуйте всё же ещё добавить путь к JVDBGRIDSELECTCOLUMNFORM.DFM файлу в Project Options->Delphi Compiler->Search Path. Или в Tools->Options->Library Win32->Search path
Спасибо за помощь! Я неждано-негадано нашел такое решение: выискал поиском все файлы, которые RAD Studio не сумел
ОтветитьУдалитьоткрыть и скопировал их в папку моего проекта. Грубоватое решение, но помогло :-)
>А чем не подошёл JvclConvert?
ОтветитьУдалитьТем что об его существовани я узнал только после этого поста. :)
Было интересно попробовал JclConvert на своем проекте, он не смог открыться, неверные названия классов в DFM, соответствие старых и новых классов отлаживалось году в 2002, и судя по всему с тех пор что то ушло вперед в JVCL. Не стал дальше разбираться, у меня же есть рабочий скрипт sed.
Добрый день.
ОтветитьУдалитьА приходилось ли вам самому пользоваться TJvFormStorage?
Я столкнулся с такой проблемой - когда открывашь форму на полный экран, то при повторном открытии она появляется в верхнем левом углу такого размера, как будто форма не Maximized.
Вот нашел такую же проблему, но решения там вроде нет. http://www.delphigroups.info/3/11/168250.html
vsmihaylovsky, да я использую TJvFormStorage (раньше использовал TRxFormPlacement и TRxFormStorage).
ОтветитьУдалитьЯ сталкивался с проблемой похожей на вашу. И если речь идёт об MDI-приложении, и проблема появляется только с MDI-Child формами, то скорее всего это была та же самая проблема. Точно воспроизвести проблему в новой программе мне не удалось, как и найти идеальное решение.
Насколько мне известно, проблема появляется не со всеми формами, и зависит от количества контролов находящихся на форме. Проще, говоря, если удалять с формы по одному контролу (особенно TPageControl, TTabControl и TPanel), то в какой-то момент форма начнёт работать нормально. Иногда помогает пересоздание проблемных контролов.
Aleksey Timohin, спасибо.
ОтветитьУдалитьПересоздал панель, на которой множество других панелей, сплиттеров, гридов, и стала форма работать правильно.
Ато:
if WindowState = wsMaximized then
begin
Perform(WM_SETREDRAW, 0, 0);
WindowState := wsNormal;
WindowState := wsMaximized;
Perform(WM_SETREDRAW, 1, 0);
end;
так себе решение. Некрасиво форма появляется.