フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1] 2 3 4
トピック: LightReport2 Unicode 版を 64bit 対応にしてみる
DEKO
管理者
投稿数: 2691
LightReport2 Unicode 版を 64bit 対応にしてみる
on: 2013/06/22 22:54 Sat

LightReport2 の Unicode 版は私が代理メンテしているのですが、XE2 までのパッケージしか作っていなかったので、

  • 設計時 / 実行時パッケージの分離
  • 64bit 対応

を行ってみたいと思います。

DEKO
管理者
投稿数: 2691
1. LightReport2 Unicode 版のダウンロード
on: 2013/06/22 22:56 Sat

LightReport2 の Unicode 版は以下の URL から DL できます。

[LightReport2 ver2.51 Unicode Edition Rel.9]
http://ht-deko.minim.ne.jp/software/lr251u_rel9.zip

# 32bit 限定なら XE3 / XE4 にもインストール可能です。

適当な場所に解凍しておきます。
ワークフォルダとして C:\LR2 を用意し、ここで作業を行う事とします。

DEKO
管理者
投稿数: 2691
2.ワークフォルダの作成
on: 2013/06/22 23:04 Sat

以下のように空のフォルダを作成します。

C:\LR2
├─Packages
│ ├─2009
│ ├─2010
│ ├─XE
│ ├─XE2
│ ├─XE3
│ └─XE4
└─Source

 
まずはパッケージとソースを分離します。これは *.dcu がとっちらかるのを防ぐ意味があります。
# Unicode 版が対象なので、ANSI 版 Delphi 用のパッケージフォルダはありません。

DEKO
管理者
投稿数: 2691
3.パッケージとソースの分離
on: 2013/06/22 23:08 Sat

LightReport2 Unicode 版にはパッケージがありますが、これを分離します。

C:\LR2
├─Packages
│ ├─2009
│ │ LR2_120.dpk
│ │
│ ├─2010
│ │ LR2_140.dpk
│ │
│ ├─XE
│ │ LR2_150.dpk
│ │
│ ├─XE2
│ │ LR2_160.dpk
│ │
│ ├─XE3
│ └─XE4
└─Source
LightRep.pas
LightRepEx.pas
LightRepEx2.pas
LightRepPost.pas
LightRepReg.dcr
LightRepReg.dfm
LightRepReg.pas
LRBarImg.dcr
LRBarImg.pas
LRConsts.pas
LRDBSpl.pas
LRPrvSpl.pas
LRSplReg.dcr
LRSplReg.pas
LRSplRegp.dcr
LRSplRegp.pas
LRSuppl.pas
Nkdib.inc
NkDIB.pas
NkDIBUtils.pas
NkGraph.pas
PostBarcode.res

 
解凍フォルダにある LR251U フォルダ内のファイルを上記のように配置します。

パッケージもフォルダ分けしているのはコンパイル済みユニットがとっちらかるのを防ぐためです。また、そもそもパッケージがバージョンによって分けられているのには以下のような理由があります。

  • 各バージョンで共通のフォルダにインストールできる (通すパスも同一で OK)。
  • つまり、各バージョンでコピーを作る必要がない (すべてのコンパイラで同一バージョンのコンポーネントになる)。
  • コンポーネントが更新された時もファイルコピーは一回で済む。

パッケージをコンパイラのバージョン毎に作るのは確かに面倒ですが、後のメンテ作業は楽になります。

DEKO
管理者
投稿数: 2691
4.LightRepReg.pas の修正
on: 2013/06/22 23:32 Sat

LightRepReg.pas はコンポーネントエディタ (バージョン表示) とコンポーネント登録を兼ねています。
いずれも設計時にしか使われないのでこのままでも構わないのですが、勉強用にあえて登録用のユニットとコンポーネントエディタに分離してみます。

1.LightRepReg.dfm を LRVer.dfm にリネーム

2.LightRepReg.pas を LRVer.pas にリネーム

