2009年7月11日

Delphi 2009/C++Builder 2009 Help Update 3

Delphi 2009/C++Builder 2009のHelp Update 3がリリースされています。英語版についてはHelp Update 2の不具合修正、ドイツ語、フランス語、日本語については英語版Help Update 2の翻訳となっています。

Readme: Help Update 3 for Delphi and C++Builder 2009

元ねたはNick HodgesさんのRandom Thoughts on the Passing Scene #115

2009年7月9日

ファイルをごみ箱経由で削除

ファイルをごみ箱に送る(ごみ箱経由で削除する)にはSHFileOperationSHFILEOPSTRUCTのwFuncにFO_DELETEを指定します。またファイル名はNUL文字で区切って最後にNUL文字を2つ重ねる("double-null terminated string")必要があります。
uses
  Windows, SysUtils, Classes, ShellAPI;

function SHDeleteFiles(const Filename: String; WindowHandle: HWND;
                       AllowUndo: Boolean; FilesOnly: Boolean;
                       NoErrorUI: Boolean; Silent: Boolean): Boolean; overload;
function SHDeleteFiles(Filenames: TStrings; WindowHandle: HWND;
                       AllowUndo: Boolean; FilesOnly: Boolean;
                       NoErrorUI: Boolean; Silent: Boolean): Boolean; overload;

function InternalDeleteFiles(const Filenames: String;
                             WindowHandle: HWND;
                             AllowUndo: Boolean;
                             FilesOnly: Boolean; 
                             NoErrorUI: Boolean;
                             Silent: Boolean): Boolean; forward;

function SHDeleteFiles(const Filename: String; WindowHandle: HWND;
                       AllowUndo: Boolean; FilesOnly: Boolean;
                       NoErrorUI: Boolean; Silent: Boolean): Boolean;
var
  FilenameArray: String;
begin

  FilenameArray := ExpandFileName(Filename) + #0;
  Result := InternalDeleteFiles(FilenameArray,WindowHandle,
                                AllowUndo,FilesOnly,NoErrorUI,Silent);

end;

function SHDeleteFiles(Filenames: TStrings; WindowHandle: HWND;
                       AllowUndo: Boolean; FilesOnly: Boolean; 
                       NoErrorUI: Boolean; Silent: Boolean): Boolean;
var
  Index: Integer;
  FilenameArray: String;
begin

  FilenameArray := '';
  for Index := 0 to Filenames.Count - 1 do
  begin
    FilenameArray := FilenameArray + ExpandFileName(Filenames.Strings[Index]) + #0;
  end;
  FilenameArray := FilenameArray + #0;

  Result := InternalDeleteFiles(FilenameArray,WindowHandle,
                                AllowUndo,FilesOnly,NoErrorUI,Silent);

end;

function InternalDeleteFiles(const Filenames: String;
                             WindowHandle: HWND;
                             AllowUndo: Boolean;
                             FilesOnly: Boolean;
                             NoErrorUI: Boolean; 
                             Silent: Boolean): Boolean;
var
  SHOP: TSHFileOpStruct;
begin

  with SHOP do
  begin
    Wnd := WindowHandle;
    wFunc := FO_DELETE;
    pFrom := PChar(Filenames);
    pTo := nil;
    fFlags := FOF_NOCONFIRMATION;
    if AllowUndo = True then
    begin
      fFlags := fFlags or FOF_ALLOWUNDO;
    end;
    if FilesOnly = True then
    begin
      fFlags := fFlags or FOF_FILESONLY;
    end;
    if NoErrorUI = True then
    begin
      fFlags := fFlags or FOF_NOERRORUI;
    end;
    if Silent = True then
    begin
      fFlags := fFlags or FOF_SILENT;
    end;
    fAnyOperationsAborted := False;
    hNameMappings := nil;
    lpszProgressTitle := nil;
  end;

  Result := (SHFileOperation(SHOP) = 0) and (SHOP.fAnyOperationsAborted = False);

end;
元ねたはDelete files with the ability to UNDO他多数。

2009年7月2日

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

スピーカの皆さん、関係者の皆さん、懇親会に参加したみなさん、おつかれさまでした。
今日は山本さん神が降臨した瞬間を見られてよかったです(それが感想かい)。あとペンケースが当たりました。

2009/07/13追記: セッション資料がダウンロードできるようになっています。

2009年6月29日

JVCL 3.37リリース

JVCL(JEDI Visual Component Library)がアップデートされてVersion 3.37(JCL Version 1.105)になっています。

SourceForge.net: JEDI VCL for Delphi: Files

元ねたはNick HodgesさんのRandom Thoughts on the Passing Scene #114

2009年6月19日

PowerPDF for Delphi 2009 日本語版

PDFを生成するTakeshi KannoさんのPowerPdf 0.9(開発停止/LGPL)をDelphi 2009で使用できるようにMamさんが改造したコンポーネント。

PowerPDF for Delphi 2009 Japanese
MAM'S WEBSITE 無料フリーソフトダウンロード(PCツール)

数式計算コンポーネント

数式を与えて値を計算するという、簡単なようにみえて実際には結構面倒なことをやってくれるというコンポーネント。作者のYura Pisarevさんはロシアの方でしょうか。

High-speed mathematics parser
TMathParser

ライセンス条件はどうなっているのでしょう…?

2009年6月16日

ローカライズリソースDLLの選択

国際化対応のためのメカニズムとしてDelphi/C++Builder(Ver3以降)にはローカライズリソースDLL(localized resource DLL)があります。これは拡張子".EXE"、".DLL"、"BPL"のファイルについて、実行時にこれらのファイルからのリソース(フォームデータ、リソース文字列、その他の埋め込みリソース)のロードをローカライズリソースDLLからのものに置き換えてしまう、というものです。
この動作はSystem.pasのLoadResourceModule関数で処理されますが、ここではまず"HKCU\Software\CodeGear\Locales"(Delphi 2009 or later)、"HKLM\Software\CodeGear\Locales"(Delphi 2009 or later)、"HKCU\Software\Borland\Locales"(Delphi 4 or later)、"HKLM\Software\Borland\Locales"(Delphi 6-2007)、"HKCU\Software\Borland\Delphi\Locales"(Delphi 3 or later)の順にレジストリキーの存在を確認し、いずれかが存在したら次に実行ファイルのフルパス名の登録があるかどうかを見て、登録されていたら代替ロケール識別子として取得します。次に実行プログラムのロケール識別子を実行ロケール識別子として取得します。その上で実行ファイルのフルパス名の拡張子を代替ロケール識別子(登録されていれば)、実行ロケール識別子、実行ロケール識別子の先頭2文字だけ、の順で置き換えてWin32APIのLoadLibraryExを呼び出し、成功したらそのモジュールハンドルを以後のリソースの取得に使用します。いずれも失敗した場合はもともとの実行ファイルのモジュールハンドルからリソースを取得することになります。

ここでロケール識別子はGetLocaleInfoのLCTYPEにLOCALE_SABBREVLANGNAMEを指定して取得される3文字の英字で、最初の2文字が言語簡略名(ISO 639)を、3文字目がサブ言語タイプ(主に地域)を示します。詳細なリストはMSDNのNational Language Support (NLS) API Referenceにあります。

ということは、実行ロケールがJPN(ロケールID=0x0411/日本語版Windows)かつ実行ファイルのロケールがJPN以外(例えばENU=0x0409)の状況でローカライズリソースDLLとして.JPNファイルが存在する場合、実行ファイルのリソースを使用する方法がない(.JPNファイルを削除するしかない)わけです。どーりでレジストリに何を指定しても駄目なわけだ…。

元ねたは"Source\RTL\SYS\System.pas"。

2009/09/06追記: 新井さんによるとDelphi 2010ではこの選択メカニズムに一部変更があったとのことです。
Embarcadero Discussion Forums: Delphi2010 国際化対応について ...
Delphi 2010を入手したら検証してみたいと思います。

2011/05/04追記: forums.codegear.comのリンクをforums.embarcadero.comのものに差し替え。

2009年6月10日

Microsoft Monthly Update 2009/06

今日はMicrosoftのセキュリティアップデートの日です。
MS09-018
MS09-019
MS09-020
MS09-021
MS09-022
MS09-023
MS09-024
MS09-025
MS09-026
MS09-027
KB969898 (Cumulative Security Update of ActiveX Kill Bits)

2009年6月4日

Borlandの買収に競合出現

2009/05/06にBorlandがMicro Focusに買収されるというニュースが流れましたが、ここにきて1株1.20USDで買収したいという競合相手(BorlandによればNDAで相手を明かすことはできないが、"E社"(Company E)と呼んでいる)が出現した模様です。

Tech Trader Daily - Barron’s Online : Borland Shrs Spikes; Second Bidder Offers $1.20/Shr

Borlandはどうもこっちになびいているようで、Micro Focusによる買収は不透明な情勢のようです。

元ねたは公式フォーラムのEmbarcadero Discussion Forums: Is "Company E" Embaracadero...? ...あたり。

2009年6月3日

DelphiのASLR/DEP(NX)サポート

ASLR(Address Space Layout Randomization)とは、実行ファイルからリンクされるDLLをユーザメモリ空間上に配置するときにその位置をランダムにすることにより特定のアドレスに既知のDLLがロードされていることを前提とした攻撃を防ぐもので、Windows Vistaで導入されました。
一方DEP/NX(Data Execution Prevention/Non-eXecutable)とはNXであるとマークしたメモリ空間上の領域でコードを実行することを禁止することによりバッファオーバランなどを利用した攻撃を防ぐもので、Windows XP SP2で導入されました。

Delphiでは2007以降でASLRおよびDEP/NXをサポートするようになりました。またDelphiのデバッガも2007以降でDEP/NXに対応した(DEP/NXが有効なWindows上でもエラーにならないようにした)とのことです。

