17Th
Developer Camp

【B2】 Delphi/C++チュートリアル セッション「 続・Delphi / C++Builder
オープンソースコンポーネント
実践活用法」
株式会社 日本情報システム
筑木真志

1

17Th
Developer Camp

1

はじめに

2

自己紹介
• 名前：筑木 真志 (ちくぎ しんじ)
– 多分、同姓同名はいません• 会社：株式会社 日本情報システム– URL : http://www.nihon-jyoho.com– E-MAIL : nis@nihon-jyoho.com• 会社概要：
–
–
–
–
–
–
–

土木・建築・測量系の開発が多い
GISとかDBを活用したシステムなんて大好きです
でも、会計とか集計処理などOSや言語問わずいろいろやっています
GIS関連スクールの講師とかもやることがあります
あと、レガシーシステムのお守りとか移行サポートとかぶっちゃけ、IT系の「大工さん」というか「何でも屋さん」
だから、道具にこだわる故に自分はC++Builderが大好き!!
3

アジェンダ••••2010年9月現在のオープンソースコンポーネントの現状
JCL/JVCLの概要
JVCLのコンポーネント紹介
まとめ・質疑応答

4

17Th
Developer Camp2

2010年9月現在のオープンソースコンポーネントの現状

52010年9月現在の現状• VCLのUnicode化が一段落し、たいていのオープンソースコ
ンポーネントで日本語が使えるようになった– でも、フォントの問題がちょっとだけ残っていたり…

• ディスカッションフォーラムを覗くと結構いい情報があります––

Delphi » Third Party Tools » General
C++Builder » Third Party Tools• RAD Studio 2009以降で動作する主なコンポーネントのアー
カイブは以下のURLにまとまっている– http://www.songbeamer.com/delphi/

6主なフリーコンポーネントの紹介• Mustangpeak (OSS MPL)
http://www.mustangpeak.net/– EasyListview : 仮想化リストビューコントロール– VirtualShellTools : エクスプローラーコントロール• Virtual Treeview (OSS LGPL/MPLのデュアルライセンス)
http://www.soft-gems.net/
仮想化ツリービューコントロール