3.LRVer.pas をテキストエディタで開き、以下のように修正

[LRVer.pas]
unit LRVer;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DesignEditors, LRConsts;

type
TLRVerForm = class(TForm)
Image1: TImage;
Label1: TLabel;
Label3: TLabel;
Button1: TButton;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

// TLightRepのバージョン情報フォーム
TLightRepVer = class(TDefaultEditor)
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;

var
LRVerForm: TLRVerForm;

implementation

{$R *.DFM}

procedure TLRVerForm.Button1Click(Sender: TObject);
begin
Close;
end;

function TLightRepVer.GetVerbCount: Integer;
begin
Result := 1;
end;

function TLightRepVer.GetVerb(Index: Integer): string;
begin
if Index = 0 then
Result := LIGHTREP_ABOUTBOX_TEXT
else Result := '';
end;

procedure TLightRepVer.ExecuteVerb(Index: Integer);
begin
if Index = 0 then
with TLRVerForm.Create(Application) do
try
Caption := LIGHTREP_ABOUTBOX_TEXT;
Label1.Caption := LIGHTREP_TITLE_TEXT;
Label2.Caption := 'Version ' + LIGHTREP_VERSION_TEXT;
Label3.Caption := LIGHTREP_COPYRIGHT_TEXT1;
Label4.Caption := LIGHTREP_COPYRIGHT_TEXT2;
Label5.Caption := LIGHTREP_DESCRIPTION;
ShowModal;
finally
Free;
end;
end;
end.

※ コンポーネントエディタ には DesignEditors を uses する必要があります。
 
4.テキストエディタで LightRepReg.pas を新規作成。

[LightRepReg.pas]
{*
*
* LightRepReg
*
* LightReport2の登録ユニット
*
* Copyright(c) 1998-2001 Takezou All rights reserved.
* Copyright(c) 2001-2003 Ohtaka(Kazuyoshi Ohta) All rights reserved.
*
* このコンポーネントは2001年9月より全ての著作権がTakezouからOhtakaに
* 両者合意の上譲渡されました
*
* 1998.10.30 作成
* 2000.03.24 TLRVariableText, TLRPostBarItem追加
*
*}

unit LightRepReg;

interface

uses
Classes, DesignIntf;

procedure Register;

implementation

uses
LightRep,
LightRepEx,
LightRepEx2,
LightRepPost,
LRBarImg,
LRVer; // コンポーネントエディタ

procedure Register;
begin
RegisterComponents('LightReport2', [TLightRep]);
RegisterComponents('LightReport2', [TLRLayoutPanel]);
RegisterComponents('LightReport2', [TLRGridPanel]);
RegisterComponents('LightReport2', [TLRSubPanel]);
RegisterComponents('LightReport2', [TLRItem]);
RegisterComponents('LightReport2', [TLRImage]);
RegisterComponents('LightReport2', [TLRCustBarItem]);
RegisterComponents('LightReport2', [TLRBarImage]);
RegisterComponents('LightReport2', [TLRVariableText]);
RegisterComponentEditor(TLightRep, TLightRepVer);
end;
end.

※ コンポーネント を登録するには Classes を uses する必要があります。
※ コンポーネントエディタ を登録するには DesignIntf を uses する必要があります。

この時点では以下のようなフォルダ構成になっています。

C:\LR2
├─Packages
│ ├─2009
│ │ LR2_120.dpk
│ │
│ ├─2010
│ │ LR2_140.dpk
│ │
│ ├─XE
│ │ LR2_150.dpk
│ │
│ ├─XE2
│ │ LR2_160.dpk
│ │
│ ├─XE3
│ └─XE4
└─Source
LightRep.pas
LightRepEx.pas
LightRepEx2.pas
LightRepPost.pas
LightRepReg.dcr
LightRepReg.pas
LRBarImg.dcr
LRBarImg.pas
LRConsts.pas
LRDBSpl.pas
LRPrvSpl.pas
LRSplReg.dcr
LRSplReg.pas
LRSplRegp.dcr
LRSplRegp.pas
LRSuppl.pas
LRVer.dfm
LRVer.pas
Nkdib.inc
NkDIB.pas
NkDIBUtils.pas
NkGraph.pas
PostBarcode.res
DEKO
管理者
投稿数: 2691
5.パッケージの修正とテストコンパイル
on: 2013/06/22 23:57 Sat

