2011年2月8日

モーダルなフォームのOnShowイベントでそのフォームを閉じる

プログラム的に必要な設定が行われていないなど、何らかの理由でShowModalされた(モーダルな)フォームのOnShowイベントで当該フォームを閉じたい、ということがたまにあります。ところがOnShowイベントで
procedure TForm2.FormShow(Sender: TObject);
begin

  Close;

end;
としてもそのフォームを閉じることはできません。これはTCustomForm.Closeの実装が
procedure TCustomForm.Close;
var
  CloseAction: TCloseAction;
begin
  if fsModal in FFormState then
    ModalResult := mrCancel
  else
    ...
(Delphi 2007のForms.pasの5589行目付近より)
とモーダルなフォームではModalResultをmrCancelに設定するだけで、一方TCustomForm.ShowModalは
function TCustomForm.ShowModal: Integer;
  ...
  try
    Show;
    try
      SendMessage(Handle, CM_ACTIVATE, 0, 0);
      ModalResult := 0;
      repeat
        Application.HandleMessage;
        if Application.Terminated then ModalResult := mrCancel else
        if ModalResult <> 0 then CloseModal;
      until ModalResult <> 0;
      Result := ModalResult;
      SendMessage(Handle, CM_DEACTIVATE, 0, 0);
      if GetActiveWindow <> Handle then ActiveWindow := 0;
    finally
      Hide;
    end;
  ...
end;
(Delphi 2007のForms.pasの5816行目付近より)
となっており、Showの内部でCloseを呼び出してModalResultをmrCancel(など0以外の値)に変更しても、Showから戻ってきてから0に戻されてしまい、"ModalResult <> 0"という終了条件を満たさないためです。

これを回避するには例えばTTimerを使う方法も考えられますが、お手軽な解決として
procedure TForm2.FormShow(Sender: TObject);
begin

  PostMessage(Handle,WM_CLOSE,0,0);

end;
と自分(モーダルなフォーム)にWM_CLOSEメッセージをpost(sendではない)するという方法があります。PostされたWM_CLOSEメッセージはメッセージキューの最後に追加され、repeat-untilループの内部のApplication.HandleMessageでディスパッチされてTCustomForm.WMCloseから最終的にCloseが呼び出されることでModalResultが0以外の値になり、終了条件を満たしてフォームが閉じる、という仕組みです。

2011年2月7日

KSDevをエンバカデロが買収

先日のqadramに続き、エンバカデロ・テクノロジーズがVGSceneDXSceneの開発元であるKSDevのIPを買収し、KSDevのEugene Kryukovさんが"次世代フレームワーク"チームに加わった、とのことです。

Welcome - KSDev - Adobe AIR or WPF like components, 3D in Delphi, Delphi skin, Flash control, Visio like diagram drawing
I am excited to announce that I have joined Embaracadero’s next gen frameworks team leading a very exciting project.
I am working on a very exciting next generation App Development project that will go beyond what the KSDev products were providing. It is safe to say that similar functionality of these frameworks will be made available in future Embarcadero development products. I believe it will be well worth the wait.

というわけで現在のTFormを中心としたフレームワークを置き換える、おそらくはプラットフォーム非依存の新しいフレームワークが計画されている、ということのようです。

元ねたはEmbarcadero purchase KSDev « Delphi Haven

[書籍]プログラミング .NET Framework 第3版

同じくMARUZEN&ジュンク堂書店 渋谷店

プログラミング .NET Framework 第3版 (amazon)/Jeffrey Richter著/藤原雄介訳/日経BP/ISBN 978-4-82229-416-8/7,350円

を購入。

[書籍]C#ルールブック

MARUZEN&ジュンク堂書店 渋谷店

C#ルールブック ~読みやすく効率的なコードの原則 (amazon)/向山隆行、片山優司、阿部順一、寺田和朗、畑中良平著/電通国際情報サービス監修/技術評論社/ISBN 978-4-7741-4502-0/2,604円

を購入。

2011年2月6日

JCL 2.3.0.374/JVCL 3.41 Binary Installer for XEリリース

Delphi /C++Builder XE Starter SKUにコマンドラインコンパイラDCC32が付属していないため、JCL/JVCLのようにインストーラがDCC32を使用してコンパイルを行うタイプのライブラリをStarter SKUにインストールできない、という問題がありましたが、この問題を回避するJCL/JVCLのコンパイル済バイナリのインストーラがCodeCentralにアップロードされています。

