【1C】Delphiチュートリアルセッション| Delphi 7コーポピ初心者のためのDelphi 2010人民は株式会社シリアルゲームズ、取締役紹介 定EMBARCADERO TECHNOLOGIES. Embarcadero Developers CampはじめにEmbarcadero Developers Camp
●
Delphi 7
– Borland Delphi 7 Studio 2002年09月26日発売歴代で最も人気のあったDelphi . •   .NET Framework向け開発機能を提供(プレビュー版) – 本格的な.NET Framework対応はDelphi 8
–ラインナップ
• Personal • Professional • Enterprise • Architect 「過去の投資を無駄にすることなく未来へ進むための手段を、多くの企業に提供するという当社の姿勢は変わりません。 Delphi 7 Studioをお使いいただければ、開発者の皆さんがすでに構築されたスキルやリソースを使って、それぞれに合ったスケジュールでスムーズに.NETに移行していただけます。モデリング、MDA、レポーティング、クロスプラットフォーム運用など、Delphi 7 Studioに追加された高品質なアプリケーション・ライフサイクル開発ソリューションにより、Delphi向けの新規および既存のアプリケーション開発の機会が生まれるだけでなく、これから先も革新的なアプリケーション開発の場が提供されることになります」ボーランド・ソフトウェア・コーポレーションバイス・プレジデント兼RADソリューション事業ゼネラル・マネージャサイモン・ソンヒ
●
Delphi 2010
–  2009年08月25日発売• RAD Studio 2010にはDelphi 2010, C++Builder 2010, Delphi Prism 2010が含まれる• Windows 7にいち早く対応•ジェスチャーコントロールなどのタッチ対応アプリケーションの開発をサポート
–ラインナップ
• Professional • Enterprise • Architect – 「これは簡単で、スピーディだ！ Delphi 2010はもうやめられない。これは『これまでで最高のDelphiだ』といっても過言ではないよ。本当にすばらしい！」-Fabricio Pontes de Araujo, Systems Analyst and Programmer IBS - Info Business Solutions Embarcadero Developers Camp IDE Embarcadero Developers Camp
Main Window(Menu & Tool Buttons & Component Pallet) Project Manager講演者の環境Embarcadero Developers Camp 6
Structure | P | S Project Manager人間オブジェクトインスペクタ| | 83 Object Inspector 4. 3 idgeTester.dproj (お気に入りに設定する) C:\Source\...\test\CenterBridgeTester.dprojバーソナリテDelphi 1994-2009 Embarcadero Technologies, Inc. All rights reservedいて、活的に動く、ブライトなどページが表示されました\ブラウザブロジェクト| VCL for the Web ATOK Delphi 2010起動直後の画面Galileo IDE
Object Inspector Delphi 2010 Classic Undocked 8
設定するには…… – 「表示」→「Classic Undocked」を選択•各ウィンドウが分離– 「ツール」→「オプション」→「ツールデザイナ」→「埋め込みデザイナ」のチェックを外す•デザイナが分離
Z順序が入れ替わらない！ Delphi 7
Delphi 2010
東所USES
Delphi 7
エディタを縦方向に最大化して使っている（例えばノートとかで縦の解像度が少ない場合）時、コンポーネントを置くには、メインウィンドウをクリックすればZが入れ替わり、コンポーネントパレットにアクセスできましたそのためノートでも快適に作業ができたのですが…… Delphi 2010 Zが入れ替わりません！常にエディタがトップにいますエディタが一番上に。コンポーネントパレットにアクセスできません10
スナップが切れない！ Delphi 7ランチャ（クリックで出現） Delphi 7メインウィンドウは自由に動かせました。そのためタスクバーやランチャーを画面上部に置いてもメインウィンドウを数ドット下に下げるだけで、それらを利用できました。 Delphi 2010メインウィンドウがスナップするため、数ドット下に下げる、という操作ができません！画面上部にタスクバーやランチャを置いている場合致命的です。 Delphi 2010モニタ上部にピッタリくっついてしまう！無理矢理下に下げるとこんなに空隙が！ parcadero Develo 11
コンポーネントの位置合わせが楽！ – Delphi 2005くらい？で実装最近のデザイナでは当たり前の機能●
オブジェクトインスペクタが変わった！
– True, Falseを選ぶ物など、集合型では、各要素に– チェックボックスが付いて、より簡単に選択できる！ –他にもDate型はカレンダーコントロールで設定できたりいくつかの型でUIが更新されています
●
MSBuildの使用
–   Delphi 2007で採用–ビルド前、ビルド後に実行するコマンドを指定できるようになりました。 •  DOSのコマンドが使えます。 •例えば、できあがったファイルを所定の位置へコピーしたりできます。 ●
プロジェクトマネージャの機能強化
–ビルド構成を任意に作成可能例えばコンパイラオプションや、警告、アプリケーションのタイトルなどなど、オプションを.切り替えられます。
● IDEインサイトがスゴイ！ – F6キーで起動マウスを使わずにIDEの各機能を呼び出せる！ @ IDEインサイト&T続けて「TMe」まで入れると、 TMediaPlayerとTMemoが該当@ IDEインサイト起動直後nents%RAD Studio%Projects%Project1 「T」と入力このときIDEの要素全てからTが関係する物をリストアップ続けて文字を入力することで、どんどんインクリメンタルに対象が絞られるEmbarcadero Developers Camp 14
コンポーネントパレット＆ツールパレットでコンポーネントの絞り込み●地味に便利(IDEインサイトで代用できますが) |コンポーネントパレットTMeまで入れると該当するTMemoとTMediaPlayerのみ表示されるココに文字を入力するとインクリメンタルに絞り込みされるツールパレット15
他には– IDEの言語切り替えツールの提供•エラーメッセージなどのリソースを切り替えられます。 •国際化対応に便利– IDEに統合されたファイルブラウザ• IDEからファイルが参照できます– クラス図とUMLモデリング－トランスレーションエディタ履歴タブl •自動的にローカルで履歴を取っています。昔のソースとの違いを見たり、昔のソースと入れ替えたりもできます。 .など
ライブテンプレートがスゴイ！ procedure TForm2.FormCreate(Sender: TObject); end procedure TForm2.FormCreate(Sender: TObject); i: TUbject : st. Count. - 1 do. Delphi 7までのCode Templateに変わって、Live Templateが導入されました。これは、もっとインテリジェントなテンプレートです。これを使えば、自動的に変数を宣言させるなどコーディングをある程度自動化できます。上の例は、for文のテンプレートです。自動的に変数が宣言されているのが分かります。 Live Templateは、XMLで記述されています。自分でLive Templateを作ることもできます。 17
SyncEditがスゴイ！ sprocedure TForm2.FormCreate(Sender: TObject); Str: String: for i := 1 to 100 do begin Str := ''; if (li mod 3 = 0) then Str := 'Fizz'; if (li mod 5 = 0) then Str := Str + 'Buzz'; if (Str = '') then Str := IntToStr(D); WriteIn(Str); end: end;
M2 「 Str: String: or test := 1 to 100 do begin Str := '': if (test_mod 3 = 0) then Str := 'Fizz'; if (test mod 5 = 0) then Str := Str + 'Buzz'; if (Str = '') then Str := IntToStr(test); WriteIn(Str); end: end; SyncEditはスゴイ機能です。簡単なアイデアなのにDelphi IDE以外の開発環境で見たことがありません。選択範囲内の変数名を、同期的に（Sync）編集（Edit）してしまうのです。上の例では、変数「i」を変数「test」に変えています。実際に編集したのは一番上の「i」だけです。しかし選択範囲無いにある「i」（青枠が付いている）は全て同期的に変更されています
●リファクタリングがスゴイ！豊富なリファクタリングコマンド•名前の変更•メソッドの抽出•変数の宣言•変数の導入•変数のインライン化などeate SD(0) 2325/ test (0) 232112 testiest [ 2331 if (test mod 3 = 0) then Str := IntToStr(test):リファクタリングー名前の変更で、変数名を変更する例Delphiは他のエディタや開発環境に比して、豊富なリファクタリング手段を提供しています。しかも、Delphi 2010のリファクタリングはジェネリクスにも適用できます。また、他のユニットで使われているプロパティやメソッドも探しだし、正しくリファクタリングを適用します。単なる名前変更程度にとどまらない、Delphiのパワフルなリファクタリングを是非体験してください。 Embgrcadero Developers Camp 19
変更バー変更があった部分に変更バー（黄色の部分）が表示されます。ブロック補完– beginといれてエンターを押すと自動的にendが補完されたりします。 • 慣れるまでは自分でendを入れたいのに！と思いますが、慣れてしまうと、補完されないのは非常にイライラするようになります。
•   Unicode対応
–  Delphi 2009からエディタが完全にUnicode化されました。 •日本語の変数名も使えます(是非は置いておいて) Embarcadero Developers Camp

ブックマーク
–個人的に大プッシュしたい機能がブックマークです。 –   Ctrl + Shift + 0～9キーで、ブックマークを設定– Ctrl + 0～9キーで、設定したブックマークに移動•いまここを編集してるんだけど、他のところを、ちょっと見たい！という時に、ブックマークを設定して、他のところを見に行って、直ぐ戻ってきたり、という風に使います。
●
宣言部、実現部の移動– Ctrl + Shift + ↑↓ •実現部で↑を押せば宣言部に、宣言部で↓を押せば宣言部に移動します。 ●自動的に実現部のスケルトンを作る–  Ctrl + Shift + C •  例えば宣言部でprocedure Test(const iStr: String);と書いてCtrl + Shift + Cと押すとprocedure Test(const iStr: String); . begin . end:と実現部のベースが自動的にできあがります。
インデント・アンインデント– Ctrl + Shift + I でインデント– Ctrl + Shift + Uでアンインデントコード補完– Ctrl + J • tryfなどの登録されているテンプレートに対してCtrl + Jを押すとtryf finally end; •に補完されます● SyncEdit –   Ctrl + Shift + J •選択されている部分を同期編集します

一行削除
個人的によく使うのが一行削除です。これで空行を削除したりします。 Ctrl + Y lハイパーリンク– Ctrlを押しながら型や変数、関数などをクリックすると宣言部にジャンプしますuses Dialogs, StdCtrls, ExtCtrls; type

デバッガ
デバッガには、ビジュアライザが搭載されました。 • TDateTime型なら日付で、TStringsなら文字列のリストが、といった具合に型に即した表示ができます。 •ビジュアライザは、自分でも作成できます。
－スレッドのデバッグ
•スレッド毎に、実行・停止・再開を制御できます。 TDateTime型のビジュアライユーザーブレイクポイント以外を無視•ユーザーのブレイクポイント以外の例外や停止は、そのまま続行されます。
デバッガ– CPUビューは機能別に独立可能に。 –  Ctrlを押すとデータ表示ツールチップが半透明に•ツールチップが邪魔でコードが見えなかった時に便利。 ●統合されたユニットテスト– DUnitをベースにユニットテストフレームワークが統合されました。データベース接続だってスゴイ● Webアプリケーションの開発がスゴイ● ●フォーマッタとかもある！とにかくスゴイ● VCL Embarcadero Developers Camp
●多くのVCLが新たに導入されています。 –いくつかピックアップします。 ●
TGridPanel
–グリッドに分割された領域に1つコンポーネントが置かれるパネルです● TFlowPanel自動的に整列するパネルです。 ● TCategoryPanelGroup最近よく見る開閉式のパネルのグループです。 » CategoryPanel3
barcadero Developers Car

●
リボンコントロール
–賛否両論のリボンコントロールが使えます。 •個人的にはリボンコントロールは賛成派です。 Embarcadero Developers Camp
● Vistaスタイルのダイアログ– TFileOpenDialog, TFileSaveDialog, TTaskDialog ●タスクトレイアイコン– TTrayIcon TBalloonHint - • Indy – Indyはバージョン10に。その他にも色々追加されています。 ●
Embarcadero Developers Camp

ジェスチャーコントロール
– TGestureManager •ジェスチャーの管理･作成を受け持ちます。 •右図のようにジェスチャーを自分で作成できます。標準的なジェスチャーは最初から用意されています。 . •自作したカスタムジェスチャーも標準ジェスチャーもコンポーネントのTouchプロパティに結びつけることで機能を自由に組み込むことができます。 Touchプロパティ。ここにGestureManagerを結びつけ、Gesturesでジェスチャーを選択する。登録されたジェスチャーが実行されると、イベントOnGestureが発生する。
● TTouchKeyboardタッチパネル用にデザインされたタッチキーボード– –ちゃんと漢字も打てます。

●
TMonitor
－ 個人的にお勧めしたいクラスです。 | Systemユニットに含まれるクラスで同期処理を実現します。 • EnterCriticalSection, LeaveCriticalSectionのような機能です。 − System.TMonitor.Enter(AObject: TObject); • これでAObjectオブジェクトをモニターとして、ロックを取得します– EnterCriticalSectionなどと比べて優れているのは、引数にTObjectのインスタンスを取るところです。つまり、全てのクラスのインスタンスを使えると言うことを意味します。 l –そして、インスタンスが違えば、同期処理も別々に行われると言うことになります。 » Indyを利用した通信クラスなどで、別々のインスタンスで同期が取れるのは非常に便利ですprocedure TForm1.Button1Click(Sender: TObject); begin System.TMonitor.Enter(Self); // M 3 5 System.TMonitor.Exit(Self); end: EnterからExitまでのブロックは別スレッドからのアクセスがブロックされます。 Threadを処理しているときなど、何度もやってくる場合があってもEnter ～ Exit間は、一度に1つのスレッドしか処理できません。ロックを取得しているスレッドの処理が終わるまで他のスレッドはEnterでブロックされます。もちろん同一スレッド内では、ロックの複数回取得(再入)は可能です

●
TDirect2DCanvas
– Windows 7で追加されたDirect2Dを扱えるキャンバスです。これを使うと簡単にDirect2Dの機能を扱えます。 ● TStringBuilder −文字列の追加・挿入・置換、などを高速に行うクラスです。
Embarcadero Developers Camp

● TObjectには、下記の仮想メソッドが追加されました– ToString GetHashCode Equals l ● RTTIサポート今までのRTTI用メソッドよりも詳細かつ柔軟なRTTIサポートが追加されました。 -
● Delphi 2010では、Win32 SDKで配布されているヘッダファイルのほぼ全てがDelphi用のユニットに変換されています今までのように自分でヘッダファイルを変換する前に、下記のフォルダ●を検索する用にしましょう。 – RAD Studio¥7.0¥source¥Win32¥rtl¥win¥ Embarcadero Developers Camp
•   UnicodeStringの導入– Delphi 2009から言語・IDEはUnicodeを基本文字セットとするようになりました。 –これによって文字列型が変更されました。

Embgrcadero Developers Camp

● AnsiStringにコードページを指定可能に– AnsiStringにはコードページを指定できるようになりました。例えば右記のコードです。 -このコードではAnsiStringにコードページを指定した新しい文字列型を作っています。ここで作られた新しい文字列型は相互に代入互換性があります。代入時に自動的にコードページの変換がおこります。便利と同時に、注意すべき点です。 SJISString = type AnsiString(932); EUCString = type AnsiString(20932); procedure ShowCode(const iCode: String; const iStr: RawByteString); var i: Integer; begin Memo1.Lines.Add(iCode); for i := 1 to Length(iStr) do Memo1.Lines.Text := Memo1.Lines.Text + IntToHex(Ord(iStr[i]), 1) + ' '; Memo1.Lines.Add(sLineBreak); end; ShowCode(SJIS); ShowCode(EUC); end;右記のコードを実行した結果39
●
RawByteStringとは？
–前ページで見たように、文字列型は相互に代入互換性があります。そのため、意図しない変換や、ループ内での代入によるCPUリソースの消費などの問.題があります。 – RawByteStringは、コードページの変換を伴わない生のデータを扱う文字列型です。 • RawByteStringを使えば、意図しない変換は起きません。 - String型をバッファとして使うテクニックにも利用できます。例えば、このように。 . begin SetLengt(Str, 1024);ポインタを使う関数(PRawByteString(Str)^, foo, bar);
● TEncodingクラスの導入– TEncodingクラスは、様々なエンコードを表すクラスです。このクラスを使うと、文字列を扱うクラス（TStringListなど）でコードページを指定できるようになります。 l例えば、下記の用に使えます。 procedure TForm1.Button1Click(Sender: TObject); var EUC: TEncoding; begin with TStringList.Create do try Add('テスト'); EUC := TEncoding.GetEncoding(20932); // EUC-JPのインスタンスを取得try SaveToFile('C:¥Temp¥EUC.txt', EUC); finally EUC.Free: end: finally Free: end: end:左記のコードでは文字列がEUCとして扱われます。 41
● ClassにDelphi 2005(※)で下記の可視性が追加されました※Delphi 8から追加されたもののWin32で使えるように成ったのはDelphi 2005です。 – strict protected strict private –  Delphi言語では、同一ユニット内のクラスは互いにprivate, protectedが見える、という一種のfriend的機能が使えましたが、strictを付けると他のクラスから見えなくなります。 ● Class変数、定数- Classには、Class変数、定数を指定できるようになりました。 type TTest = class class var SFoo: Integer; const CBar; Integer = 101 st COMMAND SEND: String = 'send' ; const COMMAND_RECEIVE: String = ' recv' ;左記の例でのSFooはTTest.SFooとしてアクセスできます。同様にCBarもTTest.CBarとしてアクセスできます。実は、Class同様Recordにも定数を定義できるようになりました。これを使えば、グループ化された定数を宣言できます。 Delphi 2009からジェネリクスが導入されました。 Javaではおなじみ、C++で言うところのテンプレートのような物です。今までは、型が違うだけの同じ処理は、泣く泣く、同じアルゴリズムを書いていました。ジェネリクスを使えば、同じアルゴリズムのクラスを何度も書く必要はありません。 type TTest<T> = class private FValue: T: public constructor Create(const iValue: T): reintroduce: property Value: T read FValue: constructor TTest<T>. Create (const iValue: T) ; begin FValue := iValue: end:ジェネリクスの例。ここではStringとIntegerという異なる型でも、同じクラスを利用できることを示しています。 procedure TForm1.Button1CIick(Sender: TObject); var Str: TTest<String>: Int: TTest<Integer>: begin Str := nil: Int := nil; try Str := TTest<String>. Create('テスト'); Int := TTest<Integer>. Create (4649) : Memo1. Lines. Add (Str. Value) : Memo1. Lines. Add(IntToStr (Int. Value)) : finally Str.Free: Int. Free: end: end: 43 ● Delphi 2009から無名関数(匿名関数とも)がサポートされました。無名関数は、関数レベルでの多態性を確保します。 type // 匿名関数の型定義TFigureFunc = reference to function(const iMsg: String): String: procedure ShowFigure(const iFigureFunc: TFigureFunc); begin ShowMessage ( iFigureFunc ('辺の数は' )) : end:驚くべき事に、無名関数は関数内関数と同じようにローカル変数にアクセスできます。この例ではSideという変数にアクセスしています。 Sideの数によってShowFigure関数に渡す無名関数を選択しています。このように無名関数を使うと、関数レベルで多態性を確保できます。 procedure TForm2. Button1CIick (Sender: TObject) : var Triangle: TFigureFunc:  //匿名関数を代入するRectangle: TFigureFunc: //変数Side: Integer: bogin Triangle := function(const iMsg: String): String begin Result := Format(iMsg + ' %d,三角形', [Side]); end: Rectangle := function(const iMsg: String): String begin Result := Format(iMsg + ' %d,四角形', [Side]); end : Side := 3: if (Side = 3) then ShowFigure(Triangle); if (Side = 4) then ShowFigure(Rectangle); end: 44まとめEmbarcadero Developers Camp
● Delphi 2010は非常に安定したバージョンです。 ●起動も高速！まるでDelphi 7の再来です。 ●しかも、時代の要請に応えた様々な機能追加、言語使用の拡張が施されています。 –もうDelphiってUnicodeじゃなかったの？って言われない！！ ● Delphi 2010は、これからの時代のDelphiのベースとなるバージョンとなるでしょう。 . Delphi 2010機能一覧- delphi-2010-features-matrix-jp.pdf . Delphi 7以降のIDEの新機能- http://edn.embarcadero.com/jp/article/34361 .あなたの環境でもきっと役に立つDelphi 7以降の新機能トップ10 - by Pawel Glowacki http://dn.embarcadero.com/jp/article/37433 - . Delphi 2010の新機能- http://www.embarcadero.com/jp/products/delphi-2010-what%E2%80%99s-new • Delphi 2009で追加された3つの便利な機能をコードで検証- http://techtarget.itmedia.co.jp/tt/news/0811/11/news02.html . Delphi 2010のヘルプ