公式に新しいビデオがあがっています(公式発表したからか、"スニークピーク"ではなくなったようです)。
ビデオ: DataSnap – 多層/シンクライアントデータベースソリューションとデータリモーティング
ビデオ: C++Builder 2009 の新しいライブラリ機能– Boost と TR1
2008年8月27日
2008年8月26日
Delphi 2009/C++Builder 2009公式発表
日本語のプレスリリースがでています。
エンバカデロ・テクノロジーズ、Windows®向け開発ツールの次世代バージョン「Delphi® 2009」「C++Builder® 2009」を発表
出荷開始は2008/09/18とのこと。まぁこれなら大丈夫でしょう。
2008/09/16追記:
Team Japan » Delphi 2009 / C++Builder 2009 予定通り9月18日出荷開始
ということで出荷開始が確定したようです。まだ注文していないけど…。
エンバカデロ・テクノロジーズ、Windows®向け開発ツールの次世代バージョン「Delphi® 2009」「C++Builder® 2009」を発表
出荷開始は2008/09/18とのこと。まぁこれなら大丈夫でしょう。
2008/09/16追記:
Team Japan » Delphi 2009 / C++Builder 2009 予定通り9月18日出荷開始
ということで出荷開始が確定したようです。まだ注文していないけど…。
2008年8月25日
[書籍]UnicodeによるJIS X 0213実装入門
Unicode/UCS/UTF関係をプログラム側から解説している本はあまり多くないけど、たまたま紀伊國屋新宿本店で見かけたので購入。
マイクロソフト公式解説書 UnicodeによるJIS X 0213実装入門/田丸健三郎著/日経BPソフトプレス/ISBN 978-4-89100-608-2/2,415円
マイクロソフト公式解説書 UnicodeによるJIS X 0213実装入門/田丸健三郎著/日経BPソフトプレス/ISBN 978-4-89100-608-2/2,415円
2008年8月22日
Delphi 2009のUnicodeサポート
公式のUnicodeサポート関連の記事。
Delphi in a Unicode World Part I: What is Unicode, Why do you need it, and How do you work with it in Delphi?
Delphi in a Unicode World Part II: New RTL Features and Classes to Support Unicode
2008/09/11追記: Part III追加
Delphi in a Unicode World Part III: Unicodifying Your Code
2008/09/16追記:
日本語訳が公開されています。
Delphi in a Unicode World Part I: What is Unicode, Why do you need it, and How do you work with it in Delphi?
Delphi in a Unicode World Part II: New RTL Features and Classes to Support Unicode
2008/09/11追記: Part III追加
Delphi in a Unicode World Part III: Unicodifying Your Code
2008/09/16追記:
日本語訳が公開されています。
Delphi/C++Builder 2009は08/25にリリース?
記事(CodeGear買収後:EmbarcaderoからDelphi、C++Builderの新リリースが登場 - ITmedia エンタープライズ/eWeek.comの元記事)にもなっててそれもNick Hodgesさんのblogからもリンクされて(しかも"Nice article"って)いるので半ば決まりなんだと思いますが、Delphi/C++Builder 2009が2008/08/25に発売されるようです。FTerとしては"本当?"って感じですけど。
でも藤井さんのblogでは今週末勝負!みたいですね。まぁ25日とはいってもPDTでしょうから、時差9+7=16時間で、日本では26日なのかな?
2008/08/26追記: とりあえず予約可能("Delphi 2009 and C++Builder 2009 are immediately available worldwide for pre-orders.")になったようです(press release)。
2008/08/26再追記: 公式発表されてます。
2011/05/04追記: codegear.comのリンクをembarcadero.comのものに差し替え。
でも藤井さんのblogでは今週末勝負!みたいですね。まぁ25日とはいってもPDTでしょうから、時差9+7=16時間で、日本では26日なのかな?
2008/08/26追記: とりあえず予約可能("Delphi 2009 and C++Builder 2009 are immediately available worldwide for pre-orders.")になったようです(press release)。
2008/08/26再追記: 公式発表されてます。
2011/05/04追記: codegear.comのリンクをembarcadero.comのものに差し替え。
2008年8月16日
ジェネリクスでイベントのマルチキャストを実現
興味深い。とりあえずメモ。
The Oracle at Delphi » Multicast events using generics
2008/08/26追記: 続編。
The Oracle at Delphi » Multicast Events - the cleanup
2008/09/04再追記: 最終回(?)。
The Oracle at Delphi » Multicast Events - the finale
The Oracle at Delphi » Multicast events using generics
2008/08/26追記: 続編。
The Oracle at Delphi » Multicast Events - the cleanup
2008/09/04再追記: 最終回(?)。
The Oracle at Delphi » Multicast Events - the finale
2008年8月14日
2008年8月13日
2008年8月10日
newsgroups.borland.com終了
newsgroups.borland.comがお亡くなりになったらしい。代替のディスカッションフォーラムではnntp(s)とhttp(s)の両方でインタフェースできる。でもnntpはquoted-printableだし、httpだと<pre>タグとか書きたいし、微妙ですね。
2008/08/23追記: ん?nntpがUTF-8でくるなぁ。まぁそのほうが望ましいからいいけど。
2008/08/23追記: ん?nntpがUTF-8でくるなぁ。まぁそのほうが望ましいからいいけど。
2008年8月8日
2008年8月6日
2008年8月5日
Tiburonのスニークピークビデオ & Tiburon Unicode Video #1,#2
公式にスニークピークのビデオがあがってますね。とりあえずメモ。
スニークピークビデオ - Delphi 2009 / C++Builder 2009のVCL新機能
スニークピークビデオ - C++Builderでの新しい C++0x 標準のサポート
今晩早く帰って見ることにしよう。ああ、でも新しいビル(以下NDAにより自粛
Marco Cantuさんとこにも。
Tiburon Unicode Video #1
Tiburon Unicode Video #2
スニークピークビデオ - Delphi 2009 / C++Builder 2009のVCL新機能
スニークピークビデオ - C++Builderでの新しい C++0x 標準のサポート
今晩早く帰って見ることにしよう。ああ、でも新しいビル(以下NDAにより自粛
Marco Cantuさんとこにも。
Tiburon Unicode Video #1
Tiburon Unicode Video #2
2008年8月4日
プラットフォーム依存の解消
従来のDelphiの関数/ユニット/シンボルのうち、プラットフォームに依存するものは警告されないように以下のような置き換えが推奨されています。
また以下のものは警告を抑止($WARN SYMBOL_PLATFORM OFF)するか無視するしかないと思われます。
- IncludeTrailingBackSlash() → IncludeTrailingPathDelimiter()
- ExcludeTrailingBackSlash() → ExcludeTrailingPathDelimiter()
- RaiseLastWin32Error() → RaiseLastOSError()
- FormsネームスペースのMakeObjectInstance()およびFreeObjectInstance() → ClassesネームスペースのMakeObjectInstance()およびFreeObjectInstance()
- uses FileCtrl → uses SysUtils
- MinimizeName() → 普通はラベル表示用なのでTLabel.EllipsisPositionプロパティをepPathEllipsisにするとか…
また以下のものは警告を抑止($WARN SYMBOL_PLATFORM OFF)するか無視するしかないと思われます。
- Win32Check
- SysUtilsネームスペースのfaReadOnly, faHidden, faSysFile, faArchive, faSymLink定数
2008年8月3日
警告の抑止
Kylix(懐かしい)以前のDelphiからコードを移行すると、プラットフォーム/ライブラリに依存している、あるいは使用を推奨されていない、と警告(W1000/W1001/W1002)されることがあります。
これらはplatform/library/deprecatedヒント指令を付加されたシンボルの使用によるもので、基本的には警告されないように書き換えることが望ましいわけですが、すべての局面で書き換え可能とは限りません。
そこでこれらの警告を抑止するときは以下のコンパイラディレクティブを使用します。
なるべく抑止区間が短くなるよう、必要なブロックの直後でON(Delphi 2009ではDEFAULT)しておきましょう。
これらはplatform/library/deprecatedヒント指令を付加されたシンボルの使用によるもので、基本的には警告されないように書き換えることが望ましいわけですが、すべての局面で書き換え可能とは限りません。
そこでこれらの警告を抑止するときは以下のコンパイラディレクティブを使用します。
{$WARN SYMBOL_PLATFORM OFF} // プラットフォーム依存コードの警告を抑止
{$WARN SYMBOL_LIBRARY OFF} // ライブラリ依存コードの警告を抑止
{$WARN SYMBOL_DEPRECATED OFF} // 下位互換性コードの警告を抑止
なるべく抑止区間が短くなるよう、必要なブロックの直後でON(Delphi 2009ではDEFAULT)しておきましょう。
2008年8月2日
ディレクトリツリーを削除する
指定されたディレクトリをその中身ごと削除するには、再帰しながらそのディレクトリに含まれる全てのファイルとサブディレクトリを削除していきます。
よくあるミスはFincCloseせずにディレクトリを削除しようとしてアクセス拒否を食らう、というやつです(普通にトラバースするだけならFindCloseしなくてもエラーにならないので気付きにくい)。
uses Windows, SysUtils, Classes; procedure DeleteDirTree(const Path: String); var Index: Integer; DirNames: TStringList; FileNames: TStringList; SearchRec: TSearchRec; Pathname: String; begin if Path = '' then begin Exit; end; DirNames := nil; FileNames := nil; try DirNames := TStringList.Create; FileNames := TStringList.Create; { Search } if FindFirst(IncludeTrailingPathDelimiter(Path) + '*.*',faAnyFile,SearchRec) = 0 then begin try repeat if (SearchRec.Name = '.') or (SearchRec.Name = '..') then begin Continue; end; Pathname := IncludeTrailingPathDelimiter(Path) + SearchRec.Name; if (SearchRec.Attr and faDirectory) <> 0 then begin DirNames.Add(Pathname); end else begin FileNames.Add(Pathname); end; until (FindNext(SearchRec) <> 0); finally FindClose(SearchRec); end; end; { Delete sub directories } for Index := 0 to DirNames.Count - 1 do begin DeleteDirTree(DirNames.Strings[Index]); // recursive call end; { Delete files } for Index := 0 to FileNames.Count - 1 do begin if DeleteFile(FileNames.Strings[Index]) = False then begin RaiseLastOSError; end; end; { Delete current directory } if RemoveDir(Path) = False then begin RaiseLastOSError; end; finally DirNames.Free; FileNames.Free; end; end;
よくあるミスはFincCloseせずにディレクトリを削除しようとしてアクセス拒否を食らう、というやつです(普通にトラバースするだけならFindCloseしなくてもエラーにならないので気付きにくい)。
2008年8月1日
エクスプローラからのファイルのドラッグアンドドロップを特定のコントロールで受け入れる
fエクスプローラからファイルをドラッグアンドドロップで受け入れるにはDragAcceptFilesで受け入れを許可し、WM_DROPFILESメッセージで通知を受け付け、DragQueryFileでドロップされた各ファイルを受け取ります。特定のコントロールでこれを行うには、ウィンドウプロシージャを置き換える必要があります。この例ではListBoxでドラッグアンドドロップを受け入れています。
2010/08/04追記: こちらに詳細に説明していますが、Windows Vista/7ではUIPIにより下位ILのプロセスから上位ILのプロセスに対して通信、この場合はファイルのドラッグアンドドロップを行うことができなくなっています。
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI; type TForm1 = class(TForm) ListBox1: TListBox; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FPrevListBoxWindowProc: TWndMethod; procedure ListBoxWindowProc(var Message: TMessage); procedure ListBoxWMDropFiles(var Msg: TWMDropFiles); public end; procedure TForm1.FormCreate(Sender: TObject); begin { Replace window procedure } FPrevListBoxWindowProc := ListBox1.WindowProc; ListBox1.WindowProc := ListBoxWindowProc; { Enable to accept drop files } DragAcceptFiles(ListBox1.Handle,True); end; procedure TForm1.FormDestroy(Sender: TObject); begin { Disable to accept drop files } DragAcceptFiles(ListBox1.Handle,False); { Restore window procedure } ListBox1.WindowProc := FPrevListBoxWindowProc; end; procedure TForm1.ListBoxWindowProc(var Message: TMessage); begin if Message.Msg <> WM_DROPFILES then begin { Call previous window procedure } FPrevListBoxWindowProc(Message); Exit; end; { Call WM_DROPFILES handler } ListBoxWMDropFiles(TWMDropFiles(Message)); Message.Result := 1; end; procedure TForm1.ListBoxWMDropFiles(var Msg: TWMDropFiles); var Index: Integer; Count: Integer; Size: Integer; Filename: String; begin try { Get dropped filename } Count := DragQueryFile(Msg.Drop,DWORD(-1),nil,0); for Index := 0 to Count - 1 do begin { Get filename length } Size := DragQueryFile(Msg.Drop,Index,nil,0) + 1; { Get filename } SetLength(Filename,Size); Size := DragQueryFile(Msg.Drop,Index,PChar(Filename),Size); SetLength(Filename,Size); ListBox1.Items.Add(Filename) end; finally { Finish } DragFinish(Msg.Drop); end; end;
2010/08/04追記: こちらに詳細に説明していますが、Windows Vista/7ではUIPIにより下位ILのプロセスから上位ILのプロセスに対して通信、この場合はファイルのドラッグアンドドロップを行うことができなくなっています。
登録:
投稿 (Atom)