フォルダ構成を変更したので、パッケージをいじります。

1.任意のパッケージをテキストエディタで開きます。(Delphi 2009 ~ XE2 用どれでも構いません)

2.コンポーネントリソース指定の部分を書き換えます。

package LR2_160;

{$R *.res}
{$R '..\..\Source\LightRepReg.dcr'}
{$R '..\..\Source\LRSplReg.dcr'}
{$R '..\..\Source\LRBarImg.dcr'}
...

 
3.Constains セクションを書き換えます。

contains
LightRep in '..\..\Source\LightRep.pas',
NkGraph in '..\..\Source\NkGraph.pas',
LightRepEx2 in '..\..\Source\LightRepEx2.pas',
LightRepPost in '..\..\Source\LightRepPost.pas',
LightRepReg in '..\..\Source\LightRepReg.pas',
LRDBSpl in '..\..\Source\LRDBSpl.pas',
LRPrvSpl in '..\..\Source\LRPrvSpl.pas',
LRSplReg in '..\..\Source\LRSplReg.pas',
LRSuppl in '..\..\Source\LRSuppl.pas',
NkDIB in '..\..\Source\NkDIB.pas',
LightRepEx in '..\..\Source\LightRepEx.pas',
LRBarImg in '..\..\Source\LRBarImg.pas',
LRConsts in '..\..\Source\LRConsts.pas',
LRVer in '..\..\Source\LRVer.pas'; // <- 追加

 
..\..\Source\ をファイルの先頭に追加し、先程作成した LRVer を追加します。

次に、パッケージを Delphi で開いてテストビルドしてみます。C:\LR2\Source にパスを通しておいてください。コンパイルしてみてエラーがでなければとりあえずは OK です。インストールはまだ行わないでください。

DEKO
管理者
投稿数: 2691
コーヒーブレイク 1
on: 2013/06/23 00:18 Sun

ちょっと休憩。
LightReport2 の修正は比較的楽です。最初からパッケージもありますし、登録用ユニットが分離されていますので。モノによってはすべてが一体化したものがあり、そういうコンポーネントは登録用ユニットの分離からやらなくてはなりませんから。

ここから先はパッケージ作成の作業になりますが、上記手順まで出来ているのならお約束に従ってパッケージを作るだけなのでそんなに難しいものではありません。

DEKO
管理者
投稿数: 2691
6.XE3 / XE4 用のパッケージを作る
on: 2013/06/23 04:44 Sun

さて再開します。

XE3 / XE4 用のパッケージがないので作ります。XE2 用のものを XE3 / XE4 各フォルダにコピーし、名前をそれぞれ LR2_170.dpk (XE3 用) / LR2_180.dpk (XE4 用) にリネームします。

次にコピーしたパッケージファイルをテキストエディタで開き、パッケージユニット名を変更します。

package LR2_170; //<- これを変更

{$R *.res}
{$R '..\..\Source\LightRepReg.dcr'}
{$R '..\..\Source\LRSplReg.dcr'}
{$R '..\..\Source\LRBarImg.dcr'}
...

 
フォルダツリーは以下のようになります。

C:\LR2
├─Packages
│ ├─2009
│ │ LR2_120.dpk
│ │
│ ├─2010
│ │ LR2_140.dpk
│ │
│ ├─XE
│ │ LR2_150.dpk
│ │
│ ├─XE2
│ │ LR2_160.dpk
│ │
│ ├─XE3
│ │ LR2_170.dpk
│ │
│ └─XE4
│ LR2_180.dpk