28222 Jedi Code Library 2.3.0.374 Binary Installer for XE
28223 Jedi Visual Component Library 3.41 Binary Installer for XE

JVCLのBinary InstallerでJVCLをインストールする場合は、事前にJCLもBinary Installerでインストールしておく必要があるとのことです。

元ねたはJCL and JVCL Binary Installer for XE and Starter Edition | Andy’s Blog and Tools

2011年2月5日

DDevExtensions 2.3リリース

Andreas HausladenさんDDevExtensionsがアップデートされてVersion 2.3になっています。Delphi 2007用の"Set Version Info"の問題を含め、いくつかの不具合が修正され、Delphi 2009/2010/XE用のものが1つのパッケージに統合されています。

DDevExtensions 2.3 available | Andy’s Blog and Tools

2011年2月4日

Firebird 2.1.4 Release Candidate 1リリース

Firebird 2.1.4 Release Candidate 1がリリースされました。いくつかの機能追加と多数の不具合修正が行われています。

Firebird File Repositories (download)
Firebird 2.1.4 Release Candidate 1 Release Notes

2011年2月3日

第19回エンバカデロ・デベロッパーキャンプ開催決定

第19回エンバカデロ・デベロッパーキャンプは以前からの予告どおり2011年03月30日に開催されます。

エンバカデロ・デベロッパーキャンプ
第19回 エンバカデロ・デベロッパーキャンプ

今回はエンバカデロ・テクノロジーズ チーフサイエンティストのAllen Bauerさんが来日、Pulsarのx64サポートやRAD Studio XEについてのディープなセッションが用意されています。また今回もG6セッションでライトニングトーク「共有!みんなの開発事例、開発経験、テクニック」があります。

CFPは頂きましたが、ネタは熟慮中です…。

2011年2月2日

Open Tools APIを使用してIDEのアドオンを作る

A7MさんによるOpen Tools API(OTA)を使用したadd-onの作り方。興味深い。

Open Tools API その0:概要 - C++Builder好きの秘密基地
Open Tools API その1:"Hello,World!"を表示してみる - C++Builder好きの秘密基地
Open Tools API その2:メニューの差し替えとノーティファイアインターフェース - C++Builder好きの秘密基地
Open Tools API その3:ソースエディタへのアクセス - C++Builder好きの秘密基地
Open Tools API その4:続・ソースエディタへのアクセス ソースエディタの「中身」をいじる - C++Builder好きの秘密基地

関連してGnosticeのGirish PatilさんによるCodeRage 5のOTA関係のセッションのリプレイビデオ(約35分)。

Video: Open Tools API を使用して Delphi IDE をより効果的にする方法を探る (英語)

Girish Patilさんによるセッションのデモコードは

Gnostice @ CodeRage Virtual Conference

からダウンロードできます。またOTAについてはGExperts

Erik's Open Tools API FAQ

も参考になるとのことです。

さらにUwe SchusterさんによるRAD Studio XEにおけるOTAの拡張、修正点に関する解説。

RAD Studio XE: Open Tools API changes highlighted Part#1 | Uwe's Delphi blog

2011/02/05追記: その3のリンクを追加。あとは次回のデベロッパーキャンプのA3セッションで。

2011/02/12追記: その4のリンクを追加。

2011年2月1日

エンバカデロ・デベロッパーキャンプツアー・イン名古屋/大阪 2011

以前から予告されていたミニキャンプことデベロッパーキャンプツアーの開催が正式に発表されています。

エンバカデロ・デベロッパーキャンプツアー・イン名古屋 2011
2011年03月02日(水曜日) 13:30-17:00 愛知県産業労働センター

エンバカデロ・デベロッパーキャンプツアー・イン大阪 2011
2011年03月03日(木曜日) 13:30-17:00 大阪ビジネスパーク

いずれも海外担当副社長兼ジェネラルマネージャーのNigel BrownさんがジェネラルセッションとQ&Aセッションを行うようです。

Delphi/C++Builder XE Starterの機能制限

Delphi/C++Builder Starter SKUで動作する機能、動作しない機能に関する情報です(主にIDE関係)。

