« 2004年2月 | トップページ | 2004年4月 »

☆デスクトップのパス取得

Windowsフォームアプリケーションで、デスクトップのパスを取得するにはどうすればよいのかを調べたところ、次のようにすれば取得できました。

procedure TWinForm.Button1_Click(sender: System.Object;
  e: System.EventArgs);
begin
  MessageBox.Show(Environment.GetFolderPath(
   Environment.SpecialFolder.Desktop), 'test');
end;

HELPでSpecialFolder 列挙体を調べると、システムのいろいろな特別なフォルダへのディレクトリパスを取得できます。

|

■Delphi7からDelphi8への移行

BorlandのホームページDelphi - 技術情報として「Borland® Delphi™ 8 を使用したBorland® Delphi™ Win32 アプリケーションのMicrosoft® .NET Framework への移行」について書かれたPDFファイルがダウンロードできます。HELPよりも詳細に記述されています。

|

■Optimizeit Profiler

今日、BorlandからOptimizeit Profiler(英語版)のライセンスキーが届きました。早速使ってみましたが、表示された情報でどのようにしてパフォーマンスをチューニングすればよいのか全くわかりませんでした。HELPを読んで勉強しなきゃ。

|

★フィールドエディタの動作

VCLフォームアプリケーションで、ClientDataSet1を右クリックしてフィールドエディタを選択します。
すべてのフィールドを追加して、最上段のフィールドをクリックしてすぐにマウスを他のフィールド上に移動させると、クリックしたフィールドではなくてそのフィールドが選択されます。PCの処理速度が遅いせいかも知れませんが、妙な動きですよね。

|

■Anders Hejlsberg氏

有名な話なので、ご存知の方も多いかも知れませんが、.NET Framework及びC#は、MicrosoftのAnders Hejlsberg氏によって開発されたそうです。Anders Hejlsberg氏と言えば、Delphiの生みの親ですね。Delphiの開発者がDelphiの優位性を失わせてしまうなんて・・・皮肉なことですね。

|

■.NETの本

.NETの本を探しに、書店に行ってきました。.NETの本はたくさん並んでいましたが、どれもC#かVBばかり。まあ、予想通りだったのですが、今までのDelphiに関する本もほとんどなく、寂しい思いをしました。結局、日経BPソフトプレスの「Charles Petzold C#によるプログラミングWindows 上」という本を買ってきました。この本で.NETを勉強するなら、そのままC#を覚えたらいいのに・・・ふとそう思ってしまいました。

|

■ブックリストを作りました。

主にDelphi関係で、私の持っている本のリストを作ってみました。コメントは、独断と偏見で私の感じたままを書いていますので、あしからず・・・。

|

■Delphi7.1

Delphi7のアップデートについての記事があるとDelphiメーリングリストで知りました。

Delphi 8 and Win32 update details

Delphi7.1としてアップデートが提供されるみたいですね。他にもいろいろ書いていますが、「アップデートの詳細」というよりも、「Delphi8の宣伝」のような印象を受けました。

|

■日本語版Update2について

Borlandのホームページで、Delphi8の日本語版Update2のコメントがありました。
Borland USAのUpdate2は、やはり英語版対象だったみたいです。日本語版対象は、近日公開予定だそうです。

|

■Update2は適用できない?

2004.03.12 ■Borland USAからのメールで、アップデートを試した結果を書きましたが、日本語版がアップデート1適用済みだと知らずに作業をしていたため、Delphi8を再インストールして、再びアップデート2の適用を試みました。しかしながら、先日と同じ結果となり、アップデート2のインストールはできませんでした。気を取り直して、再インストールしなきゃ。

|

■Borland USAからのメール

Update Available for Borland Delphi 8 for .NETというタイトルで、Borland USAよりDelphi8のGeneral Update 2の案内メールが届きました。ホームページを見てみますと他にRave Reports、Documentation、InterBase 7.1 Service Pack 2のアップデートがありました。日本語版にも使えるのか?と疑問に思いつつとりあえず、まずは、Documentationが英語のみかどうかチェックしてみようと思い、ダウンロードしてみました。実行ファイル形式でしたが、どうせ自己解凍ファイルだろうと簡単に考えて実行させてみました。結果は、HELPの更新まで自動で行い、私のHELPは英語になってしまったのでした。
日本語版のアップデートがあるのかと思い、日本のBorlandのホームページでアップデートを確認すると、
最新のアップデート等のダウンロードは、米国ボーランドのダウンロードサイトでご確認いただけます。
という表記がありました。でもそれって、日本語版で使えるの?使えないの?

まあ、どうせHelpを再インストールしなきゃいけないなら、Updateも試してみようと次の手順でインストールを試みました。
 1. d8_pro_upd1.exe → インストール後、きちんと起動しなくなりました。(注1)
 2. d8_pro_upd2.exe → インストール途中で「ディスク: をセットして下さい。」という
  メッセージが表示されましたが、どのディスクを入れても同じ状態でした。
  仕方なくキャンセルしました。