7主なフリーコンポーネントの紹介• SynEdit (OSS GPL/MPLのデュアルライセンス)
http://sourceforge.net/apps/mediawiki/synedit/index.php?title=SynEdit_Home_Page
構文色分け表示ができるエディタコンポーネント
RAD Studioのカラースキーマをインポート出来る
Unicode対応版のアーカイブはなく、Subversionリポジトリからダウンロード
ちょっと不安定かも8主なフリーコンポーネントの紹介(再録)• Indy (OSS MPL/BSD)
http://www.indyproject.org/
ネットワークコンポーネント• Open XML (OSS MPL)
http://www.philo.de/xml/index.shtml
XMLパーサコンポーネント※XMLパーサはlibxml2(http://xmlsoft.org/)とXerces(http://xerces.apache.org/xercesc/)がC++Builderで利用可能。

• GLScene (OSS MPL)
http://glscene.sourceforge.net/wikka/HomePage
OpenGLベースの3Dライブラリ9主なフリーコンポーネントの紹介(再録)• TurboPower (OSS MPL)
– Abbrevia (http://tpabbrevia.sourceforge.net/)• ZIP,CAB,TAR,gzipなどのアーカイブ操作コンポーネント– Orpheus (http://tporpheus.sourceforge.net/)• 高機能グリッド、Outlook風ツールバーなどのGUIコンポーネント– LockBox (http://lockbox.seanbdurkin.id.au/tiki-index.php)• 暗号、デジタル署名処理コンポーネント– OnGuard (http://tponguard.sourceforge.net/)• ソフトプロテクト– Async Professional (http://tpapro.sourceforge.net/)• シリアルポート、FAX,TAPI操作コンポーネント– SysTools (http://tpsystools.sourceforge.net/)• メモリマップドファイル、会計処理ルーチン等– Essentials (http://tpessence.sourceforge.net/)• 各種GUIコンポーネントなど

10主なフリーコンポーネントの紹介(再録)• LMD Tools Special Edition (Freeware ※有料版はソースコードあり)
http://www.lmd.de/products/vcl/lmdtools/
各種GUIコンポーネント
付属のPartner DVDに含まれている11日本語環境でのインストールのコツ• 日本語環境でコンパイルエラーが発生する場合がある– 例) SynEdit– 対処法１：コードページの変更• ［プロジェクト｜オプション｜Delphiコンパイラ｜コンパイル｜コードページ］の値を1252(US-ASCII)に変更する– 対処法２：ソースコードの文字コードをUTF-8に変更する• フォームの文字化けの対処– フォームのフォントが”MS Sans Serif”の場合がある– エディタなどで” MS Sans Serif”を”Tahoma”に置換する

12

C++Builderでのインストールのコツ• コンポーネントのプロジェクトがDelphi用しかない場合でもC++Builderにインストールする• 対処法１：プロジェクトを新規作成する– ［ファイル｜新規作成｜パッケージ C++Builder］– Delphiのプロジェクトが参照するソースコードをプロジェクトに追加する• 対処法２：Delphi用のプロジェクトオプションを変更する– ［ツール｜オプション｜ Delphiコンパイラ｜リンク｜リンカ出力］の値を"すべての C++ Builder ファイル(パッケージ ライブラリを含む)を生成"にすると、Delphi用コンポーネントでもC++Builderから使える場合がある– *.resや*.hppの場所を適切に設定– RAD Studioの場合のみ有効

13

17Th
Developer Camp

3

JCL/JVCLの概要

14

JCL/JVCLとは•

JCL/JVCLとはProject JEDI(http://delphi-jedi.org/)の一部
として提供されるオープンソースコンポーネント• JEDI Code Library
http://jcl.delphi-jedi.org/
標準VCLを補完する各種ユーティリティ関数
数学関数、単位変換、日付時間関数、ファイル管理、シェルAPIのラッパーなど• JEDI Visual Component Library
http://jvcl.delphi-jedi.org/
標準VCLを補完する各種GUIコンポーネント
JVCLはJCLに依存しているので、JVCLを使用するためにはあらかじめJCLをインストー
ルしておく必要がある
15

ソースコードの入手• JCL
http://sourceforge.net/project/showfiles.php?group_id=47514
http://jvcl.sourceforge.net/daily/ (Daily Zip)
https://jcl.svn.sourceforge.net/svnroot/jcl/trunk (SVNリポジトリ)• JVCLhttp://sourceforge.net/project/showfiles.php?group_id=45786
http://jcl.sourceforge.net/daily/(Daily Zip)
http://jvcl.svn.sourceforge.net/svnroot/jvcl/trunk/ (SVNリポジトリ)※ JVCL の配布パッケージにJCLが含まれている場合がある• ドキュメント– HTML Help2形式等で配布– ただし、JVCLについては全てのコンポーネントを網羅していない

16

JCL/JVCLの配布ライセンスについて• JCL/JVCLはMPL(Mozilla Public License)にて配布––––

FirefoxやThunderbirdで採用されているライセンス「現状のまま」で配布する限り自由に配布／複製が可能
何らかの変更を加えた場合、MPLで公開する義務が発生
ただし、独自コードを持つアプリケーションに MPL 下のコードを使用しても、独自コードのライセンスはMPLにならない– よって、 JCL/JVCLを自社のプロプライエタリなアプリケーションに組み込んで、配布することが可能• ライセンス条文等– http://www.mozilla.org/MPL/MPL-1.1.html (ライセンス条文)– http://www.mozilla-japan.org/MPL/mpl-faq.html (日本語でのFAQ)

17

サポートなど• サンプルプログラム– JCLはexamplesの下にDelphi用が63個– JVCLはexamplesの下にDelphi用230個、C++Builder用93個– Delphi用のJVCLMegaDemoは必見• サポート– ニュースグループ• news://forums.talkto.net/jedi.jcl• news://forums.talkto.net/jedi.ｖcl– イシュー・トラッカー• http://issuetracker.delphi-jedi.org/main_page.php

18

17Th
Developer Camp

4

JVCLの
コンポーネント紹介

19

JCL概要• JCLの主なユニット
ユニット

主な機能

JclFileUtils

ファイルシステム関連 (ファイルサイズ、アクセス日時など)

JclSysInfo

システム情報JclShell

シェル関数

JclRegistry

レジストリ関連

JclSecurity

セキュリティ関連(SIDなど)

JclSvcCtrl

Windows NT サービス関連

JclMath

数学関数

JclComplex

複素数計算

JclUnitConv

度量衡の相互変換

JclDateTime

日付・時刻計算

JclStrings

文字列関連

20

JCLの関数紹介• シェル関数 (ユニット: JclShell)
主な関数
OpenFolder

エクスプローラでフォルダを開く

OpenSpecialFolder

エクスプローラで特殊フォルダを開く

DisplayPropDialog

プロパティダイアログを開く

GetSpecialFolderLocation

特殊フォルダのパスを取得する (システムフォルダなど)

SHDeleteFolder

フォルダを削除する（ゴミ箱へ送る）

SHDeleteFiles

ファイルを削除する（ゴミ箱へ送る）

SHRenameFile

ファイルの名前を変更する

21

JCLの関数紹介• システム情報関数 (ユニット: JclSysInfo)
主な関数
GetCpuInfo

CPU情報の取得

GetWindowsSystemFolder

Windows システムフォルダの取得

GetDesktopFolder

デスクトップフォルダの取得

GetPersonalFolder

ドキュメントフォルダの取得

GetWindowsTempFolder

テンポラリフォルダの取得

GetLocalComputerName

コンピューター名の取得

22

JVCLのコンポーネント紹介• JVCLによって機能が拡張される標準コンポーネント
–
–
–
–
–

コンポーネント名が”T～”が”TJv～”に変化する
TButton → TJvButton
TEdit → TJvEdit
TStringGrid → TJvStringGrid
TRichEdit → TJvRichEdit• VCLを補完するコンポーネント
–
–
–
–
–

TJvSelectDirectory
TJvCreateProcess
TJvThread
TJvProgressDialogなど

23

JVCLのコンポーネント紹介• TJvStringGrid (カテゴリ：Jv Lists,Combos,Trees)
概要
拡張TStringGrid

主なプロパティ
Cells

グリッド内の各セルの文字列リスト

ColConut / RowCount

行数・列数

Fixedfont

固定行のフォント

主なメソッドLoadCSV / SaveCSV

セルの中身をCSVファイルとして読む・書く

InsertCol / InsertRow / InsertCell

列・行・セルの挿入

RemoveCol / RemoveRow

列・行・セルの削除

HideCol / HideRow / HideCell

列・行・セルを隠す

ShowCol / ShowRow / ShowCell

隠した列・行・セルを表示

MoveColumn / MoveRow

列・行の移動SortGrid / SortGridByCols

セルの並び替え24

JVCLのコンポーネント紹介• TJvStringGrid
主なイベントOnSelectCell

グリッド内のセルが選択される前に発生

OnGetEditText

インプレースエディタがセルの値を要求したときに発生

OnSetEditText

ユーザーがセルの値を編集すると発生

OnDrawCell

グリッド内のセルを描画する必要があるときに発生

OnCaptionClick

固定行がクリックされると発生

OnGetCellAlignment

文字揃えを決定する場合に発生

OnGetEditStyle

セルの編集方法(テキストボックス、リスト、ボタン)を決定する場合に発生

OnListBoxCloseUp

選択リストボックスが閉じると発生

OnEditButtonClick

セル内ボタンがクリックされると発生

OnShowEditor

インプレースエディタが表示される場合に発生

25

JVCLのコンポーネント紹介• TJvStringGridの使い方 : セル毎に文字揃えを設定する– OnGetCellAlignmentイベントを定義する
void __fastcall TForm1::JvStringGrid1GetCellAlignment(TJvStringGrid*Sender,
int Acolumn, int ARow, TGridDrawState State, TAlignment &CellAlignment){
switch (AColumn) {case 3: // センタリング
CellAlignment = taCenter;break;
case 5: // 右寄せ
CellAlignment = taRightJustify;
break;}}– CellAlignment値にテキストの配置方法を設定する

26

JVCLのコンポーネント紹介• TJvStringGridの使い方 : 列ごとに入力方法を変える– OnGetEditStyleイベントを定義する
void __fastcall TForm1::JvStringGrid1GetEditStyle(TJvStringGrid *Sender,
int Acolumn, int ARow, TStrings *PickListStrings, TEditStyle &EditStyle){switch (AColumn) {case 1:// 通常のセル
break;
case 2:// リストから選択
EditStyle = esPickList;
PickListStrings‐>Add("List1");
PickListStrings‐>Add("List2");
PickListStrings‐>Add("List3");
break;
case 3:// [...]ボタンを表示
EditStyle = esEllipsis;break;}}– EditStyle値がesPickList : リスト選択• リストの内容はPickListStringsに設定• 選択されるとOnEditButtonClickイベントが発生– EditStyle値がesEllipsis : ボタン• ボタンがクリックされるとOnEditButtonClickイベントが発生
27

JVCLのコンポーネント紹介• TJvFilenameEdit (カテゴリ：Jv Edits)
概要
ファイル指定エディットボックス(TEdit + TOpenDialog)

主なプロパティ
FileName

ファイル名

DefaultExt

デフォルトのファイル拡張子

InitialDir

ダイアログボックスが開いたときのカレントディレクトリ

Filter

ダイアログボックスで使用できるファイルマスク(フィルタ)

DialogTitle

ダイアログボックスのタイトルバーに表示するテキスト

DialogKind

ダイアログボックスの種類

DialogOptions

ファイル選択用のダイアログボックスの外観と動作

DirectInput

テキストボックスにファイル名を直接入力することの可否

Text

テキストボックスに表示されるファイル名

28

JVCLのコンポーネント紹介• TJvFilenameEdit
主なイベントOnButtonClick

ファイル選択ボタンがクリックされると発生

OnAfterDialog

ファイル選択ダイアログが表示される前に発生

OnBeforeDialog

ファイル選択ダイアログが表示された後に発生

OnChange

ファイル名が変更されると発生

OnDropFiles

エディットボックスにファイルがドロップされると発生

29

JVCLのコンポーネント紹介• TJvFilenameEditの使い方 :ファイル名の入力検知– OnChageイベントを定義する– OnAfterDialogイベントを定義する
void __fastcall TfrmMain::JvFilenameEdit1AfterDialog(TObject *Sender,
UnicodeString &Aname, bool &AAction){
JvStringGrid1‐>LoadFromCSV(AName, ',', '¥"', true);}

30

JVCLのコンポーネント紹介• TJvBrowseForFolderDialog (カテゴリ：Jv Dialogs)
概要
フォルダ選択ダイアログ (API SHBrowseForFolderをラップする)

主なプロパティ
Directory

フォルダのパス、もしくは特殊フォルダのPIDL

DisplayName

フォルダの表示名

RootDirectory

ダイアログのルートフォルダ

Title

ツリービューコントロールの上部に表示される文字列

StatusText

ツリービューコントロールの上部に表示される文字列 (Titleの下部)

Options

フォルダダイアログのオプション
BROWSEINFO構造体のulFlagsにおおむね対応

主なメソッド
Execute

フォルダ選択ダイアログを表示

31

JVCLのコンポーネント紹介• TJvBrowseForFolderDialogの使い方 : フォルダの選択
void __fastcall TForm1::Button1Click(TObject *Sender){
if (JvBrowseForFolderDialog1‐>Execute()) {// フォルダのパス
Edit1‐>Text = JvBrowseForFolderDialog1‐>Directory;// フォルダの表示名
Edit2‐>Text = JvBrowseForFolderDialog1‐>DisplayName;// フォルダをエクスプローラで開く (JCL使用)
OpenFolder(Edit1‐>Text, 0, false);}}

32

JVCLのコンポーネント紹介• TJvValidateEdit (カテゴリ：JvEdits)
概要
値検証＆書式化エディットボックス

主なプロパティ
CriticalPoints

値が範囲外の場合の表示色とその条件

DecimalPlaces

小数点以下の桁数

DisplayFormat

書式種別(整数、実数、通貨など)

MinValue/MaxValue

最小値／最大値

HasMinValue /HasMinValue

最小値／最大値のチェックをするか否か

ArrowEmpty

入力値が空ならば、NULL値とする(0とNULL値を区別する)

ZeroEmpty

入力値が0ならば、NULL値とする

CheckChars

入力可能文字33

JVCLのコンポーネント紹介• TJvValidateEdit (カテゴリ：JvEdits)
主なプロパティ(続き)Value

入力値(Variant型)

AsInteger

入力値(整数型)

AsFloat

入力値(実数型)

AsCurrency

入力値(通貨型)

主なメソッドIsEmpty

入力値がNULL値か否かをチェックする

IsValid

入力値が有効か否かをチェックする

主なイベントOnDecimalRounding

入力値の丸めを行う

OnIsValid

入力値が正しいか否かを検証

OnCustomValidate

入力値が正しいか否かを検証し、かつ、詳細な書式化を行う

34

JVCLのコンポーネント紹介• TJvValidateEditの使い方 : 値の入力制限と表示– DisplayFormatプロパティを設定する
値

説明

dfAlphabetic

英字dfAlphaNumeric / dfIdentifier

英数字 dfIdentifierは英数字＋アンダースコア

dfCheckChars

CheckCharsプロパティで指定した文字のみ

dfNonCheckChars

CheckCharsプロパティで指定した文字以外

dfCurrency

通貨形式

dfCustom

OnCustomValidateイベントで書式化を行う

dfDecimal

実数形式(小数点位置指定無し)

dfFloat

実数形式(カンマ区切り、小数点位置指定あり)

dfFloatFixed

実数形式(小数点位置指定あり)

dfFloatGeneral

実数形式(Format/printfの書式“g“)

dfInteger / dfYear

整数形式 dfYearは西暦

dfNone

入力制限無しdfPercentパーセント形式

dfScientific

指数形式(Format/printfの書式“e“形式)dfBinary / dfOctal / dfHex

2進数、8進数、16進数
35

JVCLのコンポーネント紹介• TJvValidateEditの使い方 ： 上限値／下限値で色分け– CriticalPointsプロパティを設定する
TJvValidateEditCriticalPointsのプロパティ

CheckPoints

色分け条件

cpMaxValue

上限のみ

cpMinValue

下限のみ

cpBoth

範囲外(上限、下限の両方)

cpNone

色分けしないMaxValue

範囲の上限値

MaxValueIncluded

Trueならば、範囲に上限値を含む

ColorAbove

上限値超過の場合の表示色

MinValue範囲の下限値

MinValueIncluded

Trueならば、範囲に下限値を含む

ColorBelow

下限値未満の場合の表示色

36

JVCLのコンポーネント紹介• TJvValidateEditの使い方––––

入力値の制限や書式化はおおむねDisplayFormatプロパティでカバー出来る
入力値の丸めや修正を行いたい場合は、OnDecimalRoundingイベントで行う
入力値の検証を詳細に行いたい場合は、OnIsValidイベントで行う
入力値の検証と書式を詳細に行う場合は、OnCustomValidateイベントで行う

37

JVCLのコンポーネント紹介• TJvWizard (カテゴリ：JvWizard)
概要
ウイザードの作成・制御

主なプロパティ
ActivePage/ActivePageIndex

現在表示しているページ

Pages/WizardPages

ウイザードの各ページ

PageCount

ウィザードのページ数

ButtonCancel
ButtonStart
ButtonBack
ButtonNext
ButtonLast
ButtonFinish

ウイザードの制御ボタン(中止、先頭、戻る、進む、最後、終了)

38

JVCLのコンポーネント紹介• TJvWizardの構成

ウイザード画面の各ページ•TJvWizardWelcomePage：表紙•TJvWizardInteriorPage：ページ

ウイザード画面の制御コントロール•TJvWizardRouteMapList：
リスト形式•TJvWizardRouteMapNodes：
ノード形式•TJvWizardRouteMapSteps：
ページ形式
39

JVCLのコンポーネント紹介• TJvWizardの使い方– フォームにTJvWizardを貼り付ける– (必要であれば)コントロールコンポーネントを貼る– ページを追加する• New Welcome Page : TJvWizardWelcomePageを追加する• New Intarior Page : TJvWizardInteriorPageを追加する– 制御ボタンがクリックされたときのイベントハンドリング

主なイベントOnNextButtonClick
OnBackButtonClick

ウイザードの制御ボタンがクリックされたとき(中止、先頭、戻る、進む、最後、終了)

OnSelectNextPage

次ページが表示されるときに発生

OnSelectPriorPage

前ページが表示されるときに発生

OnActivePageChanging

アクティブページが移動しようとするときに発生

OnActivePageChanged

アクティブページが移動した後に発生

40

JVCLのコンポーネント紹介• TJvWizardのイベントハンドリング例
void __fastcall TForm1::JvWizard1ActivePageChanging(TObject *Sender, TJvWizardCustomPage *&ToPage){
if (ToPage == JvWizardWelcomePage1) {// 表紙が表示されるのであれば、制御コントロールを表示しない
JvWizardRouteMapList1‐>Visible = false;} else {JvWizardRouteMapList1‐>Visible = true;}}• [Next]ボタンがクリックされたときのイベント発生順
1.
2.
3.
4.

OnNextButtonClick
OnSelectNextPage
OnActivePageChanging
OnActivePageChanged

41

JVCLのコンポーネント紹介• TJvWizardWelcomePage
概要
ウイザード画面の表紙

主なプロパティ
Title

タイトル部(タイトル文字、フォント、色など)

Subtiteサブタイトル部

WaterMark

画面左側イメージ部• TJvWizardInteriorPage
概要
ウイザード画面の表紙

主なプロパティ
Title

タイトル部

Subtiteサブタイトル部
42

JVCLのコンポーネント紹介• TJvInterpreterProgram (カテゴリ：Jv InterpreterProgram)
概要
アプリケーションにPascal Scriptのインタプリタを組み込む

主なプロパティ
SourcePascal Scriptのソースコード (UnicodeString)Pas

Pascal Scriptのソースコード (TStrings)

VResult

スクリプトの実行結果 Delphi言語におけるResult値
複数個の結果が欲しい場合はVariant配列とするのが無難

主なメソッドComplie

スクリプトをコンパイルするRun

スクリプトを実行する

CallFunction

スクリプト内の関数を実行する

43

JVCLのコンポーネント紹介• TJvInterpreterProgramの使い方
void __fastcall TfrmMain::Button1Click(TObject *Sender){
JvInterpreterProgram1‐>Source = SynEdit1‐>Lines‐>Text;
JvInterpreterProgram1‐>Compile();// 引数の設定
Variant a = LabeledEdit2‐>Text.ToIntDef(0);Variant b = LabeledEdit3‐>Text.ToIntDef(0);if (LabeledEdit1‐>Text.IsEmpty()) {// Mainから実行する
JvInterpreterProgram1‐>Run();} else {// スクリプト内関数の呼び出し引数はVariant型のオープン配列
JvInterpreterProgram1‐>CallFunction(LabeledEdit1‐>Text, NULL, OPENARRAY(Variant, (a, b)));}// 結果の取得
LabeledEdit4‐>Text = VarToStr(JvInterpreterProgram1‐>VResult);}– 簡単な説明(英語) :• http://jvcl.delphi-jedi.org/JvInterpreter.htm– チュートリアル(ドイツ語) :• http://wiki.delphigl.com/index.php/Tutorial_Scripting_mit_JvInterpreterProgram
44

JVCLのコンポーネント紹介• Pascal Scriptの例– 文法はDelphi言語とほぼ同じ
例1) 簡単なもの
begin
Result := '本日は晴天なり';end;

例2) DLLの呼び出し
unit Unit1;function MessageBox(hWnd: integer; lpText, lpCaption: PChar; uType: integer): Integer;
external 'user32.dll' name 'MessageBoxW';
Procedure main;
begin
MessageBox(0, 'こんにちは、世界!', 'DLLの呼び出し', 0);
end;
end.