○ コード補完 ([Ctrl]+[Space])
○ ブロック補完 ("begin"[Enter]で"end;")
× クラス補完 ([Ctrl]+[Shift]+[C])
× ライブテンプレート ("for"[TAB]で"I := 0 to List.Count - 1 do" や "fo"[Ctrl]+[J]で"for"/"forb"/"forin"/"forr"を選択)
× デバッグ中のツールチップヘルプによる値の表示
× デバッグ中のローカル変数ウィンドウ
× コード参照/定義の検索 ([Ctrl]+Click)
○ InterBase Express (IBX)
○ Borland Database Engine (BDE)
× Database Express (DBX), DataSnap, TClinetDataSet
× VCL/RTLソースコード
○ サードパーティコンポーネントのインストール
○ Open Tools API (OTA)

元ねたはフォーラムのEmbarcadero Discussion Forums: Starter Edition is there

2011/02/03追記: Starter SKUにはコマンドラインコンパイラDCC32が含まれないため、DevExpressやJCL/JVCLのようにインストール時にコマンドラインコンパイラを使用するものはインストールに失敗する、という問題が公式フォーラムやjedi newsgroupに報告されています。

Embarcadero Discussion Forums: DevExpress Controls Won't Install in Delphi Startee Edition

とりあえずStrater用にコンパイル済バイナリを同梱するか、ファイル展開後にIDEで.dpkを開いてインストールするか、というのが解決方法でしょうか。

Delphi/C++Builder XE Starter日本語情報

日本語のリリースが公開されています。

エンバカデロ、C++Builder StarterとDelphi Starterを本日より販売開始

Delphi XE Starter Edition
機能一覧 (PDF)

C++Builder XE Starter Edition
機能一覧 (PDF)

Delphi XE Starter Edition / C++Builder XE Starter Edition - Q&A

Starter SKUはESD(Electronic Software Distribution)版のみで価格は18,900円、アップグレードの場合は14,700円になります(いずれも消費税込み)。

"1,000USDルール"はライセンスの追加条項で
Starter エディションに適用される追加条項
お客様が Starter エディションのライセンスを取得された場合には、以下の条項が適用されます。第 2 条第 1 項の権利付与と矛盾する範囲においては、この条項が優先するものとします。お客様は本製品を使用して、(i)お客様が直接または間接に料金を請求せず、ライセンス料金、サービス料金、開発料金、コンサルティング料金、サブスクリプション料金、サポート料金、ホスト設定料金などの報酬を受け取らないソフトウェア、および、(ii)お客様が請求する料金(ライセンス料金、サービス料金、開発料金、コンサルティング料金、サブスクリプション料金、サポート料金、ホスト設定料金など)が年間の累積で 1000 US ドルを超えないソフトウェアを、開発することができます。企業(営利か非営利かを問いません)がソフトウェアの使用権を付与する場合には、(i)企業全体の収益が 1000 US ドルを超えてはならず、(ii)配置する Starter エディション ライセンスの総数が 5 ライセンスを超えてはなりません。
ということになっています。また教育目的にはStarter SKUは適していないので、アカデミックライセンスを検討してほしいとのことです。

ITpro(要登録)、IT Leaders、ZDNet Japanにも記事が出ています。

DelphiとC++ Builderの廉価版が登場、1万4700円から - ニュース:ITpro
エンバカデロ、C++/DelphiのIDEに1万8000円の廉価版、条件は年間収益1000ドル | IT Leaders
エンバカデロ、商用利用も可能なC++BuilderとDelphiの低価格版 - builder by ZDNet Japan

2011年1月31日

Delphi/C++Builder XE Starterエディション公式ページ

またもフライング気味ですが、Delphi/C++Builder XE Starterエディションの公式ページが出現しています(いまのところ英語のみ)。

Delphi XE Starter Edition
Delphi XE Starter Edition and C++Builder XE Starter Edition FAQs
Feature Matrix (PDF)

C++Builder XE Starter Edition
Feature Matrix (PDF)

Starter SKUで何ができてどの機能が使えなくなったのかはPDFのFeature Matrixで確認できます。

元ねたは公式フォーラムのThread: Starter Edition is thereAndreano LanusseさんDelphi XE and C++Builder XE Starter Editions – Officially announced

日本語の情報は明日になる模様です。

2011/02/01追記: 公式なリリースが出ています。

Embarcadero Introduces Starter Editions of C++Builder and Delphi Rapid Application Development Environments

またプロダクトマネージャのMichael Rozlogさん、プロダクトマーケティングマネージャのTim Del Chiaroさんのblogにも記事が出ています。

