Страницы

среда, 31 декабря 2008 г.

Создание wizarda в Delphi с помощью JVCL. Описание закладки JvWizard.

Компоненты Jv WIzard в Дельфи 2009В бесплатной библиотеке компонентов JVCL есть  контролы, позволяющие быстро соорудить свой интерфейс a la Wizard.

Это 4 компонента: TjvWizard – собственно сам wizard и TjvWizardRouteMapSteps, TJvWizardRouteMapNodes, TjvWizardRouteMapList предназначенные для отображения “карты” wizarda.

Компонент TjvWizard является базой для построения “волшебника”. По структуре TjvWizard очень похож на TPageControl. Он содержит список страниц wizarda(наследников от TJvWizardCustomPage) и общие настройки wizard-a: размеры панели с кнопками, размеры кнопок, заголовки(Caption) кнопок(Next, Back), картинки(glyph), ModalResult кнопок(актуально для кнопок Cancel и Finish), обработчики событий. TJvWizard содержит 7 предопределённых кнопки: Back, Next, To first page, To last page, Cancel, Finish и Help. Можно добавлять и свои.

воскресенье, 28 декабря 2008 г.

Введение в JCL(JEDI Code Library) и JVCL(JEDI Visual Component Library)

Введение

JCL – это сокращение от JEDI Code Library. JCL - это библиотека для Delphi с открытым исходным кодом. JEDI Code Library неспроста называется именно библиотекой кода, она содержит только процедуры, функции, классы, интерфейсы и ни одного компонента. JCL составлена из кода, пожертвованного разными разработчиками. Из пожертвованных компонент была составлена библиотека JVCL – JEDI Visual Component Library. Для установки JVCL понадобится уже было установленная JCL. О некоторых компонентах JVCL можно почитать в моём блоге в категории JVCL.

JCL доступна по двум лицензиям: Mozilla Public License(MPL) 1.1 и LGPL. Лицензия MPL позволяет использовать библиотеку в коммерческих проектах с закрытым кодом, а LGPL не знаю зачем нужна(возможно, чтобы дать возможность использовать код сторонникам GNU GPL). Поправьте, если я неправ. А если кто-нибудь может объяснить лучше, сделайте это.

Почему я об этом пишу

Потому что на русском языке практически нет информации об этих библиотеках. Некоторые разработчики предпочитают использовать взломанные версии коммерческих библиотек, нарушая закон, хотя вполне может быть, что для достижения целей им хватило бы и бесплатных JCL и/или JVCL. Многие разработчики изобретают велосипеды, решая классические задачи(что хорошо) и допуская классические ошибки(что плохо, но даёт опыт) и выкладывая решения с ошибками в интернет(что не очень хорошо), а то и публикуя ошибки в книгах(что ужасно). Я надеюсь, что популяризация этих библиотек поможет привлечь новых пользователей, а может даже и разработчиков. =)

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

пятница, 26 декабря 2008 г.

Невизуальные компоненты JVCL. Описание закладки JvSystem.

image

Визуальные контролы

JvClipboardViewer: TJvClipboardViewer

Единственный визуальный контрол на вкладке JvSystem. Является наследником TScrollBox. Отображает содержимое буфера обмена. Следит за буфером обмена и автоматически обновляется при изменении. Поддерживает показ следующих данных: Empty, Unknown, Text, Bitmap, Metafile, Palette, OemText, Picture, Component, Icon.

Невизуальные компоненты

JvClipboardMonitor: TJvClipboardMonitor

TJvClipboardMonitor следит за буфером обмена(Clipboard) генерирует событие OnChange каждый раз, когда содержимое изменяется. Имеет 2 свойства: Enable и OnChange.

Помимо компонента JvClipboardMonitor.pas содержит две функции по работе с буфером обмена. Одна сохраняет содержимое буфера обмена в поток(TStream), а другая помещает содержимое потока(TStream) в буфер обмена.

procedure SaveClipboardToStream(Format: Word; Stream: TStream);
function LoadClipboardFromStream(Stream: TStream): Word;

JvAppCommand: TJvAppCommand

Компонент вешает хук на оконную процедуру формы и перехватывает сообщения WM_APPCOMMAND. Для каждого сообщения вызывается событие OnAppCommand.

JvHidDeviceController: TJvHidDeviceController