45

その他、便利なコンポーネント• TJvDBUltimGrid(カテゴリ：Jv Data Controls)– 拡張DBGrid– グリッド内にコンボボックスなどのコントロールを埋めこむことが出来る• TJvDBGridFooter (カテゴリ：Jv Data Controls)– DBGridの集計結果を表示する• TJvDBLookupCombo(カテゴリ：Jv Data Controls)– 複数項目表示可能なDBComboBox• TJvMemoryData (カテゴリ：Jv Data Access)– データそのものをメモリ上に保持するDataSet– テンポラリデータや、マスタデータのキャッシュとかに便利

46その他、便利なコンポーネント• TJvDateEdit (カテゴリ：Jv Edits)– 日付入力に特化したエディットボックス• TJvDirectoryEdit (カテゴリ：Jv Edits)– フォルダ指定エディットボックス (TJvFilenameEdit のフォルダ版)• TJvAppStorage (カテゴリ： Jv Persistence)––––

アプリケーションの設定情報の管理 以下のコンポーネントで読み書きをする
TJvAppIniFileStorage : iniファイル
TJvAppRegistryStorage : レジストリ
TJvAppXMLFileStorage : XMLファイル• TJvMRUManager (カテゴリ： Jv Non-Visual)– 「最近使ったファイル」の管理– TJvAppStorageと組み合わせて使用
47