Michael Rozlog » Blog Archive » Starter Edition Finally Here!!!
Delphi Insider: Delphi XE Starter and C++Builder XE Starter Now Available

2011年1月28日

Delphi/C++Builder Starter Edition

DelphiとC++BuilderのStarter Editionが発表された、という記事がSDTimesに出ています。とりあえず速報ということで。

Embarcadero Introduces Starter Editions of C++Builder and Delphi Rapid Application Development Environments - SD Times: Software Development News

この記事の注目ポイントとしては、特に機能に関する制限は明示されていないものの、1つのネットワークで5ライセンス以内で、それを超える場合やその開発で1,000USD以上の収入がある場合、あるいはDBX/DataSnapを使う場合は上位のSKUにアップグレードしなければならない、というあたりでしょうか。Starter Editionの価格は199USDで、以前のTurbo Editionや他の競合製品のユーザは149USDでアップグレード可能です。

あとは正式発表待ちです。

元ねたは公式フォーラムのThread: Delphi Starter Edition

1,000USDの件は、Users may sell any applications or components developed with these tools until the annual license or service revenue exceeds $1,000 USD or their micro organization exceeds $1,000 in revenue overall.ですので、個人、学生は年間で、組織の場合は累計で、ということになります。

2011/01/29追記: DEKOさんも指摘しています DEKOさんも指摘していますが、SD Timesの記事は予定稿だったはずで、公開時期が来ていない記事が"http://www.sdtimes.com/link/35223"とかいう"ありふれた方法"で見えちゃうのはまずいですよね。いずれにせよプロダクトマーケティングマネージャのTim Del Chiaroさんによると正式発表は来週前半(2011/02/01)に予定されており、(おそらくESDで)購入も可能になるようです。

2011年1月27日

TortoiseSVNの導入 その1

RAD Studio XEではVersion Insight (ja)という形でバージョン管理システムのクライアント機能がIDEに統合され、Apache Subversion (wikipedia)のクライアントとなることができるようになりました(Version InsightそのものはSubversionに限定されるものではなく、将来的にはGit (wikipedia)やMercurial (wikipedia)などにも対応してゆくとのこと)。またDemoもSourceforgeでホストされるようになりました。しかし2010以前のユーザはこの恩恵を受けられません。そこでSubversionのWindowsにおける最も一般的なクライアントであるTortoiseSVN (日本語ミラーサイト)を導入してみるテストです。

まずはTortoiseSVNのインストールですが、Version 1.5以降ではなぜかインストーラがGDI+を必要とします。このためWindows 2000の場合は

Download details: Platform SDK Redistributable: GDI+

からWindowsXP-KB975337-x86-ENU.exeをダウンロードし、展開(実行)して、<展開先>\asms\10\msft\windows\gdiplusのgdiplus.dllをsystem32にコピーします。

次に公式サイトまたは日本語ミラーサイトから最新版(2011/01/26現在で1.6.12)のアプリケーションと日本語パッケージ(Langugage Packsの"ja")のインストーラをダウンロードします(どちらもx86とx64で別のファイルになっているので注意が必要です)。あとはアプリケーション、日本語パッケージの順にインストールし、[スタート]→[プログラム]→[TortoiseSVN]→[Settings]で設定画面を表示して、General(一般)ページのTortoiseSVNのLanguage(言語)を"日本語"に変更して適用すれば準備は完了です。TortoiseSVNのインストールについては

Subversion/TortoiseSVNのインストール - ピノキヲ IT Wiki

が参考になります。ちなみに日本語のオンラインヘルプは

TortoiseSVN

にあります([スタート]→[プログラム]→[TortoiseSVN]→[Help]と同じものです)。ひととおり目を通しておくべきでしょう。

さて、準備は完了といっても、いきなりSubversionのサーバを立てて、というのはいささかハードルが高いので、Nick HodgesさんThe Best way to Get TSmiley, or…. A Subversion Primerに従ってTSmileyをチェックアウトしてみることにしましょう。

まずTSmileyをチェックアウトするフォルダを用意します(ここでは"D:\SVN\TSMILEY"とします)。エクスプローラからこのフォルダを右クリックし、コンテキストメニューから"SVNチェックアウト"を選択します。チェックアウトダイアログでリポジトリのURLを"https://tsmiley.svn.sourceforge.net/svnroot/tsmiley"、チェックアウトディレクトリは"D:\SVN\TSMILEY"のままとして[OK]をクリックするとチェックアウトが始まります。チェックアウトが終了したらエクスプローラで"D:\SVN\TSMILEY"を見てみましょう。確かにTSmileyのファイルがチェックアウトされています。