結果として、私が試した環境では、アップデートできないみたいです。面倒だけど、Delphi8を再インストールしなくっちゃ。

(注1)BorlandのDelphi - サポート情報を見たら、Delphi 8 アップデート1は日本語製品版に含まれているとのことでした。


|

★JPEGユニットがない。

Delphi8で、FireBird1.03のBLOB SUB_TYPE 0のフィールドにJPEGを格納しようとして、USESにJPEGと書いてコンパイルしたらエラーになりました。どうしよう?困ったなあ。
関係ないけど、Kylix3 Professional版でもJpegユニットがなかったですね。

|

☆無効なスレッドモデル?

Delphi7から移植したアプリケーションで、DBExpressでFirebird1.03のデータベースをオープンしようとすると、

「無効なスレッドモデル(STAThreadAttribute が必要です)」

というエラーメッセージが表示されました。
いろいろ調べてみますと、HELPの「VCL アプリケーションを Delphi 8 for .NET に移植する際の言語の問題」に「スレッドモデルの変更」という項目があり、そこにdprファイルのbeginの直前に[STAThreadAttribute] 属性を追加するだけですと記述がありました。こんな文法あったかな?と思いながらも以下のようにすれば、問題なく実行できました。

(略)
uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1},
 DataModuleMain in 'DataModuleMain.pas' {DataModule1: TDataModule};

{$R *.res}
[STAThreadAttribute]  //この行!!
begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.CreateForm(TDataModule1, DataModule1);
 Application.Run;
end.

ちなみにVCLフォームアプリケーションを新規作成しますと、次のようになっています。
[STAThread] // こんな属性が指定されています。
begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

プログラム/アセンブリ情報というよくわからない記述もありますし・・・。

|

☆デスクトップのパス

Delphi7で作成したプロジェクトを移植しようとデスクトップにコピーして作業を始めました。しかしながら、何度訂正してコンパイルしても下記のようなエラーメッセージが表示されてしまいました。

「モジュール'dcc71il.dll'のアドレス xxxxx でアドレス xxxxx に対する書き込み違反がおきました。」

原因は、「2004.03.05 インストールしました。」にも書いたとおり「デスクトップ」という2バイト文字が含まれていることによるものでした。(Readme.txtにきちんと書いてあった気がします。)今までデスクトップを作業用に使うことが多かったので、以後気をつけなきゃ。というか、日本語版なら対応しておいてほしいものです。

|

☆TWebBrowserがない?!

Delphi7を使って、データベース(Firebird1.03)にアクセスして、HTMLを作成するプログラムを作成しました。結構シンプルなものなので、Delphi8に移植してみようとしましたが、HTMLのプレビューに使っているTWebBrowserがなくなっているため、エラーになってしまいました。とりあえず、次のようにしてデフォルトのブラウザを起動することにより、対応することにしたのですが、やっぱりアプリケーションからプレビューフォームとして処理させたいですね。

<URLを指定してデフォルトのブラウザを起動させます。>
~VCLフォームアプリケーションの場合~
 1. ActionListをフォームに貼り付けます。
 2. ActionListをダブルクリックして、新規標準アクションクラスの選択ダイアログを
   表示させます。
 3. インターネットのTBrowseURLを選択し、そのURLプロパティに表示させたいURL
   を設定します。
 4. ボタンからブラウザを起動させるには次のようにします。

   procedure TForm1.Button1Click(Sender: TObject);
   begin
    BrowseURL1.ExecuteTarget(Self);
   end;

   ※ActionなんだからButton1のActionに設定すべきですね。

|

★Firebird1.03でエラー?

簡単なデータベースを作成して、接続できるかどうかを試してみました。
データベースはFirebird1.03です。Delphi8には、開発用のInterBase7.1が付属していますが、現在、Firebird1.03を使って、Delphi7で開発中のプロジェクトがあるためインストールしていません。
 1. 新規作成→Windowsフォームアプリケーションを選択します。
 2. BdpConnectionを貼り付け、オブジェクトインスペクタの接続エディタを選択します。
 3. データベースを設定して、テストボタンを押して接続できることを確認します。
 4. BdpDataAdapterを貼り付けて、「データアダプタの設定」を選択します。
 5. SQL生成ボタンを押すと次のようなエラーメッセージが表示されます。
   「Ambiguous field name between table RDB$RELATION_CONSTRAINTS
   and table RDB$RELATIONS RDB$RELATION_NAME」

 6. とりあえずSELECTを手入力して、データアダプタの設定ダイアログの
   データセットのタブを表示させ、データセットの新規作成にチェックされ
   ている状態でOKボタンを押してdataSet1を作成します。
   (なぜdataSetの表記は、DataSetでなくてdataSetなんだろう?)
 7. DataGridをフォームに配置して、DataBindingsのDataSourceに
   dataSet1を、DataMemberにテーブル名を設定します。
 8. BdpDataAdapter1のActiveをTrueに設定し、実行します。

