« Queryでフィールド取得 | トップページ | override »

2007年5月30日 (水)

カスタムコンポーネントのススメ

某所で

「StoredProcコンポをOracleで使うとなんかおかしくなっちゃいマス」
訳:だから早く直して下さいplz

と書き込んだら、

「このSoredProcのbuildQueryはOracleのPL/SQLに対応してないんだよねー、直す予定だけど。とりあえず自分でoverrideして作ればいいよー。」

とか言われました。

というわけで、ためしに簡単なカスタムコンポを作ってみる事に。

参考にしたのはここです。


上記によると、カスタムコンポ作成のための方法は3つあるようだ。

その1.
既存のコンポーネントをコピって必要なコードだけ変更。

これはDel厨にはちょっとキモチ悪い。
だってなんかbugがあってのちに修正されても、自分のカスタムコンポにはbugが潜んでいるまま・・・。
継承してねって事なのか?なのか??


その2.
全く新しいコンポーネントを一から作る。

とても・・・めんどいです・・・。


その3.
サードパーティのスクリプトをラップする。

ようするに、dbtables.inc.phpみたいなもんか(ADOdbを使ってる)。


まずは試しに作るだけなので、Editを元に継承して作ってみました。

Component→New Componentで、
Ancestor class: Edit
Classname: TestEdit
Pallete Page: TestComponent
パッケージも一緒に作るので、Create packageにもチェックを付けました。

とすると勝手に以下のファイルが出来上がっています。
unit1.package.php ←packageファイル
unit1.inc.php ←コンポーネントファイル

それぞれ、test.package.phpとtest.inc.phpとかの名前にして、packageファイルのregisterComponentsのファイル名の指定もそれに合わせて変更。
今回便宜上、各ファイルをtestcompフォルダに入れておくので、この場合

registerComponents("TestComponent",array("TestEdit"),"testcomp/test.inc.php");

とかに。
(環境に合わせて変えて下さい)

複数のコンポーネントを作る時、packageは一回一回作らずに、まとめちゃってもOK(この場合、registerComponentsをpackageに複数書く)です。


この時ファイルの場所を書き間違えると、コンポーネントを貼り付けるときにエラーになります。 しかもそのエラーメッセが結構わかりにくい。
さらに言うと、ファイルの場所間違えたぜーとか言って訂正してもDelphi4PHPを再起動するまで同じエラーが出続けます・・・。
これにハマって数時間を無駄にしたアテクシ。('A`)
仕様なのかこれ? ひどいよ・・・。


あと、同じくpackageの

setPackageTitle("Put the title of your package here");

も、

setPackageTitle("test");

とかで。
これはpackageを追加する時に、package名として表示されます。


とりあえず今回は実行時にtextに文字を表示するだけのコンポなので、test.inc.phpのdumpContentsファンクションのところに

$this->Text = 'hoge';

を追加してみるだけにしました。


Component→Package→Addで上記のtest.package.phpを追加すれば、右のTools PaletteにさっきのTestComponentパレットが出来てるので、その中に今作ったコンポが鎮座している次第であります。


要点:
classが見つからないとか、streamがどーたらとかいうエラーが出たら、即Delphi4PHPを再起動!

|

« Queryでフィールド取得 | トップページ | override »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/70189/15253771

この記事へのトラックバック一覧です: カスタムコンポーネントのススメ:

« Queryでフィールド取得 | トップページ | override »