ASLRを有効にするにはソースコード上で
{$DYNAMICBASE ON}
または
{$SETPEOPTFLAGS $40}
とします(コマンドライン版では"–dynamicbase"スイッチを使用します)。

DEP/NXを有効にするにはソースコード上で
{$SETPEOPTFLAGS $100}
とします。

ASLRとDEP/NXを同時に有効したい場合はソースコード上で
{$SETPEOPTFLAGS $140}
とすれば1回の指定で済みます。

コンパイラ指令$SETPEFLAGS/$SETPEOPTFLAGSはDelphiのヘルプのPE ヘッダーフラグ(Delphi)(英語ヘルプ)にあるように、PEファイルヘッダのCharacteristicsフィールドとPEファイルオプションヘッダのDLLCharacteristicsフィールド上のフラグをセットする(指定は累積されます)ためのもので、これらのコンパイラ指令はプロジェクトソース(*.dpr/*.dpk)に記述するのが望ましいとのことです。PEファイルヘッダのCharacteristicsフィールドとPEファイルオプションヘッダのDLLCharacteristicsフィールドの詳細はIMAGE_FILE_HEADER Structure (Windows)(PEファイルヘッダ)およびIMAGE_OPTIONAL_HEADER Structure (Windows)(PEファイルオプションヘッダ)を参照してください。

元ねたはMichael Howard's Web Log : CodeGear’s new Delphi 2007 supports ASLR and NXMike Devery » Delphi 2007 supports ASLR and NXChris’ CodeGear Debugger Blog » The Delphi 2007 Debugger and DEP/NX (Internet Archive)あたり。

2011/05/05追記: Chris Hesikさんの"Chris’ CodeGear Debugger Blog"のInternet Archiveのリンクを追加。

2009年5月31日

IDE Fix Pack 2.6/VCLFixPack 1.3リリース

Andreas HausladenさんIDE Fix Pack 2009がVersion 2.6に、VCLFixPackがVersion 1.3にそれぞれアップデートされています。IDE Fix Pack 2009 Version 2.6はDelphi 2009 Update 3適用済の環境でのみ動作するとのことです。

Andy’s Blog and Tools » IDE Fix Pack 2.6 for 2009 Update 3 / VCL Fix Pack 1.3

2009年5月29日

リリースは月火水のみ

公式フォーラムでNick Hodgesさんが以下のように発言しています。
Embarcadero Discussion Forums: When the heck is Update 3 going to be ...
Actually, we now only ship on a Monday, Tuesday, or Wednesday. We've set that as an official policy.

要は公式な方針として(PST/PDTで)月曜日、火曜日、水曜日にのみリリースを行う、ということのようです(JSTだと概ね火曜日~木曜日になりますね)。

2009年5月27日

Indy 10のアップデート

最近のDelphi/C++Builder/RAD Studioではネットワーク関係のライブラリとしてIndyの使用が推奨されており、実際にDelphi 2007には10.1.5が、Delphi 2009には10.2.3がそれぞれ標準で添付されています。しかし最新のnightlyは10.5.5(2009/05/27現在)となっており、DEKOさんの指摘のとおり不具合を修正するには最新にアップデートすることが必要です。ということでメモ。

Delphi 2009 に最新版の Indy10 をインストールする
Delphi 5~2007 に最新版の Indy10 をインストールする
Unicode 版 Delphi (2009 以降) に最新版の Indy10 をインストールする [Delphi Programming]
ANSI 版 Delphi (5~2007) に最新版の Indy10 をインストールする [Delphi Programming]

ところでindy10.zipは10.2.3、IndyTiburon.zipは10.5.5ですが、名前に反してIndyTiburon.zipはDelphi 2007およびそれ以前にも導入可能のような気がします。あとでDelphi 2007で更新を試してみます。

2009年5月26日

C++0xの右辺値参照とムーブセマンティクス

C++0xの新機能の一つである右辺値参照とムーブセマンティクスについてのわかりやすい説明のわかりやすい翻訳。C++プログラマではありませんが、非常に興味深いテーマです。

Visual C++ Team Blog : Rvalue References: C++0x Features in VC10, Part 2
和訳:Rvalue References: C++0x Features in VC10, Part 2 - ntnekの日記

InitializeCriticalSectionEx

Team Japanの高橋さんの記事によると、Windows Vista(NT 6.0)以降ではInitializeCriticalSectionによる初期化ではリソースリークが発生するとのこと。

Team Japan » InitializeCriticalSectionEx

まぁそもそもマルチCPUではInitializeCriticalSectionAndSpinCountでスピンカウントの指定をしないとパフォーマンスに影響が出るらしいし、新しいOSではInitializeCriticalSectionExを呼び出しなさない、というのは判るのだが、もう少し互換性のある拡張はできないのかと。スピンカウントもどのくらいの値が適当なのかよくわからないし。

ちょうどいま流し読み中のWindowsデバッグの極意(Mario Hewardt、Daniel Pravat著/長尾高弘訳/アスキー・メディアワークス/ISBN978-4-04-867608-3)の"第10章 同期"でクリティカルセクションに触れています。以下引っ掛かる点を引用。
RTL_CRITICAL_SECTION.DebugInfo
クリティカルセクションに関する追加情報を格納する構造体で、これを格納するメモリはシステムにより確保される。(p.502)

RTL_CRITICAL_SECTION_DEBUG
RTL_CRITICAL_SECTION_DEBUGは主としてデバッグ用の情報を格納しているように見えるが、初期バージョンのWindowsでは、これがなければクリティカルセクションが使える状態だと見なされなかった。実際、オペレーティングシステムが初期化中にこの構造体のメモリを確保できなければ、APIは失敗していたのである。Windows Server 2003 SP1以降、このデバッグ情報がなくても、クリティカルセクションは機能するようになった。(p.504)

EnterCriticalSection
Windows 2000のEnterCriticalSection APIについては注意が必要だ。メモリの残量が少なくなったときにこれを呼び出すと、メモリ不足例外が投げられることがあるのだ。クリティカルセクションはイベントを使っており、EnterCriticalSection APIではこのイベントが初期化される。システムのメモリの残量が少なくなっていると、そのために例外が起きる。Windows 2000のもとでクリティカルセクションを信頼できる形で実行したければ、クリティカルセクションの初期化時にイベントを確保し、その後は例外を投げないInitializeCriticalSectionAndSpinCount APIを使うようにするとよい。(p.505)

追記: 高橋さん、フォローありがとうございます。

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

第13回エンバカデロ・デベロッパーキャンプは2009年07月02日にOpenSource World 2009の一部として開催されます。OpenSource World 2009そのものは2009年07月01日~07月02日の開催です。今回はPhilip Rathleさん(All-Accessのプロダクトマネージャ)やmatzさんがいらっしゃるようです。

2009年5月23日

Delphi Live! 2009/スピーカインタビュー

Anders OhlssonさんがYouTubeにDelphi Live! 2009のスピーカのインタビューを大量アップロードしています。

The Hacker’s Corner » Blog Archive » Speaker video interviews from Delphi Live! 2009
Video interviews from Delphi Live! 2009

2009/05/26追記: EDNの紹介記事が翻訳されています。
Delphi Live! 2009からのビデオインタビュー(英語)

2009年5月22日

アプリケーション開発者向けMicrosoft Windows 7対応アプリケーションの互換性

MSDNのWindows 7 互換性情報ページで"アプリケーション開発者向けMicrosoft Windows 7対応アプリケーションの互換性"というドキュメントがダウンロードできるようになっています。このドキュメントではWindows Vista/Windows 7向のアプリケーションで注意しなければならない点について解説されています(Vistaのときのお粗末な文書に比べると結構詳細でわかりやすくなっています)。

Delphi Live! 2009/プロダクトアドレス

Delphi Live! 2009のプロダクトアドレスの画面キャプチャ+音声が公開されています。

Delphi 2009! Live Recap
26915 Delphi Live! 2009 Recap and Product Address

英語で70分間はかなりきついですが、画面(PowerPoint)を見ているだけでも雰囲気はつかめます。

2009年5月21日

Delphi Live! 2009の動画

Delphi.orgに"What is Cooking in the Delphi Labs"セッションの動画が順次アップロードされていくようです。
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 1 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 2 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 3 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 4 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 5 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 6 - The Podcast at Delphi.org
Delphi Live! 2009 - What’s Cooking in the Delphi Labs - Part 7 - The Podcast at Delphi.org

Fun Side of Delphi with Marco Cantu at Delphi Live 2009! - The Podcast at Delphi.org

またYouTubeにもアップロードされています。
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 1
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 4
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 5
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 6
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 7

Marco Cantuさんによれば、この"What is Cooking in the Delphi Labs"セッションではNick HodgesさんのIDEインサイト機能やコードフォーマッタ、Allen BauerさんのDirect2DサポートやRTTI拡張によるリフレクション機能、Carlさん(誰?)のDelphi for MacによるMacOS上のコンソールアプリケーション、Anders OhlssonさんのDelphiコードのANSI->Unicode変換ツール、David IさんのVS2010上のDelphi Prismでの.NET 4.0やパラレルエクステンションのサポートなどがデモされたようです。
(更新中)

2009年5月20日

Blaise Pascal Special Issue

BLAISE PASCAL MAGAZINEの(通常はダウンロード版が4号で30.00EURですが)特別版が無償で読めるようになっています。英語ですけど。
でさらっと目次を見ていたのですが、Borlandの創業者であるPhilipe Kahnさんのインタビューが掲載されています。懐かしいですね。

元ねたはRave, Delphi and more: BlaisePascal magazine - special edition -

2009/05/21追記: EDNでも紹介されています。
Free special issue of Blaise Pascal Magazine and Free One-Year Subscription
26909 Blaise Pascal Magazine Special Issue & Free 1-year Subscription

2009年5月19日

Delphi/C++Builder/RAD Studioのコマンドラインオプション

Delphi/C++Builder/RAD Studioで使用できるコマンドラインオプションをまとめてみました。


-r
カスタムレジストリ設定を使用 (-rXYZ : XYZレジストリを使用)
-idecaption
IDEのキャプションを指定 (-idecaption="NEW CAPTION" : キャプションを"NEW CAPTION"に変更)
-p
使用パーソナリティの指定 (-pDelphi : Delphi, -pCBuilder : C++Builder, -pDelphiDotNet : Delphi.NET, -pCSharp : C#Builder)
-np
Welcome pageの非表示 (Delphi 7およびそれ以前ではデフォルトプロジェクトの非作成)
-ns
スプラッシュの非表示

-rオプションで指定した文字列はレジストリ"HKEY_CURRENT_USER\Software\Borland\BDS\6.0"(Delphi 2009の場合)の"BDS"部分の置き換えに使用されます。

-pオプションで指定するのは、実際にはレジストリ"HKEY_CURRENT_USER\Software\Borland\BDS\6.0\Known IDE Packages"(Delphi 2009の場合)の下にあるキーの名称で、指定したキーの下にあるIDEパッケージが起動時に読み込まれます。ここに新たにキー/エントリを追加して-pオプションで指定することで、カスタマイズしたプロファイルでIDEを起動することができます(ただしコンポーネントパッケージは対象にならない)。詳細は下記のMark Edingtonさんの記事を参照。

Delphi/C++Builder/RAD Studio XE以降については以下のリンクに詳細な記述があります。
元ねたはDelphi 2007 HandbookDELPHI 2009 HANDBOOKMark Edington’s Delphi Blog : Delphi Startup Times and the Kitchen SinkDelphi Tweet Day (delphitweetday) on Twitterなど。

2016/04/20追記: Delphi/C++Builder/RAD Studio XE以降のオンラインヘルプのコマンドラインオプションのページへのリンクを追加。

2017/03/23追記: Delphi/C++Builder 10.2 Tokyoの情報を追加。

2009年5月16日

Delphi Roadmap - 遠い将来には

クラウドコンピューティング

Web 3.0

RIA(Rich Internet Application)を超えて

組み込みデバイス

ソフトウェアアプライアンス

セキュリティ

コンプライアンス

関数型プログラミング、宣言型プログラミング、自然言語入力、もっと多くのプラットフォーム…

元ねたはRob’s Technology Corner: DelphiLive - Where is Delphi Going?Delphi Tweet Day (delphitweetday) on Twitterなど。

Delphi Roadmap - "Project Commodore"

64bitネイティブ

コンパイラ、RTL(Run Time Library)、VCL(Visual Component Library)の64bitネイティブフルサポート

マルチコア、マルチスレッドアプリケーション

元ねたはRob’s Technology Corner: DelphiLive - Where is Delphi Going?Delphi Tweet Day (delphitweetday) on Twitterなど。

Delphi Roadmap - "Project Chromium"

とにかく品質

Pascalコードフォーマッタ

OTA(Open Tools API)のドキュメント化

コントロールのあらゆるプロパティにバインド可能な新しいデータバインディングモデル

データベースツールの更なる統合

元ねたはRob’s Technology Corner: DelphiLive - Where is Delphi Going?Delphi Tweet Day (delphitweetday) on Twitterなど。

Delphi Roadmap - "Project X"

Windows、Mac OS、Linuxのクロスプラットフォーム

クロスプラットフォームコンポーネントライブラリ

全てのプラットフォームでDataSnapを使用可能に

Delphi Live! 2009の2日目(2009/05/15)にデモ予定

元ねたはRob’s Technology Corner: DelphiLive - Where is Delphi Going?Delphi Tweet Day (delphitweetday) on Twitterなど。

2009/05/21追記: Allen Bauerさんによれば、"Project X"に興味がある人はEli Bolingさんのblogをチェックすべしとのこと。

Delphi Roadmap - "Project Weaver"

主要な目標はユーザエクスペリエンスの向上、データベース接続の拡張、ドキュメントの充実。
IDEのユーザビリティ

チーム生産性

タッチ
"Delphi Natural Input"
GestureManagerコンポーネント
ジェスチャーはActionと結びつけるか、OnGestureイベントでハンドルする

IDEインサイト
FastAction
キーボードであらゆる機能にすばやくアクセス

DataSnapの改良

Firebirdのサポート

.NETにおけるAOP(Aspect Oriented Programming)

SCM(ソフトウェア構成管理)サポート

拡張RTTIサポート

Attributeサポート

シームレスな.NET-Native間通信

Windows 7 APIとDirect 2D

SOAP 1.2クライアントのフルサポート

元ねたはRob’s Technology Corner: DelphiLive - Where is Delphi Going?Delphi Tweet Day (delphitweetday) on Twitterなど。

2009/05/21追記: タッチインタフェースのデモの動画がThe best of DelphiLive was [Video]: « Daniel Magin’s Weblogにあります。最後の動画ではDelphi付属のfishfactデモにGestureManagerコンポーネントでジェスチャーを追加しています。

2009年5月15日

Delphi Live! 2009

海の向こう、カリフォルニア州サンホセではDelphi Live! 2009が始まっています。DelphiプロダクトマネージャのMike RozlogさんがDelphiのロードマップについて発表を行ったようです。
Project Weaver
次期版Delphi/C++Builder

Project X
クロス開発環境

Project Chromium
周辺ツールの充実

Project Commodore
64bit対応、マルチプロセッサ、マルチスレッドサポート

詳しくは以降のエントリで。

元ねたはRob’s Technology Corner: DelphiLive - Where is Delphi Going?など。

2009年5月13日

Microsoft Monthly Update 2009/05

今日はMicrosoftのセキュリティアップデートの日です。
MS09-017

2009年5月6日

Micro FocusがBorlandを買収

Marco CantuさんのMicroFocus buys Borlandによれば、Micro Focus(日本法人)という会社がBorlandの買収提案を発表しました(Borlandのプレスリリースでは正式に契約したようです)。またMicro Focusは同時にCompuwareの"Application Testing / Automated Software Quality (ASQ)"ビジネスの買収でも合意しています。Micro Focusは英国を本拠としていて、Open COBOLが主な製品分野の会社のようです。そういう意味で旧Borlandのエンタープライズ向(ALM)ビジネスとの相性は意外によいのかもしれません(CodeGearとEmbarcaderoのように)。ただこれでBorlandという会社がなくなってしまうわけで、ちょっと寂しい気もします。

2009/05/07追記: 日本語の記事も出ているようです。
Borland,約7500万ドルでMicro Focusに身売り:ITpro(要登録)
ブランド名が残るかは不明:BorlandをMicro Focusが約7500万ドルで買収 - ITmedia エンタープライズ
ボーランドをマイクロフォーカスが買収へ--買収価格は1株1ドル - 企業情報 - ZDNet Japan

2009年5月5日

Project CrossTalk

IntraWebの開発元であるAtozed Softwareが、Delphi(native)から.NETのコードを簡単に呼び出すことができるようにするProject CrossTalkをアナウンスしています。面白そうなのでとりあえずメモ。
Atozed Software - Project CrossTalk

Q&AによればProject CrossTalkは主に(たとえばIntraWebで使用するDelphiコードの)バックエンドで.NETのコードやライブラリを呼び出せるようにするのが目的で、.NETのビジュアル要素を扱いたいならRemObjectsHydraのほうが適している、とのこと。

元ねたはDrs.Bob's Delphi Notes (weblog)

2009年4月28日

[書籍]Windowsデバッグの極意

Advanced Windows Debuggingの日本語訳である"Windowsデバッグの極意"が発売になっていたので購入。

Windowsデバッグの極意/Mario Hewardt、Daniel Pravat著/長尾高弘訳/アスキー・メディアワークス/ISBN 978-4-04-867608-3/8,925円

Windowsプログラミングの極意(The Old New Thing)もそうだけど、最近のAMW(ASCII)のタイトルのネーミングセンスは微妙ですね(あとお値段も)。いい本を出してるんだけどな。

Getting Started with Delphi and C++Builder 2009

Alex Ciobanuさん、Lucian Benteaさん、Denisa Ilascuさん、Andrei Susneaさんによる"Getting Started with Delphi and C++Builder 2009"がdocs.embarcadero.comからダウンロードできるようになっています。また印刷したものをlulu.comから19.90USDで取り寄せることもできます(送料を考えたらあまり現実的ではありませんが)。

元ねたはDee Elling » Getting Started with Delphi and C++Builder 2009あたり。

2009年4月20日

Michael RozlogさんがDelphiのプロダクトマネージャに

Delphi.orgこの記事によれば、RAD studioチームのR&DマネージャとなったNick Hodgesさんの後任のDelphiのプロダクトマネージャはMichael Rozlogさんとのことです。
ただMichaelさんは2009/02にJBuilderと3rd Railのプロダクトマネージャになったばかりでした。ここのところJBuilderが放置気味であることを考えると、なにやら微妙です。

またTeamBのCraig Stuntzさんによれば、FTerにはおなじみRAD studioのQAマネージャだったChris PattinsonさんがEmbarcadero全体のDirector of Quality Assurance(QAディレクタ)になったということで、人事異動の季節なのでしょうか(EmbarcaderoとCodeGearの融合、という意味で)。

2009/04/21追記: Nick Hodgesさんのところにもでていますね。
Nick Hodges » Blog Archive » Random Thoughts on the Passing Scene #107

2009/04/22再追記: Chris Pattinsonさんのところにもでています。Craig Stuntzさんのツッコミ("Time to update the subtitle of your blog, Chris!")に応えてblogのサブタイトルが"Director of Quality Assurance, Embarcadero"になっています。
Chris Pattinson » Blog Archive » New Role - Embarcadero Director of Quality Assurance

InterBase/Firebird ODS versions

InterBaseおよびFirebirdにおけるODS(On-Disk Structure)バージョンをまとめてみました。

ODS 8.0
InterBase 4.0
InterBase 4.1
ODS 8.2
InterBase 4.2
ODS 9.0
InterBase 4.5
InterBase 5.0
InterBase 5.1
ODS 9.1
InterBase 5.5
InterBase 5.6
ODS 10.0
InterBase 6.0
ODS 10.1
InterBase 6.5
ODS 11.0
InterBase 7.0
ODS 11.1
InterBase 7.1
ODS 11.2
InterBase 7.5
ODS 12
InterBase 2007 (version 8)
ODS 13
InterBase 2009 (version 9)
ODS 14
InterBase 2009 (version 9)(Special)
ODS 15
InterBase XE (version 10) / XE3 (version 11)
ODS 16
InterBase XE7 (version 12)
ODS 17
InterBase 2017 (version 13)
ODS 18
InterBase 2020 (version 14)
ODS 19
InterBase 15
ODS 10.0
Firebird 1.0
ODS 10.1
Firebird 1.5
ODS 11.0
Firebird 2.0
ODS 11.1
Firebird 2.1
ODS 11.2
Firebird 2.5
ODS 12.0
Firebird 3.0
ODS 12.2
Firebird 3.0.4(POSIX)
ODS 13
Firebird 4.0
ODS 13.1
Firebird 5.0
InterBase 6とFirebird 1.0のODS 10.0には互換性があります。

元ねたはキムラデービーブログ | ODSまとめとInterBaseの追記ORCA愉快日記(2007-08-02)InterBase database structureあたり。

2010/11/01追記: ODS14とODS 15の記述を追加しました(John KasterさんによればODS 14はInterBase 2009 had a special ODS 14 to resolve some index corruption issues; so we skipped creating ODS 14 with InterBase XE. InterBase XE will still service any ODS 13/14/15 databases, but only will create ODS 15 from a new CREATE call or restore.とのことです)。元ねたはBehind the Screen » Upgrading InterBase 2009 to InterBase XE 64-bit
2014/12/02追記: Firebird 3.0(ODS 12)の記述を追加しました。
2014/12/04追記: InterBase XE3(ODS 15)/XE7(ODS 16)の記述を追加しました。
2017/03/10追記: InterBase 2017(ODS 17)の記述を追加しました。
2018/10/05追記: Firebird 3.0.4/POSIX(ODS 12.2)の記述を追加しました。
2019/11/18追記: InterBase 2020(ODS 18)の記述を追加しました。
2021/06/01追記: Firebird 4.0(ODS 13)の記述を追加しました。
2026/03/22追記: Firebird 5.0(ODS 13.1)およびInterBase 15(ODS 19)の記述を追加しました。

2009年4月17日

"POWERED BY" "BUILT WITH"ロゴ更新

"POWERED BY"と"BUILT WITH"のロゴがCodeGear版からEmbarcadero版に更新されています。
エンバカデロ 「built with」「powered by」ロゴ
Embarcadero "built with" and "powered by" logos
ID: 25360, Embarcadero Powered By and Built With logos

2009/04/18追記: 日本語の記事のリンクを追加しました。

2009年4月16日

Nick HodgesさんがRAD studioチームのR&Dマネージャに

DelphiのプロダクトマネージャだったNick Hodgesさんが新しくRAD studioのR&Dマネージャになられたそうです。
Nick Hodges » Blog Archive » A New Role for Nick

2009年4月15日

Microsoft Monthly Update 2009/04

今日はMicrosoftのセキュリティアップデートの日です。
MS09-009
MS09-010
MS09-011
MS09-012
MS09-013
MS09-014
MS09-015
MS09-016

2009年4月13日

Weaverフィールドテスターミーティング終了

参加者の皆さん、エンバカデロテクノロジーズの皆さん、もちろんDavid Iさんもおつかれさまでした。
内容についてはもちろんNDAがありますんであまり書けませんが、んん~もうちょっと純粋にお話をする時間を長くとってもいいかな、消化不良な部分があるかな、という気もします。
Weaverはそのまま織り手でいいとのこと。色々なテクノロジーをひとつの製品に織り込む、みたいな意味合いでつけたようです。

2009/04/15追記: 藤井さんのブログエントリZDnet JapanのDavid Iさんのインタビュー記事が出てます。

2009/04/17再追記: David Iさんのブログエントリも出ています。3週間のツアーですか。おつかれさまです。

2009/04/22再再追記: ITProのDavid Iさんのインタビュー記事も掲載されています(ITProは要登録)。

2009年4月11日

Rave Reports 7.6.2 BEリリース

RADStudio/Delphi/C++Builder 2009に同梱されているRave Reports BEが7.6.2にアップデートされています(英語情報)。
ID: 26833, Rave Reports 7.6.2 BE for Delphi 2009 and C++Builder 2009

2009/04/15追記: 日本語の情報が出たので一部更新しました。高橋さん、情報ありがとうございます。

2009年4月10日

CodeGear不通

藤井さんによれば(日本時間の)昨夜からエンバカデロのスコッツバレーオフィスとの通信が不通になっているようです。原因は現地のAT&Tの地域網の切断らしいとのこと。既に15時間ほど経過していますが復旧していませんね。

2009/04/10追記: 11:56現在で復旧しているようです。

2009年4月7日

Delphi Weaverフィールドテスターミーティング

前回のデベロッパーキャンプで話が出ていたWeaverのフィールドテスターミーティングの案内がきました。とりあえずミーティングに参加する程度には認めていただけたらしい。よかったよかった。おそらくインターリムリリースという立場になるであろう今回のWeaverですが、その先のCommodoreを含め、なにかよい提案ができるといいなぁとは思っています。

2009年4月1日

Delphi 2009/C++Builder 2009 Help Update 2 (英語のみ)

Delphi 2009/C++Builder 2009のHelp Update 2がリリースされています。が、しかし、英語版のみで、英語以外のドイツ語/フランス語/日本語は今回はリリースされず、Help Update 3までスキップされる("Only the English language version is available in Help Update 2. The translated versions of the help (German, French, and Japanese) will become available in Help Update 3.")とのことです。InterBase SMP 2009 Hotfix Update 2が現時点で英語版のみの提供になっている件といい、いかがなものかと。
Readme: English Help Update 2 for Delphi and C++Builder 2009

2009/04/15追記: CHM/PDF/HTML版がdocs.embarcadero.comにアップロードされました。
Dee Elling » RAD Studio 2009 Help Update 2 CHM/PDF/HTML files posted

NTPサーバの存在しないワークグループでPCの時刻を同期する

いまどきはPCの時刻同期に(S)NTPを使うのが普通ですが、NTPサーバが存在しない(アクセスできない)ワークグループ環境ではnet timeコマンドを使用する方法もあります。

net time \\<servername> /set /y
<servername>はリモート(時刻を合わせる相手)のコンピュータ名です。

この方法ではローカルのログオンユーザとパスワードの組み合わせでリモートにアクセスできる必要があります。ローカルのログオンユーザ以外のユーザでリモートにアクセスする必要がある場合はnet useコマンドでリモートの管理共有IPC$に接続してからnet timeコマンドで時刻を同期します。

net use \\<servername>\IPC$ <password> /user:<username> & net time \\<servername> /set /y
<username><password>はリモートに接続することができるユーザ名とパスワードの組み合わせです。

定期的(1日1回やログオン時など)に時刻同期を行いたい場合はこれらのコマンドをバッチにしてタスクスケジューラに登録するという方法があります(タスクスケジューラで起動時を指定しても、(少なくともWindows XPでは)うまく動作しなかったため、次善の策でログオン時を指定するのがよいと思われます)。

元ねたはITPro(要登録)の時刻を同期する「net time」/「w32tm」net timeコマンドnet useコマンドを使ってワークグループ環境で事前にWindows認証を受けるあたり。

2009年3月27日

DLLをPythonでデバッグ

Delphi/C++Builderで作成したDLLをデバッグするには、デバッグ用のアプリケーションを一緒に作成して、これをIDEの実行|実行時引数|デバッグでホストアプリケーションに指定する、というのが一般的ですが、これをPythonのインタラクティブシェルであるIDLEをホストアプリケーションに指定することでアドホックに色々できる、という話。なかなか面白い。Win32APIのパラメータによる振る舞いの違いをチェックしたりするのにも使えそう。後で試してみる、ということでとりあえずメモ。

C++ Builderで、DLLのデバッグにPythonを利用する - ベイダー日記
Python で Win32API プログラミング入門 (山本隆の開発日誌)
C++ Builder 2009で、DLLのデバッグにPythonを利用する (山本隆の開発日誌)

2009年3月24日

[書籍]DELPHI 2009 HANDBOOK

ジュンク堂の新宿店で

DELPHI 2009 HANDBOOK - Delphi最新プログラミングエッセンス/Marco Cantu著/藤井 等訳/エンバカデロテクノロジーズ監修/カットシステム/ISBN 978-4-87783-222-3 (ISBN 4-87783-222-X)/5,250円

を売っていたのでさっそく買ってきました(19:30ころの時点でまだ5冊くらいは書架にありました)。なおamazon.co.jpでは現時点(2009/03/24)で『この本は現在お取り扱いできません。』(おそらく予約締め切り)というステータスになっているようです。

2009/03/26追記: amazon.co.jpのステータスが『通常4~6日以内に発送します。』に更新されていました。

Delphi-ML終了

USERS GROUPの原水さんからDelphi-ML(を含む全ての技術系ML)が2009/04/10で終了するという情報がアナウンスされています。
メーリングリストサーバー運用終了のご案内 - USERS GROUP

また代替のMLを用意してくださったとのことです。
Delphi|freeml

原水さんをはじめUSERS GROUPを運営している皆さんに改めて感謝したいと思います。今までありがとうございました。

2009/04/20追記: 2009/04/18の原水さんからの終了告知メールをもってDelphiメーリングリストは閉鎖されました(最終メールのカウントは91321でした)。

2009年3月21日

Delphi Codename "Weaver"

次期のDelphi/C++Builderとなる"Weaver"の具体的な話が出始めているようです。
  • 2009年の3Q頃にリリース予定。
  • おそらくバージョンは"2010"になる。
  • 64bitコンパイラはコマンドラインのみでデバッガなしのpreview releaseになるのではないか。
  • コンパイラは新しいフロントエンドのものになり、Prismとの互換性が向上する。
Beta programは2009/04に開始予定。ということは2009/04/13のフィールドテスタミーティングはそれを踏まえた話になる、ということでしょうか。
ちなみにWeaverって日本ではハタオリドリと訳されている(本意は"籠を編む")スズメの近縁種(こんな鳥)か女優のシガニー・ウィーバーくらいしか出てこないんですが、どういう意味なんでしょうね?

元ねたはDelphi “Weaver” Beta coming - The Podcast at Delphi.orgBeta Programs - Embarcadero Technologies

2009/03/23追記: FTer募集のお知らせがきています。
Delphi / C++Builder 次期バージョンフィールドテスター一次募集のお知らせ

2009/03/24再追記: 2009年の3Q頃にリリースという予測は、mid2009とはいっても今(2009/04)からベータ/フィールドテストでは2Q(2009/04-06)にリリースは不可能だろうという単純な考えによるもので、別にソースがあるわけではありません。念のため。
あとFTerの募集もよく読むと結構ハードルが高いような…"目的"とか"テスト可能な製品領域"とかって正面切って聞かれるとなかなか。Tiburonでは登録してもなにも反応がない人が多かったせいなのでしょうか。

2009年3月18日

TMS Smooth Controls Pack for Delphi and C++Builder 2009

RADStudio/Delphi/C++Builder 2009の登録ユーザ向に期間限定でTMS Smooth Controls Pack for Delphi and C++Builder 2009 (Special Edition)がダウンロードできるようになっています。ダウンロード可能期間は2009/06/30までとのことです。
ID: 26725, TMS Smooth Controls Pack for Delphi and C++Builder 2009

TMS SoftwareのTMS Smooth Controls Packそのものについてはこちら

元ねたはNick HodgesさんのRandom Thoughts on the Passing Scene #102

2009/04/15追記: 日本語の情報が出たので一部更新しました。

2009年3月12日

Delphi 2009 Handbook日本語版 発売決定

Macro CantuさんのDelphi 2009 Handbookの日本語版である"DELPHI 2009 HANDBOOK - Delphi最新プログラミングエッセンス"(Marco Cantu著/藤井 等訳/エンバカデロテクノロジーズ監修/カットシステム/ISBN 978-4-87783-222-3/5,250円)がいよいよ今月末にも発売されるようです。
Team Japan » 新刊書のお知らせ「Delphi 2009 Handbook」
藤井さん他関係者の皆さん、おつかれさまでした。

2009/03/17追記: カットシステムさんの公式ページのリンクを追加しました。発売日は2009/03/25となっています。またMarco Cantuさんのところでも日本語版の出版が取り上げられています。
Delphi 2009 Book in Japanese

2009年3月11日

第12回エンバカデロ・デベロッパーキャンプのまとめ(4)

以下は感想。
CodeGear/Emarcadero関係
とりあえず各製品のロードマップの更新が望まれますね。停滞気味というか、いまどういう状況なのかが外からわかりにくいと思う。
All-Accessは(お金を払い続けられるならば)なかなかよさそう。ただ経費削減に弱い(契約が切れたら使えなくなる)のが日本の企業向けではないかも(逆に年間サポート契約とか結んでいるようなところからは魅力的だろうけれど)。

Delphi for PHP関係
PHPなのにDelphi。Flashでもなんでもコンポーネントにできちゃうし、IDEもデバッガもプロファイラも使える。おもしろい。

ERStudio関係
データベースの設計、管理をある程度以上の規模でやるならおすすめ。
ただし計画性(とある程度の試行錯誤)が必要。導入の負荷はそれなりにあると思う(のでメリットがデメリットを上回る状況でないと)。

C++Builder
C++Builderは単にDelphiをObjectPascalからC++にしたものではなく、C++標準に従うことでテンプレートライブラリやC++の便利な機能を使えるようになり、Delphiとはまた別の世界が開けます、という勧誘。

DelphiとWin32API
Windows/Delphiプログラマならこのあたりの話は知ってて当然(だけど意外に知らない)。
CM_.../CN_...のようなメッセージリフレクションの話も(さわりだけでも)欲しかったような。

Delphi Prism

トークセッション
お題についてはちょっと不発気味。Jose Leonさんと方向性が合っていなかったような(仕込み不足、ではなく)。



(以下のんびりと追記予定)

Microsoft Monthly Update 2009/03

今日はMicrosoftのセキュリティアップデートの日です。
MS09-006
MS09-007
MS09-008

2009年3月10日

All-Accessの価格

All-Accessの案内がEmbarcaderoから来ました。Bronze/Network Concurrent(初年度メンテナンス込)で720,000円(Delphi 2009/Proからのアップグレードで528,000円)だそうです。まぁうちなんかでは無理ですね。ただ部門内に数十ライセンスあってSAに入ってたりするならこういう選択肢もありかと。

2009年3月5日

All-Access日本国内正式発表

All-Accessの日本国内向の正式なプレスリリースが発表されています。
エンバカデロ・テクノロジーズ、マルチプラットフォーム対応のオンデマンド開発ツールセット「Embarcadero® All-Access™」の日本での展開を発表

アクセスレベル(既存製品のSKUに相当)はBronze/Silver/Gold/Platinumの4段階、これにライセンス形態としてWorkstation(ワークステーション)/Network Named User(ネットワーク指名ユーザ)/Network Concurrent(ネットワークコンカレント)の3種類、というわけで単純計算で最大12種類になるわけですね。ライセンスそのものは無期限ですが、メンバーシッププログラムは年次更新ということもあり、従来SAで上位のSKUを使用していた法人向け、といったところでしょうか。個人的にはNetwork Concurrentに注目しています。

値段が高い、という声もあるようですが、そういう人は単体製品で十分、ということではないでしょうか?あくまでこれだけ払っても元が取れるという人/会社向だと思います(まぁうちも普通に対象外ですけど)。

ところで価格が378,000円~というのはNorth Americaの2,250USD~とは相当違う(1USD=168JPY)と思うのですが、どうなんでしょう?@ITの記事によれば初年度のメンバーシッププログラムが含まれるようなので、その分なのかもしれませんね。

2009年3月4日

Reasons to Migrate from Delphi 7 to Delphi 2009

Andreano Lanusseさん(CodeGearのラテンアメリカ担当プロダクトラインマネージャ)によるWhite Paper: Reasons to Migrate from Delphi 7 to Delphi 2009(Delphi 7からDelphi 2009に移行する理由)がリリースされています。Delphi 2005以降Delphi 2009までの変更点がわかりやすく(英語ですが)まとめられています。

IDE Fix Pack 2.5/VCLFixPack 1.2リリース

Andreas HausladenさんIDE Fix Pack 2007/2009がVersion 2.5に、VCLFixPackがVersion 1.2にそれぞれアップデートされています。
Andy’s Blog and Tools » IDE Fix Pack 2.5 and VCLFixPack 1.2 released

2009年2月27日

ディレクトリツリーから空のディレクトリだけを削除する

指定されたディレクトリの下にあるファイルを持たない空のディレクトリだけを再帰しながら削除していきます。
uses
  SysUtils, Classes;

function DeleteEmptyDir(const Path: String): Boolean;
var
  Index: Integer;
  DirNames: TStringList;
  SearchRec: TSearchRec;
begin

  Result := True;

  if Path = '' then
  begin
    Exit;
  end;

  DirNames := nil;
  try
    DirNames := TStringList.Create;

    { Search }
    if FindFirst(IncludeTrailingPathDelimiter(Path) + '*.*',faAnyFile,SearchRec) = 0 then
    begin
      try
        repeat
          if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
          begin
            Continue;
          end;

          if (SearchRec.Attr and faDirectory) <> 0 then
          begin
            DirNames.Add(IncludeTrailingPathDelimiter(Path) + SearchRec.Name);
          end
          else
          begin
            Result := False;
          end;

        until (FindNext(SearchRec) <> 0);

      finally
        FindClose(SearchRec);
      end;
    end;

    { Delete sub directories }
    for Index := 0 to DirNames.Count - 1 do
    begin
      if DeleteEmptyDir(DirNames.Strings[Index]) = True then
      begin
        { Delete }
        if RemoveDir(DirNames.Strings[Index]) = False then
        begin
          RaiseLastOSError;
        end;
      end
      else
      begin
        Result := False;
      end;
    end;

  finally
    DirNames.Free;
  end;

end;
最初に指定したディレクトリは削除されません。戻値がTrueであれば削除可能(指定したディレクトリの下がすべて削除された)であることを示します。

2009年2月23日

第12回エンバカデロ・デベロッパーキャンプのまとめ(3)

村上さん@日揮情報システムのERStudioの話
多数のデータベーステーブルの論理モデル、物理モデル、データ定義を、一貫して同じものを同じように、漏れなく、間違いなくメンテナンスしていくことができる。
BASICライクなマクロを使用して作業を自動化できる。
リバースエンジニアリングもできる。
論理モデル上の名称(日本語のもの)を最終的なデータ定義のコメントとして埋め込む(これもマクロで自動的に)ことで、メンテナンスなどで非常に便利に使える。

筑木さん@日本情報システムのC++Builderの話
STLやTR、Boostなどを使えばDelphiよりも複雑なアプリケーションをはるかに簡単に作れる。
詳細はセッション資料サンプルコード参照。
内容盛りだくさんだけど何とか最後まで到達。

細川さん@シリアルゲームズのDelphi/Win32APIの話
WindowsとVCLの関係、VCLのコンポーネントによる(Windowsの)オブジェクトのラッピング、WindowsのメッセージのVCLにおける扱いなど。
CreateParams、CreateSubClass、CreateWindowHandleをoverrideしてWin32APIのRegisterClassやCreateWindowExのパラメータを制御するようなメカニズムになっている。
WindowsやVCLなどからSend/Post/Performされたメッセージはウィンドウプロシージャからディスパッチャ経由でメッセージハンドラ(message指令で指定)に引き渡される。

高橋さん@エンバカデロテクノロジーズのDelphi Prismの話
Delphi PrismとはOxygene(RemObjects SoftwareのChromeコンパイラ)+dBExpress+.NET Framework 3.5サポート+Monoサポートをまとめたもの。
Delphi PrismはOxygeneコンパイラでMSILにコンパイルされる(従来のDelphi.NETコンパイラではないため完全な互換性はない)。.NET Framework 1.1/2.0/3.0/3.5に対応している。
VCL(.NET)も存在しないので.NET Framework標準のフレームワークを使用する。
文法面の互換性向上はDelphi/Prism共通の課題として考えている。
VB.NET/C#が持っていない言語機能をシンタックスシュガーとして備えている(プロパティアクセサのインライン化、クラスコントラクト、プロパティ通知、Nullable型の暗黙の拡張、非同期メソッド、フューチャなど)ので、複雑な機能を簡単な記述で利用できる。
MonoプロジェクトのサポートでMac OS X/Linux/BSD向の開発が可能になった。



(以下のんびりと追記予定)

2009年2月19日

All-Access正式発表

またもやMarco CantuさんのOfficial Release of All-Accessからの情報で、All-Accessが正式に発表されています。
Embarcadero Debuts the Industry’s First On-Demand, Multi-Platform Software Development Tool Chest: Embarcadero All-Access

またAll-Accessの製品ページも公開されています。
All-Access - Embarcadero Technologies

2009/02/19追記: プレスリリースの日本語訳も公開されました。
エンバカデロ・テクノロジーズ、業界初、マルチプラットフォーム対応のオンデマンド開発ツールセット「Embarcadero® All-Access™」を発表
日本では2009/03/04に詳細が発表されるとのことです。あれ?このリリースはまだcodegear.comドメインですね。

また藤井さんのAllegro Barbaroでも説明されています。
Allegro Barbaro > オンデマンドというツール提供のかたち : ITmedia オルタナティブ・ブログ

2009年2月18日

第12回エンバカデロ・デベロッパーキャンプのまとめ(2)

次はJose Leonさん/Delphi for PHP関係の話。
Delphi for PHP by Jose Leonさん(Delphi for PHPアーキテクト、qadram software CEO)
PHPの開発があまりにも旧態依然としていて非効率的なので、そのまま作業するよりは慣れ親しんだDelphiライクなIDE+コンポーネントライブラリを作ってしまったほうが作業量が少ない、と判断してDelphi for PHP(の前身となるqstudio)を作った。
Delphi for PHPはIDEとして6作目だったので、最初からうまくいく見通しがあった。
必要のないコードを書きたくない(タイヤの再発明はしたくない)。
VCL for PHPのコンポーネントはちゃんとCodeGearと契約してから作業した。

Delphi for PHPについて
HTML(visual)、JavaScript、non-visualなコンポーネントを含むことができる。
デバッガが使える(パフォーマンス的には厳しいが)。
プロファイラで実行行数、実行時間などを簡単に計測することができる。
ページコンポーネントがwebページに対応するベースとなるコンポーネント(Delphiではフォームに相当)で、そのページを構成するHTMLソースが生成される。ここにコンポーネントを配置すると、対応するHTMLソースが追加生成される。
FlashやjQueryもラッピングしてVCL for PHPコンポーネントにすることができる。
OpenChartにDBExplorerからDnDしたデータソースなどのコンポーネントを接続するだけで簡単にFlashベースのグラフを表示できる。
OpenGridも同様にデータソースと接続することで更新も含め簡単にデータのグリッド表示が可能になる(AJAXで動作している)。
コンポーネントベースにすることでコードの記述が最小限で動作するようになっている。

第12回エンバカデロ・デベロッパーキャンプのまとめ(1)

まずはCodeGear/Embarcadero関係の話。
Delphi/C++Builder Developer Meetingについて
4月にDavid.Iさんがasia-pacificをまわるところをつかまえてやりたいと思っているとのこと。
FT参加者、FT参加希望者を対象に。
いまのところ2009年04月13日(月曜日)17:30からの予定(無保証)。
NDAベースのミーティングになる。

codegear.comはembarcadero.comに統合
近日中にcodegear.comのコンテンツはembarcadero.comに統合される。
dn.codegear.comにあるものは単純にドメイン部分を"edn.embarcadero.com"に読み替えるだけでよいが、www.codegear.comのコンテンツは再編されるので要注意。
国際化などの仕掛けは従来どおり。
旧borland.co.jp/borland.comから移行した古いコンテンツにリンク切れがある、という話をしたら、そのようなものを見つけたら個別にメールで教えてください、とのこと。

on-demand tool accessについて
on-demand accessというEmbarcaderoの製品をすべて使用できる包括的なライセンス形態の販売を予定している(Marco CantuさんのEmbarcadero All-Access経由で読んだinfoworldのEmbarcadero offers on-demand tools accessという記事に出ていました)。
企業でのライセンス管理が容易になる。
たまにしか使わないようなツールのライセンスも含まれるので導入のハードルが低くなる。
だいたい3つの製品を買えば元が取れるような価格になる(infoworldの記事ではシングルユーザ、ワークステーション用のBronzeで2250USD≒21万円なので計算が合う感じ)。

オフィス移転
来週から新しいオフィスに移転する。
電話番号が変更になるので注意。
藤井さんの下僕マーケティングのアシスタントスタッフを募集中。

2009/02/18追記: embarcadero.comへの移行が現在進行中です。

IDE Fix Pack 2.4リリース

Andreas HausladenさんIDE Fix Pack 2007/2009がVersion 2.4にアップデートされています。
Andy’s Blog and Tools » IDE Fix Pack 2.4 released

2009年2月17日

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

毎度のことですが、スピーカの皆さん、関係者の皆さん、おつかれさまでした。
とりあえず次回の会場には電源付きの席を用意してほしいと思った一日でした。あとできれば地下ではないほうが(auの電波が微妙で夕方には電池切れ寸前になってしまった)。

2009/02/18追記: デベロッパーキャンプの内容や感想についてはまとめ(1)まとめ(2)に移しました。

2009/02/23再追記: セッション資料がダウンロードできるようになっています。

2009/03/11再追記: デベロッパーキャンプの内容や感想をまとめ(1)まとめ(2)まとめ(3)まとめ(4)にまとめました(途中ですが)。

2009年2月11日

Microsoft Monthly Update 2009/02

今日はMicrosoftのセキュリティアップデートの日です。
MS09-002
MS09-003
MS09-004
MS09-005
KB960715 (Cumulative Security Update of ActiveX Kill Bits)

2009年2月5日

IDE Fix Pack 2.3リリース

Andreas HausladenさんIDE Fix Pack 2007/2009がVersion 2.3にアップデートされています。"I have finally found a way to replace a .NET method at runtime without using the ProfilerAPI or other libraries. I can do it from native code."だそうです。
Andy’s Blog and Tools » IDE Fix Pack 2.3 - Bye bye “Cannot resolve unit name”

2009年1月28日

Delphiコンパイラの将来

ちょっと前に公開されて色々と議論を巻き起こしていたNick HodgesさんのThe Future of the Delphi Compilerの日本語訳が公開されています。
Delphiコンパイラの将来

Delphi 2009 Whitepapers

#3までで完結かと思っていたDelphi 2009のホワイトペーパーの#4(VCL)、#5(Datasnap 2009)がここにきて公開されています。Delphi 2009 Handbookの要約だということから考えるとこれで打ち止めだと思うのですが。

2009/01/29追記: ちゃんとこれが5番目で最後("the fifth and last of my series")、と書いてありました。

2009年1月23日

JVCL 3.36リリース

JVCL(JEDI Visual Component Library)がアップデートされてVersion 3.36(JCL Version 1.104)になっています。
SourceForge.net: JEDI VCL for Delphi: Files

元ねたは2009-01-22 - C++Builder好きの秘密基地さんのところ。

2009年1月14日

Microsoft Monthly Update 2009/01

今日はMicrosoftのセキュリティアップデートの日です。
MS09-001

2009年1月11日

DDevExtensions 1.61リリース

Andreas HausladenさんのDDevExtensions (for Delphi/BCB 5-2007)がアップデートされてVersion 1.61になっています。
DDevExtensions 1.61 (for Delphi/BCB 5-2007)

2009年1月8日

Delphi 2009 Handbook日本語版

Marco CantuさんのDelphi 2009 Handbook日本語版作業が進行中とのことです。まさかの自前翻訳だそうで、なんともご苦労様です。えぇ、もちろん買いますとも。自分用と会社用の2冊で。

2009年1月7日

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

第12回エンバカデロ・デベロッパーキャンプは2009年02月17日開催です。今回はJose Leonさん(qadram softwareのCEO/Delphi for PHPのチーフアーキテクト)がいらっしゃるそうです。

2008年12月26日

IDE製品に同梱のInterBase(Local/Developer Edition)に関するまとめ

Delphiには開発用にInterBaseが同梱されていますが、どのバージョンがどのプロダクトに含まれているのかをまとめてみました。
Local InterBase Server 4.1
最新アップデート: (n/a)
プロダクト: Delphi 2
対応OS: Windows 95/NT 4.0
制限事項: ローカル接続のみ
参照URL: (n/a)
Local InterBase Server 4.2.1
最新アップデート: (n/a)
プロダクト: Delphi 3/3.1
対応OS: Windows 95/NT 4.0
制限事項: ローカル接続のみ
参照URL: (n/a)
InterBase 5.0
最新アップデート: (n/a)
プロダクト: C++Builder 3/Delphi 4
対応OS: Windows 95/NT 4.0
制限事項: Local InterBaseライセンスのみ
参照URL: (n/a)
InterBase 5.6
最新アップデート: (n/a)
プロダクト: Delphi 5/C++Builder 5
対応OS: Windows 95/98/NT4(SP5)
制限事項: Local InterBaseライセンスのみ
参照URL: (n/a)
InterBase 6
最新アップデート: (n/a)
プロダクト: Delphi 6/7/C++Builder 6
対応OS: Windows 98SE/Me/NT 4.0(SP6a)/2000(SP1)
制限事項: Local InterBaseライセンスのみ
参照URL: (n/a)
InterBase 7.1
最新アップデート: Service Pack 2 + Security update
プロダクト: Delphi 2005
対応OS: Windows 98/Me/NT 4.0(SP6a)/2000(SP2)/XP/Server 2003(IB7.1 SP2)
制限事項: IDE製品がインストール済かつ許諾済であること?
参照URL: (n/a)
InterBase 7.5
最新アップデート: 7.5.1 Service Pack 1
プロダクト: Developer Studio 2006/JBuilder 2006
対応OS: Windows 2000(SP4)/XP Pro(SP2)/Server 2003(SP1)
制限事項: IDE製品がインストール済かつ許諾済であること(特に設定を行わないとサービスとしては起動しない)
参照URL: InterBase 7.5 Developer の起動について
InterBase 2007
最新アップデート: Service Pack 3
プロダクト: RAD Studio 2007
対応OS: Windows 2000(SP4)/XP(SP2)/Server 2003/Vista
制限事項: 最大48時間までしか連続稼動できない
参照URL: InterBase 2007 Developer Editionの仕様について
InterBase 2009
最新アップデート: Hotfix Update 4
プロダクト: RAD Studio 2009
対応OS: Windows 2000(SP4)/XP(SP2)/Server 2003/Vista/Server 2008
制限事項: 最大48時間までしか連続稼動できない?
InterBase XE
最新アップデート: Update 5
プロダクト: ?
対応OS: Windows XP(SP3)/Vista(x86/x64)/Server 2008/7(x86)/Server 2008 R2
制限事項: 最大48時間までしか連続稼動できない、4coreまでのサポート、20同時接続ユーザ(80コネクション)
InterBase XE3
最新アップデート: Update 1
プロダクト: RAD Studio XE3
対応OS: Windows XP(SP3)/Vista(x86/x64)/Server 2008/7(x86/x64)/Server 2008 R2/8(x86/x64)/Server 2012
制限事項: 最大48時間までしか連続稼動できない、4coreまでのサポート、20同時接続ユーザ(80コネクション)
2011/01/06追記: InterBase 2009/XEの情報を更新しました。

2012/12/31追記: InterBase XEの情報を更新し、InterBase XE3の情報を追加しました。

2008年12月24日

日本法人代表交代

旧Borland日本法人のIDE部門分社化以来の責任者でエンバカデロ・テクノロジーズ合同会社(いわゆる日本法人)の代表(職務執行者)の八重樫さんが退任され、替わって藤井さんが日本法人の代表になる、というニュースが飛び込んできました。海の向こうはハッピーホリデーの休暇に入るところ(そして日本も年内は後3日)というタイミングでの発表(非公式ですけど)はちょっと驚きです(年内に、ということであれば最後のタイミングですが)。
八重樫さんとは2回ほどお話をさせていただきましたが、見た目とは違い(見た目通り?)、優しく気さくな方でした(敵にしたら恐ろしい、かも…)。次はどのようなことをされるのでしょうか?ご活躍をお祈りしています。

2008年12月21日

[書籍]Delphi 2009 Handbook/Delphi 2009 Development Essentials

Marco CantuさんのDelphi 2009 HandbookがLulu.comから到着。Bob SwartさんのDelphi 2007 for Win32 Development EssentialsDelphi 2009 Development Essentialsも一緒に買ったのでまとめて積んだ。

2008年12月20日

Delphi 2009/C++Builder 2009 Help Update 1

Delphi 2009/C++Builder 2009のHelp Update 1がリリースされています。
リリースノート: Delphi 2009 および C++Builder 2009 Help Update 1

Dee Ellingさんによれば、CHM/PDF/HTML版がEmbarcadero CodeGear Product Documentation SITE BETAに載るのは来年になるようです。あちらはもうホリデーシーズンですしね。

2011/05/04追記: codegear.comのリンクをembarcadero.comのものに差し替え。

2008年12月19日

DBX4 BDE Driver

Team Japan » DBX4 BDE Driver
興味深い。後日追記予定(?)。

2008年12月18日

Microsoft OOB Update 2008/12

Microsoftの定例外のセキュリティアップデートがリリースされています。
MS08-078

2008年12月16日

ファイルサイズを取得する(2)

前回のファイルサイズの取得の方法ではNTFSログファイルが一杯になると取得できるファイルサイズがファイルの更新に従って変化しなくなるという不具合を避けることができません。そこでこのKBのworkaroundに従ってWin32APIのGetFileSizeExを使用してファイルサイズを取得する方法です。
function GetFileSizeEx(hFile: THandle; var lpFileSize: LARGE_INTEGER): BOOL; stdcall;
  external kernel32 name 'GetFileSizeEx';

function GetFileSize(const Filename: String; var FileSize: Int64): Boolean;
var
  Handle: THandle;
  LI: LARGE_INTEGER;
begin

  Result := False;

  FileSize := 0;
  Handle := Windows.CreateFile(PChar(Filename),GENERIC_READ,0,nil,
                               OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if Handle = INVALID_HANDLE_VALUE then
  begin
    Exit;
  end;

  try
    if GetFileSizeEx(Handle,LI) = False then
    begin
      Exit;
    end;

  finally
    Windows.CloseHandle(Handle);
  end;

  FileSize := LI.LowPart or (Int64(LI.HighPart) shl 32);
  Result := True;

end;
GetFileSizeExがオープン済のファイルハンドルを要求するため、CreateFileで一旦ファイルをオープンし、ファイルサイズ取得後にクローズするようにしています。このためアクセス権などの問題からオープンに失敗するようなファイルのサイズを取得することができません。

Delphi 2009/C++Builder 2009 Update 2

Delphi 2009/C++Builder 2009のUpdate 2がリリースされています。Update 2はデータベース関係のアップデートのみとのことです。また事前にUpdate 1を適用しておく必要があります。
リリースノート: Delphi 2009 および C++Builder 2009 Update 2
List of Bug Fixes in Update 2 for Delphi and C++Builder 2009

2008年12月13日

InterBase 2007 Service Pack 3リリース

InterBase 2007 SP3 for Windows - Japaneseがダウンロードできるようになっています。
InterBase 2007 Service Pack 3 (8.1.1.333) リリースノート

2008/12/16追記: InterBase 2007 SP3はSP2適用済の環境にのみ適用可能です(SP2の詳細についてはこちら)。

2008年12月11日

スプラッシュフォームを表示する

メインフォームを表示するのに時間がかかる(データベースを参照していたり、大きなファイルを読み込む必要があったり、理由はさまざまでしょうけれども)ようなときに、スプラッシュフォームを表示することでこれをごまかす、じゃなくて目立たなくするという方法があります。
まず表示に時間がかかるメインフォームとしてこのようなものを考えます。
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin

  for I := 0 to 99 do
  begin
    Sleep(100);
  end;

end;
起動からメインフォームの表示まで10秒かかります(あたりまえ)。
ここでスプラッシュ用のフォームを用意します。必要に応じてプロパティを指定したりLabelやPanelやImageなどを配置してそれなりの体裁を整えていただくとして、ここで必要なイベントハンドラはOnDeactivateです。OnDeactivateイベントハンドラではReleaseメソッドを呼び出してスプラッシュフォーム自身を解放するようにします。
type
  TForm2 = class(TForm)
    procedure FormDeactivate(Sender: TObject);
  end;

procedure TForm2.FormDeactivate(Sender: TObject);
begin

  Release;

end;
さらにスプラッシュフォームを表示するためのメソッドを用意します。このスプラッシュフォームには通常の(メッセージループ経由の)メッセージが全く送られない(アプリケーションのメッセージループが動作し始めると直後にOnDeactivateが発生する)ので、Updateメソッドで強制的に表示更新を行う必要があります。
procedure ShowSplashForm;
begin

  with TForm2.Create(nil) do
  begin
    Show;
    Update;
  end;

end;
そしてこのメソッドをプロジェクトソース内のApplication.Initializeの後で呼び出します。
begin

  Application.Initialize;

  ShowSplashForm;

  Application.CreateForm(TForm1, Form1);
  Application.Run;

end.
Delphi 2007以降ではWindows Vista対応のためにApplicationとメインフォームの関係を色々と変更したために
begin

  Application.Initialize;
  Application.MainFormOnTaskbar := True;

  ShowSplashForm;

  Application.CreateForm(TForm1, Form1);
  Application.Run;

end.
とApplication.MainFormOnTaskbarの設定の後にスプラッシュフォームを表示するようにする必要があります(逆にDelphi 2006以前ではTForm2の所属ユニットのinitialization部で十分なのですが)。
Applicationの初期化後にまずスプラッシュフォームが生成、表示され、メインフォームが生成されて時間がかかる処理が走り、Apprication.Runでメインフォームが表示されてアクティブになることでスプラッシュフォームはインアクティブになり、OnDeactivateイベントが発生してスプラッシュフォームが消滅する、という動作の流れになります。

2008年12月10日

Microsoft Monthly Update 2008/12

今日はMicrosoftのセキュリティアップデートの日です。
MS08-070
MS08-071
MS08-072
MS08-073
MS08-074
MS08-075
MS08-076
MS08-077

2008年12月5日

Delphi 2009 Whitepapers

Marco CantuさんによるDelphi 2009 White Paperがリリースされています。
White Paper #1 Unicode: White Paper: Delphi and Unicode
White Paper #2 Language: White Paper: Using New Delphi Coding Styles and Architectures
White Paper #3 The IDE: White Paper: A Tour of Delphi 2009
White Paper #4 The VCL: White Paper: Building User Interfaces with Delphi 2009
White Paper #5 Datasnap 2009: White Paper: The New DataSnap in Delphi 2009

#2の表紙に著者名が入っていないのは単なるミスだそうです。

2008/12/16追記: #3がリリースされています。
2009/01/22追記: #4がリリースされています。
2009/01/28追記: #5がリリースされています。

2008年12月4日

OpenTools API入門

あとで読む。
Extending Delphi 2009 With OpenTools API: Getting Started

OTA(OpenTools API)はDelphi/C++BuilderのIDEとインタフェースするためのAPIで、wizardやpluginはこれを利用して作成します。

2008年12月3日

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

参加者および関係者の皆さん、おつかれさまでした。
ところで会場に来てたのはMalcolm Grovesさんでしたか。
また後で更新予定…。

2008/12/06追記: ITProにMalcolm Grovesさんのインタビュー記事が。

2008/12/10再追記: セッション資料がダウンロードできるようになっています。

Delphi 2009 Handbook出版

Marco CantuさんDelphi 2009 HandbookLulu.comから出版されました。全400ページで、価格は48.50USD(約4500円)ですが、先着60名は40.50USD(これは既に終了)、CodeRage IIIの期間中(2008/12/05まで)は45.50USD(約4200円)のディスカウントが設定されています。

2008/12/04追記: ソースコードがCodeCentralからダウンロードできるようになっています。

2008/12/05再追記: Delphi 2009/C++Builder 2009/RAD Studio 2009登録ユーザはPDF eBook形式のものをCodeGearから入手できるようになりました。
Delphi 2009 Handbook PDF eBook

また「何らかの形で日本語版を出せるように交渉中」という話をデベロッパーキャンプで藤井さんがしていましたので、期待してます。

2009/05/22再追記: Marco Cantuさんによると、Amazon(US)の傘下でプリントオンデマンドを扱うCreateSpaceという会社からも入手可能になったそうです。
Delphi 2009 Handbook on Amazon.com

2011/05/04追記: cc.codegear.comのリンクをcc.embarcadero.comのものに差し替え。

2008年12月1日

2008年11月21日

IDE Fix Pack and VCL Fix Pack

IDE/VCLのBugFixが進まないことにAndreas Hausladenさんが業を煮やしたらしく、IDE/VCLの非公式パッチ集であるIDE Fix Pack 2009VCL Fix Packをリリースしています。
IDE Fix Pack 2.0 and VCL Fix Pack 1.0 released

IDE Fix PackにはDelphi/C++Builder 2007用もあります。またVCL Fix PackはDelphi 6以降に適用可能なようです(先日の非公式パッチも含まれています)。

3rdRail and TurboRuby

CodeGear(Embarcadero)から3rdRail 2.0とTurboRubyが発表されています。
Press Release: Embarcadero Ships Latest Edition of 3rdRail™ and Introduces TurboRuby IDEs

気になる3rdRail SKUとTurboRuby SKUの違いですが、FAQ FAQによればRailsフレームワークのサポートの有無(TurboRubyはRailsフレームワークをサポートしない)のようです。
ということは。
あくまで個人的な意見ですが、噂のDelphi/C++BuilderのTurbo SKUも、IDEは同じだけれどもVCLというフレームワームをサポートしない、という路線なのでは?と考えています。

2011/05/04追記: codegear.comのリンクをembarcadero.comのものに差し替え。

2008年11月19日

マニフェストのrequestExecutionLevelに指定できる値

Windows Vista上で管理者権限を要求するアプリケーションを作成するで説明したアプリケーションマニフェスト上のrequestExecutionLevelのlevel属性に指定できる値とその意味は以下のようになっています。
requireAdministrator
アプリケーションはAdministrator権限で開始されなければならず、それ以外の権限では実行されない。

highestAvailable
アプリケーションはログオンアカウントで要求できる最も高い権限で開始されなければならない。ログオンユーザがAdministratorアカウントならば権限昇格のプロンプトが表示されたうえでAdministrator権限で開始され、標準ユーザアカウントならば(権限昇格のプロンプトの表示なしに)標準の権限で開始される。

asInvoker
アプリケーションは呼び出し元のアプリケーションと同じ権限で開始される。

元ねたはAdvanced Windows 第5版 上 p.142

2008/11/20追記: ついでにGetProcessElevation関数(p.146)を移植してみようと思ったけど、Windows 2000ではGetTokenInformationにTokenElevationTypeを渡すとパラメータエラーになることが判明して断念。難しい…。

2008年11月13日

アプリケーションの多重起動を禁止する

プログラムの性質によっては多重起動を禁止したいことがあります。このようなときには同期オブジェクトの一つであるmutexを使用します。

Delphiのプロジェクトソースを開くとこのようになっています。
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
ここで一意な名前のmutexをプログラム実行中だけ作成(CreateMutex)し、もしその名前のmutexが存在していたらプログラムを終了、存在していなければ実行を継続し、プログラム終了時にはmutexを破棄(CloseHandle)するコードを追加します。
program Project1;

uses
  Windows,
  SysUtils,
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

const
  { Mutex name }
  CMutexName: String = '{9D0E11F8-ED24-4D3E-91B1-5E9A9BF8673A}';

var
  hMutex: THandle;
begin

  Application.Initialize;
  Application.MainFormOnTaskbar := True;

  { Create mutex }
  SetLastError(0);
  hMutex := CreateMutex(nil,False,PChar(CMutexName));
  if hMutex = 0 then
  begin
    RaiseLastOSError;
  end;

  try
    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      Exit;
    end;

    Application.CreateForm(TForm1, Form1);
    Application.Run;

  finally
    { Close mutex }
    CloseHandle(hMutex);
  end;

end.
これでプログラムの多重起動を禁止することができます。
作成するmutexの名前は任意(上記の例では適当にGUIDを生成して使用しています)ですが、'Global\'と'Local\'で始まるmutex名には特別な意味があるので注意が必要です(詳細はCreateMutex参照)。また同名のmutexが存在するかどうかを調べるのにOpenMutexを使用するとOpenMutexの呼び出しからCreateMutexの呼び出しまでの間が無防備になってしまうため、CreateMutexの第2パラメータbInitialOwnerにFalseを指定して呼び出し後、GetLastErrorの値がERROR_ALREADY_EXISTSかどうかで判定するようにします。

さらにアプリケーションのメインウィンドウを前面に移動し、最小化も解除するようにしてみます。
program Project1;

uses
  Windows,
  SysUtils,
  Messages,
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

const
  { Mutex name }
  CMutexName: String = '{9D0E11F8-ED24-4D3E-91B1-5E9A9BF8673A}';

var
  hMutex: THandle;
  Wnd: HWnd;
  AppWnd: HWnd;
begin

  Application.Initialize;
  Application.MainFormOnTaskbar := True;

  { Create mutex }
  SetLastError(0);
  hMutex := CreateMutex(nil,False,PChar(CMutexName));
  if hMutex = 0 then
  begin
    RaiseLastOSError;
  end;

  try
    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      { Search main form }
      Wnd := FindWindow(PChar('TForm1'),nil);  // Class name of the main form
      if Wnd = 0 then
      begin
        Exit;
      end;

      { Bring foreground and activate }
      SetForegroundWindow(Wnd);

      { Get window handle of TApplication }
      AppWnd := GetWindowLong(Wnd,GWL_HWNDPARENT);
      if AppWnd <> 0 then
      begin
        Wnd := AppWnd;
      end;

      { Restore if iconized }
      if IsIconic(Wnd) then
      begin
        SendMessage(Wnd,WM_SYSCOMMAND,SC_RESTORE,-1);
      end;

      Exit;
    end;

    Application.CreateForm(TForm1, Form1);
    Application.Run;

  finally
    { Close mutex }
    CloseHandle(hMutex);
  end;

end.
Delphiのウィンドウコントロールはクラス名がそのままウィンドウクラス名になるため、FindWindowにはアプリケーションのメインフォームのクラス名を渡します。

2008年11月12日

Microsoft Monthly Update 2008/11

今日はMicrosoftのセキュリティアップデートの日です。
MS08-068
MS08-069

2008年11月11日

Delphi/C++Builder 2009 Japanese Hotfix 1

IDEの環境オプションのタイプライブラリの設定がエラーになる件(QC68044)のHotfixがリリースされています。事前にUpdate 1を適用しておく必要があるとのことです。
Team Japan » Delphi/C++Builder 2009 Japanese Hotfix 1

2008/11/12追記: C++Builder 2009ではdelphicompro120.jpは必要ないとのことです。