17Th
Developer Camp

デモ

48

17Th
Developer Camp

Q&A

49

17Th
Developer Camp

5

まとめ

50

まとめ
• Use the Source, Luke.（ソースをつかうのじゃ、ルーク）
判らない場合、ソースコードを追っかけましょう！
ソースがドキュメントだ。バグも完全に記述されている。By まつもとゆきひろ氏• 英語でのコミュニケーションは以外と怖くない！
Web上での翻訳サービスや翻訳ソフトを使った英文でも十分にコミュニケーションできます。
OSSの開発者は英語を母国語としている人だけではありません。

• OSSの使用は、ライセンスに気をつけましょう。
BSDライセンス → クローズドソースでも使用可
GPL → 原則としてソースコードの公開義務が発生する

51

ちょっとしたお願い• Field Testに参加してください！！
• ブロークンな英語でも本当に何とかなります！！
• 困ったバグは開発陣に直談判！！

52

アフターフォローとか• 今日のアフターフォローは以下で行います– 自分のBlog：http://d.hatena.ne.jp/A7M/– Twitterハッシュタグ: #dcamp_jp– Twitter ID : A7M3J

53

最後に…

ご清聴ありがとうございました！

54

17Th
Developer Camp

6

付録
JCL/JVCLのインストール

55