Обеспечивает поддержку устройств с HID (Human Interface Device), таких как мышки, джойстики, клавиатуры и прочие. Имеет события: OnArrival, OnDeviceChange, OnDeviceData, OnDeviceDataError, OnDeviceUnplug, OnEnumerate, OnRemoval. Помимо компонента, модуль содержит классы TJvHidDevice, TJvHidDeviceReadThread, TJvHidPnpInfo.

четверг, 25 декабря 2008 г.

Описание диалогов в JVCL. JvDialogs. Часть 2.

В отличие от диалогов описанных в предыдущем посте, диалоги описанные здесь, выполняют более полезные функции. =)

Палитра компонентов JVCL JvDialogs

Диалоги, построенные на Delphi


TJvDesktopAlert и TJvDesktopAlertStack

Компоненты для показа всплывающих окошек.(Popup hint window).

Всплывающие из трея прозрачные окошки на Delphi 
Можно настраивать любые параметры, окошки появляются на заданное время и тают по истечении. При наведении мышки, они перестают пропадать. Есть возможность перетаскивать их мышкой, обрабатывать клики на разных областях, присваивать Popup menu для стрелочки. TJvDesktopAlert отвечает за прорисовку окошка. TJvDesktopAlertStack отвечает за список активных окошек. Единственный минус с которым я столкнулся при использовании этого компонента – это то, что всё работает хорошо до тех пор пока мы не попытаемся уместить на нём больше текста. Советую посмотреть демку: JVCL\examples\JvDesktopAlert.

TJvDSADialog

Компонент для создания собственных диалогов(MessageDlg) с галочкой "Не показывать больше это окно"(Don’t Show Again), а также диалогов закрывающихся по таймеру. Прежде чем его использовать обратите внимание на готовые функции предоставленные в модуле JvDSADialogs.pas. Там полно функций, позволяющих показывать диалог с заданными параметрами. Также там есть функции заменяющие стандартные ShowMessage, MessageDlg, MessageDlgEx.Диалог сделанный на Delphi с галочкой "Больше не показывать" и обратным отсчётом
Этот компонент подробно описан в JVCL Help-е. Также советую посмотреть демку JVCL\Examples\JvDSADialogs\MessageDlgEditor.dpr.

Описание диалогов в JVCL. JvDialogs. Часть 1. Системные диалоги.

Бесплатная библиотека компонентов JVCL содержит огромное количество как полезных вещей так и разного хлама. Некоторую часть этих компонентов я опишу у себя в блоге, чтобы дать представление о том, что можно там найти. Да в JVCL не всё гладко, не всё работает как хотелось бы, кое-что глючит, кое-что вообще не работает, но тем не менее, это библиотека с открытым кодом, и найденную ошибку всегда можно отследить в исходниках и исправить, либо просто взять нужный код и написать свой вариант. Чужие исходники это просто кладезь информации для программиста.

Системные диалоги Windows

пятница, 19 декабря 2008 г.

Описание DB Grid-ов в JVCL или чем JvUltimateDbGrid лучше стандартного DbGrid.

В бесплатной библиотеке компонентов JVCL присутствуют 4 DbGrida. TJvgDbGrid, TJvDbGrid, TJvDBUltimGrid и TJvgVertDbSGrid. Я сравнил доступные гриды. Самым лучшим оказался TJvDBUltimGrid(хотя Ehlib даже версии 3.6 ему не переплюнуть).

TJvgDbGrid – DbGrid из библиотеки Globus. TJvgVertDBSGrid – грид отображающий список полей вертикально, отображает только одну запись.

Также в JVCL присутствует несколько компонентов, облегчающих работу с гридом.

  • Компоненты для экспорта содержимого DBGrid в файл, вместе с форматированием:
    • TJvDbGridCSVExport, TJvDbGridXMLExport, TJvDbGridHTMLExport – экспорт в CSV, XML и HTML(посмотрел только экспорт в HTML)
    • TJvDBGridExcelExport, TJvDbGridWordExport – требуют установленных Excel, Word.
  • TJvDbGridFooter – дополнительный Footer для DbGrid.
  • TJvgGridHeaderControl – дополнительный header для грида.(не смотрел)

Я опишу в этом посте большинство свойств TJvDBUltimGrid, отсутствующих в стандартном TDbGrid-e. Кстати, большая их часть присутствует и в TJvDbGrid.

Список вкусностей под катом..

четверг, 18 декабря 2008 г.

Мысли навеянные Delphi-кодингом 2. JCL+JVCL.

Недавно мне нужно было написать по учёбе пару программок.