└─Source
LightRep.pas
LightRepEx.pas
LightRepEx2.pas
LightRepPost.pas
LightRepReg.dcr
LightRepReg.pas
LRBarImg.dcr
LRBarImg.pas
LRConsts.pas
LRDBSpl.pas
LRPrvSpl.pas
LRSplReg.dcr
LRSplReg.pas
LRSplRegp.dcr
LRSplRegp.pas
LRSuppl.pas
LRVer.dfm
LRVer.pas
Nkdib.inc
NkDIB.pas
NkDIBUtils.pas
NkGraph.pas
PostBarcode.res

 
次に、すべてのパッケージに対し 5. の手順を適用します。ファイルパスを変更し、コンポーネントエディタを追加しておきます。テストコンパイルで *.dcu 等が生成された場合には削除しておいてください。また、間違って *.dcr を削除しないようにしてください。

C:\LR2 直下に以下のようなスクリプトを書いておくとコンパイル済みユニットとヒストリフォルダを消してくれます。

[RmDCU.cmd]
echo Y | del /s *.dcu
rd /S /Q .\Source\__history
DEKO
管理者
投稿数: 2691
7.パッケージを設計時パッケージにする
on: 2013/06/23 05:12 Sun

これまでの作業でできたパッケージを設計時パッケージにします。

1.Delphi (どのバージョンからでもいい) を起動し、*.dpk を開きます。

2.するとプロジェクトマネージャでは以下のような構成になっているハズです。

画像は XE3 での作業を行っているところです。

3.LR2_170.bpl のトコロを右クリックして "名前の変更" を行います。名前の先頭に "設計時パッケージ" を表すプレフィクス "dcl" を付けて、"dclLR2_170.bpl" にします。dclLR2_xxx.bpl の xxx の部分はバージョンによって読み替えてください。

4.[プロジェクト | オプション] を開きます。

5."ユニットの出力ディレクトリ" に ".\$(Platform)" を指定します (XE 以降の場合)。

"ターゲット" を "すべての構成 – すべてのプラットフォーム" に変更してから "ユニットの出力ディレクトリ" を設定してください (XE2 以降の場合)。

ここの設定は Delphi のバージョンによって異なります。

・Delphi 2010 以前の場合
ビルド構成: Base
ユニットの出力ディレクトリ: .\$(Config)

・Delphi XE の場合
ビルド構成: Base
ユニットの出力ディレクトリ: .\$(Platform) または .\$(Config)

・Delphi XE2 以降の場合
ターゲット: すべての構成 – すべてのプラットフォーム
ユニットの出力ディレクトリ: .\$(Platform)

 
この設定を行わないと、コンパイル済みユニットが各バージョン共通で Source フォルダに生成されてしまいます。2010 以前では $(Platform) が定義されていませんので、$(Config) を使います。XE またはそれ以前の Delphi には64bit コンパイラが存在しないので、.\$(Config) でいいと思います。面倒くさければこの設定はスキップしても構いません。

6.説明とパッケージの種類を指定します。

説明: LightReport2 Components Design-time Package
用途に関するオプション: 設計時のみ使用可能
ビルド制御: 要求があれば再構築を行う

 

XE またはそれ以前だと、ツリーの "説明" ではなく "情報" の所です。

7.一旦保存します。

DEKO
管理者
投稿数: 2691
8.実行時パッケージを新規に作る
on: 2013/06/23 06:21 Sun

今度は実行時パッケージを作ります。

1.プロジェクトグループ (ProjectGroup1 となっている所) を右クリックして "新規プロジェクトを追加" を選択します。

2."パッケージ" を追加します。

3.Package1 のトコロを右クリックして "名前の変更" を行います。名前の先頭に "実行時パッケージ" を表すプレフィクス "rtl" を付けて、"rtlLR2_170.bpl" にします。rtlLR2_xxx.bpl の xxx の部分はバージョンによって読み替えてください。

※ 続きは↓の Page: 2 をクリック。

ページ: [1] 2 3 4
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.049 sec.