JCL/JVCLのインストール• 前準備– 今回は”C:¥lib”にインストール– アーカイブをC:¥libの下に展開する

C:¥libJCL
JVCL– 以後、JCLのインストール先(C:¥lib¥jcl)を$(JCL)JVCLのインストール先(C:¥lib¥jvcl)を$(JVCL)と略します– C++Builderの場合、あらかじめフォルダ”$(BDSCOMMONDIR)¥hpp”を作成しておく• インストーラーの実行– 管理者権限が必要– 管理者モードなRAD Studio Command Promptから実行するか、エクスプローラの”install.bat”で右クリックして、”管理者として実行 (A)”で実行する
56

JCLのインストール• インストーラーの起動$(JCL)¥install.batを実行すると、インストーラーが起動する

57

JCLのインストール• 「RichEditでの行の挿入エラー」が発生した場合の対処方法
1. $(JCL)¥install¥prototypes¥JediGUIInstall.pasの815行目付近にある
プロシージャ”AddLogLine”の中身をコメントにする

コメントアウト

2. $(JCL)¥bin¥JediInstaller.exeを削除してから、install.batを再実行

58

JCLのインストール• C++Builderでコンパイルエラーが発生した場合の対処方法– “Check HPP files”のチェックボックスを外す

59

JVCLのインストール• インストーラーの起動$(JVCL)¥install.batを実行するとインストーラーが起動する