とりあえずここまで。

2011年1月26日

DDevExtensions 2.2.1リリース

Andreas HausladenさんDDevExtensionsのVersion 2.2の"Use Unit"に問題があったということでVersion 2.2.1がリリースされています。

Bugfix DDevExtensions 2.2.1 | Andy’s Blog and Tools

2011/02/03追記: Delphi 2007用のDDevExtensions 2.2/2.2.1は"Set Version Info"機能が正常に動作しないという不具合が確認されています。この機能が必要な場合は1.6.1または2.0 snapshotまで戻る必要があります。

2011年1月25日

DDevExtensions 2.2リリース

Andreas HausladenさんDDevExtensionsがアップデートされてVersion 2.2になっています。Delphi 7/2007も最新の2.2でサポートされるようになりました。

DDevExtension 2.2 released | Andy’s Blog and Tools

第19回エンバカデロ・デベロッパーキャンプの日程調整中

次回(第19回)のデベロッパーキャンプはエンバカデロのチーフサイエンティストのAllen Bauerさんアジアツアーに合わせる形で2011年03月30日に開催する方向で調整中とのことです。日本的には年度末ですが、Allen Bauerさんが日本に来るのは(多分)4年ぶりで、これを逃すと次の機会はまた5年後くらいになりそう(藤井さん談)なので、ということです。正式なアナウンスは近日中にあると思われます(フライング気味ではありますが、忙しい時期ですのでまずは事前情報ということで)。またその前の2011年03月02日~03日ぐらいに大阪、名古屋でもミニキャンプを行う予定とのことです。このデベロッパーキャンプ、ミニキャンプの日程を含め、しばらくは最新情報に注目、です。

2011/01/26追記: ミニキャンプは名古屋が2011年03月02日、大阪が2011年03月03日で確定した模様です。

2011/02/01追記: 大阪、名古屋のミニキャンプが正式に発表されています。

2011年1月18日

DelphiでKinect

もうあちこちで既出ですが、IT Security LabのAleksさんによる、DelphiでKinectを扱うデモ。とても興味深い。とりあえずメモ。

Having Fun with Kinect and Delphi (examples of 2D and 3D visualization) « IT Security Lab
More 3D Fun with Kinect and Delphi. You can grab and save still 3D frames! « IT Security Lab

Kinectの制御はSimon StuartさんによるTKinect for Delphiを使用しています(TKinect for Delphiには別途Code LaboratoriesCL NUI SDKが必要とのこと)。

元ねたはAmazing demo of TKinect component for Delphi | Andreano Lanusse Blog

2011年1月17日

Visual Studio 2010の新しい"Help3"システム

Visual Studioでは2002以降で(Delphiでも使用している)Document ExplorerによるMicrosoft Help 2(.hxs)形式のヘルプシステムを採用していましたが、やはり不評だったようで、VS2010では新たに"Help3"と呼ばれるヘルプシステムを開発しました。この"Help3"作成の経緯などをMicrosoftのLibrary EXperience (LEX)チームのJeff Braatenさんが明らかにしています。

The Story of Help in Visual Studio 2010
The Story of Help in Visual Studio 2010 (Part 2)
The Story of Help in Visual Studio 2010 (Part 3)

"Help3"はヘルプシステムのパフォーマンス改善、オフライン/オンラインの切替、MSDNとの共存、ローカライズ、適切な内容のヘルプの表示、といった問題を解決するべく開発が行われました。ただ"Help3"は例によって"早すぎた"ようで、Visual Studio 2010 SP1でHelp Viewerも更新される予定です(既にベータ版が利用可能になっています)。

上記のアーティクルでも考察されていますが、現在Windows上で使用できるヘルプシステムは
の事実上4種類です。今後Delphiのヘルプシステムはどうなっていくのでしょう?

2011/01/18追記: "Help3"についてはこんなページもありました。

XLsoft エクセルソフト : Helpware Group - FAR HTML ヘルプ作成ツール - 日本語ホーム
MS Help Viewer 1.0

旧形式からのマイグレーションツールビュアー、対応オーサリングツールもあるようです。