С одной домашней работой меня очень выручила библиотека JCL, в частности класс JclExprEval.TExpressionCompiler, позволяющий парсить и вычислять значения математических функций. Хотя, если бы этого парсера не было, я бы просто зашил некоторое количество функций прямо в программу. В конце концов, это же просто очередная программка для университета. Но благодаря JCL, в программку можно ввести любую одномерную функции и получить её график.

Кстати, тот же Lazy Delphi Builder не состоялся бы без JCL. 

А у TJvDbGrid есть вкусное свойство, позволяющее назначать каждой колонке свой редактор.

Это о плюсах свободных библиотек.

А теперь о минусах.

понедельник, 15 декабря 2008 г.

Нужны советы по работе с Oracle-ом из Delphi

В универ нужно написать курсовую на тему работы с Oracle-ом из Дельфей. Точнее, сравнить пару-тройку технологий доступа к Oracle. Что-нибудь стандартное(ADO/dbGo, dbExpress), что-нибудь платное(ODAC или DOA) и что-нибудь с открытым кодом(ZeosLib или DelphiOci).

С Oracle-ом я как-то особо не сталкивался, всё больше Interbase и Firebird. В связи с этим у меня несколько вопросов:

  1. Какие преимущества от работы с Ораклом посредством стандартных технологий Delphi(dbGO/ADO, BDE, dbExpress) можно получить, по сравнению с работой с Firebird c теми же стандартными средствами(Nested tables, object fields, server-side cursors, e.t.c)?
  2. Кто-нибудь пробовал работать с Oracle-ом через ZeosLib?
  3. Что лучше Direct Oracle Access от AllRoundAutomation или Oracle Data Access Components(ODAC) от Devart(ex-CrLab)?
  4. Можно как-нибудь получить из программы доступ к объектным полям Oracle стандартными средствами Delphi(dbGO/ADO, BDE, dbExpress)?
  5. а с помощью сторонних компонент? 

Пока что я сам толком не понимаю как всё это работает и что мне нужно как красиво сформулировать вопросы.

Но буду рад любым советам, комментариям, ссылкам на статьи по теме.

п.с. если интересно, то опубликую работу здесь. (не раньше февраля - когда совладаю с сессией)

п.п.с. Интересно, а кто-нибудь из читателей понимает латышский? ;)

четверг, 4 декабря 2008 г.

Ссылки на хорошие ИТ-блоги о Delphi(и не только)

Хочу поделиться ссылками на малоизвестные качественные русскоязычные блоги о Дельфи.

Отдельным пунктом хочу упомянуть удивительнейший портал посвящённый Delphi -Королевство Delphi

Помимо огромного количества разнообразнейшего материала(иногда мне кажется что там есть ответы на ВСЕ возможные вопросы по Дельфи), портал удивителен ещё и своеобразной навигацией. К своему, стыду я до сих пор не разобрался что и где там найти. Поэтому, хочу отдельно упомянуть разделы со статьями: Подземелье Магов и Сокровищница

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

среда, 3 декабря 2008 г.

Текучка 7: dcc32 и dpk c полным путём

image

Экспериментировал с относительными путями в LazyDelphiBuilder и столкнулся с тем, что dcc32 умеет компилировать только package-и, которые находятся в текущей папке.

К примеру, попытка выполнить команду из d:\

d:\> "C:\Program Files\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "D:\Work\D2009\VCL\TB2K\Packages\tb2k_d12.dpk" -U"c:\PROGRA~1\codegear\RADSTU~1\6.0\lib";"d:\Work\D2009\VCL\TB2K\Source" -LN"d:\test\dcp" -LE"d:\test\bpl" -N"d:\test\dcu" -DRELEASE -N0"d:\test\dcu"

приводит к появлению сообщения об ошибке “Fatal: file not found первый файл в dpk”. Такая же ерунда происходит при компиляции VirtualTreeView.

А если перед выполнением команды сменить текущую папку на D:\Work\D2009\VCL\TB2K\Packages\ – то всё отработает как надо.

Столкнулся с этим почти месяц назад, но только сейчас, начав писать  пост до меня наконец дошло, что причина не в dcc32 а в том, что в tb2k_d12.dpk указаны относительные пути до исходников.


contains
TB2Version in '..\Source\TB2Version.pas',
TB2Toolbar in '..\Source\TB2Toolbar.pas',

В VirtualTreeView тоже самое.

p.s. Давно заметил, что хорошие идеи приходят при обсуждении. Даже если собеседник не успел вставить ни слова. =)