60

JVCLのインストール• インストールオプションの選択

パッケージ化する場合は、“Build packages”をチェック

61

インストール後のIDEの設定変更• C++Builderの場合、正しくインストール出来てもコンパイル
出来ない場合がある。
• 対処法：– ［ツール｜オプション｜C++オプション|パスとディレクトリ］でインクルードパスとライブラ
リパスのパス順を並べ替える– インクルードパスに$(BDSCOMMONDIR)¥hppと$(JVCL) ¥include¥D15があるか※D15はバージョン番号(CB2007:D11 / CB2009:D12 / CB2010:D14)– ライブラリパスに$(JVCL) ¥resourcesがあるか62ヘルプとの統合• HTML Help2形式のアーカイブをダウンロード＆展開– JVCL333Help-Help2.zip ※(JVCLのヘルプはVer. 3.3より後のは未リリース)– jcl-2.1.1.3536-htmlhelp2.zip• 展開したすべてのファイルを$(BDS)¥Help¥Docにコピー• JclHelp_h2reg.iniを編集– [Reg_Plugin]と[UnReg_Plugin]セクションに“embarcadero.rs2010|_DEFAULT|Jedi.JCL|_DEFAULT|”を追加• JVCL333_h2reg.iniを編集– [Reg_Plugin]と[UnReg_Plugin]セクションに“embarcadero.rs2010|_DEFAULT|Jedi.JVCL|_DEFAULT|”を追加

