フォーラム


ゲスト  

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

ページ: 1 2 [3]
トピック: LightReport2 Unicode 版を 64bit 対応にしてみる
DEKO
管理者
投稿数: 2493
18.成果物
on: 2013/06/23 22:31 Sun

この記事の成果物です。

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

  • (U) Delphi 2009~XE4 用パッケージを更新。
  • (U) Delphi XE2~XE4 用パッケージを 64bit アプリケーションでも利用可能にした。
  • NkDIB のワーニングをすべて潰した。

この記事の元となった (改変前の) Rel.9 も DL 可能です。

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

XE ~ XE4 Starter で LightReport2 を使う場合 (または DB 関連コンポーネントが不要な場合) には、

[設計時パッケージ]
・LRSplReg を LRSplRegp に差し替え

[実行時パッケージ]
・LRDBSpl.pas をプロジェクトから削除
・Requiers から dbrtl / vcldb を削除

これで動作すると思いますが、動作しないかもしれませんし、この作業を行わなくてもインストールできるかもしれません。Starter Edition を所持していないので検証しようがないのです。ゴメンナサイ。

DEKO
管理者
投稿数: 2493
コーヒーブレイク 3
on: 2013/06/23 23:26 Sun

記事は少々回りくどいやり方をしていますが、実際にマイグレーションをやりながら書いたものですからその点をご了承頂けると有難いです。勘所が掴めてくると、異なるバージョン用のコンポーネントパッケージを作るのはそんなに難しいものではありません (大抵はコピーしてリネームで済みますから)。

Unicode 版 Delphi に限った話だと、まず XE でパッケージを作ってみてちゃんと動作したら 2010->2009->XE2->XE3->XE4 とパッケージを作っていくのが最も簡単だと思います。これは XE2 でユニットスコープが変更になっているのと、マルチプラットフォーム対応が理由です。

LightReport2 ではとりあえず XE2 までのパッケージがありましたから XE3 ベースで記事を書きました。マルチプラットフォーム用のダイアログのように、XE2 以降でしか出てこない手順があったからです。本当であれば先述の順番でやるべきだったのでしょうが…。

さて、LightReport2 は既に Unicode 化されていたので比較的スムーズに 64bit 化できました。
しかしながら秘伝のタレ的なコンポーネントの中には、まず Unicode 化する必要があるものもあるでしょう。

オリジナルコンポーネント

(dsgnintf の利用を中止、DesignIntf & DesignEditors へ移行)

Unicode 化

設計時 / 実行時パッケージに分離

64bit 対応

古いコンポーネントはこのようなマイグレーションが必要となります。 「よく使うコンポーネントが Unicode 化されていないから新しい Delphi が使えない!」 とか 「よく使うコンポーネントが 64bit 化されていないから 64bit アプリが作れない!」 というのはあまりにも勿体無い話です。

喫茶店のマスター (出張中) も仰っていましたが、作者と連絡の付かないコンポーネントや再配布に制限のあるコンポーネントがあったりするので、コンポーネントのマイグレーションはどうにかして自前で行うしかありません。今回の記事がコンポーネントのマイグレーションのお手伝いになったのであれば幸いです。

…dcu でしか提供されていない古いコンポーネントがある?そんなのは窓から放り投げましょう。

DEKO
管理者
投稿数: 2493
コーヒーブレイク 4
on: 2013/06/24 10:17 Mon

"15.コンポーネントを 64bit 化する" の手順で PLATFORMTARGETS を埋め込むと、"16.挙動不審な PLATFORMTARGETS" の画像にあるように英語と日本語のリソースの2つが含まれてしまいます (OS のロケールが日本-日本語の場合)。

コンパイラ (IDE) が追加したのが英語リソースで、x64Res.rc で追加したのが日本語リソースです。これは実行時パッケージのバージョンリソースを日本語にしても一つにはできません。

これを解決するには x64Res.rc を以下のように記述します。

[x64Res.rc]
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
PLATFORMTARGETS RCDATA {3}

 
しかしながらこの方法を使うと、実行時パッケージのコンパイル時に "Duplicate Resource" のワーニングが出てしまいます。英語と日本語のリソースが含まれても、値はどちらも同じになるので問題はないのですが、少々気持ち悪いですね。

DEKO
管理者
投稿数: 2493
19.属性による 64bit 化を行う
on: 2013/06/24 10:59 Mon

ちょっと手間なのですが、問題が起きにくいのとリソース重複が発生しないので、属性による 64bit 化もやってみたいと思います。

1.パッケージから x64res の記述を削除する (実行時パッケージから x64res を抜く)。

2.x64Res.rc 及び x64Res.res をすべて削除する。

3.コンポーネントクラスの宣言部に以下のコードを追加する。

  {$IF CompilerVersion >= 23.0}
[ComponentPlatformsAttribute(pidWin32 or pidWin64)]
{$IFEND}

 
これは RegisterComponent() で登録されるすべてのコンポーネントクラスに追加する必要があります。例えば TLightRep コンポーネントクラスの場合には以下のように属性を追加します。

  { TLightRepコンポネント }
{$IF CompilerVersion >= 23.0}
[ComponentPlatformsAttribute(pidWin32 or pidWin64)]
{$IFEND}
TLightRep = class(TCustomPanel)
private
FOnSetPrinter: TNotifyEvent;
...

 
{$IF CompilerVersion >= 23.0} のコンパイラ指令がないと、2009~XE では "無効な属性" のワーニングが出てしまいます。

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