データは問題なく表示されています。また、編集もできますが、Update、Insert、DeleteのSQLが設定されていないため、当然、データベースは更新されません。

ここで問題としたいのは、エラーメッセージが表示される原因が、
 1. ユーザーの設定
 2. Firebirdへの未対応(というかFirebirdが未対応?)
 3. Delphi8のバグ
のどれなのかということです。私の使い方の間違いであってほしいですが、現在、他のデータベースで作成する環境がないので検討できないため、何かわかりましたら報告します。

|

■DBWebがない。

BorlandのホームページでDelphi8のWeb Seminarを見ました。その中に「ASP.NETアプリケーションの開発」というセミナーがあって、とりあえずその通り練習してみようとDBWebというコンポーネントの分類を探してみましたが、見つかりませんでした。どうやら、Professional版では、アクセスできるデータベースの種類だけではなく、Webで簡単にデータを扱えるコンポーネント(DBWeb)も付属していないようです。価格差を見れば納得してしまうけど、きちんと明記しておいてほしかったです。
そういえば、Professional版では、Microsoft SQL Server2000へのアクセスもサポートされていません。ということは、Microsoft SQL Server2000 Developer Editionをアンインストールしてもいいのかな?

|

■同梱されていたDelphi7

Delphi8には、Win32アプリケーション開発用にDelphi7が同梱されています。私は、もともとDelphi7ユーザーなのでインストールする必要はないのですが、もしかしたらバグフィックスされているかもと期待して、アンインストール後、インストールしてみました。そして恐る恐るIndyのHelpを開いてみると・・・やっぱり英語でした。ということは、公開済みのアップデートさえ適用されてなさそうです。面倒だけどアップデートと自作のコンポーネントのインストールをしなくては・・・。ああ、期待しなきゃよかった。

|

☆ASP.NETでエラー?

ASP.NETを試してみました。
何度試してみても
「「ASP.NETワーカープロセスにアタッチできません(通常 aspnet_wp.exe または w3wp.exe)」
というエラーメッセージが表示されました。いろいろ調べてみますと、その対策が、Readme.txtにきちんと明記されていました。(この処理は、Windowsを再起動をしないと有効にならないみたいです。もしかしてIISの再起動でもいいのかも知れませんが・・・。)

以下、Readme.txtからの引用---------------------------------------

* .NET Framework のインストール後に IIS をインストールした場合は,[スタート|名前を指定して実行]で次のコマンドを入力して,IIS に ASP.NET を登録する必要があります。

%comspec% /K %windir%\microsoft.net\framework\v1.1.4322\aspnet_regiis.exe -i

この作業を行わずに IDE で ASP.NET アプリケーションを実行しようとすると,ASP.NET ワーカープロセス(通常は aspnet_wp.exe または w3wp.exe)にアタッチできないというエラーメッセージが表示されます。

|

☆インストールしました。

次の順番でインストールしました。

1. Microsoft SQL Server2000 Developer Edition
2. Borland Delphi8.0 for the Microsoft .NET Framework
3. Borland Optimizeit Profiler Evaluation
   for the Microsoft .NET Framework
4. Rave Reports Borland Edition
5. Installshield Express - Borland Edition

その後、ComponentOneにユーザー登録してダウンロードしたファイルをインストールしました。
(このファイル、インストーラーが何回も起動して、とても面倒でした。)

使用許諾コードを取得して、早速、起動してみました。
IDEが、C#Builderに似ていて、Delphiとは思えないです。
頭が固い私には慣れるまで、時間がかかりそうですね。

早速使ってみようと、新規作成でVCLフォームアプリケーションを選択して、何もコードを書かずに、実行ボタンを押してみました。すると次のようなエラーで実行できませんでした。

「モジュール'dcc71il.dll'のアドレスxxxxxxでアドレスxxxxxxに対する書き込み違反がおきました。」

原因は、ユーザーフォルダ名に2バイト文字が使われていたためで、新しいユーザーアカウントを作成して、実行すると問題なく起動しました。

|

■Delphi8届きました。

本日、ようやく届きました。パッケージが小さくなったなぁと思いながら、箱を開けるとマニュアルがなくなっていました。昼休みにでもインストールしよっと。


delphi8.jpg

|

■まだ出荷されていない。

Delphi8がなかなか届かないので、もしかして申し込みできていないのかなと思い、ボーランドに電話してみました。
出荷作業が遅れていて、私のものは、明日出荷予定とのことでした。まあ、現在仕事が忙しいので、ちょうどいいかな。

|

« 2004年2月 | トップページ | 2004年4月 »