63

ヘルプとの統合• タスクマネージャーでdexplorer.exeが動作していないか確認する。
• $(BDS)¥Help¥Docでコマンドプロンプトを開いて以下を実行
h2reg ‐r cmdfile=JclHelp_h2reg.ini
h2reg ‐r cmdfile=JVCL333_h2reg.ini• 「RAD Studio ドキュメント」を開いてヘルプを再構成

64

17Th
Developer Camp

付録2
7

第11回デベロッパーキャンプ
で紹介したJVCLのコンポーネント

65第11回デベロッパーキャンプで紹介したJVCLのコンポーネント• TJvCreateProcess (カテゴリ：Jv None-Visual)– API CreateProcessをラップするコンポーネント• TJvThread (カテゴリ：Jv Threading)– TThreadクラスを継承せずにマルチスレッドを実現するコンポーネント• TJvCsvDataSet (カテゴリ：Jv Data Access)– CSVファイルをテーブルして扱うことが出来るデータセットコンポーネント

66第11回デベロッパーキャンプで紹介したJVCLのコンポーネント• TJvFooter (カテゴリ：Jv Bars,Panels)– フォームの下部等にボタンを揃えて配置するパネル• TJvEmbeddedFormPanel (カテゴリ：Jv Application,Forms)– パネルの内側にTForm派生フォームを埋め込む• TJvEnterAsTab (カテゴリ：Jv Non-Visual)– Enterキーでコントロールのフォーカスの移動を実現する

67

第11回デベロッパーキャンプで紹介したJVCLのコンポーネント• TJvAppInstances (カテゴリ：Jv System)– アプリケーションの複数起動を抑止する• TJvSearchFiles (カテゴリ：Jv Non-Visual)– ファイル検索コンポーネント– 条件等をプロパティで渡すと、ファイル一覧を返す• TJvProgressDialog (カテゴリ：Jv Dialogs)• TJvProgressComponent– プログレスダイアログを表示する

6869