C:\LR2
├─Packages
│ ├─2009
│ │ dclLR2_120.dpk
│ │ dclLR2_120.dproj
│ │ dclLR2_120.res
│ │ LR2_120.groupproj
│ │ rtlLR2_120.dpk
│ │ rtlLR2_120.dproj
│ │ rtlLR2_120.res
│ │
│ ├─2010
│ │ dclLR2_140.dpk
│ │ dclLR2_140.dproj
│ │ dclLR2_140.res
│ │ LR2_140.groupproj
│ │ rtlLR2_140.dpk
│ │ rtlLR2_140.dproj
│ │ rtlLR2_140.res
│ │
│ ├─XE
│ │ dclLR2_150.dpk
│ │ dclLR2_150.dproj
│ │ dclLR2_150.res
│ │ LR2_150.groupproj
│ │ rtlLR2_150.dpk
│ │ rtlLR2_150.dproj
│ │ rtlLR2_150.res
│ │
│ ├─XE2
│ │ dclLR2_160.dpk
│ │ dclLR2_160.dproj
│ │ dclLR2_160.res
│ │ LR2_160.groupproj
│ │ rtlLR2_160.dpk
│ │ rtlLR2_160.dproj
│ │ rtlLR2_160.res
│ │
│ ├─XE3
│ │ dclLR2_170.dpk
│ │ dclLR2_170.dproj
│ │ dclLR2_170.res
│ │ LR2_170.groupproj
│ │ rtlLR2_170.dpk
│ │ rtlLR2_170.dproj
│ │ rtlLR2_170.res
│ │
│ └─XE4
│ dclLR2_180.dpk
│ dclLR2_180.dproj
│ dclLR2_180.res
│ LR2_180.groupproj
│ rtlLR2_180.dpk
│ rtlLR2_180.dproj
│ rtlLR2_180.res

└─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
LRVer.dfm
LRVer.pas
Nkdib.inc
NkDIB.pas
NkDIBUtils.pas
NkGraph.pas
PostBarcode.res

 
そして出来た成果物が以下になります。

[LightReport2 Unicode Edition Rel.12 変更点]

  • (U) PLATFORMTARGETS ではなく属性による 64bit 化に変更。

日本語環境だと "属性による 64bit 化" の方が後腐れなくていいかもですね。

DEKO
管理者
投稿数: 2493
20.雑多な情報 2
on: 2013/06/25 23:20 Tue

・64bit 化できない。
何度もパッケージをいじっていると 64bit 対応がどうやってもできなくなる事があります。ちょっと落ち着いて以下の手順を行ってみてください。

1.Delphi を起動し [コンポーネント | パッケージのインストール] で該当パッケージを削除。
2.Delphi を一旦終了。
3.C:\Users\Public\Documents\RAD Studio\<n.n>\Bpl に存在する該当パッケージ (*.bpl) を削除 *1
4.Delphi を起動し、パッケージを再度インストール。
5.Delphi を一旦終了し、Delphi を再度起動

 
この手順で反映されると思います。キャッシュ的なものがやっぱりあるようで、Delphi を終わらせずにパッケージだけいじっても 64bit 化されない事があります。

・コンポーネントアイコンが○△□になった。ちゃんと *.dcr は含めてあるのに?
何度もパッケージをいじっているとコンポーネントアイコンが腐る事があります。ちょっと落ち着いて以下の手順を行ってみてください。

1.Delphi を終了。
2.レジストリエディタを起動
3.[HKCU\Software\Embarcadero\BDS\<n.n>\Palette\Cache] を開く *1
4.該当するパッケージの名前があったらキーごとそれを削除。
5.Delphi を起動。

 
キャッシュが作られるタイミングは Delphi 起動後で、プロジェクトが開かれたとき (パーソナリティあるいはプラットフォームが確定した時) のようです…なのでタイミングが悪いとどうやっても ○△□ のままになってしまいます。

*1<n.n> の値は以下の通りです。

  • 2009 = 6.0
  • 2010 = 7.0
  • XE = 8.0
  • XE2 = 9.0
  • XE3 = 10.0
  • XE4 = 11.0
  • XE5 = 12.0
  • XE6 = 14.0
  • XE7 = 15.0
  • XE8 = 16.0
  • 10 Seattle = 17.0
  • 10.1 Berlin = 18.0
  • 10.2 Tokyo = 19.0

See Also:
[164_コンポーネントのアイコン作成支援プログラム (Mr.XRAY)]
http://mrxray.on.coocan.jp/Delphi/plSamples/164_CreateCompoIcon.htm

[コンポーネント用アイコンの作り方 (2005 以降)]
http://ht-deko.minim.ne.jp/tech041.html

[IDE に登録したコンポーネントのアイコンが△□○になってしまう場合には? (2005 以降)]
http://ht-deko.minim.ne.jp/tech041.html#tech078

DEKO
管理者
投稿数: 2493
LightReport2 ver2.51 Unicode Edition Rel.14
on: 2017/08/07 12:16 Mon

LightReport2 ver2.51 Unicode Edition Rel.14 をリリースしました。

[変更点]

  • (U) Delphi XE5~Delphi 10.2 Tokyo 用のパッケージを追加
  • (U/A) TLRBarImage を更新。

TLRBarImage の更新は、以前 seizo さんから指摘されていたバーコード処理のバグ修正です。
(CODE-128 で、バッククォート「`」が表示できないようになっていた件)

DEKO
管理者
投稿数: 2493
LightReport2 ver2.51 Unicode Edition Rel.15
on: 2017/08/07 13:32 Mon

LightReport2 ver2.51 Unicode Edition Rel.15 をリリースしました。

[変更点]

  • (U) Delphi 10.2 Tokyo (Starter Edition) 用のパッケージを追加

Starter Edition でも簡単にインストールできるようになりました。
(Starter Edition では DB 関連の LightReport コンポーネントは利用できません)

Download: http://ht-deko.minim.ne.jp/software/lr251u_rel15.zip

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