Copyright: Delphi  v.2.0 Copyright (c) 1982-1996 Borland International, Inc.


プロパティエディタについて
プロパティエディタについて00001

参照

オブジェクトインスペクタにはプロパティの変更や設定に使えるエディタが何種類か用意されています。独自のコンポーネントを作成する場合，一般にコンポーネントのプロパティを設定するためにいずれかの方法を使えます。これらのプロパティエディタは通常 Object Pascal に対応するように本来設計されていることを忘れないでください。


参照00002

コンポーネントの処理

プロパティの設定

共有プロパティの設定

オブジェクトインスペクタでのプロパティの表示方法

Name プロパティ

ネストしたプロパティの表示

コードに対する操作


Simple editor
Simple editor00003

新しい値を直接入力することによってこれらのプロパティを編集します。この方法で表示されるプロパティは一般に単純型に対応します。これらには数値型と文字列型が含まれます。これらのフィールドは型が一致しているかが確認されます。たとえば数値型フィールドに文字列 (文字) を入力しようとすると，「不正なプロパティの値です」というメッセージが表示され，フィールド内の値がリセットされます。


Drop Down List editor
Drop Down List editor00004

ドロップダウンリストエディタを使って値を変更するには

次のいずれかの操作をします。

ドロップダウン矢印をクリックし，リストで選択する

Alt+↓を押し，リストで選択する

求める値がアクティブになるまで値列をダブルクリックする

これらのプロパティはほとんどの場合列挙型に対応します。


Object List editor
Object List editor00005

{bmc menuprop.bmp}

このエディタはプロパティに割り当てられるフォーム内のオブジェクトの名前がリストに表示される点以外はドロップダウンリストエディタと同じです。たとえば Menu プロパティのためのオブジェクトリストエディタには TMainMenu 型のコンポーネントだけを入れられます。


Dialog box editor
Dialog box editor00006

値列の右にある省略記号はこのプロパティの編集に使えるダイアログボックスがあることを示します。次に示すのはすべて Delphi ダイアログボックスエディタです。

カラーエディタ (色の設定)

DDE 設定

項目エディタ (項目の編集)

フィルタエディタ (フィルタの編集)

フォントエディタ (フォントの編集)

マスクエディタ

オブジェクトの挿入

マスク文字列エディタ

メニューデザイナ

ノートブックエディタ

画像エディタ

文字列リストエディタ

ダイアログボックスエディタを開くには

次のいずれかの操作をします。

省略記号ボタンをクリックする

値列をダブルクリックする

Ctrl+Enter を押す

プロパティの編集が終わったら，［OK］をクリックします。


Nested Properties editor
Nested Properties editor00007

プロパティ名の左にある正符号 (+) はプロパティ名をダブルクリックしてアクセスできるプロパティのネストしたレベルがあることを示します。

これらのプロパティは集合型に対応する場合があります。集合のすべてのメンバーを False に変更した場合，空の集合つまり [ ] が値列に表示されます。


Color Property editor
Color Property editor00008

Color プロパティはドロップダウンリストとダイアログボックスの両方のエディタの組み合わせを提供する唯一のプロパティです。

Color プロパティを編集するには

次のいずれかの操作をします。

ドロップダウン矢印をクリックし，リストで選択する

値列をダブルクリックしてカラーエディタを表示し，それを使って新しい色を選択する

色定数の番号または名前 (clBlue または ASCII 色コードに対応する任意の番号など) を入力する


Font Property editor
Font Property editor00009

Font プロパティもダイアログボックスと複数ネストレベルのプロパティのエディタの組み合わせを提供します。


Application イベントの処理
Application イベントの処理00010

例

Application コンポーネントはオブジェクトインスペクタには表示されないので，そのイベントハンドラはユーザーが独自に作成しなければなりません。

1.	メインフォームの implementation 部にイベントハンドラを記述します。

2.	interface 部のメインフォームの型宣言でそのメソッドを宣言します。

3.	Application イベントにメソッドの名前を割り当て，メインフォームの OnCreate イベントハンドラにその文を追加します。


例00011

次の例はアプリケーションの起動時にダイアログボックスを表示する Application の OnActivate イベントハンドラを作成します。

unit Unit1;

interface

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs;

type

  TForm1 = class(TForm)

    procedure AppOnActivate(Sender: Tobject); { この行を追加します }

    procedure FormCreate(Sender: Tobject); {この行は自動的に追加されます }

  private

    { プライベート宣言 }

  public

    { パブリック宣言 }

  end;

var

  Form1: TForm1;

implementation

{$R *.DFM}

{ 次のメソッドを記述します }

procedure TForm1.AppOnActivate(Sender: TObject);

begin

  MessageDlg('I am activated!', mtInformation, [mbOK], 0);

end;

{ オブジェクトインスペクタでこのイベントハンドラを生成すると次のようなメソッドのひな型が自動的に生成されます }

procedure TForm1.FormCreate(Sender: TObject);

begin

  { AppOnActivate を Application の OnActivate イベントにアタッチするため次の行を記述します }

  Application.OnActivate := AppOnActivate;

end;

end.


フォームについて
フォームについて00012

参照

フォームは Delphi のすべてのアプリケーションの基礎となるものです。フォームはコンポーネントです。フォームの上に他のコンポーネントを配置してアプリケーションのインターフェースを構築します。

アプリケーションを開発するときには，メインフォームをカスタマイズし，他のインターフェースとしてさらにフォームの追加やカスタマイズを行います。コンポーネントを追加してプロパティを設定することでフォームをカスタマイズします。

フォームはウィンドウであり，デフォルトで次のような標準ウィンドウの機能を備えています。

コントロールメニュー

アイコン化ボタンと最大化ボタン

タイトルバー

サイズ変更が可能なウィンドウ枠

これらの機能は，フォームの他のプロパティと同様に設計時にオブジェクトインスペクタを使って変更できます。


参照00013

フォームへのコンポーネントの追加

ダイアログボックスの作成

ユーザーインターフェースの設計

プロパティの設定

TForm コンポーネント

フォームコンポーネントの使い方


クライアント領域00014

アクティブウィンドウのフォームの一部分を表示したり変更するための領域です。フォーム上でオブジェクトの位置を揃えるには，ドット表示のグリッドを使います。


スピードバーについて
スピードバーについて00015

参照

Delphi のスピードバーはメニューコマンドのショートカットです。次の図はデフォルトのスピードバーです。スピードバーはスピードバーのスピードメニューで［設定(C)］を選択すればカスタマイズできます。

デフォルトのスピードバーボタンについての詳細は上の図の各ボタンをクリックしてください。

スピードバーとコンポーネントパレットの間にある分割線を使うとスピードバーの縦方向のサイズを変更できます。

スピードバーにはヘルプヒントがあります。ヘルプヒントを有効にするにはスピードバースピードメニューで［ヒント表示(S)］を選択します。


参照00016

コンポーネントパレット

スピードバーの構成

キーボードショートカット


プロジェクトを開くボタン00017

［プロジェクトを開く］ダイアログボックスを表示します。このダイアログボックスでは，新しいプロジェクトを開くことができます。

このボタンはメニューコマンドの［ファイル(F)｜プロジェクトを開く(R)］に相当します。


ファイルを開くボタン00018

［ファイルを開く］ダイアログボックスを表示します。このダイアログボックスでは，新しいテキストファイルを開くことができます。

このボタンはメニューコマンドの［ファイル(F)｜開く(O)］に相当します。


保存ボタン00019

開いているプロジェクトの変更されたすべてのファイルを各ファイルの現在の名前で保存します。

プロジェクトを以前に保存していない場合は，ファイル名を入力するための［名前を付けて保存］ダイアログボックスが表示されます。

このボタンはメニューコマンドの［ファイル(F)｜プロジェクトの上書き保存(V)］に相当します。


保存ボタン00020

コードエディタのアクティブファイルに対する変更を保存します。

ファイルを以前に保存していない場合は，ファイル名を入力するための［名前を付けて保存］ダイアログボックスが表示されます。

このボタンはメニューコマンドの［ファイル(F)｜上書き保存(S)］に相当します。


プロジェクトに追加ボタン00021

現在開いているプロジェクトにコードエディタのアクティブファイルを追加します。

このボタンは次のメニューコマンドに相当します。

［ファイル(F)｜プロジェクトへの追加(D)］

プロジェクトマネージャスピードメニューの［ファイルの追加(A)］


プロジェクトから削除ボタン00022

［プロジェクトから削除］ダイアログボックスを表示します。このダイアログボックスでは，開いているプロジェクトから削除したいファイルを選択できます。

このボタンは次のメニューコマンドに相当します。

［ファイル(F)｜プロジェクトからの削除(M)］

プロジェクトマネージャスピードメニューの［ファイルの削除(R)］


ユニットリスト表示ボタン00023

［表示ユニットの選択］ダイアログボックスを表示します。このダイアログボックスでは，現在のプロジェクトのユニットを表示できます。

ユニットを選択すると，そのユニットがコードエディタのアクティブページになります。

このボタンはメニューコマンドの［表示(V)｜ユニット(U)］に相当します。


フォームリスト表示ボタン00024

［表示フォームの選択］ダイアログボックスを表示します。このダイアログボックスでは，現在のプロジェクトのフォームを表示できます。

フォームを選択すると，そのフォームがアクティブフォームになります。

このボタンはメニューコマンドの［表示(V)｜フォーム(F)］に相当します。


フォーム/ユニット切り替えボタン00025

フォームが選択されるとコードエディタをアクティブウィンドウにし，コードエディタが選択されるとフォームをアクティブウィンドウにします。

このボタンはメニューコマンドの［表示(V)｜フォーム/ユニットの切り替え(G)］に相当します。


フォームの作成ボタン00026

空白フォームと新しいユニットを作成してプロジェクトに追加します。

このボタンはメニューコマンドの［ファイル(F)｜新規作成(F)］に相当します。


実行ボタン00027

アプリケーションをコンパイルして実行します。

このボタンはメニューコマンドの［実行(R)｜実行(R)］に相当します。


実行停止ボタン00028

プログラムの実行を一時停止し，実行するコードの次の行に実行ポイントを設定します。


トレースボタン00029

強調表示されている実行ポイントからプログラムを実行します。プログラマが作成したルーチンを一度に 1 文ずつ実行したいときに［トレース］ボタンを使います。ルーチンが呼び出し先から戻ると，ルーチン呼び出しに続く文にデバッガが実行ポイントを設定します。

Delphi でコードが生成されたルーチンに実行ポイントがある場合，［トレース］ボタンを選択すると，ルーチン呼び出しに続く文に実行ポイントが設定されます。

メモ:	シンボリックデバッグ情報が無効の場合，［トレース］ボタンは使えません。

このボタンはメニューコマンドの［実行(R)｜トレース実行(T)］に相当します。


ステップボタン00030

サブルーチンへ分岐せずに，プログラムを一度に 1 文ずつ実行します。デバッグする必要のないルーチンをプログラムが実行しようとしている場合に，プログラムのステップ実行が役に立ちます。

実行ポイントがルーチン呼び出しにある場合，［ステップ］ボタンを選択すると，ルーチンが最高速度で実行され，ルーチン呼び出しに続く文に実行ポイントが設定されます。

メモ:	シンボリックデバッグ情報が無効の場合，［ステップ］ボタンは使えません。

このボタンはメニューコマンドの［実行(R)｜ステップ実行(S)］に相当します。


スピードメニュー
スピードメニュー00031

参照

Delphi のスピードメニューは現在利用できるコマンドをすばやく使えるようにするための機能です。

Delphi プログラミング環境では，次の構成要素でスピードメニューを利用できます。

位置合わせパレット

ブレークポイントリスト

呼び出し履歴

コードエディタ

コンポーネントパレット

フォーム

メニューデザイナ

オブジェクトブラウザ

オブジェクトインスペクタ

プロジェクトマネージャ

スピードバー

監視式

スピードメニューを表示するには，次のどちらかを実行します。

ウィンドウで右クリックする

カーソルがウィンドウ内にあるときに Alt+F10 を押す


コードエディタ
コードエディタについて00032

参照

Delphi の高機能エディタであるコードエディタでは，アプリケーションを実行するコードを表示して，次のような各種の強力な機能を利用できます。

色付き構文強調表示

複数回の取り消しや一括実行

各種の編集コマンド

コマンドの多くはコードエディタスピードメニューから利用できます。

［オプション(O)｜環境(E)］ダイアログボックスを使うと，コードエディタをカスタマイズできます。

コードエディタで単語にカーソルを合わせて F1 を押すと，その単語についてのヘルプ情報を表示できます。

新しいプロジェクトを開くと，メインフォームユニットについてコードエディタにページが追加されます。

コンパイルエラーが発生すると，次のようになります。

コードエディタのメッセージボックスにエラーが表示される

エラーの発生した行が強調表示される


コードエディタでの別のファイルの表示
コードエディタでの別のファイルの表示00033

そのファイルに関連付けられているタブをクリックします。


参照00034

コードエディタの動作

コードの基本

エラーメッセージ

オブジェクトインスペクタ

プロジェクトマネージャ

コードエディタの使い方

コードエディタでの別のファイルの表示

コードに対する操作


最大表示ボタン00035

ウィンドウを画面全体の大きさに表示します。


コードエディタ00036

アクティブページにあるソースコードの一部分を表示したり変更するために使います。


ページタブ00037

コードエディタで，開いているファイルの間を移動するためのものです。

コードエディタでほかのファイルに移動するには

対応するタブをクリックする


タイトルバー00038

コードエディタのアクティブファイルの名前を表示します。


行と列のインジケータ00039

コードエディタのカーソル位置を行と列で示します。最初の数値が行番号で，2 番目の数値が列番号です。


変更インジケータ00040

コードエディタのアクティブページのファイルが前回の保存の後で変更されたかどうかを示します (変更されていなければ空白になります)。


モードインジケータ00041

コードエディタが挿入モードか上書きモードかを示します。

挿入モード (デフォルト)。入力した文字はカーソル位置に挿入される

上書きモード。入力した文字はすでに入力されている文字を上書きして置き換える

2 つのモード間の切り替えには Ins キーを使います。


メニューデザイナについて
メニューデザイナについて00042

参照%

Delphi のメニューデザイナを使うと簡単にフォームにメニューを追加できます。メニュー項目をメニューデザイナウィンドウに追加するだけで設計できます。メニュー項目の追加，削除，並べ替えを行うこともでき，プログラムを実行して結果を確認する必要はありません。アプリケーションのメニューは実行時と同じように常にフォーム上に表示されています。

メニュー構造全体をゼロから構築することも，Delphi のメニューテンプレート (設計済みのメニュー) の 1 つを基にして作り始めることもできます。

メニューを動的に変更してユーザーに追加の情報やオプションを提供することもできます。

メニューデザイナについての詳細は次のトピックの中から選択してください。

メニューデザイナを開く

メニューデザイナを使わないメニュー項目の編集

メニューデザイナスピードメニュー

メニューテンプレートの使い方

リソースファイルからのメニューのインポート

実行時のメニューのアクセスと編集


メニューデザイナを開く
メニューデザイナを開く00043

1.	MainMenu または PopupMenu コンポーネントをフォームに配置します。

2.	コンポーネントを選択したまま次のどれかを行います。

MainMenu コンポーネントまたは PopupMenu コンポーネントをダブルクリックする

Items プロパティの値列の省略記号ボタンをクリックする

コンポーネントのスピードメニューでメニューデザイナを選択する


参照00044

実行時のメニューのアクセスと編集

メニューの設計

TMainMenu コンポーネント

TPopupMenu コンポーネント


メニュータイトル領域00045

メニュータイトルが表示される領域です。強調表示されているブロックをクリックすると，新しい項目がメニューに追加されます。


メニューコマンド領域00046

メニューコマンドが表示される領域です。強調表示されているブロックをクリックすると，新しいメニューコマンドが追加されます。


オブジェクトインスペクタ
オブジェクトインスペクタについて00047

参照

Delphi のオブジェクトインスペクタはアプリケーションの表示状態と，アプリケーション実行用のコードとの調整をするための機能です。

オブジェクトインスペクタを使うと以下のことが行なえます。

フォームに配置したコンポーネント (またはフォームそのもの) に対して設計時プロパティを設定する

イベントハンドラを作成し，イベントハンドラ間で移動する

オブジェクトインスペクタ上部のオブジェクトセレクタには，アクティブなフォームにあるすべてのコンポーネントを含むドロップダウンリストが表示され，各オブジェクト型も示されます。ここで，現在のフォームにあるコンポーネントやフォームそのものをすばやく選択できます。

分割線をドラッグすると，オブジェクトインスペクタの列のサイズを変更できます。

オブジェクトインスペクタには次の 2 種類のページがあります。

  ［Properties］ページ

  ［Events］ページ


参照00048

プロパティの設定

コードの基本


オブジェクトインスペクタ プロパティページ
オブジェクトインスペクタ: プロパティページ00049

参照

フォームにあるコンポーネントやフォームそのものに対して設計時プロパティを設定するには，オブジェクトインスペクタの［Properties］ページを使います。実行時プロパティは，イベントハンドラ内にソースコードを記述して設定できます。

［Properties］ページには，フォームで選択されているコンポーネントのプロパティだけが表示されます。

設計時にプロパティを設定すると，コンポーネントの初期状態が定義されます。


参照00050

［Events］ページ

プロパティエディタの使い方

プロパティの設定

ネストしたプロパティの表示


オブジェクトインスペクタ イベントページ
オブジェクトインスペクタ: イベントページ00051

参照

フォームやコンポーネントをプログラムのイベントに関連付けるには，オブジェクトインスペクタの［Events］ページを使います。［Events］ページでイベントをダブルクリックすると，イベントハンドラが作成され，フォーカスがコードエディタに移ります。コードエディタでは，特定のイベントに対するコンポーネントやフォームの応答を指定するコードをイベントハンドラ内部に記述します。

［Events］ページには，フォームで選択されているコンポーネントのイベントだけが表示されます。


参照00052

共有イベントの表示とコーディング

既存のイベントハンドラの検索

［Properties］ページ

プロパティエディタの使い方


オブジェクトセレクタ00053

プロパティやイベントを編集中のアクティブコンポーネントを表示します。ドロップダウンリストを使ってコンポーネントを選択できます。


プロパティ列00054

フォームで選択されているコンポーネントの設計時プロパティを一覧表示します。


値列00055

プロパティの現在の値を表示します。各値は Delphi のプロパティエディタのいずれかを使って設定します。


オブジェクトインスペクタのタブ00056

オブジェクトインスペクタの［Properties］ページと［Events］ページを切り替えるためのものです。ページを切り替えるには，タブをクリックします。


アイコン化ボタン00057

ウィンドウをアイコンにします。


スクロールバー00058

カレントウィンドウにオブジェクトを表示しきれないときに，ウィンドウをスクロールしてオブジェクトの残りを表示するためのものです。ウィンドウをスクロールするには，上下のスクロール矢印をクリックするか，スクロールボックスをドラッグします。


コントロールメニュー00059

コントロールメニューボックスをクリックすると，カレントウィンドウのコントロールメニューが開きます。


ハンドラ列00060

イベントのイベントハンドラリンクを表示します。イベントに対してデフォルトイベントハンドラリンクを生成するには，ハンドラ列をダブルクリックします。


イベント列00061

フォームで選択されているコンポーネントのイベントを一覧表示します。


プロジェクトマネージャについて
プロジェクトマネージャについて00062

参照%

Delphi のプロジェクトマネージャでは，プロジェクトに関連付けられているフォームファイルとユニットファイルが表示されます。表示されるファイルは .DPR ファイルの uses 節に指定されているものです。プロジェクトマネージャを使うと，アプリケーションプロジェクトの開発中にファイル間を簡単に行き来できます。

プロジェクトマネージャにはスピードメニューもあり，ウィンドウ領域のどこからでも右クリックすれば表示されます。

Delphi を起動したときには，［表示(V)｜プロジェクトマネージャ(P)］を選択してプロジェクトマネージャを表示します。デスクトップの設定を保存しておけば，プロジェクトを開いたときにデフォルトでプロジェクトマネージャウィンドウが開くようにできます。

複数のプロジェクト間でファイルを共有する場合は，プロジェクト内の各ファイルの場所がすばやくまた簡単にわかるのでプロジェクトマネージャを使うことをお勧めします。これを知っていると，プロジェクトで使うすべてのファイルを含むバックアップを作成するときに特に便利です。


プロジェクトマネージャを開く
プロジェクトマネージャを開く00063

［表示(V)｜プロジェクトマネージャ(P)］を選択する

メモ:	プロジェクトマネージャを表示するには，プロジェクトを開いておかなくてはなりません。


プロジェクトマネージャを閉じる
プロジェクトマネージャを閉じる00064

コントロールメニューボックスをダブルクリックする

コントロールメニューで［閉じる(C)］を選択する


参照00065

プロジェクトマネージャスピードメニュー

プロジェクトマネージャでのファイル処理

プロジェクトのコンパイル，構築，実行

プロジェクトとディレクトリの管理

プロジェクトオプションの設定

基本プロジェクトのタスク


追加ボタン00066

［プロジェクトに追加］ダイアログボックスを表示します。このダイアログボックスでは，プロジェクトに追加するユニットファイル (.PAS) やフォームファイル (.DFM) を選択できます。

メモ:	このダイアログボックスで他の種類のファイルを開くことができますが，そのファイルはプロジェクトに追加されません。


削除ボタン00067

プロジェクトマネージャで選択されているファイルをプロジェクトから削除します。

メモ:	ファイルはプロジェクトディレクトリからは削除されません。


ユニット表示ボタン00068

選択されているファイルのコードエディタウィンドウを表示します。ファイルが開いていない場合は自動的に開きます。


フォーム表示ボタン00069

選択されているモジュールのフォームを表示します。選択されているユニットファイルにフォームが関連付けられていない場合，このボタンは使えません。


オプションボタン00070

［プロジェクトの設定］ダイアログボックスを表示します。このダイアログボックスでは，コンパイラ指令，リンカオプション，出力ディレクトリ，条件定義，プロジェクトに追加するファイルを指定できます。


更新ボタン00071

プロジェクトマネージャに表示されているファイルの内容をプロジェクトファイルの内容に一致させます。.DPR ファイルを手動で変更したとき以外は，このボタンは使えません。


ユニット列00072

この列のファイル名をダブルクリックすると，選択されているユニットのソースが表示されます。選択されているユニットが開いていない場合は自動的に開きます。


フォーム列00073

この列のファイル名をダブルクリックすると，選択されているフォームが表示されます。選択されているフォームが開いていない場合は自動的に開きます。

この列が空の場合は，ユニット列に表示されているユニットに関連付けられているフォームはありません。


ファイルステータスライン00074

プロジェクトファイルの DOS ファイル名と，プロジェクトファイル内のフォームとユニットの数を表示します。


パス列00075

フォームファイルやユニットファイルのパス名を表示します。ユニットがまだ保存されていない場合はこの列は空になります。


メニューの設計
メニューの設計00076

Delphi メニューデザイナを使うと，設計済みのメニューあるいはカスタマイズしたメニューを簡単にフォームに追加できます。フォームにメニューコンポーネントを追加し，メニューデザイナを開き，メニューデザイナウィンドウにメニュー項目を直接入力するだけでメニューを構築できます。設計時にメニュー項目を追加または削除したり，メニュー項目をドラッグアンドドロップして順序を入れ替えたりできます。

プログラムを実行して結果を確認する必要はありません。設計時のメニューは実行時とまったく同じようにフォームに表示されます。

コードを記述すれば，実行時にメニューを変更してユーザーにより多くの情報やオプションを提供することもできます。詳細は実行時のメニューのアクセスと編集を参照してください。


オブジェクトブラウザウィンドウ
オブジェクトブラウザウィンドウ00077

参照

オブジェクトブラウザを使うと，アプリケーションのオブジェクト階層，ユニット，グローバルシンボル間を視覚的に移動できます。オブジェクトブラウザは次の目的で使えます。

アプリケーション内のオブジェクト階層を視覚的に表示する

プログラムで使うユニットを一覧表示し，コンパイラ設定に基づいてインターフェース部または実現部で宣言されたシンボルを表示する

アプリケーション内のすべてのグローバルシンボルを一覧表示し，その宣言を表示し，ソースコード内の参照位置に移動する

オブジェクトブラウザにはスピードメニューがあり，参照中のシンボルを変更したり，表示オプションを選択したりできます。スピードメニューにアクセスするには，オブジェクトブラウザウィンドウ内で右クリックするか Alt+F10 を押します。

オブジェクトブラウザにはインスペクタペインと詳細ペインの 2 つのサイズ変更可能なペインがあります。

オブジェクトブラウザウィンドウの各部についての詳細を参照するには，上のグラフィック内の領域でクリックしてください。

インスペクタペインまたは詳細ペインをサイズ変更するには

1.	カーソルを 2 つのペインの間に合わせ，カーソルが両向き矢印に変わるようにします。

2.	セパレータを左または右にドラッグします。

オブジェクトブラウザの使い方についての詳細は，次の各トピックを参照してください。

シンボルの参照

ブラウザでのシンボルの検索

フィルタの設定

オブジェクトブラウザの有効化


参照00078

継承ツリー

オブジェクトブラウザのキーボードショートカット

［オプション(O)｜環境(E)］の［Browser］ページ


インスペクタペイン00079

参照中の領域のシンボルを表示します。ペイン内でシンボルを選択すると，そのシンボルの宣言，継承情報，参照をインスペクトできます。

オブジェクトブラウザを初めて開いたとき，オブジェクトの参照中なら，インスペクタペインにはオブジェクト継承ツリーが表示されます。このデフォルトは［環境の設定］ダイアログボックスの［Browser］ページで変更できます。

インスペクタの参照対象を変更するには

オブジェクトブラウザスピードメニューで［オブジェクト(O)］［ユニット(U)］［グローバルシンボル(G)］［シンボル(Y)］のいずれかを選択する


詳細ペイン00080

インスペクタペインで選択したオブジェクト，ユニット，グローバル，シンボルについての詳細を表示します。詳細ペインには 3 種類のページがあります。

［Scope］ページ

インスペクタペインで選択したオブジェクト，ユニット，グローバル，シンボルで宣言されたすべてのシンボルを一覧表示します。表示を変更したいときには，オブジェクトブラウザスピードメニューで［シンボル名でソート(S)］または［厳密な名前で表示(Q)］を選択します。

［Inheritance］ページ

インスペクタペインで選択したオブジェクトの上位オブジェクトと下位オブジェクトからなる折りたたみ可能なローカルツリーを表示します。

［Reference］ページ

インスペクタペインで選択したシンボルがコード内に出現するすべてのファイル名と行番号を一覧表示します。シンボルに関する参照情報がない場合，そのシンボルはコード内で使われていないか，［シンボル情報(Y)］をオフにしてコンパイルしたユニットに含まれています。参照情報をダブルクリックすると，コード内のその行に移動します。


Show ボタン00081

オブジェクトブラウザフィルタの表示を切り替えます。このフィルタを使うと参照するシンボルを制限できます。フィルタを追加または削除するには，このボタンをクリックします。

オブジェクトブラウザスピードメニューで［ヒント表示(H)］を選択した場合，マウスをボタンの上に合わせるとそのボタンの名前が表示されます。


ステータスライン00082

現在参照中のシンボル型を表示します。

オブジェクトブラウザスピードメニューで［ステータスライン(I)］を選択すると，ステータスライン の表示が切り替わります。


ヒストリリスト00083

［ヒストリ］ボタンをクリックすると［オブジェクトブラウザヒストリ］ダイアログボックスが開き，前に参照したシンボルのリストが表示されます。一番最後に参照したシンボルが最初に表示されます。

前の表示に戻るには，名前をダブルクリックします。


前に戻るボタン00084

前に戻るボタンをクリックすると，前のオブジェクトブラウザ表示に戻ります。前に戻ると，参照中だった情報はすべて失われます。


オブジェクトブラウザの有効化
オブジェクトブラウザの有効化00085

参照

オブジェクトブラウザは，コードからさまざまなシンボルを検索するためのものです。

オブジェクトブラウザを開くには

［表示(V)｜ブラウザ(B)］を選択する

オブジェクトブラウザを開始する前に，プログラムをコンパイルする必要があります。プログラムのコンパイル方法についての詳細はプロジェクトのコンパイル，構築，実行を参照してください。

プロジェクトをコンパイルする場合，モジュールのインターフェース部で宣言されたシンボルをオブジェクトブラウザでインスペクトできます。［プロジェクトの設定］ダイアログボックスの [Compiler] ページで［デバッグ］オプションのチェックボックスを有効にすることによって情報を追加できます。次の表は［デバッグ］オプションのチェックボックスとオブジェクトブラウザに及ぼす影響の一覧です。

オプション	チェックマークを付けた場合

デバッグ情報(D)	モジュールの実現部で宣言されたシンボルを追加する

ローカルシンボル(L)	詳細ペインの［References］ページに行番号参照を追加する

シンボル情報(Y)	ルーチン内で宣言されるすべての識別子を追加する。つまり，シンボルは特定のルーチンのスコープ内でローカルである

メモ:	［ローカルシンボル(L)］と［シンボル情報(Y)］のオプションを有効にするには，［デバッグ情報(D)］にチェックマークを付けなくてはなりません。


参照00086

オブジェクトブラウザウィンドウ

シンボルの参照

オブジェクトブラウザのキーボードショートカット

ブラウザでのシンボルの検索

フィルタの設定


シンボルの参照
シンボルの参照00087

参照

オブジェクトブラウザを使ってシンボルを表示している場合，シンボルの宣言やオブジェクト階層，ソースコード内での実現部などを表示してさらにインスペクトできます。

インスペクタペインでシンボルをインスペクトするには

インスペクタペインでシンボルを選択する。選択したシンボルの内容を反映するように詳細ペインの内容が更新される

独自の宣言を持つオブジェクト，ユニット，グローバルシンボルは［プロジェクトの設定］ダイアログボックスの［Compiler］ページの［デバッグ］オプションに基づいてさらに詳しくインスペクトできます。

インスペクタペインでシンボルを詳しくインスペクトするには

インスペクタペインでシンボルをダブルクリックする

シンボルを選択すると，詳細ペインの前の内容がインスペクタペインに移り，選択したシンボルの宣言が詳細ペインに新しく一覧表示される。表示されたシンボルをインスペクトできる

コード内でインスペクト中のシンボルを表示するには，次のどちらかを実行します。

参照するシンボルを選択し，Ctrl+Enter を押す。コードエディタがアクティブウィンドウになり，カーソルが参照位置に置かれる

参照するシンボルを選択し，スペースキーを押すと強調表示中のソースコードがアクティブになる。スペースキーを押した後，アクティブペイン内で矢印を使ってシンボル間を移動でき，ソースコード内のシンボル参照を表示できる。アクティブなユニットで使われていないシンボルが見つかると，このコマンドは使用不可になる

スペースキーを押してもフォーカスはオブジェクトブラウザからコードエディタに移動しない

選択したシンボルが関数または手続きの場合，コードをインスペクトするとルーチンの実現部宣言が表示されます。選択したシンボルが定数，プロパティ，変数，型の場合，コードをインスペクトするとシンボルの宣言が表示されます。


参照00088

オブジェクトブラウザの有効化

オブジェクトブラウザウィンドウ

オブジェクトブラウザのキーボードショートカット

ブラウザでのシンボルの検索

フィルタの設定


オブジェクトブラウザでのシンボルの検索
オブジェクトブラウザでのシンボルの検索00089

参照

オブジェクトブラウザはインスペクタペインと詳細ペインの両方でインクリメンタルサーチを行います。つまり，あるルーチンを検索したい場合，ルーチン名を入力すると，入力した名前に最も近いシンボルにオブジェクトブラウザのフォーカスが移動します。

入力した文字はフィルタボタンと［ヒストリ］ボタンの間に表示されます。現在の検索を取り消すには Esc を押します。

メモ:	オブジェクトブラウザはアクティブなペイン内のシンボルと一致しないインクリメンタルサーチ文字は受け付けません。

インクリメンタルサーチの文字をクリアするには

Esc を押す

次に一致するものを検索するには

Ctrl+N を押す


参照00090

シンボルの参照

オブジェクトブラウザの有効化

オブジェクトブラウザウィンドウ

オブジェクトブラウザのキーボードショートカット

フィルタの設定


継承ツリー
継承ツリー00091

参照

オブジェクトブラウザでオブジェクトを参照中は，インスペクタペインに継承ツリーが表示されます。継承ツリーとは，アプリケーションで使うすべてのオブジェクトの上位/下位関係の詳細を示すアウトラインです。ツリーの枝によって相互につながるオブジェクトは，共通の基本オブジェクトを継承しています。

継承ツリーは詳細ペインの［Inheritance］ページでも使われます。

継承ツリーの各オブジェクトノードにはアウトラインインジケータがあります。アウトラインインジケータはそのノードが展開可能かどうかを示します。

インジケータ	説明

    	ツリーのノードは折りたたまれ，継承オブジェクトは一覧表示されない

    	ツリーのノードは展開され，継承オブジェクトが一覧表示される

    	このオブジェクトを継承するオブジェクトは存在しない

継承ツリーのノードを展開または折りたたむには

ノードの左のアウトラインインジケータをクリックする


参照00092

オブジェクトブラウザウィンドウ


オブジェクトブラウザのキーボードショートカット
オブジェクトブラウザのキーボードショートカット00093

オブジェクトブラウザ内の移動には次のキーを使います。

キー	動作

↑	1 シンボル上に移動する

↓	1 シンボル下に移動する

Ctrl+↑	選択したシンボルを変更せずに現在のペインを上にスクロールする

Ctrl+↓	選択したシンボルを変更せずに現在のペインを下にスクロールする

Ctrl+PgUp	スクロールせずに現在のペインの最上部に移動する

Ctrl+PgDown	スクロールせずに現在のペインの最下部に移動する

Home	現在のペインの最上部に移動する

End	現在のペインの最下部に移動する

Ctrl+Enter	選択したシンボルの実現部または宣言部にフォーカスを設定する

スペースキー	オブジェクトブラウザを閉じたりフォーカスを移動したりせずに，選択したシンボルのソースコードを強調表示する

Enter	現在選択しているシンボルを参照する

+	現在のノードを展開する

-	現在のノードを折りたたむ

*	ツリー全体を展開する

PgUp	現在のペインで 1 画面上に移動する

PgDn	現在のペインで 1 画面下に移動する

Esc	インクリメンタルサーチを取り消す

Ctrl+N	インクリメンタルサーチで次の一致を検索する

Tab	インスペクタペインと詳細ペインの間を移動する

次のキーボードコマンドは，オブジェクトブラウザでフィルタの設定と表示の変更を行うショートカットです。

キー	動作

Ctrl+C	Constants フィルタを切り替える

Ctrl+F	Functions and Procedures フィルタを切り替える

Ctrl+T	Types フィルタを切り替える

Ctrl+V	Variables フィルタを切り替える

Ctrl+P	Properties フィルタを切り替える

Ctrl+D	Inherited フィルタを切り替える

Ctrl+A	Virtual フィルタを切り替える

Ctrl+1	Private フィルタを切り替える

Ctrl+2	Protected フィルタを切り替える

Ctrl+3	Public フィルタを切り替える

Ctrl+4	Published フィルタを切り替える

Ctrl+B	前に戻る

Ctrl+L	オブジェクトブラウザのヒストリリストを開く

Ctrl+O	オブジェクト表示に切り替える

Ctrl+U	ユニット表示に切り替える

Ctrl+G	グローバルシンボル表示に切り替える

Ctrl+Y	シンボル表示に切り替える

Ctrl+S	詳細ペインの［Scope］ページに切り替える

Ctrl+I	詳細ペインの［Inheritance］ページに切り替える

Ctrl+R	詳細ペインの［Reference］ページに切り替える


フィルタの設定
フィルタの設定00094

参照

オブジェクトブラウザを使って特定のシンボルを表示するようフィルタをかけることができます。たとえば，現在選択しているオブジェクトの変数だけを表示するよう選択できます。

設定可能なフィルタの一覧を次に示します。

定数

関数または手続き

型

変数

プロパティ

継承

仮想

プライベート

プロテクト

パブリック

パブリッシュ

フィルタを設定するには

次のいずれかの操作をします。

フィルタの対応ボタンをクリックする

［環境の設定］ダイアログボックスの［Browser] ページでシンボルフィルタを選択する

フィルタのキーボードショートカットを押す

メモ:	インスペクタペインまたは詳細ペインでシンボルの横にあるグリフは，シンボルの型を識別します。場合によっては，シンボルの横に複数のグリフが表示されることもあります。2 番目の文字はシンボルをさらに詳しく説明し，シンボルの型を識別する文字の右に表示されます。


参照00095

オブジェクトブラウザウィンドウ

シンボルの参照

オブジェクトブラウザのキーボードショートカット

ブラウザでのシンボルの検索


オブジェクトブラウザスピードメニュー
オブジェクトブラウザスピードメニュー00096

参照	スピードメニュー

オブジェクトブラウザスピードメニューを使うと，各種のシンボルをすばやく参照したり，参照中のシンボルの表示を変更したりできます。

オブジェクトブラウザスピードメニューにアクセスするには

オブジェクトブラウザウィンドウ内のどこかで右クリックする

Alt+F10 を押す

オブジェクトブラウザスピードメニューには次の項目があります。

オブジェクト(O)	アプリケーション内のすべてのオブジェクトに関する継承ツリーを表示します。

ユニット(U)	現在のプロジェクト内のユニットを表示します。

グローバルシンボル(G)	プロジェクト全体のグローバルシンボルを表示します。

シンボル(Y)	［シンボルを調べる］ダイアログボックスを開きます。

厳密な名前で表示(Q)	定義されているユニット名を付けてシンボルを表示します。

シンボル名でソート(S)	シンボルを名前のアルファベット順にソートします。

ヒント表示(H)	フィルタボタンのヘルプヒントの表示を切り替えます。

ステータスライン(I)	ステータスラインの表示を切り替えます。


参照00097

オブジェクトブラウザウィンドウ


オブジェクト(O) (オブジェクトズラウザスピードメニュー)
オブジェクト(O) (オブジェクトズラウザスピードメニュー)00098

オブジェクトブラウザスピードメニューで［オブジェクト(O)］を選択すると，インスペクタペインにアプリケーション内のすべてのオブジェクトが表示されます。これらのオブジェクトは親子関係が示されるよう縦の継承ツリーとして配置されます。


ユニット(U) (オブジェクトズラウザスピードメニュー)
ユニット(U) (オブジェクトズラウザスピードメニュー)00099

オブジェクトブラウザスピードメニューで［ユニット(U)］を選択すると，インスペクタペインにアプリケーションで使うすべてのユニットが一覧表示されます。


グローバルシンボル(G) (オブジェクトブラウザスピードメニュー)
グローバルシンボル(G) (オブジェクトブラウザスピードメニュー)00100

オブジェクトブラウザスピードメニューで［グローバルシンボル(G)］を選択すると，インスペクタペインにアプリケーションで使うユニット内で宣言されたすべてのグローバル情報が表示されます。


シンボル(Y) (オブジェクトブラウザスピードメニュー)
シンボル(Y) (オブジェクトブラウザスピードメニュー)00101

オブジェクトブラウザスピードメニューで［シンボル(Y)］を選択すると［シンボルを調べる］ダイアログボックスが開き，参照するシンボルを指定できます。

［シンボルを調べる］ダイアログボックス

このダイアログボックスは特定のシンボルを参照するために使います。

特定のシンボルを参照するには，次のどちらかを実行します。

編集ボックスにシンボル名を入力し，［OK］をクリックする

↓をクリックして前に入力したシンボルのリストからシンボルを選択し，［OK］をクリックする
矢印キーを使ってリストボックス内の移動もできる

［OK］をクリックすると，インスペクタペインにシンボルが表示され，詳細ペインにローカル情報が表示されます。

さらに，シンボルを定義したソースコードに移動したり，シンボル宣言をインスペクトしたりできます。コード内のシンボルの参照についての詳細はシンボルの参照を参照してください。


厳密な名前で表示(G) (オブジェクトブラウザスピードメニュー)
厳密な名前で表示(Q) (オブジェクトブラウザスピードメニュー)00102

オブジェクトブラウザスピードメニューで［厳密な名前で表示(Q)］を選択すると，シンボルの限定識別子が表示されます。このオプションがオフの場合は，シンボル名だけが表示されます。

このオプションは［環境の設定］ダイアログボックスの［Browser］ページを使って設定できます。


シンボル名でソート(S) (オブジェクトブラウザスピードメニュー)
シンボル名でソート(S) (オブジェクトブラウザスピードメニュー)00103

オブジェクトブラウザスピードメニューで［シンボル名でソート(S)］を選択すると，名前のアルファベット順にシンボルが表示されます。このオプションがオフの場合は，シンボルが宣言順にソートされます。

このオプションは［環境の設定］ダイアログボックスの［Browser］ページを使って設定できます。


ステータスライン(I) (オブジェクトブラウザスピードメニュー)
ステータスライン(I) (オブジェクトブラウザスピードメニュー)00104

オブジェクトブラウザスピードメニューで［ステータスライン(I)］を選択すると，ステータスライン の表示が切り替わります。


コンポーネントパレットの概要
コンポーネントパレットの概要 00105

参照

コンポーネントはすべての Delphi アプリケーションの基礎構築ブロックであり，Delphi ビジュアルコンポーネントライブラリの基本要素です。コンポーネントパレットの各ページタブはアプリケーションインターフェースの設計に使うコンポーネントを表すアイコングループを表示します。

コンポーネントにはビジュアルコンポーネントと非ビジュアルコンポーネントがあります。コンポーネントごとにアプリケーションの制御に使う属性を指定します。属性にはプロパティ，イベント，メソッドがあります。

コンポーネントパレットとスピードバーの間にある分割線をドラッグすれば，コンポーネントパレットの水平方向のサイズを変更できます。

コンポーネントパレットにはヘルプヒントが表示されます。カーソルをボタンの上に移動したまま 1 秒以上経過するとそのボタンの名前と簡単な説明がポップアップウィンドウ内にヘルプヒントとして表示されます。ヘルプヒントを使うには，コンポーネントパレットのスピードメニューで［ヒント表示(S)］を選択します。

コンポーネントとその機能については次の各ぺージを参照してください。

標準コンポーネント (Standard)	標準の Windows コンポーネント

追加コンポーネント (Additional)	カスタマイズしたコンポーネント

Windows 95 コンポーネント (Win95)	Windows 95 のコモンコンポーネント

データアクセスコンポーネント (Data Access)
データベースアクセスコンポーネント

データコントロールコンポーネント (Data Controls)
データベース対応のコントロール

Windows 3.1 コンポーネント (Win 3.1)	Windows 3.1 コンポーネント

システムコンポーネント (System)	システムコンポーネント

メモ:	［VBX］ページと［Samples］ページはコンポーネントのサンプルです。［Samples］ページ上のコンポーネントのソースコードはデフォルトインストールの DELPHI 2.0\SOURCE\SAMPLES ディレクトリにあります。


参照00106

ライブラリコンポーネントの追加と削除

コンポーネントの基本

コンポーネントパレットスピードメニュー

コンポーネントパレットのカスタマイズ

イベントの処理

コンポーネントの処理

ユーザーイベントへの応答

プロパティの設定


Standard ページのコンポーネント
Standard ページのコンポーネント00107

参照

コンポーネントパレットの［Standard］ページのコンポーネントは Delphi アプリケーションで Windows の標準のコントロール要素を使えるようにします。

次の図に標準コンポーネントを示します。各コンポーネントについての詳細はそのコンポーネントをクリックして参照してください。


参照00108

コンポーネントパレットの概要

追加コンポーネント

Windows 95 コンポーネント

データアクセスコンポーネント

データコントロールコンポーネント

ダイアログコンポーネント

Windows 3.1 コンポーネント

システムコンポーネント


MainMenu コンポーネント00109

フォームのメニューを作成します。

詳細は次のトピックを参照してください。

MainMenu コンポーネントの使い方

TMainMenu リファレンス


PopupMenu コンポーネント00110

フォームのポップアップメニューを作成します。

詳細は次のトピックを参照してください。

PopupMenu コンポーネントの使い方

TPopupMenu リファレンス


Label コンポーネント00111

選択できない文字列 (タイトルなど) を表示します。

詳細は次の各トピックを参照してください。

Label コンポーネントの使い方

TLabel リファレンス


Edit コンポーネント00112

1 行のみのデータを入力または変更できる編集領域を表示します。

詳細は次の各トピックを参照してください。

Edit コンポーネントの使い方

TEdit リファレンス


Memo コンポーネント00113

複数行のデータを入力または変更できる編集領域を表示します。

詳細は次の各トピックを参照してください。

Memo コンポーネントの使い方

TMemo リファレンス


Button コンポーネント00114

押しボタンコントロールを作成します。アクションを選択するときに使われます。

詳細は次の各トピックを参照してください。

Button コンポーネントの使い方

TButton リファレンス


CheckBox コンポーネント00115

Yes/No または True/False の切り替えができるオプションを表示します。チェックボックスを使うと互いに排他的でない複数の選択項目を同時に表示でき，その中から複数のチェックボックスを選択できます。

詳細は次の各トピックを参照してください。

CheckBox コンポーネントの使い方

TCheckBox リファレンス


RadioButton コンポーネント00116

Yes/No または True/False の切り替えができるオプションを表示します。ラジオボタンを使うと互いに排他的な複数の選択項目を同時に表示でき，その中から 1 つのラジオボタンを選択できます。

詳細は次の各トピックを参照してください。

RadioButton コンポーネントの使い方

TRadioButton リファレンス


ListBox コンポーネント00117

スクロールできる選択肢のリストを表示します。

詳細は次の各トピックを参照してください。

ListBox コンポーネントの使い方

TListBox リファレンス


ComboBox コンポーネント00118

リストボックスと編集ボックスに選択肢リストを表示します。編集ボックス領域にデータを入力することもリストボックス領域から項目を選択することもできます。

詳細は次の各トピックを参照してください。

ComboBox コンポーネントの使い方

TComboBox リファレンス


ScrollBar コンポーネント00119

リストまたはフォームの表示領域を変更できます。スクロールバーを使って指定した分ずつ移動することもできます。

詳細は次の各トピックを参照してください。

ScrollBar コンポーネントの使い方

TScrollBar リファレンス


GroupBox コンポーネント00120

関連のあるオプションをフォーム上で 1 つにまとめるコンテナを作成します。

詳細は次の各トピックを参照してください。

GroupBox コンポーネントの使い方

TGroupBox リファレンス


Radio Group コンポーネント00121

フォーム上にラジオボタンのグループボックスを作成します。

詳細は次の各トピックを参照してください。

RadioGroup コンポーネントの使い方

TRadioGroup リファレンス


Panel コンポーネント00122

フォーム上に他のコンポーネントを入れるパネルを作成します。パネルを使うとツールバーやステータスラインを作成できます。

詳細は次の各トピックを参照してください。

Panel コンポーネントの使い方

TPanel リファレンス


ScrollBox コンポーネント00123

必要に応じて自動的にスクロールバーを表示するサイズ変更可能なコンテナを作成します。

詳細は次の各トピックを参照してください。

ScrollBox コンポーネントの使い方

TScrollBox リファレンス


Additional ページのコンポーネント
Additional ページのコンポーネント00124

参照

コンポーネントパレットの［Additional］ページのコンポーネントは Delphi アプリケーションで特殊な Windows コントロール要素を使えるようにします。

次の図に追加コンポーネントを示します。各コンポーネントについての詳細はそのコンポーネントをクリックして参照してください。


参照00125

コンポーネントパレットの概要

標準コンポーネント

追加コンポーネント

Windows 95 コンポーネント

データアクセスコンポーネント

データコントロールコンポーネント

ダイアログコンポーネント

システムコンポーネント


BitBtn コンポーネント00126

ビットマップを表示できるボタンコンポーネントを作成します。

詳細は次の各トピックを参照してください。

BitBtn コンポーネントの使い方

TBitBtn リファレンス


SpeedButton コンポーネント00127

キャプションではなくグリフを表示できるボタンを作成します。スピードボタンはパネル内で 1 つにまとめてツールバーを作成することがあります。

詳細は次の各トピックを参照してください。

SpeedButton コンポーネントの使い方

TSpeedButton リファレンス


MaskEdit コンポーネント00128

Edit コンポーネントと似ていますが，MaskEdit コンポーネントではデータ入力と表示の形式を指定できます。

詳細は次の各トピックを参照してください。

MaskEdit コンポーネントの使い方

TMaskEdit リファレンス


StringGrid コンポーネント00129

文字列データを行と列で表示するのに使うグリッドを作成します。

詳細は次の各トピックを参照してください。

StringGrid コンポーネントの使い方

TStringGrid リファレンス


DrawGrid コンポーネント00130

データを行と列で表示するのに使うグリッドを作成します。

詳細は次の各トピックを参照してください。

DrawGrid コンポーネントの使い方

TDrawGrid リファレンス


Image コンポーネント00131

ビットマップ，アイコン，メタファイルを表示します。

詳細は次の各トピックを参照してください。

Image コンポーネントの使い方

TImage リファレンス


PaintBox コンポーネント00132

フォーム上にアプリケーションのペイント境界として四角形の領域を指定します。

詳細は次の各トピックを参照してください。

PaintBox コンポーネントの使い方

TPaintBox リファレンス


Shape コンポーネント00133

楕円または円，長方形または正方形，角の丸い長方形または正方形などの幾何学図形を描画します。

詳細は次の各トピックを参照してください。

Shape コンポーネントの使い方

TShape リファレンス


Bevel コンポーネント00134

3 次元の輪郭のはっきりした線またはボックスを描画します。

詳細は次の各トピックを参照してください。

Bevel コンポーネントの使い方

TBevel リファレンス


Windows 95 コンポーネント
Windows 95 ページのコンポーネント00135

参照

コンポーネントパレットの Win95 ページのコンポーネントを使うと，Delphi アプリケーションで利用できる Win95 インターフェースのコモンコントロールを使用できます。

次の図は Window 95 コンポーネントを示します。各コンポーネントについての詳細は各コンポーネントをクリックしてください。


参照00136

コンポーネントパレットの概要

追加コンポーネント

データアクセスコンポーネント

データコントロールコンポーネント

Windows 3.1 コンポーネント

ダイアログコンポーネント

システムコンポーネント


TabControl コンポーネント00137

タブコントロールは，本の見出しに類似した使われ方をします。このコンポーネントの機能は TTabSet と似ています。複数のページを持つダイアログボックスを作成するには TPageContorol を使います。単にタブセットを使うだけの場合は TTabControl を使います。

詳細は次のトピックを参照してください。

TTabControl リファレンス


PageControl コンポーネント00138

ぺージセットは，複数のページを持つダイアログボックスを作成するために使います。タブコントロールは，本の見出しに類似した使われ方をします。このコントロールを使って，同じウィンドウ内の情報を区分けする複数の論理ページまたはセクションを定義します。

詳細は次のトピックを参照してください。

TPageControl リファレンス


TreeView コンポーネント00139

ツリービューコンポーネントを使うと，複数のオブジェクトのセットをその論理的な階層関係に基づいてインデントの付いたアウトラインとして制御し表示することができます。このコントロールには，アウトラインの展開と折りたたみを行うボタンも含まれています。ツリービューコンポーネントを使ってコンテナなどの階層を構成する要素のセットの関係を表示することができます。

詳細は次のトピックを参照してください。

TTreeView リファレンス


ListView コンポーネント00140

ListView コンポーネントを使うと，リストを表示することができます。リストビューはさまざまなビュー内のデータを表示します。

詳細は次のトピックを参照してください。

TListView リファレンス


ImageList コンポーネント00141

イメージリストは同じサイズのイメージのコレクションで，各イメージはインデックスを使って参照します。イメージリストを使うとアイコンやビットマップの大規模な集合を効率よく管理できます。イメージリスト中のすべてのイメージは，ひとつの横長のスクリーンデバイス形式のビットマップに保持されます。イメージリストには，イメージを (アイコンの場合のように) 透過モードで描画するためのマスクに使うビットマップを入れることもできます。

詳細は次のトピックを参照してください。

TImageList リファレンス


HeaderControl コンポーネント00142

ヘッダーコントロールを使うと，テキストや数値の列の上に付けるヘッダー (見出し) を表示することができます。コントロールを複数に分割することで，複数の列のヘッダーを作成できます。ヘッダーのタイトルの要素は，左，右，中央に揃えることができます。ヘッダーの各部分は，ユーザーがクリックしたときに特定の機能を果たすコマンドボタンとして動作するように設定できます。

詳細は次のトピックを参照してください。

THeaderControl リファレンス


RichEdit コンポーネント00143

リッチテキスト形式メモコントロールです。デフォルトではリッチテキストエディタは，フォントプロパティ (フォント名，サイズ，色，太字，斜体など)，形式プロパティ (位置揃え，タブ，インデント，番号付けなど)，および選択しているテキストの自動ドラッグアンドドロップをサポートしています。

詳細は次のトピックを参照してください。

TRichEdit リファレンス


StatusBar コンポーネント00144

画面最下部にある動作の状態を表示する領域です。

詳細は次のトピックを参照してください。

TStatusBar リファレンス


TrackBar コンポーネント00145

トラックバーコンポーネントは，調節の範囲を定義するバーとインジケータから構成されます。バーとインジケータはどちらもコントロールの現在値を表し，これらを使ってコントロールの値を変更できます。

トラックバーはたくさんのオプションをサポートしています。トラックバーの方向を垂直または水平に設定できるほか，スライドインジケータとスライドバーの長さと高さおよびトラックバーの増分値の設定，またコントロールに目盛を表示するかどうかの指定が行えます。

詳細は次のトピックを参照してください。

TTrackBar リファレンス


ProgressBar コンポーネント00146

プログレスバーコンポーネントは，左から右に「塗りつぶされて」ていく長方形のバーで構成されます。Windows 95 でこのコンポーネントの例としてはエクスプローラでのファイルのコピーがあります。プログレスバーコントロールは，時間のかかる操作やバックグラウンドプロセスのフィードバックとして使います。このコントロールは，プロセスの進行状況をユーザーに目に見える形で伝えます。

詳細は次のトピックを参照してください。

TProgressBar リファレンス


UpDown コンポーネント00147

値の増減を行う上下の矢印ボタンです。

詳細は次のトピックを参照してください。

TUpDown リファレンス


HotKey コンポーネント00148

任意のコンポーネントにホットキーを結び付けます。

詳細は次のトピックを参照してください。

THotKey リファレンス


Data Access ページのコンポーネント
Data Access ページのコンポーネント00149

参照

コンポーネントパレットの［Data Access］ページのコンポーネントは Delphi アプリケーションでデータベースアクセス要素を使えるようにします。

次の図にデータアクセスコンポーネントを示します。各コンポーネントについての詳細はそのコンポーネントをクリックして参照してください。


参照00150

コンポーネントパレットの概要

標準コンポーネント

追加コンポーネント

Windows 95 コンポーネント

データコントロールコンポーネント

Windows 3.1 コンポーネント

ダイアログコンポーネント

システムコンポーネント


DataSource コンポーネント00151

TTable, TQuery, TStoredProc コンポーネントとデータベース対応のコンポーネント (TDBGrid など) を結び付けるために使います。

詳細は次の各トピックを参照してください。

DataSource コンポーネントの使い方

TDataSource リファレンス


Table コンポーネント00152

BDE を介して物理データベーステーブルからデータを取り出し，TDataSource コンポーネントを使って 1 つまたは複数のデータベース対応のコンポーネントに送ります。または，コンポーネントから受け取ったデータを BDE を介して物理データベースに送ります。

詳細は次の各トピックを参照してください。

Table コンポーネントの使い方

TTable リファレンス


Query コンポーネント00153

SQL 文を使って BDE を介して物理データベーステーブルからデータを取り出し，TDataSource を介して 1 つまたは複数のデータベース対応のコンポーネントにそのデータを送ります。BDE を介してコンポーネントから物理データベースにデータを送る場合も SQL 文を使います。

詳細は次の各トピックを参照してください。

Query コンポーネントの使い方

TQuery リファレンス


StoredProc コンポーネント00154

サーバーのストアドプロシージャにアプリケーションがアクセスできるようにします。コンポーネントから受け取ったデータを BDE を介して物理データベースに送ります。

詳細は次の各トピックを参照してください。

StoredProc コンポーネントの使い方

TStoredProc リファレンス


Database コンポーネント00155

データベース (特にユーザーのログインとパスワードが必要なリモートデータベース) に固定的な接続を設定します。

詳細は次の各トピックを参照してください。

Database コンポーネントの使い方

TDatabase リファレンス


Session コンポーネント00156

TSession コンポーネントは，TDatabase コンポーネントのグループに結び付けることで，そのグループを全体的に制御することができます。Delphi のデータベースアプリケーションではデフォルトの TSession コンポーネントが自動的に作成されます。明示的に TSession コンポーネントを使う必要があるのは，マルチスレッドのデータベースアプリケーションを開発する場合だけです。各データベーススレッドごとに 1 つずつセッションコンポーネントが必要です。

詳細は次のトピックを参照してください。

TSession リファレンス


BatchMove コンポーネント00157

テーブル構造またはそのデータをコピーします。テーブル全体をデータベース間で移動するのに使えます。

詳細は次の各トピックを参照してください。

BatchMove コンポーネントの使い方

TBatchMove リファレンス


Update SQL00158

TUpdateSQL コンポーネントを使うと，読み出し専用データセットに対する更新を「キャッシュ」することができます。また，TUpdateSQL コンポーネントが提供する問い合わせとともに使えば，その基になるデータセットを更新することができ，実質的に読み出し専用のデータセットを変更することができるようになります。データセットの UpdateObject プロパティを設定することによって，TUpdateSQL コンポーネントをデータセットに結び付けます。キャッシュされている更新を適用するときに，データセットは自動的に TUpdateSQL コンポーネントを使います。

TUpdateSQL リファレンス


Report component00159


Data Controls ページのコンポーネント
Data Controls ページのコンポーネント00160

参照

コンポーネントパレットの［Data Controls］ページのコンポーネントは Delphi アプリケーションでデータベースコントロール要素を使えるようにします。

次の図にデータコントロールコンポーネントを示します。各コンポーネントについての詳細はそのコンポーネントをクリックして参照してください。


参照00161

コンポーネントパレットの概要

標準コンポーネント

追加コンポーネント

Windows 95 コンポーネント

Windows 3.1 コンポーネント

データアクセスコンポーネント

ダイアログコンポーネント

システムコンポーネント


DBLookupListBox コンポーネント00162

DBLookupListBox はデータベース対応のリストボックスで，次の 2 つのソースのどちらかから表示項目のリストを派生させます。

•	データセットに対して定義された参照フィールド

•	二次データソース，データフィールド，およびキー

いずれの場合でも，有効な値を設定するための限定された選択肢のリストがユーザーに提供されます。ユーザーがリスト項目を 1 つ選ぶと，基となるデータセット内の対応するフィールド値が変更されます。

参照フィールドに対するリストの指定

参照フィールドを使うリストボックス項目を指定するためには，コントロールをリンクするデータセットではすでに参照フィールドが定義されていなければなりません。データセットの参照フィールドの指定についての詳細は，『データベースアプリケーション開発者ガイド』の第 7 章「フィールドの使い方」の「参照フィールドの定義」を参照してください。

詳細は次のトピックを参照してください。

TDBLookupListBox リファレンス


DBLookupComboBox コンポーネント00163

DBLookupComboBox はデータベース対応のコンボボックスで，次の 2 つのソースのどちらかから表示項目のリストを派生させます。

•	データセットに対して定義された参照フィールド

•	二次データソース，データフィールド，およびキー

いずれの場合でも，有効な値を設定するための限定された選択肢のリストがユーザーに提供されます。ユーザーがリスト項目を 1 つ選ぶと，基となるデータセット内の対応するフィールド値が変更されます。

参照フィールドに対するリストの指定

参照フィールドを使うリストボックス項目を指定するためには，コントロールをリンクするデータセットではすでに参照フィールドが定義されていなければなりません。データセットの参照フィールドの指定についての詳細は，『データベースアプリケーション開発者ガイド』の第 7 章「フィールドの使い方」の「参照フィールドの定義」を参照してください。

詳細は次のトピックを参照してください。

TDBLookupComBox リファレンス


DBCtrlGrid コンポーネント00164

DBCtrlGrid コントロールは，複数のレコードの複数のフィールドを表グリッド形式で表示します。グリッドの各セルには 1 つのレコードの複数のフィールドが表示されます。

詳細は次のトピックを参照してください。

TDBCtrlGrid リファレンス


DBGrid コンポーネント00165

データベース対応のカスタムグリッドです。表計算ワークシートに似た表形式でデータを表示または編集できます。列の可視性，表示形式，順序などを指定するには TField プロパティを活用してください。このプロパティはフィールドエディタで設定できます。

詳細は次の各トピックを参照してください。

DBGrid コンポーネントの使い方

TDBGrid リファレンス


DBNavigator コンポーネント00166

データベース対応のレコード操作ボタンです。テーブルの現在のレコードポインタを前後に移動できます。テーブルを Insert 状態，Edit 状態，Browse 状態のいずれかにしたり，新しいレコードまたは変更したレコードを登録したり，更新したデータを取り出して表示を更新したりもできます。

詳細は次の各トピックを参照してください。

DBNavigator コンポーネントの使い方

TDBNavigator リファレンス


DBText コンポーネント00167

データベース対応のラベルです。カレントレコードのフィールド値を表示します。

詳細は次の各トピックを参照してください。

DBText コンポーネントの使い方

TDBText リファレンス


DBEdit コンポーネント00168

データベース対応の編集ボックスです。カレントレコードのフィールドを表示または編集します。

詳細は次の各トピックを参照してください。

DBEdit コンポーネントの使い方

TDBEdit リファレンス


DBMemo コンポーネント00169

データベース対応のメモボックスです。カレントレコードの BLOB テキストを表示または編集します。

詳細は次の各トピックを参照してください。

DBMemo コンポーネントの使い方

TDBMemo リファレンス


DBImage コンポーネント00170

データベース対応のイメージボックスです。カレントレコードのビットマップ BLOB  イメージの表示，切り取り，貼り付けをします。

詳細は次の各トピックを参照してください。

DBImage コンポーネントの使い方

TDBImage リファレンス


DBListBox コンポーネント00171

データベース対応のリストボックスです。テーブルの列の値をスクロール可能なリスト形式で表示します。

詳細は次の各トピックを参照してください。

DBListBox コンポーネントの使い方

TDBListBox リファレンス


DBComboBox コンポーネント00172

データベース対応のコンボボックスです。テーブルの列の値をスクロール可能なリスト形式で表示したり，編集したりできます。

詳細は次の各トピックを参照してください。

DBComboBox コンポーネントの使い方

TDBComboBox リファレンス


DBCheckBox コンポーネント00173

データベース対応のチェックボックスです。カレントレコードの論理データフィールドを表示または編集できます。

詳細は次の各トピックを参照してください。

DBCheckBox コンポーネントの使い方

TDBCheckBox リファレンス


DBRadioGroup コンポーネント00174

データベース対応のラジオボタングループです。列の値を表示または設定します。

詳細は次の各トピックを参照してください。

DBRadioGroup コンポーネントの使い方

TDBRadioGroup リファレンス


Windows 3.1 ページのコンポーネント
Windows 3.1 ページのコンポーネント00175

参照

コンポーネントパレットの Windows 3.1 ページのコンポーネントを使うと，Delphi アプリケーションで利用できる Windows 3.1 のコントロール要素を利用できます。

次の図は Window 3.1 コンポーネントを示します。各コンポーネントについての詳細は各コンポーネントをクリックしてください。


参照00176

コンポーネントパレットの概要

追加コンポーネント

Windows 95 コンポーネント

データアクセスコンポーネント

データコントロールコンポーネント

ダイアログコンポーネント

システムコンポーネント


DBLookupList コンポーネント00177

データベース対応のリストボックスです。実行時に別のテーブルの列で参照した値を表示します。

詳細は次の各トピックを参照してください。

DBLookupList コンポーネントの使い方

TDBLookupList リファレンス


DBLookupCombo コンポーネント00178

データベース対応のコンボボックスです。実行時に別のテーブルの列で参照した値を表示します。

詳細は次の各トピックを参照してください。

DBLookupCombo コンポーネントの使い方

TDBLookupCombo リファレンス


TabSet コンポーネント00179

ノートブック型タブを作成します。Notebook コンポーネントと一緒に使うとページを変更できます。

詳細は次の各トピックを参照してください。

TabSet コンポーネントの使い方

TTabSet リファレンス


Outline コンポーネント00180

各種のアウトライン形式で情報を表示します。

詳細は次の各トピックを参照してください。

Outline コンポーネントの使い方

TOutline リファレンス


Header コンポーネント00181

データを表示するための領域を作成します。表示するデータ量に合わせて各セクションのサイズを変更できます。

詳細は次の各トピックを参照してください。

Header コンポーネントの使い方

THeader リファレンス


TabbedNotebook コンポーネント00182

各ページが固有のコントロールセットを持つ複数のページが入るコンポーネントを作成します。ぺージを選択するにはページの最上部のタブをクリックします。

詳細は次の各トピックを参照してください。

TabbedNotebook コンポーネントの使い方

TTabbedNotebook リファレンス


Notebook コンポーネント00183

複数ぺージが入るコンポーネントを作成します。TabSet コンポーネントと一緒に使うとページを変更できます。

詳細は次の各トピックを参照してください。

Notebook コンポーネントの使い方

TNotebook リファレンス


参照00184

コンポーネントパレットの概要

標準コンポーネント

追加コンポーネント

データアクセスコンポーネント

データコントロールコンポーネント

システムコンポーネント

ダイアログボックスの作成


Dialogs ページのコンポーネント
Dialogs ページのコンポーネント00185

参照

コンポーネントパレットの［Dialogs］ページのコンポーネントは Delphi アプリケーションで Windows のコモンダイアログボックスを使えるようにします。コモンダイアログボックスにより一貫したファイル操作 (ファイルのオープン，保存，印刷など) ができます。

次の図にダイアログコンポーネントを示します。各コンポーネントについての詳細はそのコンポーネントをクリックして参照してください。

コモンダイアログボックスを開くにはその Execute メソッドを呼び出します。Execute は次の論理値のどちらかを返します。

ダイアログボックスを確定するため［OK］を選択すると，True を返す

［キャンセル］を選択するか変更結果を保存しないでダイアログボックスを終了すると，False を返す

コモンダイアログボックスコンポーネント (PrinterSetup コンポーネントを除きます) は必ずオブジェクトインスペクタの Options にプロパティセットを持っています。Options プロパティはコモンダイアログボックスの形式と動作を指定します。Options プロパティを表示するにはオブジェクトインスペクタで［Options］をダブルクリックします。

ダイアログボックスをプログラムで閉じるには CloseDialog メソッドを使う

実行時にダイアログボックスの位置を処理するには Handle, Left, Top, Position の各プロパティを使う


参照00186

コンポーネントパレットの概要

標準コンポーネント

追加コンポーネント

Windows 95 コンポーネント

データアクセスコンポーネント

データコントロールコンポーネント

Windows 3.1 コンポーネント

システムコンポーネント

ダイアログボックスの作成


OpenDialog コンポーネント00187

アプリケーションで Windows のコモンダイアログボックス［ファイルを開く］を使えるようにします。開くファイルの名前をこのダイアログボックスで指定できます。

詳細は次の各トピックを参照してください。

OpenDialog コンポーネントの使い方

TOpenDialog リファレンス


SaveDialog コンポーネント00188

アプリケーションで Windows のコモンダイアログボックス［ファイル名を付けて保存］を使えるようにします。保存するファイルの名前をこのダイアログボックスで指定できます。

詳細は次の各トピックを参照してください。

SaveDialog コンポーネントの使い方

TSaveDialog リファレンス


FontDialog コンポーネント00189

アプリケーションで Windows のコモンダイアログボックス［フォントの指定］を使えるようにします。フォント，サイズ，スタイルをこのダイアログボックスで指定できます。

詳細は次の各トピックを参照してください。

FontDialog コンポーネントの使い方

TFontDialog リファレンス


ColorDialog コンポーネント00190

アプリケーションで Windows コモンダイアログボックス［色の設定］を使えるようにします。色をこのダイアログボックスで指定できます。

詳細は次の各トピックを参照してください。

ColorDialog コンポーネントの使い方

TColorDialog リファレンス


PrintDialog コンポーネント00191

アプリケーションで Windows のコモンダイアログボックス［印刷］を使えるようにします。印刷明細 (印刷するページ範囲や印刷部数など) をこのダイアログボックスで指定できます。

詳細は次の各トピックを参照してください。

PrintDialog コンポーネントの使い方

TPrintDialog リファレンス


PrinterSetupDialog コンポーネント00192

アプリケーションで Windows コモンダイアログボックス［プリンタの設定］を使えるようにします。このダイアログボックスでプリンタの変更と設定ができます。

詳細は次の各トピックを参照してください。

PrinterSetupDialog コンポーネントの使い方

TPrinterSetupDialog リファレンス


FindDialog コンポーネント00193

アプリケーションで Windows コモンダイアログボックス［検索］を使えるようにします。このダイアログボックスで検索文字列を指定できます。

詳細は次の各トピックを参照してください。

FindDialog コンポーネントの使い方

TFindDialog リファレンス


ReplaceDialog コンポーネント00194

アプリケーションで Windows コモンダイアログボックス［置換］を使えるようにします。このダイアログボックスで検索文字列と置換文字列を指定できます。

詳細は次の各トピックを参照してください。

ReplaceDialog コンポーネントの使い方

TReplaceDialog リファレンス


System ページのコンポーネント
System ページのコンポーネント00195

参照

コンポーネントパレットの［System］ページのコンポーネントは Delphi アプリケーションで特殊システムコントロール要素を使えるようにします。

次の図にシステムコンポーネントを示します。各コンポーネントについての詳細はそのコンポーネントをクリックして参照してください。


参照00196

コンポーネントパレットの概要

標準コンポーネント

追加コンポーネント

Windows 95 コンポーネント

データアクセスコンポーネント

データコントロールコンポーネント

ダイアログコンポーネント

Windows 3.1 コンポーネント

システムコンポーネント


Timer コンポーネント00197

イベントを指定した時間間隔で実行します。これは非ビジュアルコンポーネントです。

詳細は次の各トピックを参照してください。

Timer コンポーネントの使い方

TTimer リファレンス


FileListBox コンポーネント00198

カレントディレクトリのファイルをスクロール可能なリスト形式で表示します。

詳細は次の各トピックを参照してください。

FileListBox コンポーネントの使い方

TFileListBox リファレンス


DirectoryListBox コンポーネント00199

カレントドライブのディレクトリ構造を表示します。ディレクトリリストボックスでディレクトリを変更できます。

詳細は次の各トピックを参照してください。

DirectoryListBox コンポーネントの使い方

TDirectoryListBox リファレンス


DriveComboBox コンポーネント00200

使用可能なドライブをスクロール可能なリスト形式で表示します。

詳細は次の各トピックを参照してください。

DriveComboBox コンポーネントの使い方

TDriveComboBox リファレンス


FilterComboBox コンポーネント00201

特定の条件を満足するファイルだけを表示するためのフィルタつまりマスクを指定します。

詳細は次の各トピックを参照してください。

FilterComboBox コンポーネントの使い方

TFilterComboBox リファレンス


MediaPlayer コンポーネント00202

マルチメディアのビデオと音声のファイルの再生や録画と録音に使う VCR スタイルのコントロールパネルを表示します。

詳細は次の各トピックを参照してください。

MediaPlayer コンポーネントの使い方

TMediaPlayer リファレンス


OleContainer コンポーネント00203

フォームに OLE クライアント領域を作成します。

詳細は次の各トピックを参照してください。

OleContainer コンポーネントの使い方

TOleContainer リファレンス


DDEClientConv コンポーネント00204

DDE サーバーアプリケーションにクライアントを接続します。これは非ビジュアルコンポーネントです。

詳細は次の各トピックを参照してください。

DdeClientConv コンポーネントの使い方

TDdeClientConv リファレンス


DDEClientItem コンポーネント00205

DDE 対話時に転送する DDE クライアントデータを指定します。これは非ビジュアルコンポーネントです。

詳細は次の各トピックを参照してください。

DdeClientItem コンポーネントの使い方

TDdeClientItem リファレンス


DDEServerConv コンポーネント00206

DDE クライアントアプリケーションにサーバーを接続します。これは非ビジュアルコンポーネントです。

詳細は次の各トピックを参照してください。

DdeServerConv コンポーネントの使い方

TDdeServerConv リファレンス


DDEServerItem コンポーネント00207

DDE 対話時に転送する DDE サーバーデータを指定します。これは非ビジュアルコンポーネントです。

詳細は次の各トピックを参照してください。

DdeServerItem コンポーネントの使い方

TDdeServerItem リファレンス


コンポーネントパレットのカスタマイズ
コンポーネントパレットのカスタマイズ00208

参照

コンポーネントパレットのレイアウトをカスタマイズするには，［オプション(O)｜環境(E)］で表示される［環境の設定］ダイアログボックスで［Palette］ページを選択します。


カスタマイズしたパレットの保存
カスタマイズしたパレットの保存00209

1.	［環境の設定］ダイアログボックスの ［Preferences］ぺージを開きます。

2.	［自動保存の設定］オプションの［デスクトップ］にチェックマークを付けます。

3.	［OK］をクリックします。


コンポーネントパレットの並べ替え
コンポーネントパレットの並べ替え00210

1.	［環境の設定］ダイアログボックスの［Palette］ページを開きます。

2.	［ページ(P)］リストボックスからページを選択します。

3.	↓または↑をクリックするか，ページを目的の位置までドラッグアンドドロップします。

4.	［OK］をクリックして変更を確定します。


コンポーネントパレット上のコンポーネントの並べ替え
コンポーネントパレット上のコンポーネントの並べ替え00211

1.	［環境の設定］ダイアログボックスの［Palette］ページを開きます。

2.	［コンポーネント(C)］リストボックスでコンポーネントを選択します。

3.	↓または↑をクリックするか，ページを目的の位置までドラッグアンドドロップします。

4.	［OK］をクリックして変更を確定します。


別のコンポーネントパレットページへのコンポーネントの移動
別のコンポーネントパレットページへのコンポーネントの移動00212

1.	［環境の設定］ダイアログボックスの［Palette］ページを開きます。

2.	［コンポーネント(C)］リストボックスからコンポーネントをドラッグし［ページ(P)］リストボックス内のページにドロップます。

3.	［OK］をクリックして変更を確定します。

メモ:	コンポーネントを別のページに移動すると，そのコンポーネントはページの最後の項目として追加されます。


コンポーネントパレットページの変更
コンポーネントパレットページの変更00213

1.	［環境の設定］ダイアログボックスの［Palette］ページを開きます。

2.	［ページ(P)］リストボックスでページを選択します。

3.	［名称変更(R)］ボタンをクリックして［ページの名称変更］ダイアログボックスを開きます。

4.	新しい名前を入力します。

5.	［OK］をクリックして［ページの名称変更］ダイアログボックスを閉じます。

6.	［OK］をクリックして変更を確定します。


コンポーネント名の変更
コンポーネント名の変更 00214

1.	［環境の設定］ダイアログボックスの［Palette］ページを開きます。

2.	［コンポーネント(C)］リストボックスでコンポーネントを選択します。

3.	［名称変更(R)］ボタンをクリックして［ページの名称変更］ダイアログボックスを開きます。

4.	新しい名前を入力します。

5.	［OK］をクリックして［ページの名称変更］ダイアログボックスを閉じます。

6.	［OK］をクリックして変更を確定します。


新しいページの追加
新しいページの追加00215

1.	［環境の設定］ダイアログボックスの［Palette］ページを開きます。

2.	［追加(A)］ボタンをクリックして［ページの追加］ダイアログボックスを開きます。

3.	新しいページの名前を入力します。

4.	［OK］をクリックして［ページの追加］ダイアログボックスを閉じます。

5.	［OK］をクリックして変更を確定します。


ページの削除
ページの削除00216

1.	［環境の設定］ダイアログボックスの［Palette］ページを開きます。

2.	［ページ(P)］リストボックスでページを選択します。

3.	［削除(D)］を押します。

4.	［OK］をクリックして変更を確定します。

メモ:	削除するページにコンポーネントがあってはなりません。


コンポーネントの削除
コンポーネントの削除00217

1.	［環境の設定］ダイアログボックスの［Palette］ページを開きます。

2.	削除するコンポーネントを選択します。

3.	［削除(D)］を押します。

4.	［OK］をクリックして変更を確定します。


参照00218

コンポーネントパレット

コンポーネントライブラリのカスタマイズ

ライブラリコンポーネントの追加

ライブラリコンポーネントの削除


ユーザーイベントへの応答
ユーザーイベントについて00219

参照

イベント駆動型のプログラミングの場合，ユーザーイベントがアプリケーション論理の主要部分になります。ユーザーイベントはグラフィカルユーザーインターフェース (GUI) の要素に対応しています。たとえば，ほとんどのコンポーネントはユーザーがコンポーネントをクリックしたときに応答するように処理を作成できる OnClick イベントを持っています。そうでないイベント (フォームの OnActivate など) はユーザーが発生させるのではなくプログラムコードが発生させます。イベントに応答するように作成したコードをイベントハンドラといいます。

イベントハンドラの作成方法と使い方についてはイベントの処理を参照してください。

各ユーザーイベントの処理方法については次の各トピックを参照してください。

ボタンクリックイベント

キーボードイベント

マウスイベント

ドラッグアンドドロップイベント


参照00220

ユーザーインターフェースの設計

イベントの処理


キーボードイベントへの応答
キーボードイベントについて00221

参照

Delphi にはキー入力をするために 3 つのイベントが用意されています。

OnKeyDown

OnKeyPress

OnKeyUp

これらのイベント用にイベントハンドラを作成して，実行時に入力するキーまたはキーの組み合わせに応答するようにできます。

メモ:	ショートカットキーまたはアクセラレータキー (メニューコマンドで指定するキーなど) を押したときアプリケーションが応答する場合は，イベントハンドラを作成する必要はありません。

キーボードイベントを処理する場合注意すべき点がいくつかあります。詳細は次の各トピックを参照してください。

キーボードイベントの処理順序

キー入力の処理方法

フォームへのキーボードイベントのリダイレクト


参照00222

ユーザーイベントへの応答

アクセラレータキーの指定

キーボードショートカットの指定

TShiftState


キーボードイベントの処理順序
キーボードイベントの処理順序00223

参照	例

キーボードイベントは次のいくつかのレベルで処理されます。

アプリケーションレベル (Application.OnMessage イベントと一緒に)

アプリケーションレベルではキー入力をインターセプトする必要はほとんどない。このレベルを使えることだけ覚えておくこと

ショートカットキーレベル

ショートカットキー (メニュー項目のプロパティとして指定するキーなど) を指定すると，キー入力はフォームがそれを認識する前にインターセプトされる

フォームレベル

フォームにはグローバルなキー入力イベントをプログラムできる KeyPreview プロパティが含まれている

コンポーネントレベル

コンポーネントレベルでキー入力イベントハンドラを作成すると，フォーカスがあるコンポーネントがキー入力をインターセプトする


参照00224

キーボードイベントへの応答

キー入力の処理方法

フォームへのキーボードイベントのリダイレクト


例00225

次のコードはフォームの 2 つのボタンを使って，アプリケーションがキーボードイベントを処理する順序を示します。

初めてプログラムを実行し Alt+Ctrl を押すと，フォームが紫色になります。フォーカスがある Button1 がキー入力を処理するからです。Button1 がキー入力を処理しないように Button1 をクリックするかフォームの KeyPreview をオンに設定するため Button2 をクリックしてから Ctrl+Alt を再度押すと，フォームはアクアマリンになります。フォームがキー入力を処理するからです。

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

 if (shift = ([ssAlt, ssCtrl])) then form1.color := clAqua;

end;

procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

   if (shift = ([ssAlt, ssCtrl])) then form1.color := clPurple;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 button1.enabled := false;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

 Form1.Keypreview := True;

end;


キー入力の処理方法
キー入力の処理方法00226

参照	例

キーを入力すると必ず OnKeyDown イベントと OnKeyUp イベントが生成されます。通常の文字のキーを入力すると OnKeyPress イベントも生成されます。コードがすべてのキー入力を認識する必要はありませんが，キー入力イベントが処理される順番は理解していなくてはなりません。次の例を参照してください。

アプリケーションはイベントをいくつかのレベル (キーボードイベントの処理順序を参照) で認識できます。OnKeyPress は文字を 1 字返します。OnKeyDown と OnKeyUp は最後のキー入力時にコントロールキー (Alt, Ctrl, Shift キーなど) を押したかどうか示すパラメータを返します。

たとえば Shift+D を押すと，OnKeyDown, OnKeyPress, OnKeyUp のキー入力イベントが順に発生します。

KeyDown (Shift)

KeyDown (Shift+D)

KeyPress (D)

KeyUp (Shift+D)

KeyUp

キーをいくつか組み合わせて押すと，OnKeyDown イベントはその前の OnKeyDown のキーを次の OnKeyDown に渡します。これに対して OnKeyPress イベントは最後に押したキーを返すだけです。ただし OnKeyPress は d と D を押したときで異なる文字を返します。OnKeyDown と OnKeyUp の場合は大文字と小文字のアルファベットキーを区別しません。


参照00227

キーボードイベントへの応答

キーボードイベントの処理順序

フォームへのキーボードイベントのリダイレクト


例00228

次のコードはリストボックスを使って，フォームの OnKeyUp, OnKeyDown, OnKeyPress の各キー入力イベントを処理する順序を表示します。押したキーを表示するのに Edit コンポーネントも使います。

メモ:	フォームに［デフォルトに戻す(D)］ボタンと［キャンセル］ボタン (Default プロパティと Cancel プロパティがそれぞれ True に設定されているボタン) を加えると，これらのボタンが存在する場合キー入力 Escape と Enter がどのように処理されるかがわかります。

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

 Listbox1.Items.Add('Edit1.KeyDown'+ShortCutToText(ShortCut(Key, Shift)));

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

   Listbox1.Items.Add('Edit1.KeyPress'+ Key);

end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

 Listbox1.Items.Add('Edit1.KeyUp'+ShortCutToText(ShortCut(Key, Shift)));

end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

  Listbox1.Items.Add('Form1.KeyDown'+ShortCutToText(ShortCut(Key, Shift)));

end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

begin

   Listbox1.Items.Add('Form1.KeyPress'+ Key);

end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

  Listbox1.Items.Add('Form1.KeyUp'+ShortCutToText(ShortCut(Key, Shift)));

end;


OnKeyPress イベントへの応答
OnKeyPress イベントへの応答00229

参照	例

OnKeyPress イベントは 3 つのイベントの中で最も簡単です。つまり入力した文字を 1 字返すだけです。文字は ASCII 文字セットに含まれている文字でなくてはなりません。

OnKeyPress はキーの組み合わせを ASCII 文字 1 字と解釈します。たとえば OnKeyPress は Shift+A の結果 (大文字の A) を認識できますが 2 つのキーを押したことはわかりません。Shift キー以外の組み合わせは認識できません。ファンクションキーや非 ASCII 文字キー (Ctrl, Alt, Ins, Page Down など) も認識できません。

メモ:	フォームの［デフォルトに戻す(D)］ボタンまたは［キャンセル］ボタンは OnKeyPress イベントと OnKeyDown イベントのキー入力 Enter と Escape をインターセプトします (OnKeyDown で Alt と一緒に使う場合を除きます)。


参照00230

キーボードイベントへの応答

キーボードイベントの処理順序

キー入力の処理方法

フォームへのキーボードイベントのリダイレクト


例00231

次のコードはキーボードイベントを処理する OnKeyPress と OnKeyDown のプログラミング方法を示します。

OnKeyPress イベントは Char 型のキーパラメータを含んでいます。どのキーを押したか調べるには，その文字を入力するだけでわかります。

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

begin

 case key of

   'I': Panel1.Caption := 'Shift+I was pressed';

   'c': Panel1.caption := 'c was pressed';

   ' ': Panel1.caption := 'the space bar was pressed';

 end;

end;

OnKeyDown のキーパラメータは Word 型です。どのキーを押したか調べるには同等の仮想キーコードを参照しなくてはなりません。

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

  case key of

   vk_Insert: Panel1.Caption := 'INS';

   vk_Capital: Panel1.caption := 'CAP';

   vk_Numlock: Panel1.caption := 'NumLock';

  end;

end;


OnKeyUp と OnKeyDown のイベントへの応答
OnKeyUp と OnKeyDown のイベントへの応答00232

参照	例

アクティブなコントロールがキーイベントを受け取ったときに Shift, Ctrl, Alt のどれかが一緒に押されていることを認識する場合とファンクションキーなど ASCII 文字以外のキーを処理する場合は，OnKeyDown イベントと OnKeyUp イベントを使います。たとえば F1 キーは英数字を表示していないので OnKeyPress イベントは認識できません。

どちらのキーイベントも押したキーの値を返しますが，OnKeyDown イベントの方が一般的に使われています。キーを押し下げて元に戻す間にバックグラウンド処理を開始する場合は OnKeyUp を使います。キーを押したままにすると，キーから指を離すまで繰り返し OnKeyDown イベントが返されます。指を離すと OnKeyUp イベントを 1 回返します。ゲームなどのプログラムでは，このような特定のキーボード対話が便利です。

メモ:	どのキーを押したか調べるため OnKeyDown または OnKeyUp を使う場合，仮想キーコードを使ってキーを指定しなくてはなりません。パラメータキーが Word 型だからです。たとえば次のイベントハンドラは Ins キーを押すとフォーム内のパネルに INS と表示します。Vk_Insert は Ins キーの仮想キーコードです。

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

  if key = vk_Insert then Panel1.Caption := 'INS';

end;


参照00233

キーボードイベントへの応答

キーボードイベントの処理順序

キー入力の処理方法

フォームへのキーボードイベントのリダイレクト


例00234

次の 2 つのイベントハンドラは Z キーを押すとグラフィックイメージを拡大し，Z キーから指を離すとグラフィックイメージを縮小して OnKeyDown イベントと OnKeyUp イベントに応答します。

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

  if chr(Key) = 'Z' then Image1.Stretch := True;

end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

  if chr(Key) = 'Z' then image1.Stretch := False;

end;


フォームへのキーボードイベントのリダイレクト
フォームへのキーボードイベントのリダイレクト00235

例

フォームレベルでキーボードイベントを処理できます。キーボードイベントが発生したときにフォーカスを受け取るフォーム内のコンポーネントごとにイベントハンドラを作成する必要はありません。フォームはフォーカスがあるコンポーネントが受け取れるキー入力を受け取れます。KeyPreview を使えばコンポーネントごとにユニークなキーボードイベントハンドラを作成できます。

KeyPreview はコンポーネントレベルのキーボードハンドラを起動するときにフォームレベルのキーボードイベントハンドラを自動的に呼び出すのと似ています。コンポーネントはイベントを認識していますが，フォームの方が先にイベントを処理できます。たとえばキーをマッピングして，最初に押したキーではなくマップしたキーを ButtonKeyDown が受け取るようにする FormKeyDown のイベントハンドラを作成できます。


参照00236

キーボードイベントへの応答

キーボードイベントの処理順序

キー入力の処理方法


例00237

次のコードはフォームの KeyPreview プロパティがキー入力をインターセプトする方法を示します。

フォーム上にボタンを割り当て，フォームの OnKeyDown イベント用に次のイベントハンドラを作成する

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

 if (shift = ([ssAlt, ssCtrl])) then Form1.color := clAqua;

end;

アプリケーションを起動してから Alt+Ctrl を押す

何も起こらない。フォーカスがあるコントロールがキーボードイベントを受け取るからである。このボタンのキーボードイベントハンドラは作成していない

ボタンを無効にするかボタンのイベントハンドラにコードを作成しなくてはならない。フォームの KeyPreview を True に設定すると，コードを書き込まなくてもフォームレベルでキー入力をインターセプトできる

フォームの KeyPreview を True に設定し，プログラムを再度実行する。今度は Ctrl+Alt を押すとフォームがキー入力を受け取りフォームが薄い空色になる


コモンコンポーネントの使い方
コモンコンポーネントの使い方00238

参照

アプリケーションインターフェースを設計する場合，コンポーネントごとに異なるのではなく同じ手順を使えると便利です。次にそのような手順の例を示します。詳細は次の各トピックを参照してください。

ヘルプヒントの提供

コンポーネントの位置合わせ

キーボードイベントの処理

マウスイベントの処理

ドラッグアンドドロップイベントの処理

フォーカスの設定

タブ順の設定

コンポーネントの有効化と無効化

コンポーネントの Z オーダの変更


参照00239

コンポーネントパレットのカスタマイズ


フォームコンポーネントの使い方
フォームコンポーネントの使い方00240

参照

アプリケーションには複数のフォームが含まれています。メインフォーム (一次ユーザーインターフェース)，ダイアログボックス，二次ウィンドウ (たとえば OLE 2.0 データを表示するウィンドウ) などがあります。フォームの設計には Delphi が用意している各種のフォームテンプレートを使えます。設計したフォームをテンプレートとして保存すれば他のプロジェクトでも使えます。

フォームに対する操作

フォームオブジェクトへのフィールドの追加

ダイアログボックスの作成

DLL としてのフォームの再利用

コンポーネントとしてのフォームの作成

使い方

実行時に他の開いているウィンドウ (プロジェクトマネージャまたは位置合わせパレットなど) の上にフォームを重ねるには FormStyle プロパティに fsStayOnTop を設定する

フォームのデフォルトのスクロールバーを削除するには HorzScrollBar と VertScrollBar の両プロパティの値を変更する

フォームを MDI フレームまたは MDI 子にするには FormStyle プロパティを使う

フォームの境界のスタイルを変更するには BorderIcons と BorderStyleの両プロパティの値を変更する (結果は実行時に表示される)

最小化フォームのアイコンを変更するには Icon プロパティを使う

アプリケーションウィンドウでフォームの最初の位置を指定するには Position プロパティを使う

フォームの最初の状態 (最小化，最大化，通常) を指定するには WindowState プロパティを使う

実行時にフォームの作業領域を定義するには ClientHeight と ClientWidth の両プロパティを使う (ClientHeight と ClientWidth はフォーム境界内の領域を表し，Height と Width はフォーム全体を表す)

実行時にフォームで最初にフォーカスを受け取るコントロールを指定するには ActiveControl プロパティを使う

選択しているコントロールに関係なくすべてのキーボードイベントをフォームに渡すには KeyPreview プロパティを使う

複数のメニューからメニューを指定するには Menu プロパティを使う


参照00241

コンポーネントパレットのカスタマイズ

フォームの基本

TForm リファレンス


TabSet コンポーネントについて
 TabSet コンポーネントについて00242

参照	TTabSet リファレンス

目的

TabSet コンポーネントはクリック可能なタブを作成するのに使います。TabSet コンポーネントと Notebook コンポーネントを一緒に使うとマルチページのダイアログボックスまたはエディタを作成できます。

TabSet コンポーネントの Tabs プロパティはタブリストを含んでおり，文字列リストです。リストのメソッドとプロパティを使うと文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

タスク

タブリストの作成

Notebook コンポーネントへのタブのアタッチ

タブへのグラフィックの表示

タブセット変更への応答

タブの選択と検索のタスク

タブを選択するには TabIndex プロパティを使う

選択したタブの右または左のタブを選択するには SelectNext メソッドを使う

特定のタブまでスクロールするには FirstIndex プロパティを使う。選択したタブは変わらないので，選択したタブは表示されないままのことがある。このプロパティは値の書き込みではなく読み出しに使うことが多い

タブセットでマウスクリックの位置を取り出すには ItemAtPos メソッドを使う。ItemAtPos が返す整数を ItemRect メソッドに渡すと，タブの回りの四角形の領域を返すことができる。タブに描画する場合などに使う

タブセット内に現在表示されているタブの数を調べるには VisibleTabs プロパティ (実行時のみで読み出し専用のプロパティ) を使う

タブの形式を指定するタスク

タブの背景色を指定するには BackgroundColor プロパティと DitherBackground プロパティを使う

タブの色を指定するには SelectedColor プロパティと UnselectedColor プロパティを使う

タブセットとタブの外側の境界の間の距離を指定するには EndMargin プロパティと StartMargin プロパティを使う

タブの高さを変更するには TabHeight プロパティを使う (Delphi は TabSet の Style プロパティが OwnerDraw に設定されている場合だけこのプロパティを設定可能にする)


参照00243

コモンコンポーネントのタスク

TNotebook コンポーネント

OnDrawTab イベント

OnMeasureTabイベント


Notebook コンポーネントについて
 Notebook コンポーネントについて00244

参照	Tnotebook リファレンス

目的

Notebook コンポーネントは複数のページを持つ 1 つのフォームを作成するのに使います。ページごとにコンポーネントを持つことができます。実行時にノートブックページ間を移動可能にするには，TabSet コンポーネントを使って各ページにタブを追加します。

Pages プロパティはノートブックページのリストを含んでおり，文字列リストです。リストのメソッドとプロパティを使うと文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

設計時には，ActivePage プロパティを変更することで Notebook コンポーネントの各ページにアクセスできます。

タスク

ノートブックページの操作

Notebook コンポーネントへのタブのアタッチ

カレントページの位置を (整数で) 指定してカレントページを表示するには PageIndex プロパティを使う

カレントページの名前を (文字列で) 指定してカレントページを表示するには ActivePage プロパティを使う

設計時に別のノートブックページにアクセスするには，オブジェクトインスペクタを使って ActivePage プロパティを変更する


参照00245

コモンコンポーネントのタスク

TComboBox コンポーネント

TListBox コンポーネント

TMainMenu

TTabSet コンポーネント


TabbedNotebook コンポーネントについて
TabbedNotebook コンポーネントについて00246

参照	TTabbedNotebook リファレンス

目的

TabbedNotebook コンポーネントはタブ付きページをすでに組み込んであるノートブックコンポーネントを作成するのに使います。コンポーネント Notebook と TabSet を一緒に使うと TabbedNotebook のようなコンポーネントを作成できますが，カスタマイズ用オプション (タブの位置など) が数多く必要になります。

Pages プロパティはノートブックページのリストを含んでおり，文字列リストです。リストのメソッドやプロパティを使うと文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

タスク

ノートブックページの操作

カレントページの位置を (整数で) 指定してカレントページを表示するには PageIndex プロパティを使う

カレントページの名前を (文字列で) 指定してカレントページを表示するには ActivePage プロパティを使う

設計時に別のノートブックページにアクセスするには，オブジェクトインスペクタを使って ActivePage プロパティを変更する

1 列に表示するタブの数を指定するには TabsPerRow プロパティを使う

タブ上に表示するデフォルトフォントを変更するには TabFont プロパティを使う


参照00247

コモンコンポーネントのタスク

Notebook コンポーネントへのタブのアタッチ


Outline コンポーネントについて
 Outline コンポーネントについて00248

参照	TOutline リファレンス

目的

Outline コンポーネントは関連データ間の階層関係を表示するのに使います。階層グループの各項目はノードで表し，ノードはそれぞれ下位項目を持つことがあります。

アウトラインの Lines プロパティはアウトラインノードのテキストを保持しており，文字列リストです。リストのメソッドとプロパティを使うと文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

タスク

アウトライン構造の作成

アウトライン変更への応答

アウトラインノードへプログラム上でアクセスするには Items プロパティを使う

ノード上にカスタムグリフを表示するには PictureClosed, PictureLeaf, PictureMinus, PictureOpen, PicturePlus の各プロパティを使う

別の種類のアウトライン表示を選択するには OutlineStyle プロパティと Options プロパティを使う


Creating an outline structure
アウトライン構造の作成00249

1. 次のコンポーネントをフォーム上に割り当てます。

1 つの Outline コンポーネント

［項目の追加(I)］と［インデックス(X)］というラベルが付いた 2 つの Edit コンポーネント

キャプション［追加(A)］が付いた 1 つの SpeedButton コンポーネント

2 つのラベルコンポーネント (キャプション［現在のインデックス(C)］が付いた Label3 とキャプションがない Label4)

2. Outline1 の Lines プロパティに TObject を入力します。

3. 適切なコンポーネントのイベントハンドラを作成します。

 procedure TForm1.SpeedButton1Click(Sender: TObject);

 var

  AddStr: string;

  AddIndex:LongInt;

 begin

 AddStr := Edit1.Text;

 AddIndex := StrToInt(Edit2.Text);

 Outline1.AddChild(AddIndex, AddStr);

 Label4.Caption := IntToStr(Outline1.SelectedItem);

 end;

 procedure TForm1.Outline1Expand(Sender: TObject; Index: Longint);

 begin

 Label4.Caption := IntToStr(Outline1.SelectedItem);

 end;

 procedure TForm1.Outline1Click(Sender: TObject);

 begin

 Label4.Caption := IntToStr(Outline1.SelectedItem);

 end;

4. フォーム OnActivate イベントが Outline1 OnClick イベントを指すように設定します。

プロジェクト例の実行

次にこのアプリケーションをコンパイルして実行します。文字列 TObject を選択した状態で Outline コンポーネントを表示していなくてはなりません。プログラムを実行して次の順に操作します。

1.	［項目の追加(I)］エディットコントロールに TComponent を入力します。

2.	［インデックス(X)］エディットコントロールに 1 を入力します。

3.	［追加(A)］ボタンを選択します。Outline コンポーネント内の変化を確認してください。

4.	Outline1 の TObject 項目をダブルクリックしてアウトラインを展開します。TComponent は TObject より 1 レベル下を表示します。

5.	Outline で TComponent を選択し，手順 1 でエディットコントロールに TControl，手順 2 でエディットコントロールに 2 を入力し，［追加(A)］ボタンを再度選択します。

6.	TComponent 項目をダブルクリックしてアウトラインを展開します。

7.	TControl を選択し，［現在のインデックス(C)］ラベル内の変化を確認してください。


参照00250

コモンコンポーネントのタスク


Header コンポーネントについて
 Header コンポーネントについて00251

参照	THeader リファレンス

目的

Header コンポーネントは指定するテキストを表示するサイズ変更可能なセクションを持つコンポーネントを作成するのに使います。たとえばグリッドコンポーネントと一緒に使うと列見出しを表示できます。

ヘッダーの Sections プロパティは列見出し用のテキストが入る文字列リストです。リストのメソッドとプロパティを使うと文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

タスク

設計時にヘッダーセクションのサイズを変更するにはマウスの右ボタンをクリックしてセクションをドラッグする

実行時にセクションのサイズ変更ができないようにするには AllowResize プロパティを False に設定する

実行時にセクションのサイズを変更するには SectionWidth プロパティの値を設定する


参照00252

コモンコンポーネントのタスク

TDrawGrid コンポーネント

TStringGrid コンポーネント

TDBGrid コンポーネント


タブリストの作成
タブリストの作成00253

参照

タブリストを作成するには

1.	TabControl または TabSet をフォームに配置します。

2.	Tabs プロパティを選択し，ダブルクリックで文字列リストエディタを開きます。

3.	タブに表示したいテキストを入力します。

4.	新しいタブを作成するために〔Enter〕を押します。

エディタ内の各行が TabControl 内の 1 つ 1 つのタブを表します。

メモ:	グラフィックオブジェクトを文字列リストに追加することもできます。追加したグラフィックはテキストのかわりにタブに表示されます。


参照00255

ノートブックページの追加

Notebook コンポーネントへのタブのアタッチ

TNotebook コンポーネント

TTabSet コンポーネント

文字列リストに対する操作


タブにグラフィックを表示する
実行時にタブにグラフィックを表示する00256

参照

1.	TabSet をフォームに配置します。

2.	Style プロパティを tsOwnerDraw に設定します。

3.	タブにグラフィックを描画する OnDrawTab イベント用のイベントハンドラを作成します。


参照00257

オーナー描画コントロールの作成


Notebook コンポーネントにタブを結び付ける
Notebook コンポーネントにタブを結び付ける00258

参照

1.	Notebook コンポーネントと TabSet コンポーネントをフォームに追加します。

2.	ノートブックにページを作成します。

この文字列リストは，結び付けられた TabSet コンポーネントの (Tabs プロパティを通してアクセスできる) あらゆる文字列リストをオーバーライドします。

3.	フォームの OnCreate イベント用に次のイベントハンドラを作成し，ページをタブに，またタブをページに結び付けます。

procedure TForm1.FormCreate(Sender: TObject);

begin

  TabSet1.Tabs := Notebook1.Pages;

  Notebook1.PageIndex := Tabset1.TabIndex;

end;

メモ:	タブをクリックしたときのタブ移動の動作によって，自動的にフォーカスが変更され，選択されたタブが表示されます。

4.	ユーザーがタブをクリックするのに合わせて現在のノートブックページを変更するには，TabSet の OnClick 用に次のイベントハンドラを作成します。

Notebook1.PageIndex := Tabset1.TabIndex;


参照00259

Notebook コンポーネントの使い方

TNotebook コンポーネント

TabSet コンポーネントの使い方

TTabSet コンポーネント

文字列リストに対する操作


ボタンの状態による異なるグリフの指定
異なるボタン状態への異なるグリフの指定00260

参照

1.	複数のイメージを含むビットマップを作成します。イメージはすべて同じサイズで 1 行に並んでいなくてはなりません。ビットマップにはイメージが 4 つまで入ります。1 つのボタン状態には 1 つのイメージしか指定できません。どのイメージもボタン上にグリフとして表示するときのサイズでなくてはなりません。

2.	Delphi はグラフィックに何個のグリフがあるか調べて，NumGlyphs プロパティを設定します。グリフの数はグラフィックの幅をその高さで割って調べます。除算結果が 4 より大きいか幅より高さの方が大きいと，Delphi はグラフィックを 1 つのグリフとして扱います。

メモ:	グラフィックの幅が高さで割り切れない場合，Delphi はグラフィックを 1 つのグリフとして扱います。

ボタンにビットマップをロードした後，Delphi はグラフィック内で並んでいる順にグリフを使って，異なるボタン状態を表します。次の表にビットマップ内のグリフの位置と Delphi がグリフに割り当てるボタン状態を示します。

位置	ボタン状態	意味

最初	上がっている	ボタンを押していない状態 (本来の状態) にある

2 番目	使用不可	ボタンは使用不可である

3 番目	下がっている	ボタンを押した状態にあり，クリック後，押していない状態に戻る

4 番目	下がったまま	クリック後もボタンを押したままの状態にある


参照00261

イメージのロード

TImage コンポーネント

TBitBtn コンポーネント

AutoSizeProperty


ノートブックページの操作
ノートブックページの操作0 00262

参照

デフォルトでは Notebook コンポーネントまたは TabbedNotebook コンポーネントが持つページは 1 枚だけです。Pages プロパティを使うと新しいページを追加できます。ページを追加したら，ActivePage プロパティを使って追加したページを見ることができます。


ノートブックまたはタブ付きノートブックへのページの追加

1.	Pages プロパティを選択します。

2.	ダブルクリックでノートブックエディタを開きます。

3.	［追加(A)］ボタンをクリックして［ページの追加］ダイアログボックスを開きます。

4.	このページの名前と，必要ならヘルプコンテキスト (省略可能) を入力します。

5.	［OK］をクリックします。


ページ名の変更

1.	ノートブックエディタ内でページを選択します。

2.	［編集(E)］を選択して［ページの編集］ダイアログボックスを開きます。

3.	ページの新しい名前またはヘルプコンテキストを指定します。

4.	［OK］を選択します。


ページの削除

ノーブックエディタ内でページを選択して［削除(L)］ボタンを選択します。


ノーブック内のページの順序の変更

ノーブックエディタ内でページを選択して［上へ(U)］ボタンまたは［下へ(D)］ボタンを選択します。


参照00263

文字列リストに対する操作


BitmapButton コンポーネントについて
 BitmapButton コンポーネントについて00264

参照	TBitBtn リファレンス

目的

BitMapButton コンポーネントはコマンドボタンをカスタマイズするのに使います。Button コンポーネントと異なり，ビットマップボタン上にグリフを表示できます。BitmapButton コンポーネントの Kind プロパティを使うと設計済みのコマンドボタンをどれでも短時間に作成できます。設計済みのコマンドボタンを作成すると，Delphi は適切なプロパティを設定し，ボタンにキャプションテキストと表示するグラフィックを追加します。

タスク

設計時のイメージのロード

異なるボタン状態を示す別のグリフの指定

オペレーティングシステム (Windows 3.x 以降) に合わせてボタンの境界を変更するには Style プロパティを使う

ビットマップボタンのグリフと (存在する場合) そのボタンキャプションの間の距離を指定するには Spacing プロパティを使う

キャプションに対してグリフをどこに表示するか指定するには Layout プロパティを使う

グリフまたはキャプションとボタン境界の間の距離を指定するには Margin プロパティを使う

メモ:	標準のコマンドボタンの多くはフォームに BitBtn コンポーネントを追加し，その Kind プロパティを設定すれば簡単に作成できます。標準ボタンつまり Kind プロパティが Custom に設定されているビットマップボタンには次のタスクを適用します。

フォームのフォーカスを制御するタスク

タブ順の設定

ダイアログボックスへのフォーカスの設定

コンポーネントの有効化と無効化

ダイアログボックスにコマンドボタンを作成するタスク

ほとんどのダイアログボックスには次のオプション用のボタンがあります。

Esc でのボタンコードの実行

Enter でのボタンコードの実行

キーボードイベントを処理するタスク

OnKeyPress イベントへの応答

OnKeyUp イベントへの応答

OnKeyDown イベントへの応答

フォームへのキーボードイベントのリダイレクト


参照00265

コモンコンポーネントのタスク


SpeedButton コンポーネントについて
 SpeedButton コンポーネントについて00266

参照	TSpeedButton リファレンス

目的

SpeedButton コンポーネントは複数のボタンをグループ化して，実行時のシフト状態で連動するようにします。スピードボタンはツールバーの作成によく使います。ラジオボタンやチェックボックスと比較してみてください。スピードボタンは BitmapButton コンポーネントと同様にグリフを表示できますが，ビットマップボタンと異なりキャプションは表示できません。スピードボタンのグリフは Windows ビットマップ (.BMP) ファイルでなくてはなりません。

プログラミングタスク

ツールバーへのスピードボタンの追加

スピードボタンへのグリフの割り当て

スピードボタンのグループの作成

コンテナコンポーネント内でのスピードボタンのグループ化

スピードボタンの初期条件の設定

異なるボタン状態を示す別のグリフの指定

スピードボタンのグループ化のタスク

複数のスピードボタンを実行時に 1 つのグループとして使えるようにするには，GroupIndex プロパティの値を同じにする (0 を除く)

実行時に最初にフォームを表示するときにグループ内の特定のスピードボタンを押した状態にするには，そのボタンの Down プロパティを True に設定する

グループ内のスピードボタンをどれも押さずすべて上げた状態にするには，そのグループ内のすべてのスピードボタンの AllowAllUp プロパティを True に設定する (どれか 1 つのスピードボタンに AllowAllUp プロパティを設定すると，Delphi はグループ内の残りのすべてのスピードボタンにも同じ値を自動的に設定する)

スピードボタンの形式に関するタスク

ボタンの境界に対してグリフの位置合わせを指定するには Layout プロパティを使う

グリフとボタン境界の間の距離を指定するには Margin プロパティを使う

ビットマップボタンのグリフと (存在する場合) そのボタンキャプションの間の距離を指定するには Spacing プロパティを使う

メモ:	プロパティ Layout, Margin, Spacing はロードしたグリフの種類によって影響を受けることがあります。


参照00267

コモンコンポーネントのタスク

フォームへのツールバーの追加


MaskEdit コンポーネントについて
 MaskEdit コンポーネントについて00268

参照	TMaskEdit リファレンス

目的

MaskEdit コンポーネントは有効な文字だけの入力を要求するようにカスタマイズできる編集コンポーネントを作成するのに使います。

複数行のテキストを読み出したり書き込むには Memo コンポーネントを使います。変更できないテキストを表示するには Label コンポーネントを使います (または MaskEdit コンポーネントの ReadOnly プロパティを True に設定します) 。

タスク

パスワード文字のマスク

編集マスクを指定するにはEditMask プロパティを使う (入力マスクエディタを参照)

テキストのフォントを変更するには Font プロパティを使う

実行時に選択したテキストを処理するには SelLength, SelStart, SelText の各プロパティと SelectAll メソッドを使う

行長を制限するには MaxLength プロパティを設定する

編集マスクからテキストをクリアするには Clear メソッドを使う。選択したテキストだけをクリアするには ClearSelection メソッドを使う

編集マスクにフォーカスが移動したときにテキストを自動的に選択するには AutoSelect を True (デフォルト) に設定する

クリップボードオブジェクトでテキストを使うには，CopyToClipboard, CutToClipboard, PasteFromClipboard の各メソッドを使う

編集マスクの内容が変更しているかどうか調べるには Modified プロパティを使う

フォントの変更に合わせて編集マスクの高さが動的に変化するのを防ぐには AutoSize プロパティを False に設定する。デフォルトは True である

メモ: AutoSize プロパティが影響するのは編集マスクの長さ (Width) ではなく高さだけです。

編集マスク内のテキストの大文字小文字の切り替え (すべて大文字，すべて小文字，大文字小文字混合) を指定するには，CharCase プロパティを使う


参照00269

コモンコンポーネントのタスク

編集タスク


StringGrid コンポーネントについて
 StringGrid コンポーネントについて00270

参照	TStringGrid リファレンス

StringGrid のプロパティ，メソッド，イベントの多くは DrawGrid コンポーネントと共有しています。詳細は DrawGrid コンポーネントについてを参照してください。

目的

StringGrid コンポーネントは列と行の形式で文字列を表示するのに使います。

タスク

グリッド内の文字列にアクセスするには Cells プロパティを使う

グリッド内のオブジェクトにアクセスするには Objects プロパティを使う

特定の行または列内の文字列とオブジェクトにアクセスするには Rows プロパティまたは Cols プロパティを使う


参照00271

コモンコンポーネントのタスク

TDrawGrid コンポーネント


DrawGrid コンポーネントについて
 DrawGrid コンポーネントについて00272

参照	TDrawGrid リファレンス

目的

DrawGrid コンポーネントは行と列の形式でデータを表示するのに使います。

グリッド内の描画タスク

セル内に描画するデータを指定するには OnDrawCell イベントを使う。DefaultDrawing プロパティ (デフォルトは True) はバックグラウンドセル内の描画動作 (フォーカスを表す四角形，選択していることを表す強調表示など) を指定する。このような動作を無効にし完全な空白セルから始めるには DefaultDrawing を False に設定する

セルの描画領域を確保するには CellRect メソッドを使う

マウスカーソルの行列座標を調べるには MouseToCell メソッドを使う

選択したセルの行列座標を調べるには Selection プロパティを使う。OnSelectCell イベントと一緒に使うこともできる

OnRowMoved イベントと OnColumnMoved イベントを処理して行と列を移動可能にする

グリッド内のテキストを編集し結果を表示するには OnGetEditText イベントと OnSetEditText イベントを処理する

グリッドの表示形式を制御するタスク

グリッドの表示とユーザーの操作への応答などを制御する各種の機能を指定するには Options プロパティセットを使う。オプションには行と列のサイズ変更と描画，セルの選択，タブ動作とスクロール動作が含まれる。グリッド線の幅も GridLineWidth プロパティを使って設定できる

列幅と行幅はいくつかのプロパティによって制御されます。

グリッド内のすべての列と行のデフォルトサイズを設定するには DefaultColWidth プロパティと DefaultRowHeight プロパティを使う

実行時に特定の列または行の幅を設定するには ColWidths プロパティと RowHeights プロパティを使う

非スクロール列または行を指定するには FixedCols プロパティと FixedRows プロパティを使う

非スクロール行と列に色を指定するには FixedColor プロパティを使う

実行時にグリッドの最上行を指定するには TopRow を使う (TopRow を使って指定した行は FixedRows で指定した行の直後に表示される)

実行時にグリッドの左端の列を指定するには LeftCol プロパティを使う (LeftCol を使って指定した列は FixedCols で指定した列の隣に表示される)

TopRow プロパティまたは LeftCol プロパティを変更するには OnTopLeftChanged イベントを使う

グリッド内に表示される行と列の数を実行時に調べるには読み出し専用プロパティ VisibleRowCount と VisibleColCount を使う


参照00273

TStringGrid コンポーネント

StringGrid コンポーネントについて


Image コンポーネントについて
 Image コンポーネントについて00274

参照	TImage リファレンス

目的

Image コンポーネントはフォームにグラフィックイメージをインポートするのに使います。Delphi では次の表示形式を使えます。

ビットマップ (.BMP)

メタファイル (.WMF)

アイコン (.ICO)

タスク

フォームへの Image コンポーネントの追加

コンポーネントの Z オーダーの変更

イメージのロード

実行時の描画用の領域の提供

ビットマップでの描画

グラフィックの出力

ファイルからの画像のロード

ファイルへの画像の保存

画像の置換

クリップボードでのグラフィックの使い方

コンポーネントに合わせてグラフィックのサイズを自動的に変更するには，Image コンポーネントの Stretch プロパティを True に設定する (Stretch はアイコン (.ICO) ファイルのサイズには影響しない)

グラフィックに合わせてコンポーネントのサイズを自動的に変更するには，グラフィックをロードする前に Image コンポーネントの AutoSize プロパティを True に設定する

コンポーネント内でグラフィックを中央揃えするには，Image コンポーネントの Center プロパティを True に設定する。コンポーネントの左上隅にグラフィックを揃えるには Center を False に設定する


参照00275

コモンコンポーネントのタスク

Shape コンポーネントについて

Label コンポーネントについて


Shape コンポーネントについて
 Shape コンポーネントについて00276

参照	TShape リファレンス

Shape コンポーネントはフォームにグラフィック図形を表示するのに使います。

タスク

コンポーネントの Z オーダーの変更

実行時の図形の描画

ブラシの使い方

ペンの使い方

Shape コンポーネントを塗りつぶす色を変更するには Brush プロパティの Color オプションを使う

Shape コンポーネントの塗りつぶしスタイル (べた塗りまたはクロスハッチなど) を変更するには Brush プロパティの Style オプションを使う

コンポーネント内に描画する線 (図形の境界線と塗りつぶし線の両方) の色を変更するには Pen プロパティの Color オプションと Mode オプションを使う

線のスタイル (実線または点線など) とコンポーネントの境界線の幅を変更するには Pen プロパティの Style オプションと Width オプションを使う

コンポーネントの形状を変更するには Shape プロパティを使う


参照00277

コモンコンポーネントのタスク

Image コンポーネントについて

Label コンポーネントについて

描画とペイント


Bevel コンポーネントについて
 Bevel コンポーネントについて00278

参照	TBevel リファレンス

目的

Bevel コンポーネントはフォームに隆起した状態の線または陥没した状態の線を加えるのに使います。 Bevel コンポーネントを使うと関連コンポーネントの周囲，隣，上下にベベル線を描画できます。

Bevel コンポーネントには Name プロパティがないので，Label コンポーネントをキャプションとして使えます。

メモ:	Bevel コンポーネントはコンテナではありません。コンポーネントをグループ化するには GroupBox コンポーネントを使います。

タスク

ベベル形状を選択するには Shape プロパティを使う

ベベルの隆起または陥没を指定するには Style プロパティを使う


参照00279

コモンコンポーネントのタスク

TShape コンポーネント


ScrollBox コンポーネントについて
 ScrollBox コンポーネントについて00280

参照	TScrollBox リファレンス

目的

ScrollBox コンポーネントは Panel コンポーネントによく似たコンテナ領域を垂直スクロールバーと水平スクロールバーに結合します。スクロールボックスを使うとフォームのスクロール可能な下位領域を定義できます。

メモ:	コンテナコンポーネント内にコンポーネントを入れると，コンテナとそのコンポーネントの間に新しい親子関係が生じます。フォームは他のコンポーネント内での親子関係にかかわらず，フォーム内のすべてのコンポーネントのオーナーのままです。

タスク

スクロール可能領域の追加

スクロールボックスの垂直スクロールバーまたは水平スクロールバーを使用可能にするには，VertScrollBar または HorzScrollBar のネストしたプロパティセットの 2 つのメンバーに値を指定する

Range プロパティ。この値より少ない場合にスクロールバーを表示する。たとえば Range が 100 ならば，コンテナ領域の高さまたは幅 (水平スクロールバーを指定していれば幅，垂直スクロールバーを指定していれば高さ) が 100 ピクセル未満の場合を除いてスクロールバーは表示されない

Visible は True (デフォルト) でなくてはならない。次のコードで True に設定する

ScrollBox2.HorzScrollBar.Visible := True;

フォームを最初に表示したときに特定のコンポーネントが必ず表示されているようにするには ScrollInView メソッドを使う


参照00281

TScrollBar コンポーネント

コモンコンポーネントのタスク


DataSource コンポーネントについて
DataSource コンポーネントについて00282

参照	TDataSource リファレンス

目的

DataSource コンポーネントはデータセットコンポーネント (TTable, TQuery など) をデータベース対応のコンポーネント (TDBGrid, TDBEdit など) に接続するのに使います。

DataSource コンポーネントについての詳細は TDataSource コンポーネントの概要と定義済み TDataSource を参照してください。

データベースへの接続

DataSource コンポーネントへデータセットを接続するにはデータソースの指定を参照

物理データベースにアプリケーションを接続するにはデータベースへの接続の概要を参照


参照00283

データのアクセス

データベースアプリケーションの構築


Table コンポーネントについて
Table コンポーネントについて00284

参照	TTable リファレンス

目的

Table コンポーネントは物理データベーステーブルからデータを取り出したり，データを物理データベーステーブルに戻すのに使います。

Table コンポーネントが取り出したデータはデータベース対応のコンポーネント内に表示されます。Table とデータベース対応のコンポーネントを接続するには DataSource を使います。

Table コンポーネントについての詳細は TTable コンポーネントの概要と TTable と TQuery の比較を参照してください。

データベースへの接続

処理したい物理テーブルを含んでいるデータベースを指定するにはデータベース名またはエリアスの指定を参照

物理テーブルに Table コンポーネントを接続するにはデータセットの指定を参照

物理データベースにアプリケーションを接続するにはデータベースへの接続の概要を参照

データのアクセス

テーブルを開いている間，他のユーザーによるそのテーブルへのアクセスまたは変更を防ぐには Exclusive プロパティを True に設定する

テーブルの変更を防ぐには ReadOnly を True に設定する

Active プロパティが True の間は ReadOnly プロパティを変更できない

TField オブジェクトの永続リストを作成するには項目エディタの使い方を参照

二次インデックスでテーブルをソートするには IndexName プロパティを使う

マスターリンク関係の作成

マスターリンク関係を作成するにはマスターテーブルが使うデータソースをリンクの MasterSource プロパティで指定する

マスターとリンクテーブルをリンクする項目を指定するには MasterFields プロパティを使って項目リンクデザイナを表示する


参照00285

データのアクセス

データベースアプリケーションの構築


Query コンポーネントについて
Query コンポーネントについて00286

参照	TQuery リファレンス

目的

Query コンポーネントは物理データベーステーブルからデータを取り出し，データを物理データベーステーブルに返す SQL 文を作成するのに使います。

Query コンポーネントが取り出したデータはデータベース対応のコンポーネントに表示されます。Query コンポーネントとデータベース対応のコンポーネントを接続するには DataSource を使います。

Query コンポーネントについての詳細は TQuery コンポーネントの概要と TTable と TQuery の比較を参照してください。

データベースへの接続

処理したい物理テーブルを含んでいるデータベースを指定するにはデータベース名またはエリアスの指定を参照

物理テーブルに Query コンポーネントを接続するにはデータセットの指定を参照

物理データベースにアプリケーションを接続するにはデータベースへの接続の概要を参照

その他の使い方

SQL 文を作成するには SQL プロパティを選択してから，値の列をダブルクリックするか省略記号ボタンをクリックする。文字列リストエディタが開くのでそこに問い合わせを入力する

TField オブジェクトの永続リストを作成するには項目エディタの使い方を参照

すべての変更を登録できるライブ結果セットを作成するには RequestLive プロパティを設定する

SQL 文を実行するには SQL 文の実行を参照


参照00287

データのアクセス

データベースアプリケーションの構築


StoredProc コンポーネントについて
StoredProc コンポーネントについて00288

参照	TStoredProc リファレンス

目的

StoredProc コンポーネントはデータベースサーバー上のストアドプロシージャにアクセスし，物理データベーステーブルにデータを返すのに使います。

使い方

ストアドプロシージャが定義されているデータベースを指定するには DatabaseName プロパティを設定する

ストアドプロシージャの名前を指定するには StoredProcName プロパティを設定する

To specify parameters for a stored procedure, double-click the Params property to open the Parameters editor.

See Using TStoredProc

ストアドプロシージャを実行するにはストアドプロシージャの実行を参照

オーバーロードストアドプロシージャを指定するには Overload プロパティを設定する

TField オブジェクトの永続リストを作成するには項目エディタの使い方を参照


参照00289

データベースアプリケーションの構築

データのアクセス


Database コンポーネントについて
Database コンポーネントについて00290

参照	TDatabase リファレンス

目的

Database コンポーネントは次のいずれかの機能が必要なときにデータベースに接続するのに使います。

永続的なデータベース接続を作成する

データベースサーバーログインをカスタマイズする

アプリケーションに固有な BDE エリアスを作成する

トランザクションを制御しトランザクションのアイソレーションレベルを指定する

データにアクセスするには Database コンポーネントをデータセットコンポーネント (Table や Query など) に接続します。

Database コンポーネントについての詳細は TDatabase の基本を参照してください。

データベースへの接続

データベースサーバーへ接続するにはサーバーの接続性の概要を参照

サーバーへの接続に必要な SQL リンクパラメータを編集するには Params プロパティを使って文字列リストエディタを開く

データベースへの接続を制御するにはデータベース接続の制御を参照

トランザクションの処理

Delphi のトランザクション処理についての詳細はトランザクションの基本を参照

トランザクションを明示的に制御するには明示的なトランザクション制御を参照

同じテーブルに複数のトランザクションが同時にアクセスしたときの対話方法を指定するには TransIsolation プロパティを設定する

その他の使い方

ユーザー名とパスワードにアクセスしたりサーバーセキュリティをバイパスするにはサーバーのセキュリティの処理を参照

アプリケーション固有のエリアスを作成するには DatabaseName プロパティに値を割り当てる

そのエリアス用にパラメータをカスタマイズするには TDatabase コンポーネントをダブルクリックしてデータベースプロパティエディタを開く


参照00291

データのアクセス

データベースアプリケーションの構築


BatchMove コンポーネントについて
BatchMove コンポーネントについて00292

参照	TBatchMove リファレンス

目的

BatchMove コンポーネントはグループまたはレコードのバッチ処理に使います。BatchMove を使うとテーブル構造やそのデータをコピーできます。データベース間でテーブル全体をコピーできます。

BatchMove コンポーネントについての詳細はバッチ処理の概要を参照してください。

使い方

テーブルにデータセットをコピーするにはデータセットのコピーを参照

テーブルにデータセットを追加するにはデータセットの追加を参照

データセットのデータでテーブルを更新するには次のどちらかのトピックを参照

データの更新と追加


参照00293

データのアクセス

データベースアプリケーションの構築


About the Report component
About the Report component00294


See also00295


DBGrid コンポーネントについて
DBGrid コンポーネントについて00296

参照	TDBGrid リファレンス

目的

DBGrid コンポーネントはデータセットコンポーネントのデータを表計算ワークシート式のグリッドに表示するのに使います。設計時には項目エディタでグリッドの静的な列セットを，実行時には動的な列セットを指定できます。

グリッドの形式の指定

グリッド内の項目の形式を指定するには，表示の場合 DisplayFormat プロパティを，編集の場合 EditFormat プロパティを設定する

グリッドに TField コンポーネントを表示しないようにするには Visible プロパティを設定する

グリッド内の列の順序を変更できるようにするには DragMode プロパティを設定する

グリッドの編集方法の指定

項目への値の入力を要求するには Required プロパティを設定する

その他のグリッドの使い方


参照00297

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBNavigator コンポーネントについて
DBNavigator コンポーネントについて00298

参照	TDBNavigator リファレンス

目的

DBNavigator コンポーネントはレコード間を移動し，レコードの挿入や変更の登録などの操作をするのに使います。

使い方

ナビゲータ上にどのボタンを表示するか指定するには VisibleButtons プロパティを設定する

ナビゲータボタンにマウスカーソルを合わせたときにヘルプヒントが表示されるようにするには ShowHint プロパティを設定する


参照00299

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBText コンポーネントについて
DBText コンポーネントについて00300

参照	TDBText リファレンス

目的

DBText コンポーネントは TLabel コンポーネントと同様にカレントレコードの項目値を読み出し専用ラベルとしてフォームに表示するのに使います。

DBText 内に表示されるデータは変更できません。この項目の内容変更を可能にするには DBEdit コンポーネントを使います。

使い方

DBText コントロールがデータの幅に合わせて自動的にサイズ変更してデータを表示できるようにするには TDBText の AutoSize プロパティを True (デフォルト) に設定する

ラベル内に表示するテキストをラップするには WordWrap を True に設定する

WordWrap を True に設定すると，スペースの後ろに入力するテキストはカレント行にまだ空間が残っている場合を除き改行する

ラベルテキストを左，右，中央のいずれかに揃えるには Alignment プロパティを使う

Label コンポーネントが他のコンポーネントによって隠れないようにするにはその Transparent プロパティを True に設定する


参照00301

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBEdit コンポーネントについて
DBEdit コンポーネントについて00302

参照	TDBEdit リファレンス

目的

DBEdit コンポーネントはデータセットのカレントレコードの特定の列で 1 行のデータを読み出すか書き込むのに使います。

複数行のテキストを読み出すか書き込むには DBMemo コンポーネントを使う

変更できないテキストを表示するには DBText コンポーネントを使う (または DBEdit コンポーネントの ReadOnly プロパティを True に設定する)

TDBEdit は TEdit コンポーネントのデータベース対応のバージョンです。

DBEdit コンポーネントについての詳細は項目の表示と編集を参照してください。

使い方

テキストフォントを指定するには Font プロパティを設定する

行長を指定するには MaxLength プロパティを設定する

編集ボックスにフォーカスが移動したときに自動的にテキストを選択するには AutoSelect を True (デフォルト) に設定する

フォントの変更に合わせて編集ボックスの高さを動的に変更しないようにするには AutoSize プロパティを False (デフォルトは True) に設定する

AutoSize プロパティは編集ボックスの高さだけに影響する (長さつまり Width には影響しない)

編集ボックス内のテキストを大文字，小文字，大文字小文字の混合のいずれかに指定するには CharCase プロパティを使う


参照00303

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBMemo コンポーネントについて
DBMemo コンポーネントについて00304

参照	TDBMemo リファレンス

目的

DBMemo コンポーネントはデータセットまたは書式付きテキスト内の複数行項目を BLOB 形式で表示し変更するのに使います。

1 行のテキストを表示または編集するには DBEdit コンポーネントを使う

イメージを BLOB 形式で表示するには DBImage コンポーネントを使う

DBMemo は TMemo コンポーネントのデータベース対応のバージョンです。

メモとデータの表示形式

メモにスクロールバーを表示するには ScrollBars プロパティを設定する

ワードラップしないようにするには WordWrap プロパティを False に設定する

コントロール内のテキストの位置合わせを指定するには Alignment プロパティを設定する

ダブルクリックするまで項目内にデータを表示しないようにするには AutoDisplay プロパティを設定する

TDBMemo は大量のデータを表示できるので表示するには時間がかかる。AutoDisplay を False に設定すれば表示までの時間を短縮できる

テキストフォントを変更するには Font プロパティを使う

編集

編集不可にするには TDBMemo の ReadOnly プロパティを True に設定する。デフォルト設定では編集可能である

メモへのタブ入力を可能にするには WantTabs プロパティを True に設定する

メモのコントロール内のテキストをプログラム上で切り取り，コピー，貼り付けをするには，CutToClipboard, CopyToClipboard, PasteFromClipboard の各メソッドを使う

データベースメモに入力できる文字数を指定するには MaxLength プロパティを使う


参照00305

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBImage コンポーネントについて
DBImage コンポーネントについて00306

参照	TDBImage リファレンス

目的

DBImage コンポーネントはグラフィックイメージまたはイメージ形式の BLOB データをデータセットの項目に表示するのに使います。

DBImage は書式付きテキストを BLOB 形式で表示できません。書式付きテキストを BLOB 形式で表示するには DBMemo コンポーネントを使います。

使い方

BLOB グラフィックの編集，クリップボードへの切り取りとコピー，エディタ内での変更，Delphi アプリケーションへの貼り付けをする。これをプログラム上で実行するには CutToClipboard, CopyToClipboard, PasteFromClipboard の各メソッドを使う

ダブルクリックするまで項目内にデータを表示しないようにするには AutoDisplay プロパティを設定する

DBImage は大量のデータを表示できるので表示をペイントするには時間がかかる。 AutoDisplay を False に設定すれば表示までの時間を短縮できる


参照00307

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBListBox コンポーネントについて
DBListBox コンポーネントについて00308

参照	TDBListBox リファレンス

目的

DBListBox コンポーネントは項目リストを表示するのに使います。この項目リストでデータセットのカレントレコードの項目を更新できます。

DBListBox コンポーネントの Items プロパティはリスト内の項目を指定する文字列リストです。リストのメソッドとプロパティを使うと文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

DBListBox は TListBox コンポーネントのデータベース対応のバージョンです。

DBListBox コンポーネントについての詳細は TListBox の使い方を参照してください。

表示の制御

リストボックスの高さを指定するには IntegralHeight プロパティを使う

IntegralHeight が True (デフォルト) ならば，リストの最後の項目が完全に表示されるようにリストボックスの最下部を変更する

IntegralHeight が False ならば，リストボックスの最下部は ItemHeight プロパティによって決まる。リストの最後の項目が完全に表示されないことがある

各項目の高さを指定するには ItemHeight プロパティを設定する。スタイルは csOwnerDrawFixed に設定しなくてはならない


参照00309

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBComboBox コンポーネントについて
DBComboBox コンポーネントについて00310

参照	TDBComboBox リファレンス

目的

DBComboBox コンポーネントは DBListBox と DBEdit の機能を結合するのに使います。値を入力するかドロップダウンリストで値を選択すればデータセットのカレントレコードの項目を更新できます。

DBComboBox コンポーネントの Items プロパティはリスト内の項目を指定する文字列リストです。リストのメソッドとプロパティを使えば文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

DBComboBox は TComboBox コンポーネントのデータベース対応のバージョンです。

表示の制御

リストに表示する最大項目数を指定するには DropDownCount プロパティを設定する

項目リストの表示スタイルを制御するには Style プロパティを指定する

たとえばドロップダウンリストにするには Style で csDropDownList を，単純なスクロール可能リストにするには csSimple を指定する

各項目の高さを指定するには ItemHeight プロパティを設定する。スタイルは csOwnerDrawFixed に設定しなくてはならない

項目リストをソートして表示するには Sorted を True に設定する


参照00311

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBCheckBox コンポーネントについて
DBCheckBox コンポーネントについて00312

参照	TDBCheckBox リファレンス

目的

DBCheckBox コンポーネントはデータセット内の項目の内容を読み出せるまたは編集できるチェックボックスを用意するのに使います。

DBCheckbox は項目の内容を ValueChecked プロパティと ValueUnchecked プロパティの内容と比較して，チェックマークを付けるかそうでないか決めます。両方のプロパティの値が同時に一致することはありません。

ValueChecked プロパティの値が項目の値と一致していれば，Delphi はチェックボックスにチェックマークを付ける

ValueUnchecked プロパティの値が項目の値と一致していれば，Delphi はチェックボックスにチェックマークを付けない

DBCheckBox は TCheckBox コンポーネントのデータベース対応のバージョンです。

値の設定

DBCheckBox にチェックマークが付いていない場合データベースに登録する値を指定するには ValueUnchecked プロパティを設定する

デフォルト値は False である。任意の英数字を指定できる

DBCheckBox にチェックマークが付いている場合データベースに登録する値を指定するには ValueChecked プロパティを設定する

デフォルト値は True である。任意の英数字を指定できる

表示形式の制御

フォーム内のチェックボックスをグループ化するには，チェックボックスを Panel, GroupBox, ScrollBox のいずれかのコンポーネントに入れる

最初にフォームにコンテナコンポーネントを作成してからその中にチェックボックスコンポーネントを入れなくてはならない

チェックボックスのラベルを表示するには Caption プロパティを設定する

キャプションのテキストの右側または左側にチェックボックスを配置するには Alignment プロパティを設定する

チェックボックスを使用不可にするには Enabled プロパティを False に設定する

チェックボックスを淡色表示にするには AllowGrayed プロパティを True に設定する


参照00313

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBRadioGroup コンポーネントについて
DBRadioGroup コンポーネントについて00314

参照	TDBRadioGroup リファレンス

目的

DBRadioGroup はデータセット内の項目の値を特定の値に制限して設定するのに使います。

ラジオグループには項目に指定できる値ごとにボタンが 1 つずつ割り当てられています。Delphi はデータベースのカレント項目に一致するテキスト文字列を持つラジオボタンを自動的に選択します。

DBRadioGroup は TRadioGroup コンポーネントのデータベース対応のバージョンです。

DBRadioGroup コンポーネントについての詳細はTRadioGroupを参照してください。

使い方

ラジオボタンセットと各ボタンの隣に表示するラベルを指定するには Items プロパティを設定する

Delphi は項目リストで指定する文字列ごとにラジオボタンとラベルを作成する

カレントレコードに Items プロパティのいずれかの文字列に一致する値がある場合，そのラジオボタンが自動的に選択される

ラジオボタンを選択したときに登録するオプションの文字列リストを指定するには Values プロパティを設定する

文字列は数値の順にボタンに関連付けられる。つまり最初の文字列が最初のボタンに，2 番目の文字列が 2 番目のボタンに関連付けられる。たとえば Values に文字列 Magenta, Yellow, Cyan が表示されており，最初のボタン (ラベル Red が付いている) を選択すると，Delphi は Magenta をデータベースに登録する


参照00315

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBLookupList コンポーネントについて
DBLookupList コンポーネントについて00316

参照	TDBLookupList リファレンス

目的

DBLookupList コンポーネントは項目リストを表示するのに使います。この項目リストでデータセットのカレントレコードの項目を更新できます。

DBListBox と異なり，Delphi は実行時に 2 番目のデータセット (参照データセット) の値を使って動的に DBLookupList リスト値を構成します。

DBLookupList コンポーネントは DBLookupCombo に似ていますが，ドロップダウンリストではなくスクロール可能なリスト形式で選択可能な項目を表示します。

DBLookupList の接続

参照データセットのデータソースを指定するには LookupSource プロパティを設定する

LookupSource は DataSource とは別のデータソースでなくてはならない。最初のデータセットと同じテーブルの列の値を表示するには，2 番目のデータソースとデータセットコンポーネントをフォームに割り当て，最初のデータソースおよびデータセットと同じデータを指すようにする

Delphi が一次データセットにリンクする LookupSource データセット内の項目を指定するには LookupField プロパティを設定する

LookupField プロパティの列に指定する列名は DataField プロパティ列と異なっていてもよいが値は同じでなくてはならない

表示の制御

DBLookupList が表示する列を指定するには LookupDisplay プロパティを設定する

LookupDisplay を設定しないと，DBLookupList は LookupField 列の値を表示する。LookupField 列以外の列を表示するかドロップダウンリスト内に複数の列を表示するには LookupDisplay を使う。複数の列名はセミコロンで区切る

複数列の表示形式を指定するには Options プロパティを設定する

loColLines が True ならば，参照リスト内の列間は線で区切られる

loRowLines が True ならば，参照リスト内の行間は線で区切られる

loTitles が True ならば，参照リストの列の上にタイトルとして列名が表示される


参照00317

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


DBLookupCombo コンポーネントについて
DBLookupCombo コンポーネントについて00318

参照	TDBLookupCombo リファレンス

目的

DBLookupCombo コンポーネントは DBListBox, DBEdit, DBLookupList の機能を結合するのに使います。ドロップダウンリストで値を選択すれば，データセットのカレントレコードの項目を更新できます。

Delphi は実行時に 2 番目のデータセット (参照データセット) の値を使って動的に DBLookupCombo リストを作成します。

DBLookupCombo の接続

参照データセットのデータソースを指定するには LookupSource プロパティを設定する

LookupSource は DataSource と異なるデータソースでなくてはならない。最初のデータセットと同じテーブルの列の値を表示するには，フォームに 2 番目のデータソースとデータセットコンポーネントを割り当て，最初のデータソースおよびデータセットと同じデータを指すようにしなくてはならない

Delphi が一次データセットにリンクする LookupSource データセットの項目を指定するには LookupField プロパティを設定する

LookupField プロパティ列に指定する列名は DataField プロパティ列と異なっていてもよいが値は同じでなくてはならない

表示の制御

DBLookupCombo が表示する列を指定するには LookupDisplay プロパティを設定する

LookupDisplay を設定しないと，TDBLookupCombo は LookupField 列の値を表示する。LookupField 列以外の列を表示するかドロップダウンリスト内に複数の列を表示するには LookupDisplay を使う。複数の列名はセミコロンで区切る

複数列の表示形式を指定するには Options プロパティを使う

loColLines が True ならば，参照リスト内の列間は線で区切られる

loRowLines が True ならば，参照リスト内の行間は線で区切られる

loTitles が True ならば，参照リストの列の上にタイトルとして列名が表示される


参照00319

コモンデータコントロールコンポーネントの使い方

データコントロールの使い方

データベースアプリケーションの構築


コモンデータコントロールコンポーネントの使い方
コモンデータコントロールコンポーネントの使い方00320

参照

データコントロールコンポーネントは DataSource コンポーネントを介してデータセットに接続するデータベース対応のコンポーネントです。

データコントロールで実行するタスクの中には特定のコンポーネントではなくすべてのデータベース対応コンポーネントに関連するものがあります。次に使い方の例を示します。詳細は各トピックを参照してください。

データコントロールについての詳細はデータコントロールの概要を参照してください。

データコントロールをデータセットにリンクするにはデータコントロールに対する操作を参照

データコントロールに表示する項目を指定するには DataField プロパティを使う

DBGrid コンポーネントまたは DBNavigator コンポーネントを個々の項目に接続することはできない

データコントロールを無効化，有効化，更新するには，データベース対応のコントロールの無効化，有効化，更新を参照

データコントロール内の更新特権を指定するには項目の更新を参照


参照00321

データコントロールの使い方

データベースアプリケーションの構築


OpenDialog コンポーネントについて
 OpenDialog コンポーネントについて00322

参照	TOpenDialog リファレンス	例

目的

OpenDialog コンポーネントは Windows コモンダイアログボックス［ファイルを開く］の作成に使います。このコモンダイアログボックスでは開くファイルの名前を指定できます。

［ファイルを開く］ダイアログボックスにファイル名を入力すると，Delphi が OpenDialog の FileName プロパティとしてそのファイル名を割り当てます。FileName プロパティの値を使ってファイルの名前を指定します。

使い方

ファイルフィルタの設定

コモンダイアログボックスでのヘルプの有効化

メニューコマンドを使ったダイアログボックスのオープン

デフォルトのファイル拡張子を指定するには DefaultExt プロパティを使う

特定の条件を満足するファイルだけを表示するためのフィルタつまりマスクを指定するにはFilter プロパティを使う

カレントディレクトリを設定するには InitialDir プロパティを使う

［ファイルを開く］ダイアログボックスのタイトルを変更するには Title プロパティを使う

複数のファイル名を選択可能にするには Options プロパティを使って ofAllowMultiSelect を True に設定する


参照00323

ダイアログコンポーネントについて


例00324

次のコードは［ファイルを開く］ダイアログボックスで指定されたファイルを OpenDialog コンポーネントを使って開きます。

このコードでは OpenTableDialog が OpenDialog コンポーネント，Table1 が Table コンポーネントです。［ファイルを開く］ダイアログボックスでファイルを指定すると，Delphi が OpenTableDialog コンポーネントの FileName プロパティ を設定します。ダイアログボックスを確定すると，Execute メソッドが True を返し，if...then ループ内のコードが実行されます。

TableName プロパティを再度割り当て可能にするため，イベントハンドラはまず Table1 の Active プロパティと Connected プロパティを False に設定します。Table1 の TableName プロパティは OpenTableDialog コンポーネントの FileName プロパティの値に設定します。Table1 の Active プロパティと Connected プロパティを True に設定すると，指定したファイルが開きます。

procedure TForm1.OpenTableButtonClick(Sender: TObject);

begin

     if OpenTableDialog.Execute then

     begin

          Table1.Active := False;

          Table1.Connected := False;

          Table1.TableName := OpenTableDialog.Filename;

          Table1.Active := True;

          Table1.Connected := True;

     end;

end;


SaveDialog コンポーネントについて
 SaveDialog コンポーネントについて00325

参照	TSaveDialog リファレンス

目的

SaveDialog コンポーネントは Windows コモンダイアログボックス［ファイル名を付けて保存］を作成するのに使います。このダイアログボックスでは保存するファイルの名前を指定できます。

［ファイル名を付けて保存］ダイアログボックスにファイル名を入力すると，Delphi は SaveDialog の FileName プロパティとしてそのファイル名を割り当てます。FileName プロパティの値を使ってファイルの名前を指定します。

使い方

ファイルフィルタの設定

コモンダイアログボックスでのヘルプの有効化

メニューコマンドを使ったダイアログボックスのオープン

デフォルトのファイル拡張子を指定するには DefaultExt プロパティを使う

限定したファイルだけを表示するためのフィルタつまりマスクを指定するにはFilter プロパティを使う

カレントディレクトリを設定するには InitialDir プロパティを使う

［ファイル名を付けて保存］ダイアログボックスのタイトルを変更するには Title プロパティを使う

Options プロパティを使って設定するオプション例を次に示す

複数のファイル名の選択可能化 (ofAllowMultiSelect)

読み出し専用チェックボックスの表示または非表示 (ofReadOnly, ofHideReadOnly)

既存のファイル名を使って保存する場合，その旨の確認 (ofOverwritePrompt)

読み出し専用のファイルを保存する場合，その旨の確認 (ofNoReadOnlyReturn)


参照00326

ダイアログコンポーネントについて

OpenDialog コンポーネントの使い方


FontDialog コンポーネントについて
 FontDialog コンポーネントについて00327

参照	TFontDialog リファレンス	例

目的

FontDialog コンポーネントは Windows コモンダイアログボックス［フォントの指定］を作成するのに使います。このダイアログボックスでは Font プロパティを持つコンポーネントに実行時にフォントを設定できます。

表示するフォントの変更

Font プロパティを持つコンポーネントが表示するフォントを変更するには，［フォントの指定］ダイアログボックスで選択したフォントをそのコンポーネントの Font に割り当てます。

例

FontDialog1.Execute;

Memo1.Font.Assign(FontDialog1.Font);

印刷するフォントの変更

Delphi プリンタオブジェクトにはカレントプリンタで使えるフォントのリストを指定する Fonts プロパティが含まれています。このフォントは［フォントの指定］ダイアログボックスの［フォント名(F)］リストに表示されます。プログラムで特に指定する場合を除き，プリンタはアプリケーションのテキストを出力する Windows のデバイスドライバが返すデフォルトの (System) フォントを使います。

プリンタのフォントを変更するには，印刷するテキストを含んでいるメモの Font プロパティをプリンタオブジェクトのキャンバスの Font プロパティに割り当てるだけです。選択したフォントがプリンタにダウンロードされます。

例

Printer.Canvas.Font := Memo1.Font;

その他の使い方

コモンダイアログボックスでのヘルプの有効化

メニューコマンドを使ったダイアログボックスのオープン


参照00328

ダイアログコンポーネントについて


例00329

次のコードはメモコンポーネントの Font プロパティの値が［フォントの指定］ダイアログボックスに反映されるようにし，ダイアログボックスの設定がメモに反映されるようにします。

procedure TEditForm.SetFont(Sender: TObject);

begin

  FontDialog1.Font := Memo1.Font;

  if FontDialog1.Execute then

Memo1.Font := FontDialog1.Font;

end;

メモ:	実行時にダイアログボックスで変更する場合を除いて，ダイアログボックスにデフォルト設定以外の設定を表示することはほとんどありません。設計時に［フォントの指定］ダイアログボックスで設定したものは，実行時にフォントを変更するため作成したイベントハンドラで更新されます。アプリケーションで初めて［フォントの指定］ダイアログボックスを開いたときに表示するフォントを変更するには，［フォントの指定］ダイアログボックスではなくメモコンポーネントの Font プロパティを変更します。


ColorDialog コンポーネントについて
 ColorDialog コンポーネントについて00330

参照	TColorDialog リファレンス	例

目的

ColorDialog コンポーネントは［色の設定］ダイアログボックスを作成するのに使います。このダイアログボックスでは Color プロパティを持つコンポーネントの色を実行時に設定できます。

使い方

コモンダイアログボックスでのヘルプの有効化

メニューコマンドを使ったダイアログボックスのオープン


参照00331

ダイアログコンポーネントについて


例00332

ボタンをクリックすると次のコードは［色の設定］ダイアログボックスを実行します。［色の設定］ダイアログボックスで色を選択してから［OK］を選択すると，フォームの色は選択した色に変わります。

procedure TForm1.Button1Click(Sender: TObject);

begin

  If ColorDialog1.Execute then

  Form1.Color := ColorDialog1.Color;

end;


PrintDialog コンポーネントについて
 PrintDialog コンポーネントについて00333

参照	TPrintDialog リファレンス

目的

PrintDialog コンポーネントは Windows のコモンダイアログボックスであるプリンタダイアログボックスを作成するのに使います。このダイアログボックスでは印刷タスクを実行するのに必要な設定を指定できます。［印刷］ダイアログボックスで［プリンタの設定(S)］ボタンを選択すると，Windows の［プリンタの設定］ダイアログボックスが表示されます。

使い方

メモの内容の出力

プリンタオブジェクトの使い方

コモンダイアログボックスでのヘルプの有効化

メニューコマンドを使ったダイアログボックスのオープン

PrintDialog コンポーネントのプロパティ

PrintDialog コンポーネントのオブジェクトインスペクタで使えるプロパティはアプリケーションの［印刷］ダイアログボックスのいくつかの領域に対応しています。Delphi ではこのダイアログボックスのデフォルトオプションを簡単に再設定できますが，設計時に再設定する必要はほとんどありません。一般的に使うプロパティを次に簡単に説明します。

MinPage

MaxPage

Options｜poPageNums

Options｜poPrintToFile

Options｜poSelection

PrintRange


参照00334

ダイアログコンポーネントについて


PrinterSetupDialog コンポーネントについて
 PrinterSetupDialog コンポーネントについて00335

参照	TPrinterSetupDialog リファレンス

目的

アプリケーションが PrintDialog コンポーネントを使う場合は，実行時にアプリケーションに Windows コモンダイアログボックス［プリンタの設定］を表示するのに，フォームに PrinterSetupDialog コンポーネントを割り当てる必要はありません。［印刷］ダイアログボックスで［プリンタの設定(S)］ボタンを選択すると，［プリンタの設定］ダイアログボックスが自動的に表示されます。

このダイアログボックス，［オプション］ダイアログボックス，［高度なオプション］ダイアログボックスの設定はユーザーの WIN.INI ファイルの設定から読み出されます。変更した場合はこのファイルに上書きされます。このコンポーネントを起動する以外はこのコンポーネントと直接対話するコードをたくさん作成する必要はありません。このコンポーネントの起動後は Windows がそのすべての機能を処理します。

使い方

コモンダイアログボックスでのヘルプの有効化

メニューコマンドを使ったダイアログボックスのオープン


参照00336

ダイアログコンポーネントについて


FindDialog コンポーネントについて
 FindDialog コンポーネントについて00337

参照	TFindDialog リファレンス

目的

FindDialog コンポーネントは Windows コモンダイアログボックス［検索］を作成するのに使います。

使い方

FindDialog コンポーネントを使ったテキスト文字列の検索

コモンダイアログボックスでのヘルプの有効化

メニューコマンドを使ったダイアログボックスのオープン

検索するテキスト文字列の値を指定するには FindText プロパティを使う

検索したテキスト文字列の置換後の値を指定するには ReplaceText プロパティを使う

ダイアログボックスを閉じるには CloseDialog メソッドを使う


FindDialog コンポーネントを使ったテキスト文字列の検索00338

FindDialog コンポーネントは次のように使います。

1. フォーム上に Edit コンポーネント， SpeedButton コンポーネント，FindDialog コンポーネントを割り当てます。Edit コンポーネントの Text プロパティに何かテキストを書き込みます。

2. SpeedButton コンポーネントの OnClick イベントに次のコードを作成します。

FindDialog1.Execute;

3. FindDialog コンポーネントの OnFind イベント用の次のイベントハンドラコードは Edit コントロールのテキストを調べて，［検索］ダイアログボックスで指定された文字列がないかどうか検索します。その文字列が見つかれば，一致したテキストが Edit1 コンポーネントで選択されます。見つからない場合， 「検索文字列が見つかりません」のメッセージのが表示されます。

procedure TForm1.FindDialog1Find(Sender: TObject);

var

ToFind: string;         {検索文字列}

FindIn: string;         {検索対象文字列}

Found: integer;         {文字列検出インジケータ}

Index: integer;         {検出文字列の開始位置}

FoundLen: integer;      {検出テキストの長さ}

begin

ToFind := FindDialog1.FindText;     {ダイアログボックスで文字列が指定されました}

FoundLen := Length(FindDialog1.FindText); {指定されたテキストの長さ}

FindIn := Form1.Edit1.Text;      {文字列の検索対象テキスト}

Found := Pos(ToFind, FindIn);    {文字列を検索します}

If Found > 0 then

  begin

  Form1.BringToFront;             {選択したテキストを表示するにはエディットコン

  Form1.ActiveControl := Edit1;    トロールにフォーカスがなくてはなりません}

  Edit1.SelStart:= Found -1;      {POS で検出した文字列を選択します}

  Edit1.SelLength := FoundLen;

  end;

Else

  begin

  MessageDlg('Text not found', mtInformation, [mbOK], 0);

  end;

end;

メモ:	フォームで ReplaceDialog ボックスも使う場合，var 宣言をこのイベントハンドラからフォームユニットの Implementation セクションの始めに移動できます。詳細は ReplaceDialog コンポーネントを使ったテキスト文字列の置換を参照してください。


参照00339

TReplaceDialog コンポーネント

ダイアログコンポーネントについて


ReplaceDialog コンポーネントについて
 ReplaceDialog コンポーネントについて00340

参照	TReplaceDialog リファレンス

目的

ReplaceDialog コンポーネントは Windows コモンダイアログボックス［置換］を作成するのに使います。

使い方

ReplaceDialog コンポーネントを使ったテキスト文字列の置換

コモンダイアログボックスでのヘルプの有効化

メニューコマンドを使ったダイアログボックスのオープン

検索するテキスト文字列の値を指定するには FindText プロパティを使う

検索した文字列の置換後の値を指定するには ReplaceText プロパティを使う

ダイアログボックスを閉じるには CloseDialog メソッドを使う


ReplaceDialog コンポーネントを使ったテキスト文字列の置換00341

ReplaceDialog コンポーネントは次のように使います。

1. フォームに Edit, SpeedButton, ReplaceDialog の 3 つのコンポーネントを割り当てます。Edit コンポーネントの Text プロパティに何かテキストを書き込みます。

2. SpeedButton コンポーネントの OnClick イベント用に次のコードを作成します。

ReplaceDialog1.Execute;

3. Form1 ユニットの Implementation セクションで次の変数を宣言します。

var

ToFind: string;        {検索文字列}

FindIn: string;        {検索対象文字列}

Found: integer;        {文字列検出インジケータ}

Index: integer;        {検出文字列の開始位置}

FoundLen: integer;     {検出テキストの長さ}

FoundText: string;     {置換後の文字列}

DidFind: boolean;      {Find を実行してから Replace を実行する場合フラグをたてます}

4. ReplaceDialog コンポーネントの OnFind イベント用に次のイベントハンドラを使います。このコードは Edit コントロールのテキストを検索して［置換］ダイアログボックスで指定された文字列を探します。その文字列が見つかると，Edit1 コンポーネントで一致するテキストが選択されます。見つからない場合，「検索文字列が見つかりません」のメッセージが表示されます。

procedure TForm1.ReplaceDialog1Find(Sender: TObject);

begin

ToFind := ReplaceDialog1.FindText;     {Find コントロールの文字列}

FoundLen := Length(ReplaceDialog1.FindText); {テキストの長さ}

FindIn := Form1.Edit1.Text;               {文字列の検索対象テキスト}

Found := Pos(ToFind, FindIn);             {文字列を検索します}

If Found > 0 then

  begin

  Form1.BringToFront;             {選択したテキストを表示するにはエディットコン

  Form1.ActiveControl := Edit1;    トロールにフォーカスがなくてはなりません}

  Edit1.SelStart:= Found -1;      {POS が検出した文字列を選択します}

  Edit1.SelLength := FoundLen;

  end;

Else

  begin

  MessageDlg('Text not found', mtInformation, [mbOK], 0);

  end;

end;

5. ReplaceDialog の OnReplace イベント用には次のコードを使います。このコードは置換する文字列を検索したかどうか調べます。検索していなければ OnFind イベントハンドラを呼び出してから，Edit コントロールで選択したテキストを［置換］ダイアログボックスの Replace コントロールで指定した文字列で置換します。

procedure TForm1.ReplaceDialog1Replace(Sender: TObject);

begin

If DidFind = False then       {文字列を検索していない場合}

  begin

  ReplaceDialog1Find(Sender); {文字列を検索して検出できたら, 検出した文字列を置換します}

  Edit1.SelText := ReplaceDialog1.ReplaceText;

  end

Else                          {検索が済んでいれば文字列を置換します}

  begin

  Edit1.SelText := ReplaceDialog1.ReplaceText;

  end;

end;


参照00342

ダイアログコンポーネントについて

TFindDialog コンポーネント


コモンダイアログボックスでのヘルプの有効化
コモンダイアログボックスでのヘルプの有効化00343

参照

1.	Help プロパティを True に設定します。これでダイアログボックスに［ヘルプ(H)］ボタンが表示されます。

コモンダイアログボックスコンポーネントの場合， Help プロパティの前にはそのコンポーネントに関連したイニシャルが付きます。たとえば［フォントの指定］ダイアログボックスコンポーネントの Help プロパティならば，［フォントの指定］ダイアログボックスのイニシャルが付くので fdHelp になります。

2.	LongInt 型の整数を入力してダイアログボックスコンポーネントの HelpContext を指定します。

この LongInt 型の整数はヘルプファイルのトピックに対応していなくてはなりません。

3.	［プロジェクトの設定］ダイアログボックスの［Applications］ページでヘルプファイルの名前と位置を指定します。


参照00344

［Dialogs］ページコンポーネント

非 Delphi のリソースファイル

プロジェクトのヘルプとアイコンのファイルの指定


コンポーネントライブラリについて
コンポーネントライブラリについて00345

参照

コンポーネントパレットに表示するコンポーネントは Delphi が保持しているライブラリファイルの内容を表しています。このライブラリ (とパレットに表示するもの) はコンポーネントを追加または削除することでカスタマイズできます。ライブラリをカスタマイズするたびに，Delphi はライブラリファイルを再構築します。

カスタマイズしたライブラリファイルをその各ライブラリ構成を異なる名前で保存すれば，いくつでも作成できます。アプリケーションを構築するときに必要なコンポーネントが揃っているライブラリファイルを選択して使えます。

ライブラリを変更する場合，次の点に注意してください。

現在のコンポーネントライブラリにプロジェクトで使うすべてのコンポーネントが入っている場合だけ，Delphi のプロジェクトを処理できる。現在インストールされていないコンポーネントを使うプロジェクトを読み込もうとすると，読み込めなかったコンポーネントを示すメッセージが表示される

Delphi は必ずコンポーネントライブラリの直前のバージョンを保存するので，新しく作成したコンポーネントを削除しても，削除する前のバージョンに簡単に戻れる。ライブラリファイルの直前のバージョンは同じ名前に拡張子 .~DC を付けて保存されている

コンポーネントライブラリをカスタマイズする方法については次の各トピックを参照してください。

ライブラリコンポーネントの追加

ライブラリコンポーネントの削除

カスタマイズライブラリの保存

コンポーネントライブラリの読み込み


参照00346

コンポーネントの作成

Visual Basic のコンポーネントのインストール

失敗したコンパイルの処理


ライブラリコンポーネントの追加
ライブラリコンポーネントの追加00347

参照

1.	［コンポーネント(C)｜インストール(I)］を選択して［コンポーネントのインストール］ダイアログボックスを開きます。

2.	必要ならば，コンポーネントユニットへのパスを指定するか，［追加(A)］を選択して［モジュールの追加］ダイアログボックスを開きます。ユニットが常駐するディレクトリはこのダイアログボックスで指定する検索パス上になくてはなりません。

3.	［モジュールの追加］ダイアログボックスで，追加するユニットの名前を入力するか検索パスを指定する［参照(B)］を選択します。

［モジュールの追加］ダイアログボックスではリテラルパスを指定できません。［モジュールの追加］ダイアログボックスで選択するパスは［コンポーネントのインストール］ダイアログボックスに示す検索パスにディレクトリパスを追加します。

4.	［モジュールの追加］ダイアログボックスを閉じるには［OK］をクリックします。

指定したコンポーネントユニットの名前が［インストールされているユニット(U)］リストの最後に表示されます。ユニット名を選択すると，ライブラリにすでに常駐するユニットのクラス名が［コンポーネントクラス名(C)］リスト内に表示されます。新しく追加したユニットのクラス名は表示されません。

5.	［コンポーネントのインストール］ダイアログボックスを閉じてライブラリを再構築するには［OK］を選択します。

ユニットリストを変更しなかった場合でも Delphi はライブラリを再構築します。開いたフォームを保存していないとそのフォームを保存するよう要求されます。ライブラリを再構築すると，インストールしたコンポーネントはコンポーネントパレット内に表示されます。

メモ:	新しくインストールしたコンポーネントはコンポーネント開発者がコンポーネントソースコードで指定したコンポーネントパレットのページに最初表示されます。パレットにコンポーネントをインストールしたら，別のページに移動できます。


ライブラリコンポーネントの削除
ライブラリコンポーネントの削除00348

1.	［コンポーネント(C)｜インストール(I)］を選択して［コンポーネントのインストール］ダイアログボックスを開きます。

2.	［インストールされているユニット(U)］リストボックスで削除するユニットを選択します。

3.	リストボックスからその項目を削除するには［削除(R)］を選択します。

4.	［コンポーネントのインストール］ダイアログボックスを閉じるには［OK］を選択します。

Delphi はライブラリを再構築し，削除したコンポーネントはパレット内に表示されません。


参照00349

コンポーネントの作成

コンポーネントライブラリのカスタマイズ

Visual Basic のコンポーネントのインストール

カスタマイズライブラリの保存

コンポーネントライブラリの読み込み


カスタマイズライブラリの保存
カスタマイズライブラリの保存00350

参照

1.	［コンポーネントのインストール］ダイアログボックスの［ライブラリファイル名(L)］ボックスに絶対パス名と新しいファイル名を指定します。

2.	そのコンポーネントをコンパイルし直します。

このカスタマイズライブラリはいつでもインストールできます。またはデフォルトのコンポーネントライブラリとして指定できます。


コンポーネントライブラリの保存
コンポーネントライブラリの保存00351

1.	［コンポーネント(C)｜ライブラリを開く(L)］を選択して［ライブラリを開く］ダイアログボックスを開きます。

2.	インストールするライブラリファイルを選択します。

3.	［OK］を選択します。

Delphi は現在のコンポーネントライブラリを選択したライブラリファイルで置換し，コンポーネントパレットのライブラリファの内容を更新します。


参照00352

ライブラリコンポーネントの追加

ライブラリコンポーネントの削除

コンポーネントライブラリのカスタマイズ

Visual Basic のコンポーネントのインストール


OCX コンポーネントのインストール
OCX コンポーネントのインストール  00353

参照

1.	［コンポーネントのインストール］ダイアログボックスを開きます。

2.	［OCX(X)］を選択して［OCX ファイルを開く］ダイアログボックスを開きます。

3.	追加する .OCX ファイルが見つかるまで移動し，見つかったら［OK］を選択します。

［OCX のインストール］ダイアログボックスが表示されます。その中の読み出し専用編集ボックスに，指定した .OCX ファイルの名前が表示されています。

4.	［OCX のインストール］ダイアログボックスのオプションを使って次のものを指定します。

.OCX ファイルがあるディレクトリパス (ファイルの絶対ディレクトリ絶対パスがわからない場合は［参照(B)］ボタンを使う)

OCX コントロールをインストールするパレットページ

必要な場合コンポーネントクラスの新しい名前

プロジェクト内の既存コンポーネントと同じクラス名の OCX コントロールをインストールする場合などに名前を変更する

5.	必要なオプションを指定し終わったら［OK］を選択して［OCX ファイルを開く］ダイアログボックスに戻ります。

6.	手順 3 ～ 5 を繰り返して追加するすべての OCX コントロールを指定します。

追加する OCX コントロールは［インストールされているユニット(U)］リストに表示されます。

7.	［OK］を選択して［OCX ファイルを開く］ダイアログボックスを閉じコンポーネントライブラリを再構築します。

メモ:	VBX コントロールはたいていシステムパスつまり \WINDOWS\SYSTEM ディレクトリに割り当てるように作成されています。アプリケーションのコンパイル時または実行時に「VBX ファイルを読み込めません」というメッセージが返された場合， VBX コントロールの位置が正しいかどうか確認してください。


参照00354

ライブラリコンポーネントの追加

ライブラリコンポーネントの削除

コンポーネントライブラリのカスタマイズ

失敗したコンパイルの処理


失敗したコンパイルの処理
失敗したコンパイルの処理00355

参照

Delphi はコンポーネントライブラリを再構築する前に，指定したユニットがすべて使用可能でコンパイル可能であることを確認します。コンパイルに成功すると，Delphi は新しく構築したライブラリをコンポーネントパレットに読み込みます。

Delphi が問題を検出すると，エラーメッセージを表示し，ライブラリの構築を停止し，コードエディタを表示してエラーを修正できるようにします。多くの問題は検索パスに不足しているディレクトリを追加するだけで簡単に修正できます。

コンパイルに失敗した場合，Delphi は一番新しい変更結果を持つユニットリストを保持しているので，Delphi を終了せずに同じ手順で再度構築できます。エラーを修正したら，［コンポーネントのインストール］ダイアログボックスを再度開いてライブラリを再構築しなくてはなりません。ライブラリを再コンパイルしない場合は，［元に戻す(V)］を選択して現在インストールしてあるライブラリの状態に合わせてユニットリストを復元します。

メモ:	［元に戻す(V)］を選択できるのはライブラリを再構築する前だけです。ライブラリを再構築し終わった後で［元に戻す(V)］を使って直前のバージョンを指定することはできません。

ライブラリの変更後，拡張子 .DPR を使ってライブラリプロジェクトファイルのコードを保存できます。

ライブラリソースコードを保存するには

1.	［オプション(O)｜環境(E)］を選択してから［Library］ページタブをクリックします。

2.	［ライブラリソースコードを保存する(V)］チェックボックスにチェックマークを付けます。

このライブラリソースファイルの uses 節にはコンポーネントパレットの構築に使うすべてのユニット (.DCU) が表示されます。


参照00356

ライブラリコンポーネントの追加

ライブラリコンポーネントの削除

Visual Basic のコンポーネントのインストール

コンポーネントライブラリのカスタマイズ


MainMenu コンポーネントについて
 MainMenu コンポーネントについて00357

参照	TMainMenu リファレンス

目的

MainMenu コンポーネントはメニューデザイナにアクセスするのに使います。メニューデザイナではフォーム用のメニューを作成できます。PopupMenu コンポーネントも使えます。ポップアップメニューにはメニューバーがなく，フォームを右クリックすると表示されます。

使い方

メニューの設計

実行時のメニューに対する操作


参照00358

ユーザーインターフェースの設計

ダイアログボックスの作成


PopupMenu コンポーネントについて
 PopupMenu コンポーネントについて00359

参照	TPopupMenu リファレンス

目的

PopupMenu コンポーネントはフォームのメインメニューに関係なく (右クリックしたときなどに) メニューを表示するようにフォームまたはその他のコンポーネントを作成するのに使います。フォームの最上部にアタッチして表示するメニューを作成するには MainMenu コンポーネントを使います。

使い方

メニューの設計

実行時のメニューに対する操作


参照00360

ユーザーインターフェースの設計

ダイアログボックスの作成


Label コンポーネントについて
 Label コンポーネントについて00361

参照	TLabel リファレンス

目的

たとえば独自の Caption プロパティを持たないコンポーネントの名前を表示するなど，ユーザーが編集できないテキストを表示するにはラベルを使います。

変更可能なテキストを表示するには Edit コンポーネントまたは Memo コンポーネントを使います (ReadOnly プロパティを True に設定すれば Edit コンポーネントに読み出し専用テキストを表示することもできます)。

使い方

ラベルに入れるテキストに合わせて Label を動的にサイズ変更するには AutoSize を True (デフォルト) に設定する

Label 内でテキストをワードラップするには WordWrap を True に設定する

WordWrap を True に設定すると，カレント行にまだ空間が残っている場合を除きスペースの後ろに入力したテキストが改行される

Label テキストを左，右，中央のいずれかに揃えるには Alignment プロパティを使う

Label が他のコンポーネントで隠れないようにするには Transparent プロパティを True に設定する

これは Shapes などのグラフィックオブジェクトや Image コンポーネントに表示される画像と一緒にラベルを使う場合に便利である (Label は非ウィンドウコントロールなのでボタンなどのウィンドウコントロールの前には置けない)

コンポーネントを Label に関連付けるには，Label の FocusControl プロパティを Label に関連付けたいコンポーネントに設定し，ラベルキャプションの一部としてアクセラレータキーを指定する

アクセラレータキーを押すとフォーカスは FocusControl で指定するコンポーネントに移る


参照00362

コモンコンポーネントの使い方


Edit コンポーネントについて
 Edit コンポーネントについて00363

参照	TEdit リファレンス

目的

編集ボックスは 1 行のテキストの読み出しまたは書き込みに使います。Edit コンポーネントは行の終わり文字を認識できません。

複数行テキストを読み出すか書き込むには Memo コンポーネントを使います。変更できないテキストを表示するには Label コンポーネントを使います (または Edit コンポーネントの ReadOnly プロパティを True に設定します)。

使い方

テキストフォントを変更するには Font プロパティを使う

実行時に選択したテキストを操作するには SelLength, SelStart, SelText の各プロパティと SelectAll メソッドを使う

行長を制限するには MaxLength プロパティを設定する

編集ボックスのテキストをクリアするには Clear メソッドを使い，選択したテキストだけをクリアするには ClearSelection メソッドを使う

編集ボックスがフォーカスを受け取ったときに自動的にテキストを選択するには AutoSelect を True (デフォルト) に設定する

Clipboard オブジェクトでテキストを使うには CopyToClipboard, CutToClipboard, PasteFromClipboard の各メソッドを使う

編集ボックスの内容を変更したかどうか判断するには Modified プロパティを使う

フォントの変更に合わせて編集ボックスの高さを動的に変更しない場合は AutoSize プロパティを False に設定する (デフォルトは True)

メモ:	AutoSize プロパティは編集ボックスの長さ (Width) ではなく高さだけに有効です。

編集ボックスのテキストを大文字，小文字，大文字小文字の混合に切り替えるには CharCase プロパティを使う


参照00364

コモンコンポーネントの使い方


Memo コンポーネントについて
 Memo コンポーネントについて00365

参照	TMemo リファレンス

目的

Memo コンポーネントはテキストの操作領域を作成します。Memo コンポーネントは手動またはプログラムで入力した複数行テキストを読み出すのに使います (1 行のテキストだけを処理するには Edit コンポーネントを使います)。

Memo コンポーネントの Lines プロパティにはメモのテキストが入る文字列リストです。リストのメソッドとプロパティを使うと文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

使い方

メモ内のテキストを揃えるには Alignment プロパティを使う。フォーム内のメモを揃えるには Align プロパティを使う。メモを必ずフォームのクライアント領域に配置するには Align に alClient を設定する (これを設計時にフォームで操作するのは困難である)

テキストフォントを変更するには Font プロパティを使う

実行時に選択したテキストを操作するには SelLength, SelStart, SelText の各プロパティと SelectAll  メソッドを使う

メモに入れる文字数を制限するには MaxLength プロパティを設定する

メモのテキストをクリアするには Clear メソッドを使い，選択したテキストだけをクリアするには ClearSelection メソッドを使う

Clipboard オブジェクトでテキストを使うには CopyToClipboard, CutToClipboard, PasteFromClipboard の各メソッドを使う

メモの内容を変更したかどうか調べるには Modified プロパティを使う

メモのテキストにタブを挿入できるようにするには WantTabs を True に設定する

メモ:	WantTabs を True に設定するとメモ以外のタブ付けができなくなります。他のコンポーネントと一緒にメモをフォームに表示するには，WantTabs を False にしてフォーム上のすべてのコンポーネントの間にタブを設定できるようにします。WantTabs を False に設定した場合，Ctrl+Tab を押せばメモ内にタブを設定できます。


参照00366

コモンコンポーネントの使い方

文字列リストに対する操作


Button コンポーネントについて
 Button コンポーネントについて00367

参照	TButton リファレンス

目的

Button コンポーネントはコマンドを実行するボタンを作成するのに使います。Button コンポーネントは 2 つのクリックイベント OnClick と OnDblClick を処理できます。

フォームのフォーカスを制御する使い方

タブ順の設定

ダイアログボックスでのフォーカスの設定

コンポーネントの有効化と無効化

ダイアログボックスにコマンドボタンを作成する使い方

ほとんどのダイアログボックスには次のオプション用のボタンがあります。

変更の確定なしの終了

変更の確定と終了

キーボードイベントを処理する使い方

OnKeyPress イベントへの応答

OnKeyUp イベントへの応答

OnKeyDown のイベントへの応答

フォームへのキーボードイベントのリダイレクト


参照00368

コモンコンポーネントの使い方

キーボードイベントへの応答

スピードボタンへのグリフの割り当て

コンポーネントの処理


CheckBox コンポーネントについて
 CheckBox コンポーネントについて00369

参照	TCheckBox リファレンス

目的

CheckBox コンポーネントは Yes/No または True/False の切り替えができるオプションを作成するのに使います。1 つの選択肢グループで一度に複数の選択肢を選択する場合に便利です。一度に 1 つしか選択できない選択肢を表すには RadioButton コンポーネントを使います。

フォーム内のチェックボックスコンポーネントの並べ替え

フォーム内のチェックボックスをグループ化するには，グループ化するすべてのチェックボックスを Panel, GroupBox, ScrollBox のいずれかのコンポーネントに入れる (最初にフォームにコンテナコンポーネントを割り当ててからその中にチェックボックスコンポーネントを入れなくてはならない)

チェックボックスの表示形式を制御する使い方

チェックボックスのチェックマークを付けるかはずすには，Checked プロパティかまたはその State プロパティを必要な値に設定する

チェックボックスを使用不可にするには Enabled プロパティを False に設定する

実行時にチェックボックスを淡色表示するには，State プロパティに cbGrayed を設定する

チェックボックスを淡色表示できるようにするにはチェックボックスの AllowGrayed プロパティを True に設定する

チェックボックスをそのキャプションのテキストの右または左に配置するには Alignment プロパティを設定する

メモ:	Alignment プロパティは Ctrl3D が False の場合だけ使えます (CTL3D.DLL はラジオボタンまたはチェックボックスの位置合わせオプションをサポートしません)。


参照00370

コンポーネントパレットのカスタマイズ

コンポーネントのグループ化


RadioButton コンポーネントについて
 RadioButton コンポーネントについて00371

参照	TRadioButton リファレンス

目的

RadioButton コンポーネントは Windows の標準のオプションボタンをカプセル化します。ラジオボタンは Yes/No または True/False の切り替えができるオプションを表すのに使います。フォームまたはその他のコンテナコンポーネントの中で一度に 1 つのラジオボタンだけ選択できます。これに対して CheckBox コンポーネントはグループ化しても複数の選択肢を選択できます。

フォーム内の RadioButton コンポーネントを並べ替える使い方

フォーム内のラジオボタンをグループ化するには，グループ化するすべてのラジオボタンを Panel, GroupBox, ScrollBox のいずれかのコンポーネントに入れる (先にフォームにコンテナコンポーネントを割り当ててからその中にラジオボタンコンポーネントを入れる)

ラジオボタンの表示形式を制御する使い方

ラジオボタンの選択または選択解除をするには Checked プロパティまたは State プロパティを必要な値に設定する

ラジオボタンを使用不可にするには Enabled プロパティを False に設定する

ラジオボタンをキャプションのテキストの右または左に配置するには Alignment プロパティを設定する

メモ:	Alignment プロパティは Ctrl3D が False の場合だけ使えます (CTL3D.DLL はラジオボタンまたはチェックボックスの位置合わせオプションをサポートしません)。


参照00372

コンポーネントパレットのカスタマイズ

コンポーネントのグループ化


ListBox コンポーネントについて
 ListBox コンポーネントについて00373

参照	TListBox リファレンス

目的

ListBox コンポーネントは選択できるが直接には変更できない項目をスクロール可能なリスト形式で表示するのに使います。リスト内の項目は入力も編集もできないので，リストボックスはプログラム上で作成しなくてはなりません。項目を入力できるようにするには，Text プロパティを持つ ComboBox コンポーネントを使います。

ListBox コンポーネントの Items プロパティはリストのテキストを含んでおり，文字列リストです。リストのメソッドとプロパティを使えば文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

使い方

オーナー描画コントロールの作成

リストボックス変更への応答

項目を選択する使い方

項目が選択されているかどうか調べるには Selected プロパティを使う

選択されている項目を調べるには ItemIndex プロパティを使う

リストで複数の項目を選択できるようにするには MultiSelect プロパティを True に設定する。MultiSelect が True の場合，SelCount を使えば選択項目の数を数えられる

項目を表示する使い方

項目をソートして表示するには Sorted プロパティを True に設定する

リスト内の列を指定するには Columns プロパティに必要な列数を設定する

リスト内の項目間の高さを制御するには ItemHeight プロパティを使う

リスト内の最後の項目が最初から部分的に隠れないようにするには，IntegralHeight を True に設定する。IntegralHeight が True ならば，リストボックスの項目が一部分しか表示されないようなサイズ変更はできない


参照00374

コモンコンポーネントの使い方

OnMeasureItem イベント

OnDrawItem イベント

文字列リストに対する操作


ComboBox コンポーネントについて
 ComboBox コンポーネントについて00375

参照	TComboBox リファレンス

目的

ComboBox コンポーネントはリストボックスと編集ボックスの機能を結合するのに使います。コンボボックスでは定義済みのリストから選択することもテキストを入力することもできます。

ComboBox コンポーネントの Items プロパティはリストのテキストを含んでいる文字列リストです。リストのメソッドとプロパティを使えば文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

項目またはテキストを選択する使い方

選択されている項目を調べるには ItemIndex プロパティを使う

実行時に選択したテキストを操作するには SelLength, SelStart, SelText の各プロパティと SelectAll メソッドを使う

編集ボックスのテキストをクリアするには Clear メソッドを使う

項目を表示する使い方

項目をソートして表示するには Sorted プロパティを True に設定する

リスト内の項目間の高さを制御するには ItemHeight プロパティを使う

リスト内の最後の項目が最初から部分的に隠れないようにするには，IntegralHeight を True に設定する。IntegralHeight が True ならば，リストボックスの項目が一部分しか表示されないようなサイズ変更はできない

その他のコンボボックスの使い方

オーナー描画コントロールの作成

各種のコンボボックスを選択してアプリケーションに表示するには，コンボボックスコンポーネントの Style プロパティを使う


参照00376

コモンコンポーネントの使い方

OnMeasureItem イベント

OnDrawItem イベント

文字列リストに対する操作


ScrollBar コンポーネントについて
 ScrollBar コンポーネントについて00377

参照	TScrollBar リファレンス

目的

ScrollBar コンポーネントはリストまたはフォームの表示部分を変更するか指定した増分ずつ範囲内を移動するのに使います。たとえばスクロールバーを使うと録音中の経過時間やボリュームレベルを示せます。スクロールバーの Kind プロパティを設定すると，アプリケーションで垂直スクロールバーと水平スクロールバーの両方を使えます。

ScrollBar コンポーネントと ScrollBox コンポーネントを比較してみてください。ScrollBox コンポーネントは他のコンポーネントを割り当てることができる Panel に類似したコンテナ領域にスクロールバーを結合します。

メモ:	Memo コンポーネントのようにコンポーネントによっては ScrollBars プロパティを持っています。このプロパティはコンポーネント内のスクロールバーの表示と非表示を切り替えます。

使い方

スクロールしたときにスクロールバーが応答する方法を指定するには OnScroll イベントを使う

スクロールボックスの最初の位置を指定するには Position プロパティを使う。実行時にスクロールボックスの位置を変更する場合にも Position を使える

スクロールバーをクリックしたときに移動する量を指定するには LargeChange プロパティを使う

スクロール矢印をクリックしたときに移動する量を指定するには SmallChange プロパティを使う

スクロールバーにある移動単位を指定するには Min プロパティと Max プロパティを使う

実行時に Position, Min, Max の各プロパティを指定するには SetParams メソッドを使う


参照00378

コモンコンポーネントの使い方

TScrollBox コンポーネント


GroupBox コンポーネントについて
 GroupBox コンポーネントについて00379

参照	TGroupBox リファレンス

目的

GroupBox コンポーネントは Panel コンポーネントや ScrollBox コンポーネントと同様にフォーム内の他のコンポーネントのコンテナです。ラジオボタンまたはチェックボックスなどの関連のあるコンポーネントをグループ化して，コンポーネントを 1 つの単位として処理するのに使います。

コンテナに入れずにコンポーネントの周囲に境界を作成する場合は Bevel コンポーネントを使います。

メモ:	コンテナコンポーネント内にコンポーネントを入れると，コンテナとそのコンポーネントの間に新しい親子関係が生じます。フォームは他のコンポーネント内での親子関係にかかわらずフォーム内のすべてのコンポーネントのオーナーのままです。

使い方

コンポーネントのグループ化


参照00380

コモンコンポーネントの使い方


RadioGroup コンポーネントについて
 RadioGroup コンポーネントについて00381

参照	TRadioGroup リファレンス	目的

RadioGroup コンポーネントを使うとラベル付きのグループ化ラジオボタンを持つコンポーネントを簡単に作成できます。GroupBox コンポーネントや RadioButton コンポーネントと比較してみてください。たとえば RadioButton コンポーネントにはボタンを選択するかどうか指定する Checked プロパティがあります。RadioGroup コンポーネントのラジオボタンが選択されているかどうか調べるには，コンポーネントの文字列リストのインデックスを確認しなくてはなりません。例を参照してください。

RadiioGroup コンポーネントの Items プロパティはラジオボタンの横に表示するキャプションのテキストを含んでいる文字列リストです。リストのメソッドとプロパティを使えば文字列リストに対して各種の操作ができます。詳細は文字列リストに対する操作を参照してください。

使い方

グループ化したラジオボタンを作成する

複数列のラジオボタンを表示するには Columns プロパティを使う

選択された状態のラジオボタンを指定するには，ItemIndex プロパティまたは Items プロパティを使う

実行時にラジオボタンを選択すると，そのラジオボタンが選択された状態で表示され，ボタンキャプション (文字列リスト値) の周囲にフォーカスを示す四角形が表示されます


参照00382

コモンコンポーネントの使い方

RadioButton について

GroupBox について


グループ化したラジオボタンの作成
グループ化したラジオボタンの作成00383

1.	フォームで RadioGroup コンポーネントを選択してから，その Items プロパティを選択します。

文字列リストエディタが表示されます。

2.	文字列リストエディタで，ボタンの横に表示するテキスト (または数値) を入力するか，使おうとしている文字列を含んでいるテキストファイルをロードします。

入力する行ごとにコンポーネント内にラジオボタンが作成されます。

3.	［OK］を選択して文字列リストエディタを閉じます。

コンポーネントにラジオボタンが表示されます。


Panel コンポーネントについて
 Panel コンポーネントについて00384

参照	TPanel リファレンス

目的

Panel コンポーネントは GroupBox コンポーネントや ScrollBox コンポーネントに似たコンテナ領域を作成します。Panel には Alignment, Bevel, Hint の各プロパティがあるので，フォーム上にステータスラインやツールバーを簡単に作成できます。

メモ:	コンテナコンポーネント内にコンポーネントを入れると，コンテナとそのコンポーネントの間に新しい親子関係が生じます。フォームは他のコンポーネント内での親子関係にかかわらずフォーム内のすべてのコンポーネントのオーナーのままです。

使い方

ツールバーの作成

ステータスラインの作成

コンポーネントのグループ化

ヘルプヒントの提供

パネル表示形式をカスタマイズする使い方

パネルをフォームに対してどこに合わせるか指定するには Align プロパティを使う (テキストをパネル内で揃えるのに使う Alignment プロパティと異なる)

パネルのアウトラインの上がっている状態または下がっている状態を切り替えるには，BevelInner プロパティまたは BevelOuter プロパティを使う

パネル境界の幅または境界が上がっているか下がっているかの状態 (ベベル) を変更するには，BorderWidth プロパティまたは BevelWidth プロパティを使う


参照00385

コモンコンポーネントの使い方


Timer コンポーネントについて
 Timer コンポーネントについて00386

参照	TTimer リファレンス	例

目的

Timer コンポーネントは 1 回だけまたは指定した間隔で繰り返しイベントを発生させるのに使います。指定した時間にイベントを発生させるコードは Timer コンポーネントの OnTimer イベント内に作成します。

使い方

タイマーイベントを発生させるまでの経過時間を指定するには Interval プロパティを使う

時間を指定したイベントの発生を中断するには Timer コンポーネントの Enabled プロパティを False に設定する

スプラッシュ画面を表示する


Displaying a SplashScreen
スプラッシュ画面の表示00387

次の 2 つのイベントハンドラはアプリケーションのメインフォームが開く前にフォーム SplashScreen を表示してから閉じます。Form1 の interface 部で定数 Startup を宣言します。最初のイベントハンドラは Form1 の OnActivate イベントから SplashScreen の Show メソッドを呼び出します。

procedure TForm1.FormActivate(Sender: TObject);

begin

  if Startup then

  begin

    Startup := False;

    SplashScreen.Show;

  end;

end;

SplashScreen には Timer コンポーネントが含まれており，その Interval プロパティは 3000 に設定されています。つまりそのフォームは 3 秒間表示されてから閉じます。フォームの Close メソッドは Timer コンポーネントの OnTimer イベントにアタッチされています。

procedure TForm2.Timer1Timer(Sender: TObject);

begin

  Close;

end;


参照00388

コモンコンポーネントの使い方


PaintBox コンポーネントについて
PaintBox コンポーネントについて00389

参照	TPaintBox リファレンス

目的

フォーム上の描画範囲を PaintBox で囲んだ長方形の領域に限定するのに使います。

使い方

PaintBox の描画表面にアクセスするには Canvas プロパティを使う

PaintBox のキャンバスに描画するには OnPaint イベント用のイベントハンドラに適切なコードを作成する


参照00390

コモンコンポーネントの使い方


FileListBox コンポーネントの使い方
 FileListBox コンポーネントの使い方00391

参照	TFileListBox リファレンス

目的

ファイルを表示し，ユーザーがカレントディレクトリでファイルを選択できるようにします。

表示と選択を制御する使い方

複数ファイルを選択できるようにするには MultiSelect プロパティを使う

どのファイルが選択されているか調べるには Selected プロパティを使う

ファイル属性に従って表示するファイルの種類を制御するには FileType プロパティを使う

このコンポーネントの使い方

FileListBox コンポーネントは最低 2 つのコンポーネント (FilterComboBox コンポーネントと Edit コンポーネント) と一緒に使います。ほとんどの場合，DriveComboBox コンポーネントと DirectoryListBox コンポーネントも使います。

FileListBox に表示するファイルの種類にフィルタをかけるには，FilterComboBox コンポーネントの FileList プロパティに FileListBox の名前を指定する

ファイル名またはワイルドカードを指定できるようにするには，Edit コンポーネントを作成し，FileListBox の FileEdit プロパティにその名前を指定する。指定不可にするには Edit コントロールの visible を False に設定できる

選択した完全に限定したファイル名が FileListBox の FileName プロパティに返される。パス，ファイル名，ファイル拡張子のいずれかを抽出するには，ExtractFilePath, ExtractFileName, ExtractFileExt の各関数を使う

このコンポーネントを他のコンポーネントと一緒に使って完全なドライブ，パス，ファイル名を選択する方法の例は，\DELPHI\DEMOS ディレクトリのサンプルアプリケーション FILECTRL を参照してください，


参照00392

［System］ページのコンポーネントを使った［ファイルの選択］ダイアログボックスの作成

FilterComboBox コンポーネントについて

DirectoryListBox コンポーネントについて

DriveComboBox コンポーネントについて

コモンコンポーネントの使い方


DirectoryListBox コンポーネントについて
 DirectoryListBox コンポーネントについて00393

参照	TDirectoryListBox リファレンス

目的

カレントドライブまたは関連した DriveComboBox で選択したドライブで実行時にディレクトリを選択できるようにします。

使い方

DirectoryListBox がそのディレクトリを表示するドライブを実行時に選択できるようにするには，このコンポーネントと一緒に DriveComboBox を使う。DriveComboBox の DirList プロパティで DirectoryListBox の名前を指定する

DirectoryListBox で選択したディレクトリに常駐するファイル名を実行時に選択できるようにするには，FileListBox コンポーネントを作成し，ファイル名を DirectoryListBox の FileList で指定する

DirectoryListBox が現在アクセスしているドライブを調べるには Drive プロパティを使う

このコンポーネントまたは結合した FileListBox のカレントディレクトリを調べるには Directory プロパティを使う

現在選択しているものを調べるには Selected プロパティを使う

このコンポーネントを他のコンポーネントと一緒に使って完全なドライブ，パス，ファイル名を選択する方法の例は \DELPHI\DEMOS ディレクトリのサンプルアプリケーション FILECTRL を参照してください。


参照00394

［System］ページのコンポーネントを使った［ファイルの選択］ダイアログボックスの作成

FileListBox コンポーネントについて

DriveComboBox コンポーネントについて

FilterComboBox コンポーネントについて

コモンコンポーネントの使い方


DriveComboBox コンポーネントについて
 DriveComboBox コンポーネントについて00395

参照	TDriveComboBox リファレンス

目的

実行時にローカルドライブまたはネットワークドライブを選択できるようにします。

使い方

DriveComboBox が指しているドライブの名前を抽出するには Text プロパティまたは Drive プロパティを使う

ディレクトリを選択できるようにするには，フォームに DirectoryListBox コンポーネントを作成し，その名前を DriveComboBox の DirList に指定する

このコンポーネントを他のコンポーネントと一緒に使って完全なドライブ，パス，ファイル名を選択する方法の例は \DELPHI\DEMOS ディレクトリのサンプルアプリケーション FILECTRL を参照してください。


参照00396

［System］ページのコンポーネントを使った［ファイルの選択］ダイアログボックスの作成

FileListBox コンポーネントについて

FilterComboBox コンポーネントについて

DirectoryListBox コンポーネントについて

コモンコンポーネントの使い方


FilterComboBox コンポーネントについて
 FilterComboBox コンポーネントについて00397

参照	TFilterComboBox リファレンス

目的

FilterComboBox は FileListBox コンポーネントで選択できるファイルの種類を制御するのに使います。

使い方

フィルタエディタを使ってFilter プロパティに値を設定し，選択できるファイルの種類を指定する。このエディタを表示するにはオブジェクトインスペクタの Filter プロパティの値列をダブルクリックする。たとえばフィルタに文書ファイルとテキストファイルを含めるには，フィルタエディタの適切な列に次のように指定する

文書ファイル (*.doc)     | *.doc

テキストファイル (*.txt) | *.txt

制御する FilterComboBox を表示している FileListBox コンポーネントの名前を指定するには FileList プロパティを使う

FilterComboBox とその結合した FileListBox はほとんどの場合 DriveComboBox, DirectoryListBox, Edit の各コントロールと一緒に使います。これらのコンポーネントは互いに適切なプロパティを参照することで，1 つまたは複数のパス指定とファイル名を選択して返します。

このコンポーネントを他のコンポーネントと一緒に使って完全なドライブ，パス，ファイル名を選択する方法の例は \DELPHI\DEMOS ディレクトリのサンプルアプリケーション FILECTRL を参照してください。


参照00398

［System］ページのコンポーネントを使った［ファイルの選択］ダイアログボックスの作成

FileListBox コンポーネントについて

DriveComboBox コンポーネントについて

DirectoryListBox コンポーネントについて

コモンコンポーネントの使い方


MediaPlayer コンポーネントについて
 MediaPlayer コンポーネントについて00399

参照	TMediaPlayer リファレンス

目的

MediaPlayer コンポーネントはアプリケーションがメディアプレーヤまたはレコーディングデバイス (CD-ROM プレーヤ，ビデオプレーヤ / レコーダ，MIDI シーケンサなど) を制御できるようにするのに使います。

MediaPlayer の使い方の決定

メディアプレーヤコンポーネントの使い方と構成方法は制御するデバイスの種類と，デバイスのすべての機能を使うか特定のものだけを使うかでほぼ決まります。

たとえばビデオカセットレコーダを制御しており，不注意でテープを消去することがないようにするには，MediaPlayer コンポーネントの Record セグメントを使用不可つまり非表示にできます。

メディアにコンパクトディスクのようにトラックがあるならば，MediaPlayer の Rewind 機能を使う必要がありません。ビデオテープまたはディジタルオーディオテープ (DAT) デバイスでは Rewind 機能が必要です。

コンポーネントの機能を制御する使い方

MediaPlayer コンポーネント上の各ボタンセグメントを表示または非表示にするには VisibleButtons プロパティを使う

 MediaPlayer コンポーネント上の各セグメントを使用可能または使用不可にするには EnabledButtons プロパティを使う

再生または記録の前にメディアの最後の位置にある場合，デバイスが自動的に巻き戻すかどうか指定するには，AutoRewind プロパティを使う

他のコンポーネントまたはアプリケーションがそのデバイスにアクセスできるかどうか調べるには Shareable プロパティを使う

デバイスのアクセスを制御する使い方

MediaPlayer コンポーネントが制御するデバイスの種類を指定または変更するには DeviceType プロパティを使う

現在ロードしているメディア内の開始位置を指定または変更するには Start プロパティを使う

メディアの現在の位置を指定または変更するには Position プロパティを使う

メディア上の情報にアクセスする使い方

再生または記録するメディアファイルを指定または変更するには FileName プロパティを使う

カレントデバイスの ID を調べるには，実行時のみで読み出し専用のプロパティ DeviceID を使う

現在ロードしているメディア内で再生または記録を開始する位置を指定するには，実行時のみで読み出し専用のプロパティ StartPos を使う

オープンしているマルチメディアデバイスのトラック数を調べるには，実行時のみで読み出し専用のプロパティ Tracks を使う

トラック長を調べるには，現在の TrackNum インデックスの実行時のみで読み出し専用のプロパティ TrackLength を使う

トラックの位置を調べるには，現在の TrackNum インデックスの実行時のみで読み出し専用のプロパティ TrackPosition を使う

デバイス操作を制御する使い方

MediaPlayer コンポーネントはメディアプレーヤまたはレコーディングデバイスの操作を制御するメソッドを持っています。これらのメソッドにはコンポーネントのボタンセグメントに対応しているもの (アスタリスク (*) が付いているもの) があります。これらのメソッドはオプションでプログラムコードでも呼び出せます。

デバイスを制御するメソッドをアルファベット順に次に示します。

*Back	*Pause	Rewind

Close	PauseOnly	*StartRecording

*Eject	*Play	*Step

*Next	*Previous	*Stop

Open	Resume


参照00400

コモンコンポーネントの使い方

Windows 3.1 Multimedia リファレンス


About the OLEContainer component
 Shape コンポーネント00401

楕円または円，長方形または正方形，角の丸い長方形または正方形などの幾何学図形を描画します。

詳細は次の各トピックを参照してください。

Shape コンポーネントの使い方

TShape リファレンスPurpose

Use the OLEContainer component to provide your application with the ability to link and embed objects from an OLE server.

When you activate an object inside the OLE container, control transfers to the OLE server application, so the user can access all the functionality of the server application from within your container application.

Tasks

About OLE

Creating OLE container applications

Dropping an OLE object

Inserting an OLE object

Linking vs. embedding

OLE 1.0 and OLE 2.0

OLE data in files

Pasting an OLE object

Registering OLE object clipboard formats


参照00402

DDE を使った他のアプリケーションの制御


DDEClientConv コンポーネントの使い方
 DDEClientConv コンポーネントの使い方00403

参照	TDDEClientConv リファレンス

目的

DDEClientConv コンポーネントはアプリケーションが他のアプリケーションを使って DDE 対話を設定できるようにするのに使います。フォームにこのコンポーネントを割り当てると，アプリケーションは DDE クライアントになります。

アプリケーションを完全な DDE クライアントにするには，このコンポーネントと DDEClientItem コンポーネントを一緒に使います。

使い方

DDE を使った他のアプリケーションの制御

DDE クライアントとのリンクの設定

DDE サーバーとのリンクの設定

データのポーク

DDE クライアントアプリケーションの作成

DDE サーバーアプリケーションへリンクするときに接続の種類を定義するには ConnectMode プロパティを使う

サーバーアプリケーションから転送するテキストデータの文字にフィルタをかけるには FormatChars プロパティを使う

DDE サーバーアプリケーションを指定するには DDEService プロパティを使う

DDE 対話のトピックを指定するには DDETopic プロパティを使う

DDE サーバーアプリケーションの実行可能名を指定するには ServiceApplication プロパティを使う


参照00404

DDE について


DDEClientItem コンポーネントについて
 DDEClientItem コンポーネントについて00405

参照	TDDEClientItem リファレンス

目的

DDEClientItem コンポーネントは DDE 対話の項目を定義するのに使います。アプリケーションを DDE クライアントにするには，このコンポーネントと DDEClientConv コンポーネントを一緒に使います。

使い方

DDE を使った他のアプリケーションの制御

DDE クライアントとのリンクの設定

DDE サーバーとのリンクの設定

データのポーク

DDE クライアントアプリケーションの作成

DDE クライアント対話コンポーネントを指定するには DDEConv プロパティを使う

DDE 対話の項目を指定するには DDEItem を使う


参照00406

DDE について


DDEServerConv コンポーネントについて
 DDEServerConv コンポーネントについて00407

参照	TDDEServerConv リファレンス

目的

DDEServerConv コンポーネントはアプリケーションが他のアプリケーションと DDE 対話を設定できるようにするのに使います。フォームにこのコンポーネントを割り当てると，アプリケーションは DDE サーバーになります。

アプリケーションを完全な DDE サーバーにするには，このコンポーネントと DDEServerItem コンポーネントを一緒に使います。

使い方

DDE サーバーアプリケーションの作成

DDE クライアントとのリンクの設定

DDE サーバーとのリンクの設定


参照00408

DDE について


DDEServerItem コンポーネントについて
 DDEServerItem コンポーネントについて00409

参照	TDDEServerItem リファレンス

目的

DDEServerItem コンポーネントは他のアプリケーションとの DDE 対話のトピックを決めるのに使います。

アプリケーションを DDE サーバーにするには，このコンポーネントと DDEServerConv コンポーネントを一緒に使います。

使い方

DDE サーバーアプリケーションの作成

DDE クライアントとのリンクの設定

DDE サーバーとのリンクの設定

DDE サーバー対話コンポーネントを指定するには ServerConv プロパティを使う


参照00410

DDE について


System ページのコンポーネントを使ったファイルの選択ダイアログボックスの作成
System ページのコンポーネントを使ったファイルの選択ダイアログボックスの作成00411

1. フォームに次のコントロールを割り当てます 。

DriveCombo1 という名前の DriveComboBox

DirList1 という名前の DirectoryListBox

FileEdit1 という名前の Edit コンポーネント

Filter1 という名前の FilterComboBox

FileList1 という名前の FileListBox

PathLabel という名前の Label コンポーネント

2. DriveCombo1 を選択し DirList := DirList1 を設定します。

3. DirList1 を選択します。DirLabel := PathLabel と FileList := FileList1 を設定します。

4. Filter1 を選択します。FileList := FileList1 を設定し，Filter プロパティに必要な値を設定します 。

5. FileList1 を選択します。FileEdit := FileEdit1 を設定します。複数のファイル名を選択したければ，MultiSelect := True を設定します。

6. 次の各イベント用にイベントハンドラをコーディングします。

Form の OnCreate イベント

Filter1 の OnChange イベント

DriveCombo1 の OnChange イベント

FileList1 の OnChange イベント


Form の OnCreate イベント用のイベントハンドラコード00412

begin

  FileList1.Mask := Filter1.Mask;

  Filter1Change(Filter1);

  PathLabel.Caption := DirList1.Directory;

end;


Filter1 の OnChange イベント用のイベントハンドラコード00413

begin

FileEdit.Text := FileList1.Mask;

PathLabel.Caption := DirList1.Directory;

end;


DriveCombo1 の OnChange イベント用のイベントハンドラコード00414

begin

PathLabel.Caption := DirList1.Directory;

end;


FileList1 の OnChange イベント用のイベントハンドラコード00415

begin

PathLabel.Caption := DirList1.Directory + '\' + FileList1.Filename;

end;


VBX Switch コンポーネント
 VBX Switch コンポーネント00416

この VBX コンポーネントはサンプルです。


VBX Gauge コンポーネント
 VBX Gauge コンポーネント00417

この VBX コンポーネントはサンプルです。


VBX BiPict コンポーネント
 VBX Pict コンポーネント00418

この VBX コンポーネントはサンプルです。


コンポーネントのサンプル
コンポーネントのサンプル00419

Delphi コンポーネントパレットの［Samples］ページにあるコンポーネントはサンプルです。このサンプルコンポーネントのソースコードはデフォルトインストールの DELPHI\SOURCE\SAMPLES ディレクトリにあります。


データベースエクスプローラ
データベースエクスプローラ00676

データベースエクスプローラを使うと，アプリケーション開発中にリモートサーバーへの持続的な接続を維持でき，また BDE エリアスやメタデータオブジェクトを扱うことができます。データベースエクスプローラを使って次のものを作成，表示，および変更できます。

BDE エリアス

テーブル，ビュー，トリガー，ストアドプロシージャなどのメタデータ

ユーザーとサーバーのセキュリティ情報 (今回のフィールドテストでは実装されていない)

データベースエクスプローラの［All Database Aliases］ペインには定義されているすべての有効なエリアスが表示されます。エリアスを選択するとそのエリアスの定義が表示されます。

エリアスで指定されるデータベースに接続するには

1.	［All Database Aliases］ペインでエリアスを選択します。

2.	次のどちらかを行います。

［Explorer｜Open］を選択します。

データベースエクスプローラのスピードメニューから［Open］を選択します。

データベースに接続すると，左ペインのアイコンが緑に変わります。

データベースの表示を展開するには

［All Database Aliases］ペインで，表示したいエリアスの横の［+］をクリックします。アイコンの下にネイティブサーバーオブジェクト型の表示が展開されます。

データベースに接続すると，そのデータベースに対する SQL 操作を実行できるようになります。

SQL 操作を実行するには

1.	［Enter SQL］タブを選択します。

2.	文領域に SQL 文を入力します。

3.	［Execute］ボタンをクリックします。

SQL 文が実行され，その結果がテーブルグリッドに表示されます。


ブレークポイントの編集ダイアログボックス
ブレークポイントの編集ダイアログボックス00798

参照

［ブレークポイントの編集］ダイアログボックスは，ブレークポイントを追加または既存のブレークポイントを変更するために使います。ブレークポイントはコードエディタとブレークポイントウィンドウに表示されます。

ブレークポイントを設定することによって，次のいずれかの状況でプログラムの実行に割り込みをかけることができます。

指定したコード行が実行された場合

がコード行の実行時に指定した条件発生した場合

条件または行番号を特定の回数だけ実行した場合

このダイアログボックスを使ってブレークポイントを発生させる場所を指定します。

行番号に基づいてブレークポイントを作成するには，［ファイル名(F)］と［行番号(L)］に値を入力する

条件に基づいてブレークポイントを作成するには，［ファイル名(F)］［行番号(L)］［条件式(C)］に値を入力する

行が実行される回数に基づいてブレークポイントを作成するには，［ファイル名(F)］［行番号(L)］［パスカウント(P)］に値を入力する

コード行の実行時に条件が発生した回数に基づいてブレークポイントを作成するには，［ファイル名(F)］［行番号(L)］［条件式(C)］［パスカウント(P)］に値を入力する

［ブレークポイントの編集］ダイアログボックスを開くには

次のいずれかの操作をします。

［実行(R)｜ブレークポイントの追加(B)］を選択する

ブレークポイントリストスピードメニューで［ブレークポイントの追加(A)］を選択する

ブレークポイントウィンドウで既存のブレークポイントを右クリックし，ブレークポイントリストスピードメニューで［ブレークポイントの編集(E)］を選択する

ダイアログボックスオプション

［ファイル名(F)］

ブレークポイントを設定するプログラムファイルを設定または変更します。ブレークポイントを設定するプログラムファイルの名前を入力します。

［行番号(L)］

ブレークポイントを設定する行番号を設定または変更します。ブレークポイントを設定する行番号を入力または変更します。

［条件式(C)］

ブレークポイントが検出されるたびに評価する条件式を指定します。式が True と評価されると，プログラムの実行は停止します。プログラムの実行を停止するための条件式を入力します。

条件式には有効な言語式を入力できます。ただし，式に含めるすべてのシンボルはブレークポイント位置からアクセス可能でなくてはならず，式に関数呼び出しを含めることはできません。

［パスカウント(P)］

指定した回数の通過後，特定の行番号でプログラムの実行を停止します。パスカウントを入力します。

ブレークポイントを含む行が検出されるたびにパスカウントがデクリメントされます。パスカウントが 1 になったとき，プログラムの実行が停止します。

パスカウントは 1 回の通過ごとにデクリメントされるため，パスカウントを使って何回目のループで失敗したかを判定できます。パスカウントを最大ループ回数に設定してプログラムを実行すれば，プログラムが失敗したときにパスカウントを調べることによってループの繰り返し回数を計算できます。

パスカウントを条件とともに使う場合，条件式が n 回目に真になったとき，プログラムの実行が停止します。Delphi は条件式が真の場合にのみパスカウントをデクリメントします。


参照00799

ブレークポイント

ブレークポイントウィンドウ

ブレークポイントウィンドウのタスク


監視式の設定ダイアログボックス
監視式の設定ダイアログボックス00800

参照

［監視式の設定］ダイアログボックスは，監視式を追加したり，既存の監視式のプロパティを変更するために使います。監視式は監視式ウィンドウに表示されます。

監視式のプロパティを変更するほかに，監視式の値を変更できます。監視式の値を変更するには，［Evaluate/Modify］ダイアログボックスを使います。

［監視式の設定］ダイアログボックスを開くには

次のいずれかの操作をします。

コードエディタスピードメニューで［監視式リストへの追加(A)］を選択する

［実行(R)｜監視式の追加(W)］を選択する

監視式リストスピードメニューで［監視式の追加(A)］を選択する

監視式ウィンドウで既存の監視式を右クリックし，監視式リストスピードメニューで［監視式の編集(E)］を選択する

ダイアログボックスオプション

［監視する式(E)］

監視する式を指定します。監視したい式を入力または編集します。ドロップダウンボタンを使うと，前に選択した式のヒストリから選択できます。

［繰り返し回数(U)］

監視式がデータ要素を表す場合は，繰り返し回数を指定します。監視式が配列を表す場合は，配列内の要素数を指定します。繰り返す回数を入力します。

配列を監視するため繰り返し回数として要素数を指定する場合，監視式ウィンドウには配列内のすべての要素の値が表示されます。

［桁数(G)］

浮動小数点式の監視式の値の有効桁数を指定します。桁数を入力します。

［有効(N)］

監視式を有効または無効にします。監視式を無効にすると，現在のプログラム実行でその監視式は非表示になります。監視式を無効にした場合，監視式の設定は定義されたまま残りますが，評価はされません。

監視式を無効にすると，プログラム内を移動または実行するとき監視式が監視されないため，デバッガの処理効率が向上します。設定した監視式は，デフォルトでは有効になります。

監視式の表示形式を設定するには

表示形式を指定するラジオボタンを選択します。

詳細は監視式プロパティの形式の種類を参照してください。


参照00801

［Evaluate/Modify］ダイアログボックス


監視式プロパティの形式の種類
監視式プロパティの形式の種類00802

参照

デフォルトでは，監視式の結果は式のデータ型と一致する形式で表示されます。たとえば，整数値は通常 10 進形式で表示されます。［監視式の設定］ダイアログボックスで整数型の式に対して［Hexadecimal］ラジオボタンを選択した場合，表示形式は 10 進から 16 進に変わります。

［文字(C)］

ASCII コードの 0 から 31 までの特殊文字も表示します。デフォルトでは，これらの文字は # が付いて表示されます。この形式タイプは文字と文字列に作用します。

［文字列(S)］

ASCII コードの 0 から 31 までの文字は # を付けて表示します。メモリダンプを変更する目的でのみ使います。この形式タイプは文字と文字列に作用します。

［10 進整数(D)］

整数値を 10 進形式で表示します。データ構造内の整数も含みます。この形式タイプは整数に作用します。

［16 進整数(X)］

整数値を $ プレフィックス付きの 16 進形式で表示します。データ構造内の整数も含みます。この形式タイプは整数に作用します。

［序数(O)］

順序型を整数値として表示します。

［ポインタ(P)］

ポインタをセグメント:オフセット表記で表し，ポインタが指し示すアドレスについての補足情報とともに表示します。セグメントが位置するメモリの領域と，オフセットアドレス位置の変数名がわかります。この形式タイプはポインタに作用します。

［構造体(R)］

フィールド名と値の両方を表示します。たとえば，(1,10,5) ではなく (X:1;Y:10;Z:5) のように表示します。

［デフォルト(L)］

式のデータ型と一致する表示形式で結果を表示します。この形式タイプはすべてに作用します。

［メモリダンプ(M)］

指定した式のアドレス位置から始まるサイズのバイトを表示します。デフォルトでは，各バイトは 2 桁の 16 進数で表します。バイト形式を変更するには，文字，10 進，16 進，文字列のオプションとともにメモリダンプを使います。


参照00803

監視式

監視式ウィンドウ

監視式ウィンドウのタスク


評価/変更ダイアログボックス
評価/変更ダイアログボックス00804

参照

［評価/変更］ダイアログボックスは，既存の式またはプロパティの値を評価または変更するために使います。次のものを含む場合を除き，有効な言語式であれば評価することができます。

現在の実行ポイントからアクセスできないローカル変数または静的変数

関数呼び出し

デバッグセッション中にデータ構造の変数や項目の値を変更できます。デバッグセッションの間にデータ項目の値を変更することによって，想定されるさまざまなエラーについてテストしたり，異なる状況下でコードセクションがどのように動作するかを確認したりできます。

デバッガを使ってデータ項目の値を変更する場合，変更はその特定のプログラム実行に対してのみ有効です。［評価/変更］ダイアログボックスで変更した内容は，ソースコードやコンパイルされたプログラムには影響しません。変更を永続的にするには，コードエディタでソースコードを変更した後，プログラムをコンパイルし直さなくてはなりません。

値 (特にポインタ値と配列インデックス) の変更は，他の変数やデータ構造を上書きする可能性があるため，好ましくない影響をもたらす危険があります。デバッガでプログラム値を変更する場合には注意してください。

プログラムのデータ値を変更する場合は次の点に注意してください。

個々の変数または配列やデータ構造の要素を変更できるが，配列またはデータ構造全体の内容は変更できない

［新しい値(N)］ボックスの式の評価結果はそれを代入する変数と代入互換性がなくてはならない。経験的に，代入によってコンパイルエラーまたは実行時エラーが発生した場合，変更値が有効でないと考えられる

関数に渡された型なし引数を直接変更することはできないが，型キャストして新しい値を割り当てできる

値の形式

式を評価するとき，式の現在の値がダイアログボックスの［Result］フィールドに表示されます。必要に応じてこの結果を形式設定できます。［評価式(E)］編集ボックスに入力した式の後に指定子を指定し，さらにカンマと形式を続けます。詳細は形式指定子の評価と変更を参照してください。

［評価/変更］ダイアログボックスを開くには

次のどちらかの操作をします。

［実行(R)｜評価/変更(V)］を選択する

コードエディタスピードメニューで［評価/変更(E)］を選択する

ダイアログボックスオプション

［評価式(E)］

評価または変更する変数，フィールド，配列，オブジェクトのいずれかを指定します。評価または変更する変数，フィールド，配列，オブジェクトを入力します。

デフォルトでは，コードエディタ内のカーソル位置にある語が［評価式(E)］編集ボックスに表示されます。この式を受け入れるか，別の式を入力するか，あるいは前に評価した式のヒストリリストから式を選択できます。

［結果(R)］

［評価(V)］または［変更(M)］を選択すると，［評価式(E)］テキストボックスで指定した項目の値が表示されます。

［新しい値(N)］

［評価式(E)］編集ボックスで指定した項目に新しい値を割り当てます。値を変更したい場合は項目に新しい値を入力します。

［評価(V)］

［評価式(E)］編集ボックスの式を評価し，値を［結果(R)］編集ボックスに表示します。

［変更(M)］

［新しい値(N)］編集ボックスの値を使って［評価式(E)］編集ボックスの式の値を変更します。


参照00805

デバッガでの式の評価と変更


式を評価する形式の指定子
形式指定子の評価と変更00806

参照

デフォルトでは，式のデータ型と一致する形式で結果が表示されます。たとえば，整数値は通常 10 進形式で表示されます。表示形式を変更するには，式の後にカンマ (,) を入力し，さらに形式指定子を続けます。

例

［評価式(E)］ボックスに整数値 z があり，結果を 16 進で表示したい場合を想定します。

1.	［評価式(E)］ボックスに z,h と入力します。

2.	［評価(V)］を選択します。

形式指定子

次の表は Evaluate/Modify 形式指定子を示します。

指定子	対象の型	説明

,C	文字，文字列	文字。ASCII コードの 0 から 31 までの文字は Pascal の #nn の表記書式で表示する

,S	文字，文字列	文字列。ASCII コードの 0 から 31 までの文字は Pascal の #nn の表記書式で表示する

,D	10 進整数	整数値を 10 進形式で表示する。データ構造内の整数も含む

,H か ,X	16 進整数	整数値を $ プレフィックス付きの 16 進数で表示する。データ構造内の整数値も含む

,Fn	浮動小数点	浮動小数点。有効 n 桁を表示する。n は 2 から 18 である。たとえば，浮動小数点数値の最初の 4 桁を表示するには ,F4 と入力する。n を指定しない場合，デフォルトは 11 になる

,P	ポインタ	ポインタを 32 ビットアドレスとして，ポインタが指し示すアドレスについての補足情報とともに表示する。ポインタが位置するメモリの領域と，オフセットアドレス位置に変数があればその名前が表示される

,R	レコード，クラス，

オブジェクト	レコード/クラス/オブジェクト。フィールド名と値の両方を表示する。たとえば (1,10,5) のかわりに (X:1;Y:10;Z:5) のように表示する

,nM	すべて	メモリダンプ。指定した式のアドレスから始まる n バイトを表示する。たとえば，メモリアドレス位置から始まる最初の 4 バイトを表示するには ,4M と入力する。n を指定しない場合，変数の型のサイズを示すバイト数になる。デフォルトでは，各バイトは 2 桁の 16 進数で表す。バイトの形式を変更するには，C, D, H, S の形式指定子とともにメモリダンプを使う


参照00807

［評価/変更］ダイアログボックス


統合デバッガ
統合デバッガについて00808

どんなに慎重にコーディングしても，プログラムにはエラーすなわちバグが含まれる可能性があり，プログラムが意図したとおりに動かない場合があります。デバッグとはプログラム内のエラーを見つけ出して修正するプロセスをいいます。

Delphi の統合デバッガはさまざまなデバッグ機能を備えています。これらデバッグ機能を使ってプログラムのエラーを見つけ出して修正することができます。エラーには 2 つの種類があります。

論理的なエラー

実行時のエラー

統合デバッガは機能フル装備のデバッガで，次のことができます。

プログラムの実行を制御する

変数とデータ構造の項目の値を監視する

デバッグ中にデータ項目の値を変更する

このデバッガを使う前に，シンボリックデバッグ情報を使ってプログラムをコンパイルしなくてはなりません。詳細はデバッグ情報の生成を参照してください。

デバッガの概念とタスク

統合デバッガの使い方についての詳細は次の各トピックを参照してください。

デバッガの処理

デバッガツール

統合デバッガにはいくつかのウィンドウ，メニュー，スピードメニューがあります。詳細は次の各トピックを参照してください。

Windows	ブレークポイントウィンドウ，監視式ウィンドウ，呼び出し履歴ウィンドウについて

メニュー	デバッガのメニュー項目のリストと説明

スピードメニュー	各デバッガウィンドウのスピードメニューのリストと説明


デバッガのウィンドウ
デバッガのウィンドウ00809

参照

統合デバッガでは次のウィンドウを使って作業できます。

ブレークポイントウィンドウ	現在のソースコード内に設定されているすべてのブレークポイントを表示して追加，変更，削除します。

監視式ウィンドウ	現在のソースコードに設定されているすべての監視式を表示して追加，変更，削除します。

呼び出し履歴ウィンドウ	関数呼び出しのシーケンスと各関数呼び出しに渡された引数を表示します。


参照00810

デバッガのメニュー

デバッガのスピードメニュー


デバッガのメニュー
デバッガのメニュー00811

参照

統合デバッガでは次のメニュー項目を使って作業できます。

表示メニュー

表示(V)｜ブレークポイント(R)

表示(V)｜呼び出し履歴(C)

表示(V)｜監視式(W)

コンパイルメニュー

Project｜Compile

実行メニュー

実行(R)｜実行(R)

実行(R)｜引数(P)

実行(R)｜ステップ実行(S)

実行(R)｜トレース実行(T)

実行(R)｜カーソル位置まで実行(C)

実行(R)｜プログラムの停止(G)

実行(R)｜プログラムの終了(E)

実行(R)｜監視式の追加(W)

実行(R)｜ブレークポイントの追加(B)

実行(R)｜評価/変更(V)


参照00812

デバッガのウィンドウ

デバッガのスピードメニュー


デバッガのスピードメニュー
デバッガのスピードメニュー00813

参照

統合デバッガでは次のスピードメニューを使って作業できます。

ブレークポイントウィンドウスピードメニュー

監視式ウィンドウスピードメニュー

呼び出し履歴スピードメニュー

コードエディタスピードメニューでは次のコマンドを使えます。

ブレークポイントの切り替え(K)

カーソル位置まで実行(R)

評価/変更(E)

監視式リストへの追加(A)


参照00814

デバッガのウィンドウ

デバッガのメニュー


参照00815

デバッガの処理


実行時エラー
実行時エラー00816

参照

実行時エラーはプログラム内の文が有効なものの，それらを実行したときにエラーが発生する場合をいいます。たとえば，存在しないファイルをプログラムが開こうとしたり，数値をゼロで除算しようとした場合などです。オペレーティングシステムは実行時エラーを検出し，それらが発生したときプログラムの実行を停止します。

デバッガを使うと，特定のプログラム位置まで実行することができます。その位置からプログラムを一度に 1 文ずつ実行し，プログラムの動作を 1 ステップごとに監視できます。文を実行した結果プログラムが失敗した場合，ソースコードを修正し，プログラムを再コンパイルし，テストを再開できます。

エラー番号	エラーの意味

1	無効な DOS ファンクション番号が与えられました

2	指定されたファイルが見つかりません

3	指定されたパスが見つかりません

4	オープンしたファイルが多すぎます

5	ファイルへのアクセスが拒否されました

6	無効なファイルハンドル

12	無効なファイルアクセスコード

15	無効なドライブです

16	カレントディレクトリは削除できません

17	ドライブ名をまたがっての名前の変更はできません

100	ディスクの読み込みエラー

101	ディスクの書き込みエラー

102	外部ファイルに結びつけられていません

103	ファイルがオープンされていません

104	ファイルが入力用にオープンされていません

105	ファイルが出力用にオープンされていません

106	入力値が数値ではありません

200	ゼロによる除算を行ないました

201	範囲チェックエラーです

202	スタックオーバーフローエラー

203	ヒープオーバーフローエラー

204	無効なポインタ演算です

205	浮動小数点のオーバーフローです

206	浮動小数点のアンダーフローです

207	無効な浮動小数点演算です

210	オブジェクトは初期化されていません

211	抽象メソッドの呼び出しました

212	ストリームの登録エラー

213	コレクションインデックスの範囲エラー

214	コレクションのオーバーフローエラー

215	演算時オーバーフローがおきました

216	一般保護例外


参照00817

統合デバッガについて

論理エラー


論理エラー
論理エラー00818

参照

論理エラーはプログラムの文が有効なものの，文によって実行されるアクションが意図したアクションと異なる場合に発生します。たとえば，変数に不正な値が含まれる場合や，グラフィックイメージが正しく表示されない場合，またプログラムの出力が正しくない場合などに発生します。

論理エラーは予期せぬ場所に出現することがあるため発見するのが困難です。プログラムが設計どおりに機能することを確認するため，完全にテストする必要があります。デバッガを使うとプログラムを実行しながら変数やデータオブジェクトの値を監視できるため，論理エラーを発見するのに役立ちます。


参照00819

統合デバッガについて

実行時エラー


実行ポイント
実行ポイント00820

参照

実行ポイントはデバッガが次に実行するソースコード行を示します。プログラムをカーソル位置まで実行したり特定のプログラム位置に移動する場合など，デバッガ内でプログラム実行を一時停止すると，デバッガは実行ポイントを強調表示します。

次の図はコードエディタ内で実行ポイントが強調表示されている様子を示しています。


参照00821

統合デバッガについて

デバッグカラーのカスタマイズ


ブレークポイント
ブレークポイント00822

参照

ブレークポイントはデバッグセッション中にソースコード内の指定位置でプログラムの実行を一時停止する場所です。

ソースコード内で問題が生じる可能性のある領域の前にブレークポイントを設定した後，プログラムをフルスピードで実行できます。プログラムはブレークポイントに達すると実行を停止し，コードエディタにブレークポイントを含む行が表示されます。この後，デバッガを使ってプログラムの状態を表示するか，一度に 1 行ずつコードをステップ実行またはトレースできます。

次の図はコードエディタに設定されたブレークポイントを示しています。

ブレークポイントはコード内の実行可能な行に設定する必要があります。コメント行，空白行，宣言，またはその他の実行不能な行にブレークポイントを設定した場合，それらはコードエディタに不当なブレークポイントとして表示され，プログラム実行時には無効になり使えません。


参照00823

統合デバッガについて

ブレークポイントウィンドウ

ブレークポイントウィンドウの操作

デバッグカラーのカスタマイズ


監視式
監視式00824

参照

監視式はプログラム実行の間に変化する変数や式の値を監視します。プログラムを実行するとき，監視式に含まれる変数の値をプログラムが更新すると，監視式の値が変化します。

監視式内の変数のいずれかが定義されていない場所に実行ポイントが移動すると，監視式全体が未定義になります。監視式の評価可能な場所に実行ポイントが戻ると，監視式ウィンドウに監視式の現在の値が再び表示されます。

監視式を入力した後，監視式ウィンドウを使って式の現在の値を表示してください。


参照00825

統合デバッガについて

監視式ウィンドウ

監視式ウィンドウの操作


データ値
データ値00826

参照

プログラム内のバグを明らかにするためには変数と式の値を頻繁に調査する必要があります。たとえば，for ループをステップ実行するときインデックス変数の値がわかると役に立ちます。また関数呼び出しに渡されたパラメータの値がわかると役立ちます。

統合デバッガには次のツールがあり，プログラムのデータ値を調査するために使えます。

監視式ウィンドウ

［評価/変更］ダイアログボックス

呼び出し履歴ウィンドウ

データの評価は式のレベルに作用します。式は定数，変数，データ構造の値を言語演算子で結合したものです。実際には，代入演算子の右側に使えるものなら，関数呼び出しを除いて，ほとんどすべてのものがデバッグ式として使えます。


参照00827

統合デバッガについて


ブレークポイントウィンドウ
ブレークポイントウィンドウ00828

参照

ブレークポイントウィンドウには現在のブレークポイントのリストが表示され，ブレークポイントを追加，編集，削除したり，有効と無効を切り替えたりできます。

ブレークポイントとはプログラム内で実行を一時的に停止する場所を指します。デバッガがブレークポイントに到達すると，プログラムは一時停止します。コード内にはいくつでもブレークポイントを指定できます。

ブレークポイントウィンドウを表示するには［表示(V)｜ブレークポイント(R)］を選択する

次の図は一般的なブレークポイントウィンドウの図です。

この図は次のことを示しています。

2 つのブレークポイントを含むファイルは FILEFORM.PAS である

FILEFORM.PAS の行番号 52 と 74 にブレークポイントが含まれる

52 行のブレークポイントは条件ブレークポイントである

ブレークポイントの通過回数はどちらもゼロである

ブレークポイントウィンドウにはすべてのブレークポイントがファイル名と行番号によって示されます。さらに，各ブレークポイントにはそのブレークポイントに指定された条件と通過回数も示されます。ブレークポイントが無効または不当な場合，そのブレークポイントはブレークポイントウィンドウ内に淡色表示されます。

ブレークポイントウィンドウを使うと，ソースファイル内をくまなく検索しなくても，すべてのブレークポイントを表示して保持できます。ブレークポイントウィンドウのスピードメニューのコマンドを使うとブレークポイント位置のコードを表示したり編集したりできます。


参照00829

デバッガのウィンドウ

統合デバッガについて

ブレークポイント

ブレークポイントウィンドウの操作


監視式ウィンドウ
監視式ウィンドウ00830

参照

監視式ウィンドウには監視式の現在の値が表示され，監視式を追加，編集，削除したり，有効と無効を切り替えたりできます。

監視式はプログラムの実行中に変化する変数や式の値を監視します。プログラムを実行するとき，監視式に含まれる変数の値をプログラムが更新すると，監視式の値が変化します。

監視式ウィンドウを表示するには［表示(V)｜監視式(W)］を選択する

次の図は一般的な監視式ウィンドウの図です。

この図は次のことを示しています。

i の値は 5 である

max の値は 13.55 である

x の値は 20 である

y の値は 0 である

監視式内の変数のいずれかが定義されていない場所に実行ポイントが移動すると，監視式全体が未定義になります。監視式の評価可能な場所に実行ポイントが戻ると，監視式ウィンドウに監視式の現在の値が再び表示されます。


参照00831

デバッガのウィンドウ

統合デバッガについて

監視式

監視式ウィンドウの操作


呼び出し履歴ウィンドウ
呼び出し履歴ウィンドウ00832

参照

呼び出し履歴ウィンドウにはプログラムが現在の位置に到達するまでの関数呼び出しと各関数呼び出しに渡された引数が表示されます。

呼び出し履歴ウィンドウを表示するには［表示(V)｜呼び出し履歴(C)］を選択する

次の図は一般的な呼び出し履歴ウィンドウの図です。

呼び出し履歴ウィンドウの最上部には，プログラムが最後に呼び出した関数が表示されます。この下にはその前に呼び出した関数が表示されます。関数のリストは前にさかのぼるように続き，プログラム内で最初に呼び出した関数がリストの一番下に表示されます。ウィンドウ内の各関数リストの後には呼び出しの際に渡された引数が示されます。

呼び出し履歴ウィンドウには現在ロードされているモジュールの関数だけが一覧表示されます。


参照00833

デバッガのウィンドウ

統合デバッガについて

関数呼び出しの検索


デバッガの処理
デバッガの処理00834

参照

次の各トピックではデバッガの処理の概要を参照できます。

一般的なデバッグ処理

デバッガの有効化

デバッグ情報の生成

プログラム引数の指定

デバッグセッションの開始

デバッグカラーのカスタマイズ

プログラム実行の制御

スタートアップコードのデバッグ

ブレークポイントに対する操作

ブレークポイントの設定

ブレークポイントの検索

ブレークポイントの無効化と有効化

ブレークポイントの削除

ブレークポイントプロパティの変更

監視式に対する操作

監視式の設定

監視式の無効化と有効化

監視式の削除

データ値の調査と変更

式の評価と変更

関数呼び出しに対する操作

関数呼び出しの検索

例外処理

デバッガでの例外処理


参照00835

統合デバッガについて


デバッガの有効化
デバッガの有効化00836

参照

1.	［オプション(O)｜環境(E)］を選択し［Preferences］ページタブをクリックします。

2.	必要ならば［統合デバッガ(I)］チェックボックスにチェックマークを付けます (デフォルトではチェックマークが付いています)。

3.	プログラム実行時の Delphi 環境を最小化するには，［実行時にアイコン化(M)］チェックボックスにチェックマークを付けます。


参照00837

デバッガの処理


デバッグ情報の生成
デバッグ情報の生成00838

参照

プログラムをデバッグする前に，まずプログラムをシンボリックデバッグ情報が使えるようにコンパイルする必要があります。

デバッガはシンボリックデバッグ情報を使うことによってプログラムのソースコードとコンパイラが生成する機械語とを結び付けることができます。これによりデバッガを通じてプログラムを実行しながら実際のソースコードを表示できるようになります。

シンボリックデバッグ情報はシンボルテーブルに保存されます。シンボリックデバッグ情報を生成するとき，シンボルテーブルはそれぞれ関連する .DCU ファイルに格納されます。

プログラムのデバッグを完了した後は，デバッグ情報をオフにしてプログラムをコンパイルすることが重要です。これにより最終的な .EXE ファイルのサイズを小さくできます。


プロジェクトのシンボリックデバッグ情報の生成
プロジェクトのシンボリックデバッグ情報の生成00839

1.	［オプション(O)｜プロジェクト(P)］を選択して［プロジェクトの設定］ダイアログボックスを開きます。

2.	デバッグオプションを表示するために［Compiler］タブをクリックします。

3.	［Debug Information］と［Local Symbols］のチェックボックスにチェックマークを付けます。


コンパイル済みの .EXE ファイルにシンボリックデバッグ情報を含める
コンパイル済みの .EXE ファイルにシンボリックデバッグ情報を含める00840

1.	［オプション(O)｜プロジェクト(P)］を選択して［プロジェクトの設定］ダイアログボックスを表示します。

2.	リンカオプションを表示するために［Linker］タブをクリックします。

3.	［TDW デバッグ情報を含む(T)］チェックボックスにチェックマークを付けます。

Turbo Debugger (スタンドアロンのデバッガ) を使う場合は，最終的な .EXE ファイルにシンボリックデバッグ情報を含めなくてはなりません。


参照00841

プロジェクトのシンボリックデバッグ情報の生成

コンパイル済みの .EXE ファイルにシンボリックデバッグ情報を含める

デバッガの処理


プログラム引数の指定
コマンドライン引数の指定00842

参照

1.	［実行(R)｜引数(P)］を選択します。

2.	［実行時の引数］ダイアログボックスで，デバッガ制御下でプログラムを実行するときプログラムに渡す引数を入力します。

3.	［OK］を選択します。


参照00843

デバッガの処理


デバッグセッションの開始
デバッグセッションの開始00844

参照

プログラム内で実行時エラーまたは論理エラーを発見した場合，デバッガの制御下でプログラムを実行することによってデバッグセッションを開始できます。

デバッガ制御下でプログラムを実行するには

1.	プログラムをコンパイルするときデバッグ情報を生成します。

2.	Delphi の中でプログラムを実行します。

デバッグ中はプログラムの実行を完全に制御できます。プログラムを任意の位置で一時停止して次の操作ができます。

変数やデータ構造の値を調べる

関数呼び出しのシーケンスを表示する

変数が別の値を持つことによってプログラムの動作がどう変化するかを確認するため変数の値を変更する

デバッガを使ってプログラムコードを 1 行ずつ実行し監視することもできます。詳細はプログラム実行の制御を参照してください。


参照00845

デバッガの処理


デバッグカラーのカスタマイズ
デバッグカラーのカスタマイズ00846

参照

実行ポイントを示す色や，ブレークポイント行が有効，無効，または不当であることを示すための色をカスタマイズできます。

実行ポイントやブレークポイントの色を設定するには

1.	［オプション(O)｜環境(E)］を選択して［環境の設定］ダイアログボックスを表示します。

2.	［Editor Colors］ページタブを選択します。

3. ［文法要素(E)］リストで［実行中の行］［有効なブレーク］［無効なブレーク］［不正なブレーク］のいずれかを選択し，好みの背景色と前景色を設定します。


参照00847

デバッガの処理


プログラム実行の制御
プログラム実行の制御00848

参照

デバッガを使うとプログラムの 1 コード行を実行するか，関数全体を実行するか，プログラムブロック全体を実行するかを制御できます。プログラムをいつ実行し，いつ一時停止するかを指定することによって，正しい動作が確認できたセクションをすばやく移動し，問題が発生しているセクションに注意を集中することができます。

デバッガは 1 行に複数のプログラム文が指定されている場合，これを 1 行のコードとみなします。1 行のテキストに記述されている複数の文を別々にデバッグすることはできません。また，1 つの文が複数行にわたる場合はまとめて 1 行のコードとみなされます。

デバッガ内では次の方法でプログラム実行を制御できます。

Run	各行ごとに一時停止せずに現在のプログラムを実行します。デバッガの外部でプログラムを実行するのと同じです。

ステップ実行(S)	プログラムを一度に 1 行ずつ実行します。手続きを 1 つの単位として実行しながらステップ実行します。

トレース実行(T)	プログラムを一度に 1 行ずつ実行します。手続きをトレースし，各行の実行を追跡しながら実行します。

カーソル位置まで実行(C)	コードエディタ内でカーソルが位置している行に到達するまで現在のプログラムを実行します。

プログラムの停止(G)	実行中のプログラムを一時的に停止します。

プログラムの終了(E)	現在のプログラム実行を終了しプログラムを再起動できるようリセットします。

ブレークポイントの追加(B)	ソースコード内にプログラム実行を停止する場所を指定します。

デバッガには 2 つのプログラム実行方法があります。

一般的な実行	［実行(R)｜プログラムの停止(G)］を使ってプログラム実行に割り込みをかけるか，プログラムがブレークポイントに到達するまで，ロード済みのプログラムを実行します。

カーソル位置まで	モジュールウィンドウ内のカーソル位置までロード済みのプログラムを実行します。


参照00849

デバッガの処理


スタートアップコードのデバッグ
スタートアップコードのデバッグ00850

参照

デフォルトでは，［実行(R)｜トレース実行(T)］または［実行(R)｜ステップ実行(S)］を選択してデバッグセッションを開始した場合，実行ポイントはデバッグ情報を含む最初のコード行に移動します (通常はユーザーが記述したコードの位置になります)。

デバッグセッションを開始するとき，このデフォルトの動作をオーバーライドし，プログラム内の最初の実行可能文をステップ実行またはトレースできます。この機能によりプロジェクトの起動ルーチンをデバッグすることができます。

プログラム内の最初の実行可能文をステップ実行またはトレースするには

1.	［オプション(O)｜環境(E)］を選択し［Preferences］ページタブをクリックします。

2.	［初期化部のデバッグ(T)］チェックボックスにチェックマークを付けます。

3.	実行メニューの［トレース実行(T)］または［ステップ実行(S)］を選択してプログラムを実行します。


参照00851

デバッガの処理

実行(R)｜ステップ実行(S)

実行(R)｜トレース実行(T)


ブレークポイントウィンドウの操作
ブレークポイントウィンドウの操作00852

参照

ブレークポイントウィンドウは次の操作に使えます。

ブレークポイントの設定

ブレークポイントの検索

ブレークポイントの無効化と有効化

ブレークポイントの削除

ブレークポイントプロパティの変更


参照00853

ブレークポイント

ブレークポイントウィンドウ

デバッガの処理


ブレークポイントの設定
ブレークポイントの設定00854

参照

ブレークポイントはデバッグを開始する前，または (コードエディタにアクセスして) プログラム実行中に設定できます。アプリケーションはブレークポイントに到達すると実行を停止します。

プログラム内の特定の行で実行に割り込みをかけるブレークポイントを設定するには

次のいずれかの操作をします。

コードエディタ内で行の左端の隣にあるポインタをクリックする

行を右クリックし，コードエディタのスピードメニューで［ブレークポイントの設定(K)］を選択する

行内に挿入ポイントを置き，F5 を押す

条件ブレークポイントを設定するには

次のいずれかの操作をします。

［実行(R)｜ブレークポイントの追加(B)］を選択し，［ブレークポイントの編集］ダイアログボックスに必要な情報を入力する

ブレークポイントウィンドウを右クリックし，［ブレークポイントの追加(A)］を選択し，［ブレークポイントの編集］ダイアログボックスに必要な情報を入力する

ブレークポイントウィンドウで既存のブレークポイントを右クリックし，［ブレークポイントの編集(E)］を選択し，［ブレークポイントの編集］ダイアログボックスに必要な情報を入力する


参照00855

ブレークポイント

ブレークポイントウィンドウ

ブレークポイントウィンドウの操作


ブレークポイントの検索
ブレークポイントの検索00856

参照

コードエディタでブレークポイントが見つからない場合，ブレークポイントウィンドウを使ってソースコード内のブレークポイントをすばやく探し出せます。

ブレークポイント位置までコードエディタをスクロールするには

ブレークポイントウィンドウでブレークポイントを右クリックし［ソースコードの表示(V)］を選択する

ブレークポイント位置までコードエディタをスクロールしてコードエディタをアクティブにするには

ブレークポイントウィンドウでブレークポイントを右クリックし［ソースコードの編集(S)］を選択する

［ソースコードの表示(V)］を選択した場合，ブレークポイントウィンドウはアクティブなまま残るので，ブレークポイントを変更したり別のブレークポイントを表示したりできます。［ソースコードの編集(S)］を選択した場合，コードエディタにフォーカスが移り，その位置でソースコードを変更できます。


参照00857

ブレークポイント

ブレークポイントウィンドウ

ブレークポイントウィンドウの操作


ブレークポイントの無効化と有効化
ブレークポイントの無効化と有効化00858

参照

ブレークポイントを使用不可 (無効) にすると現在のプログラム実行からブレークポイントが隠れます。ブレークポイントを使用不可にした場合，定義された設定はそのまま残りますが，そのブレークポイントに到達してもプログラムは停止しません。ブレークポイントを設定した場合，デフォルトではそのブレークポイントは有効になります。

一時的に不要になるものの設定を保持したいブレークポイントは無効にすると便利です。

1 つのブレークポイントを無効にするには

ブレークポイントウィンドウでそのブレークポイントを右クリックし［ブレークポイントの無効化(I)］を選択する

ソースコードファイル内のすべてのブレークポイントを無効にするには

ブレークポイントウィンドウを右クリックし［すべてのブレークポイントの無効化(L)］を選択する

1 つのブレークポイントを有効にするには

ブレークポイントウィンドウでそのブレークポイントを右クリックし［ブレークポイントの有効化(N)］を選択する

ソースコードファイル内のすべてのブレークポイントを有効にするには

ブレークポイントウィンドウを右クリックし［すべてのブレークポイントの有効化(B)］を選択する


参照00859

ブレークポイント

ブレークポイントウィンドウ

ブレークポイントウィンドウの操作


ブレークポイントの削除
ブレークポイントの削除00860

参照

ブレークポイント位置でコードを調べる必要がなくなった場合は，デバッグセッションからブレークポイントを削除できます。ブレークポイントはコードエディタまたはブレークポイントウィンドウを使って削除できます。

1 つのブレークポイントを削除するには

次のいずれかの操作をします。

ブレークポイントウィンドウでそのブレークポイントを右クリックし［ブレークポイントの削除(D)］を選択する

コードエディタでそのブレークポイントを右クリックし［ブレークポイントの切り替え(K)］を選択する

コードエディタ内でそのブレークポイントを含む行に挿入ポイントを置き，F5 を押す

コードエディタ内でそのブレークポイントを含む行の左端にあるストップ記号グリフをクリックする

ソースコードファイル内のすべてのブレークポイントを削除するには

ブレークポイントウィンドウを右クリックし［すべてのブレークポイントの削除(T)］を選択する


参照00861

ブレークポイント

ブレークポイントウィンドウ

ブレークポイントウィンドウの操作


ブレークポイントプロパティの変更
ブレークポイントプロパティの変更00862

参照

ブレークポイントプロパティはブレークポイント作成時に指定したり，作成後に変更したりできます。Delphi では次のブレークポイントプロパティを指定できます。

ブレークポイントを含むファイルの名前

ブレークポイントが位置する行番号

プログラムブレーク発生の論理条件

特定の状況が指定の回数発生した場合にブレークを発生させる通過回数条件

ブレークポイントプロパティの指定方法

ブレークポイントプロパティを変更するには［ブレークポイントの編集］ダイアログボックスを使います。［ブレークポイントの編集］ダイアログボックスを表示するには，次のいずれかを実行します。

［実行(R)｜ブレークポイントの追加(B)］を選択する

ブレークポイントウィンドウを右クリックし［ブレークポイントの追加(A)］を選択する

ブレークポイントウィンドウで既存のブレークポイントを右クリックし［ブレークポイントの編集(E)］を選択する


参照00863

ブレークポイント

ブレークポイントウィンドウ

ブレークポイントウィンドウの操作


監視式ウィンドウの操作
監視式ウィンドウの操作00864

参照

監視式ウィンドウは次の操作に使えます。

監視式の設定

監視式の無効化と有効化

監視式の削除


参照00865

監視式

監視式ウィンドウ


監視式の設定
監視式の設定00866

参照

式の値を表示する監視式を設定するには［監視式の設定］ダイアログボックスを使います。

［監視式の設定］ダイアログボックスを表示するには

次のいずれかの操作をします。

行を右クリックし，コードエディタのスピードメニューで［監視式リストへの追加(A)］を選択する

行内に挿入ポイントを置き，Ctrl+F5 を押す

［実行(R)｜監視式の追加(W)］を選択する

監視式ウィンドウを右クリックし［監視式の追加(A)］を選択する

監視式ウィンドウで既存の監視式を右クリックし［監視式の編集(E)］を選択する


参照00867

監視式

監視式ウィンドウ

監視式ウィンドウの操作


監視式の無効化と有効化
監視式の無効化と有効化00868

参照

監視式を使用不可 (無効) にすると現在のプログラム実行から監視式が隠れます。監視式を使用不可にした場合，定義された設定はそのまま残りますが，その監視式は評価されません。

監視式を無効にすると，プログラムをステップ実行または実行する際に監視式が監視されないため，デバッガの処理効率が向上します。監視式を設定した場合，デフォルトではその監視式は有効になります。

1 つの監視式を無効にするには

監視式ウィンドウでその監視式を右クリックし［監視式の無効化(I)］を選択する

監視式ウィンドウでその監視式をダブルクリックして［監視式の設定］ダイアログボックスを開き，［有効(N)］チェックボックスのチェックマークをはずす

ソースコードファイル内のすべての監視式を無効にするには

監視式ウィンドウを右クリックし［すべての監視式の無効化(B)］を選択する

1 つの監視式を有効にするには

監視式ウィンドウでその監視式を右クリックし［監視式の有効化(N)］を選択する

ソースコードファイル内のすべての監視式を有効にするには

監視式ウィンドウを右クリックし［すべての監視式の有効化(L)］を選択する


参照00869

監視式

監視式ウィンドウ

監視式ウィンドウの操作


監視式の削除
監視式の削除00870

参照

式の値を調べる必要がなくなった場合，デバッグセッションから監視式を削除できます。

1 つの監視式を削除するには

監視式ウィンドウでその監視式を右クリックし［監視式の削除(D)］を選択する

ソースコードファイル内のすべての監視式を削除するには

監視式ウィンドウで監視式を右クリックし［すべての監視式の削除(T)］を選択する


参照00871

監視式

監視式ウィンドウ

監視式ウィンドウの操作


デバッガでの式の評価と変更
デバッガでの式の評価と変更00872

参照

既存の式またはプロパティの値を評価したり変更するには［評価/変更］ダイアログボックスを使います。

式またはプロパティを評価するには

1.	［実行(R)｜評価/変更(V)］を選択するか，コードエディタを右クリックしてコードエディタのスピードメニューで［評価/変更(E)］を選択して，［評価/変更］ダイアログボックスを表示します。

2.	［評価式(E)］編集ボックスで式を指定します。

プロパティを評価するには，プロパティ名を明確に指定します。たとえば，Button1.Caption のように入力します。

3.	［評価(V)］を選択します。

項目の値が［結果(R)］編集ボックスに表示されます。

指定した式またはプロパティの値を変更するには

1.	［実行(R)｜評価/変更(V)］を選択するか，コードエディタを右クリックしてコードエディタスピードメニューで［評価/変更(E)］を選択して，［評価/変更］ダイアログボックスを表示します。

2.	［評価式(E)］編集ボックスで式を指定します。

プロパティを変更するには，プロパティ名を明確に指定します。たとえば，Button1.Caption のように入力します。

3.	［新しい値(N)］編集ボックスに値を入力します。

4.	［変更(M)］を選択します。

［結果(R)］編集ボックスに新しい値が表示されます。


参照00873

［評価/変更］ダイアログボックス


関数呼び出しの検索
関数呼び出しの検索00874

参照

呼び出し履歴ウィンドウはソースコードから関数呼び出しをすばやく探し出すために使えます。

関数呼び出しの位置までコードエディタをスクロールするには

呼び出し履歴ウィンドウで関数呼び出しを右クリックし［ソースコードの表示(V)］を選択する

関数呼び出しの位置までコードエディタをスクロールしてコードエディタをアクティブにするには

呼び出し履歴ウィンドウで関数呼び出しを右クリックし［ソースコードの編集(S)］を選択する

［ソースコードの表示(V)］を選択した場合，呼び出し履歴ウィンドウはアクティブなまま残ります。［ソースコードの編集(S)］を選択した場合，コードエディタにフォーカスが移り，その位置でソースコードを変更できます。

関数呼び出しのステップ実行

呼び出し履歴ウィンドウはステップ実行したいコードを誤ってトレースした場合に便利です。呼び出し履歴ウィンドウを使って，現在の関数を呼び出したポイントに戻り，デバッグを再開できます。

呼び出し履歴ウィンドウを使って関数呼び出しをステップ実行するには

1.	呼び出し履歴ウィンドウで，呼び出し元の関数 (呼び出し履歴ウィンドウの 2 番目の関数) を右クリックし［ソースコードの編集(S)］を選択します。

コードエディタがアクティブになり，関数呼び出しの位置にカーソルが置かれます。

2.	コードエディタ内で，関数呼び出しの次の文にカーソルを移動します。

3.	［実行(R)｜カーソル位置まで実行(C)］を選択します。


参照00875

呼び出し履歴ウィンドウ


ハードウェアとソフトウェアの例外の処理
デバッガでの例外処理00876

参照

Delphi ではデバッグ中に例外を処理する方法を制御できます。また，Delphi ではほとんどのハードウェア例外を Object Pascal 言語例外として扱うことによって，デバッグセッションの作業を軽減しています。つまり，作成した Delphi アプリケーションによって生成されるハードウェア例外は Delphi によってトラップされるため，プログラムがシステムクラッシュを発生させて停止する前に，完全に回復できることを意味します。

Delphi アプリケーションのデバッグ中にハードウェア例外または言語例外が発生した場合，プログラムの実行は中断し，［例外］ダイアログボックスが表示されます。［OK］を選択するとプログラムの実行は続行されます。ただし例外が発生したためプログラムの状態は不安定になります。

例外発生時にプログラム実行を一時停止するには

1.	［オプション(O)｜環境(E)］を選択し，［Preferences］ページタブをクリックします。

2.	［例外でデバッガに戻る(B)］チェックボックスにチェックマークを付けます。

［例外でデバッガに戻る(B)］にチェックマークを付けた場合，例外が発生したとき［例外］ダイアログボックスが表示されます。ただしこの場合，［OK］を選択してダイアログボックスを閉じると，コードエディタが開き例外の位置に実行ポイントが置かれます。

プログラムコードを調べた後は，［実行(R)｜プログラムの終了(E)］を選択してプログラム実行を停止してください。その後デバッグセッションを再開する前に例外の原因となったエラーを修正できます。


参照00877

デバッガの処理


トピックが見つかりません
 トピックが見つかりません00878

検索したトピックが見つかりませんでした。ヘルプファイルに問題があるか，そのトピックへのリンクに問題があると考えられます。［目次］，［キーワード］または［テキスト検索］タブを使うとこのトピックを見つけられるかもしれません。

トピックを検索するには

1	カテゴリ別にトピックをブラウズするために［目次］タブをクリックします。

2	［キーワード］タブをクリックすると索引項目のリストが表示されます。

探している言葉は入力するかリストをスクロールして探します。

3	［テキスト検索］タブをクリックするとその単語または語句が検索されます (Windows NT 3.51のみ)。


Welcome to RoboHELP. Click Topic (Ctrl+T) to add your first Help topic.

This is associated with the Delphi 95 project file document.


ユーザーインターフェースの設計
ユーザーインターフェースの設計00879

参照

ユーザーインターフェースの作成にはフォームとそのコンポーネントのプロパティの設定が必要です。プロパティによって，アプリケーションを初めて実行するときのコンポーネントの表示と応答が決まります。アプリケーションの実行後にコンポーネントのプロパティを変更するにはコードの作成が必要です。

MainMenu, ScrollBar, Panel, TabSet など Delphi に含まれる多くのコンポーネントはユーザーインターフェースの細かいルックアンドフィールを提供するように特別設計されています。

次の各トピックでは Delphi コンポーネントを使ってユーザーインターフェースを設計する方法について説明しています。

画像の追加

スクロールバーの追加

ステータスラインの追加

ツールバーの追加

アプリケーションコンポーネントのヘルプヒントの提供

ダイアログボックスの作成

タブ付きページの作成

メニューの設計

図形の描画

テキスト処理用の領域の提供


参照00880

フォームに対する操作

Dialog コンポーネントの使い方


アプリケーションコンポーネントのヘルプヒントの提供
アプリケーションコンポーネントのヘルプヒントの提供00881

参照

Delphi のコンポーネントパレットにあるコンポーネントとスピードバーにあるボタンの上にマウスカーソルを合わせると，ヘルプヒントが表示されます。

Delphi のインターフェースは Delphi を使って作られているので，フォーム内のコンポーネントもヘルプヒントを表示できます。

コンポーネントのヘルプヒントを準備するには

1.	コンポーネントの Hint プロパティに値を指定します。

2.	コンポーネントの ShowHint プロパティを True に設定します。

値をアプリケーション自身で設定することによって，ヒントカラーや，ヒントが表示されるまでの時間などの他の特性も制御できます。

別のヒントカラーを指定するには

アプリケーションの HintColor プロパティを適当な色に設定する (デフォルトカラーは Yellow)。たとえば次のようにする

Application.HintColor := clBlue

ヒントが表示されるまでの時間を指定するには

アプリケーションの HintPause プロパティを設定する

たとえばコンポーネント上にマウスを合わせてから 3 秒後にヒントが表示されるようにするには，Application.HintPause を 3000 に設定します。

メモ:	詳細はアプリケーションイベントの処理を参照してください。


参照00882

Delphi IDE でのヘルプヒントの表示


コードエディタの使い方
コードエディタの使い方00903

参照

Delphi のコードエディタを使うと，簡単に確実にソースコードを表示して編集できます。次の状況でコードエディタにページが作成されます。

新しいプロジェクトを作成したとき

プロジェクトにフォームまたはユニットを追加したとき

ファイルを開いたとき (開いたファイルをプロジェクトファイルに追加しない場合も含む)

コードエディタはテキストファイルを開いて表示や編集をするためにも使えます。

コードエディタのページを開くには

新しいフォーム，ユニット，その他のファイルをプロジェクトに追加する

コードエディタのページを選択するには

コードエディタの下部にあるタブのうち，表示または編集したいページに対応したタブをクリックする

コードエディタでテキストを編集するには

1.	新しいテキストを入力する位置にカーソルを移動します。

2.	新しいテキストを入力し，行末で Enter を押します。

コードエディタのページを閉じるには

次のどちらかの操作をします。

閉じるページを選択してから［ファイル(F)｜ファイルを閉じる(C)］を選択する

コードエディタウィンドウを右クリックしてから［このページを閉じる(P)］を選択する

コードエディタのすべてのページとプロジェクトを閉じるには

次のどちらかの操作をします。

コントロールメニューの［閉じる(C)］を選択する

コードエディタの左上隅にあるコントロールメニューボックスをダブルクリックする

ページ内の変更したコードを保存していない場合，ファイル名を入力するための［名前を付けて保存］ダイアログボックスが開きます。

プロジェクトを変更して保存していない場合，プロジェクト名を入力するための［名前を付けて保存］ダイアログボックスが開きます。


参照00904

コードエディタのしくみ

コードエディタ

コードエディタスピードメニュー

コードエディタウィンドウ

コードエディタでのヘルプの表示

キーボードショートカット

コードエディタでのページの表示


コードエディタウィンドウ
コードエディタウィンドウ00905

参照

コードエディタウィンドウにはコードエディタページが必ず 1 ページ以上あります。ページを含まないコードエディタウィンドウはありえません。つまり，コードエディタウィンドウの最後のページを閉じるとコードエディタウィンドウが閉じます。

1 つのコードエディタウィンドウで複数のファイルを開くことができます。ファイルごとに新しいページが開き，それぞれのページがウィンドウ下部のタブで表されます。たとえば，プロジェクトを開くと，そのプロジェクトがウィンドウの最初のタブになります。ユニットファイルなどのファイルを開くごとに，それぞれのファイルが続けてタブで表されます。

別のウィンドウを開くことで，コードエディタの任意のページのコピーを開くことができます。

コードエディタウィンドウを開くには

次のどちらかの操作をします。

ファイルを開く

［表示(V)｜編集ウィンドウの作成(E)］を選択する

[編集ウィンドウの作成(E)] コマンドを使うと，コードエディタの現在のページのコピーが開きます。

変更したコードを保存していない場合，ファイル名を入力するための［名前を付けて保存］ダイアログボックスが開きます。


参照00906

フォームへのコンポーネントの追加

コードエディタの使い方


コードエディタのしくみ
コードエディタのしくみ00907

参照

フォームにコンポーネントを追加すると，コンポーネントのインスタンス変数 (フィールド) が生成され，そのインスタンス変数がフォームの型宣言に追加されます。例として，空白フォームにプッシュボタンコンポーネントを追加した場合のコードを次に示します。

type

  TForm1 = class(TForm)

    Button1: TButton;

  end;

プッシュボタンを追加すると，フォームの型宣言 (TForm1 = class(TForm)) にボタン自体のフィールド (Button1: TButton;) が追加されます。現在のプロジェクトでも新しいプロジェクトでも，コードエディタで同様にコードが追加されるのを確認できます。

コードが追加されるのをコードエディタで確認するには

1.	フォームのタイトルバーをドラッグしてコードエディタ全体が見えるようにします。

2.	型宣言部の位置までコードエディタ内をスクロールします。

3.	コードエディタの中で何が起きるか注目しながらフォームにコンポーネントを追加します。

メモ:	Delphi が生成するコードは編集しないでください。編集するのは自分で作成したコードだけにしてください。


参照00908

フォームへのコンポーネントの追加

コードエディタの使い方


コードエディタでのヘルプの表示
コードエディタでのヘルプの表示00909

参照

コードエディタのほぼすべての部分で状況感知型のヘルプを使えます。状況はカーソルの現在位置に応じて決まります。

コードエディタウィンドウで状況感知型のヘルプを参照するには

次のどちらかの操作をします。

ヘルプを参照したいコードにカーソルを移動してから Ctrl+F1 を押す

コードエディタを右クリックしてからスピードメニューで［カーソル位置のシンボルで検索(S)］を選択する

選択した特定の項目についてのヘルプがない場合，［キーワードで検索］ダイアログボックスが表示されます。

選択した特定の項目についてのヘルプがない場合，［Help Topic Does Not Exist］というメッセージが表示されます。このメッセージが表示された場合，次の 3 つのいずれかを選択できます。

メインヘルプ画面に戻る

検索する別の項目を選択する

前に表示していた項目に戻る


参照00910

ヘルプ(H)｜ヘルプの使い方(H)

コードエディタの使い方


コードエディタウィンドウでのページの表示
コードエディタウィンドウでのページの表示00911

参照

コードエディタ のページを表示している場合，コードの特定の部分だけでなくページ内のすべてのデータをスクロールできます。

コードエディタにページを表示するには

次のいずれかの操作をします。

コードエディタウィンドウがすでにアクティブな場合，表示するページに対応するタブをクリックする

［表示(V)｜ユニット(U)］を選択する

プロジェクトマネージャスピードメニューで［ユニットの表示(U)］を選択する

プロジェクトマネージャスピードバーで［ユニット表示(U)］ボタンをクリックする


参照00912

プロジェクトマネージャ

コードエディタの使い方


コードエディタスピードメニュー
コードエディタスピードメニュー00913

参照	スピードメニュー

コードエディタスピードメニューには，ソースコード内を移動したりソースコードを修正またはデバッグするためのコマンドがあります。コードエディタスピードメニューはコードエディタに固有であり，そのコマンドはコードエディタ専用です。

コードエディタスピードメニューのコマンドを次に示します。各コマンドについての詳細は次のリストのコマンドをクリックして参照してください。

このページを閉じる(P)

ファイルを開く(F)

カーソル位置のシンボルを調べる(B)

カーソル位置のシンボルで検索(S)

しおりの設定(T)

しおりに移動(M)

ブレークポイントの設定(K)

カーソル位置まで実行(R)

評価/変更(E)

監視式リストへの追加(A)

書き込み禁止(O)

コードエディタスピードメニューを開くには

次のどちらかの操作をします。

コードエディタウィンドウ内で右クリックする

コードエディタウィンドウがアクティブなときに Alt+F10 を押す


参照00914

コードエディタの使い方


このページを閉じる(P) (コードエディタスピードメニュー)
このページを閉じる(P) (コードエディタスピードメニュー)00915

コードエディタスピードメニュー

コードエディタスピードメニューで［このページを閉じる(P)］を選択すると，コードエディタウィンドウの現在のページが閉じます。

変更したコードを保存していない場合，ファイルの最後のページを閉じようとすると，新しいファイル名を入力するための［名前を付けて保存］ダイアログボックスが開きます。

まだ保存していないプロジェクトの最後のページを閉じようとすると，プロジェクト名を入力するための［名前を付けて保存］ダイアログボックスが開きます。


ファイルを開く(F) (コードエディタスピードメニュー)
ファイルを開く(F) (コードエディタスピードメニュー)00916

コードエディタスピードメニュー

コードエディタスピードメニューで［ファイルを開く(F)］を選択すると，現在のカーソル位置にあるファイルが開きます。

ファイルの拡張子を明示的に指定しなかった場合，デフォルトの .PAS の拡張子のファイルが検索されます。ユニットファイルとインクルードファイルのディレクトリ設定については，［オプション(O)｜プロジェクト(P)］で表示されるダイアログボックスの［Directories/Conditionals］ページに指定したディレクトリ設定が使われます。

ユニットファイルとインクルードファイルのディレクトリ設定を変更するには

1.	Delphi のメインメニューで［オプション(O)｜プロジェクト(P)］を選択します。

2.	［Directories/Conditionals］ページをクリックします。

3.	ユニットファイルとインクルードファイルのディレクトリを設定します。

4.	［OK］を選択して新しい設定を有効にします。


Browse Symbol at Cursor (Code Editor SpeedMenu)
Browse Symbol At Cursor (Code Editor SpeedMenu)00917

See also	Code Editor SpeedMenu

Choose Browse Symbol At Cursor from the Code Editor SpeedMenu to open the Symbol Inspection window for the highlighted symbol.

The symbol can be any object, unit, or variable symbol defined in your source code (not only in the current file, but also in any source file compiled and linked as part of the same project).

To browse symbols, you need to compile with the Local Symbols and Symbol Information options on the Compiler Options page of the Project dialog box enabled.


参照00918

ObjectBrowser


カーソル位置のシンボルを調べる(B) (コードエディタスピ[ドメニュー)
カーソル位置のシンボルを調べる(B) (コードエディタスピードメニュー)00919

参照	コードエディタスピードメニュー

コードエディタスピードメニューで［カーソル位置のシンボルを調べる(B)］を選択すると，強調表示したシンボルの［シンボルを調べる］ウィンドウが開きます。

シンボルは，ソースコード内で定義したオブジェクト，ユニット，変数のシンボルのいずれかです (ソースコード内とは，現在のファイル内に限らず，同じプロジェクトの一部としてコンパイルとリンクをするいずれかのソースファイル内も含みます)。

シンボルを参照するには，［プロジェクトの設定］ダイアログボックスの［Compiler］ページで［ロールシンボル(L)］と［シンボル情報(Y)］のオプションを両方有効にしてコンパイルしなくてはなりません。


しおりの設定(T) (コードエディタスピードメニュー)
しおりの設定(T) (コードエディタスピードメニュー)00920

参照	コードエディタスピードメニュー

コードエディタスピードメニューで［しおりの設定(T)］を選択すると，現在のカーソル位置にしおりが設定されるかまたはその位置から削除されます。

コードエディタ内にしおりを設定するには

1.	しおりを設定する行に挿入ポイントカーソルを移動します。

2.	コードエディタスピードメニューを開きます。

3.	［しおりの設定(T)］を選択します。

しおり (0 から 9) のリストが表示されます。

4.	現在のカーソル位置に挿入するしおりを選択します。

しおりが付いている行の左マージンにしおりが表示されます。

しおりを個別に削除するには

1.	削除するしおりのある行に挿入ポイントカーソルを移動します。

2.	コードエディタスピードメニューを開きます。

3.	［しおりの設定(T)］を選択します。

しおり (0 から 9) のリストが表示されます。

4.	現在のカーソル位置にある削除するしおりを選択します。

マークしていた行の左マージンのしおりが削除されます。

すべてのしおりを削除するには

コードエディタスピードメニューで［このページを閉じる(P)］コマンドを選択します。

ページを閉じるとすべてのしおりが削除されます。しおりはユニットファイルに保存されないので注意してください。


参照00921

しおりに移動(M)


しおりに移動(M) (コードエディタスピードメニュー)
しおりに移動(M) (コードエディタスピードメニュー)00922

参照	コードエディタスピードメニュー

コードエディタスピードメニューで［しおりに移動(M)］を選択すると，定義済みのしおりへカーソルが移動します。

コードエディタのしおりへ移動するには

1.	コードエディタスピードメニューを開きます。

2.	［しおりに移動(M)］を選択します。

しおり (0 から 9) のリストが表示されます。

3.	カーソルの移動先のしおりを選択します。

マークしてある位置にカーソルが移動します。

メモ:	未定義のしおりをリストから選択した場合，カーソルは現在位置から移動しません。

しおりを個別に削除するには

1.	削除するしおりのある行に挿入ポイントカーソルを移動します。

2.	コードエディタスピードメニューを開きます。

3.	［しおりの設定(T)］を選択します。

しおり (0 から 9) のリストが表示されます。

4.	現在のカーソル位置にある削除するしおりを選択します。

マークしていた行の左マージンのしおりが削除されます。

すべてのしおりを削除するには

コードエディタスピードメニューで［このページを閉じる(P)］コマンドを選択します。

ページを閉じるとすべてのしおりが削除されます。しおりはユニットファイルに保存されないので注意してください。


参照00923

しおりの設定(T)


ブレークポイントの設定(K) (コードエディタスピードメニュー)
ブレークポイントの設定(K) (コードエディタスピードメニュー)00924

参照	コードエディタスピードメニュー

コードエディタスピードメニューで［ブレークポイントの設定(K)］を選択すると，現在のカーソル位置にあるブレークポイントの有効と無効が切り替わります。

ブレークポイントを設定していない場合，［ブレークポイントの設定(K)］コマンドを選択するとブレークポイントが設定され有効になります。ブレークポイントを設定してある場合，このコマンドを使うとブレークポイントが無効に切り替わります。

ブレークポイントプロパティを変更するには

ブレークポイントウィンドウ内で既存のブレークポイントを右クリックしてから［ブレークポイントの編集(E)］を選択する


参照00925

ブレークポイントの設定

ブレークポイント

Delphi のデバッガ


カーソル位置まで実行(R) (コードエディタスピードメニュー)
カーソル位置まで実行(R) (コードエディタスピードメニュー)00926

参照	コードエディタスピードメニュー

［カーソル位置まで実行(R)］を選択すると，ロードプログラムがモジュールウィンドウ内のカーソル位置まで実行されます。

カーソル位置まで実行すると，プログラムは最大の速度で実行されてから一時停止し，カーソルのあるコード行に実行ポイントが移動します。

［カーソル位置まで実行(R)］を使うと，問題があると疑われる位置までプログラムを実行して一時停止できます。一時停止した後，［実行(R)｜ステップ実行(S)］または［実行(R)｜トレース実行(T)］を使ってコードの実行を 1 行ずつ制御できます。

［カーソル位置まで実行(R)］コマンドは次の方法でも実行できます。

［実行(R)｜カーソル位置まで実行(C)］を選択する


参照00927

プログラム実行の制御

統合デバッガについて


評価/変更(E) (コードエディタスピードメニュー)
評価/変更(E) (コードエディタスピードメニュー)00928

参照	コードエディタスピードメニュー

［評価/変更(E)］コマンドを使うと，既存の式の値の評価や変更ができる［評価/変更(E)］ダイアログボックスが開きます。

［評価/変更(E)］コマンドは次の方法でも実行できます。

［実行(R)｜評価/変更(V)］を選択する


参照00929

式の評価と変更

統合デバッガについて


監視式リストへの追加(A) (コードエディタスピードメニュー)
監視式リストへの追加(A) (コードエディタスピードメニュー)00930

参照	コードエディタスピードメニュー

［監視式リストへの追加(A)］コマンドを使うと，監視式 の作成や変更ができる［監視式の設定］ダイアログボックスが開きます。監視式を作成した後で現在の監視式のリストを表示したり管理するには，監視式ウィンドウを使います。

［監視式リストへの追加(A)］コマンドは次の方法でも実行できます。

コードエディタスピードメニューで［実行(R)｜監視式の追加(B)］を選択する

監視式リストスピードメニューで［監視式の追加(A)］を選択する

既存の監視式を監視式ウィンドウで右クリックしてから監視式リストスピードメニューで［監視式の編集(E)］を選択する


参照00931

監視式の設定

監視式

Delphi のデバッガ


書き込み禁止(O) (コードエディタスピードメニュー)
書き込み禁止(O) (コードエディタスピードメニュー)00932

コードエディタスピードメニュー

コードエディタスピードメニューで［書き込み禁止(O)］を選択すると，現在開いているファイルが読み出し専用になります。読み出し専用のファイルは内容を変更できません。

ファイルを読み出し専用にすると，コードエディタスピードメニュー内の［書き込み禁止(O)］コマンドにチェックマークが付き，コードエディタのステータスラインに［書き込み禁止(O)］と表示されます。


コードエディタコントロールメニュー
コードエディタコントロールメニュー00933

参照

コードエディタのコントロールメニューボックスはコードエディタウィンドウの左上隅にあります。コントロールメニューボックスを 1 回クリックするか Alt とスペースキーを同時に押すと，コントロールメニューが表示されます。コントロールメニューにあるコマンドを使うと，コードエディタウィンドウを操作できます。

コントロールメニューには次のコマンドがあります。

元のサイズに戻す(R)

移動(M)

サイズ変更(S)

アイコン化(N)

最大表示(X)

閉じる(C)

アプリケーションの切り替え(W)


参照00934

コードエディタの使い方


元のサイズに戻す(R) (コントロールメニュー)
元のサイズに戻す(R) (コントロールメニュー)00935

コードエディタコントロールメニュー

［元のサイズに戻す(R)］を選択すると，コードエディタウィンドウの位置とサイズが，以前の位置とサイズに戻ります (以前が最大表示またはアイコン化であった場合を除きます)。

［元のサイズに戻す(R)］コマンドを使えるのは，コードエディタウィンドウを最大表示またはアイコン化している場合だけです。

ショートカット

コードエディタの右上隅で上下を向いた 2 つの三角形をクリックする


移動(M) (コントロールメニュー)
移動(M) (コントロールメニュー)00936

コードエディタコントロールメニュー

［移動(M)］を選択すると，マウスでドラッグするのではなくキーボードを使ってコードエディタウィンドウを移動できます。

コードエディタウィンドウを移動するには

1.	コントロールメニューの［移動(M)］を選択します。

2.	キーボードの矢印キーを使ってウィンドウの位置を変更します。

3.	Enter を押します。

メモ:	コードエディタウィンドウを最大表示している場合は［移動(M)］コマンドを使えません。

ショートカット

コードエディタのタイトルバーをドラッグする


サイズ変更(S) (コントロールメニュー)
サイズ変更(S) (コントロールメニュー)00937

コードエディタコントロールメニュー

［サイズ変更(S)］を選択すると，境界をマウスでドラッグするのではなくキーボードを使ってコードエディタウィンドウのサイズを変更できます。

コードエディタウィンドウのサイズを変更するには

1.	コントロールメニューの［サイズ変更(S)］を選択します。

2.	キーボードの矢印キーを使ってウィンドウの境界を動かし，適当なサイズに変更します。

3.	Enter を押します。

メモ:	コードエディタウィンドウを最大表示している場合は［サイズ変更(S)］コマンドを使えません。

ショートカット

コードエディタウィンドウの境界をドラッグする。垂直方向にサイズ変更するにはウィンドウの上下の境界をドラッグし，水平方向にサイズ変更するにはウィンドウの左右の境界をドラッグする。ウィンドウの 4 隅のいずれかを使うと水平方向と垂直方向のサイズを同時に変更できる


アイコン化(N) (コントロールメニュー)
アイコン化(N) (コントロールメニュー)00938

コードエディタコントロールメニュー

［アイコン化(N)］を選択すると，他のすべての Delphi ウィンドウとともにコードエディタウィンドウがアイコン化されて 1 つの Delphi アイコンになります。

コードエディタをすでにアイコン化している場合は［アイコン化(N)］コマンドを使えません。

ショートカット

コードエディタの右上隅にある下向きの三角形をクリックする


最大表示(X) (コントロールメニュー)
最大表示(X) (コントロールメニュー)00939

コードエディタコントロールメニュー

［最大表示(X)］を選択すると，コードエディタウィンドウが拡大されて画面全体に表示されます。

コードエディタウィンドウをすでに最大表示している場合は［最大表示(X)］コマンドを使えません。

ショートカット

コードエディタの右上隅にある上向きの三角形をクリックする


閉じる(C) (コントロールメニュー)
閉じる(C) (コントロールメニュー)00940

コードエディタコントロールメニュー

［閉じる(C)］を選択すると，コードエディタのすべてのページとプロジェクトが閉じます。変更したコードを保存していない場合，新しいファイル名を入力するための［名前を付けて保存］ダイアログボックスが開きます。

［閉じる(C)］コマンドを使うと現在のプロジェクトも閉じます。プロジェクトを保存していない場合，プロジェクト名を入力する［名前を付けて保存］ダイアログボックスが開きます。

ショートカット

Alt+F4 を押す

コードエディタのコントロールメニューボックスをダブルクリックする


アプリケーションの切り替え(W) (コントロールメニュー)
アプリケーションの切り替え(W) (コントロールメニュー)00941

コードエディタコントロールメニュー

［Switch To］を選択すると，Windows の［アプリケーションの切り替え］ダイアログボックスが表示されます。このダイアログボックスでは，別のアプリケーションに切り替えたり，各アプリケーションのウィンドウを整列し直したりできます。

ショートカット

Ctrl+Esc を押す

アプリケーションの外側で Windows のデスクトップをダブルクリックする


選択領域を保存ダイアログボックス
選択領域を保存ダイアログボックス00942

参照

［選択領域を保存］ダイアログボックスは，コードエディタウィンドウ内で選択したテキストブロックを書き出すファイルの名前と場所を指定するときに使います。

デフォルトのキー入力マッピングを使っている場合は，Ctrl+K+W でこのダイアログボックスが表示されます。


参照00943

[ファイルから挿入] ダイアログボックス


ファイルから挿入ダイアログボックス
ファイルから挿入ダイアログボックス00944

参照

［ファイルから挿入］ダイアログボックスは，コードエディタウィンドウの現在のカーソル位置に挿入する Object Pascal のソースコードブロックを含んだファイルの名前と場所を指定するときに使います。

デフォルトのキー入力マッピングを使っている場合は，Ctrl+K+R でこのダイアログボックスが表示されます。


参照00945

[選択領域を保存] ダイアログボックス


タブセット変更への応答
タブセット変更への応答00946

例

ユーザーがタブをクリックするかキーボードを使ってタブセットコントロールのタブを選択すると，タブセットは OnClick イベントを生成します。タブセットの設定に依存する他のコントロールはこのクリックイベントに応じて値を更新する必要があります。

たとえば，有効な各ディスクドライブに対応するタブを含むタブセットでは，別のタブがクリックされた場合ドライブ選択の変更を意味します。ディレクトリリストなどの他のコントロールはこの変更に応答する必要があります。

タブセットの変更に応答するには，タブセットの OnClick イベントにイベントハンドラをアタッチします。


例00947

次に示すコードはタブセット DriveTabSet の OnClick イベントにアタッチされるコードで，ディレクトリアウトラインコントロールの Drive プロパティを，クリックされたタブの最初の文字に設定します。

procedure TFMForm.DriveTabSetClick(Sender: TObject);
begin
  with DriveTabSet do
    DirectoryOutline.Drive := Tabs[TabIndex][1];
end;


アウトライン変更への応答
アウトライン変更への応答00948

例

ユーザーがアウトラインの項目をクリックするか矢印キーを使って選択すると，アウトラインはクリックを生成します。現在選択されているアウトラインの項目に依存するコントロールは，このクリックに応じて値を更新する必要があります。

たとえば，ディレクトリアウトラインなどのコンポーネントでは，クリックは通常カレントディレクトリの変更を意味します。ファイルリストなど関連するコントロールはこの変更に応答する必要があります。ただし，すでに選択されているディレクトリがクリックされた可能性もあります。その場合，OnClick イベントを処理するかわりに，ディレクトリアウトラインで何かが変更されたことを示す OnChange イベントを処理する方が便利です。

アウトラインの変更に応答するには，アウトラインの OnChange イベントにハンドラをアタッチします。


例00949

次のコードはディレクトリアウトラインが変化したとき，ディレクトリアウトラインコンポーネントのカレントディレクトリを反映するようファイルリストボックスとステータスバーパネルの両方を更新します。

procedure TFMForm.DirectoryOutlineChange(Sender: TObject);
begin
  FileList.Directory := DirectoryOutline.Directory;

  DirectoryPanel.Caption := DirectoryOutline.Directory;
end;


リストボックス変更への応答
リストボックス変更への応答00950

例

ユーザーがリストボックスの項目をクリックするか矢印キーを使ってある項目に移動すると，その項目は選択項目となり，リストボックスは OnChange イベントを生成します。アプリケーションはこの変更を処理し，依存するコントロールを更新できます。

リストボックスの変更に応答するには，リストボックスの OnChange イベントにイベントハンドラをアタッチします。

たとえば，ファイルリストボックスには選択されたファイルについての情報を表示するパネルを関連付けることができます。


例00951

次に示すコードはファイルリストボックスの OnChange イベントのイベントハンドラで，ファイルリストボックスで現在選択されているファイルの名前とサイズを表示するようステータスバーパネルを更新します。

メモ:	GetFileSize はファイルマネージャのサンプルアプリケーションとともにインストールされる FMXUtils ユニットの関数です。

procedure TFMForm.FileListChange(Sender: TObject);
var
  TheFileName: string;

begin
  with FileList do
  begin
    if ItemIndex >= 0 then	{ 選択項目がありますか }
    begin
      TheFileName := FileName;	{ ファイル名を取得します }

      FilePanel.Caption := TheFileName + ', '	{ パネルキャプションに名前とサイズを }
        + IntToStr(GetFileSize(TheFileName)) + ' bytes';	{ 設定します }
    end

    else FilePanel.Caption := '';	{ 選択項目がなければ空白パネルです }
  end;
end;


オーナー描画コントロールの作成
オーナー描画コントロールの作成00952

Windows のリストボックスコントロールとコンボボックスコントロールでは「オーナー描画」と呼ばれるスタイルが使用可能です。オーナー描画とは Windows の標準テキスト描画メソッドを使ってコントロール内の各項目を描画するかわりに，コントロールのオーナー (通常はフォーム) が実行時に各項目を描画することを意味します。オーナー描画コントロールの最も一般的な使用目的は，テキストのかわりに，またはテキストに加えて，グラフィックを項目に描画することです。

次の Delphi コンポーネントはオーナー描画スタイルをサポートしています。

リストボックス

コンボボックス

タブセット

オーナー描画コントロールはすべて項目のリストを持っています。デフォルトでは，これらは文字列のリストで，Windows はこれをテキストとして表示します。Delphi ではリスト内の各項目にオブジェクトを関連付けることができ，項目を描画するときそのオブジェクトを使うことができます。

Delphi でオーナー描画コントロールを作成するには次の 3 つの手順が必要です。

1	オーナー描画スタイルの設定

2	文字列リストへのグラフィックオブジェクトの追加

3	オーナー描画項目の描画


オーナー描画スタイルの設定
オーナー描画スタイルの設定00953

オーナー描画バリアントを持つ各コントロールには Style と呼ばれるプロパティがあります。Style はそのコントロールがデフォルトの描画 (標準スタイルと呼ばれる) を使うかオーナー描画を使うかを決めます。

リストボックスとコンボボックスの場合，さらにオーナー描画スタイルの選択肢として，次の表で説明する固定と可変があります。オーナー描画タブセットと文字列グリッドは常に可変です。

オーナー描画スタイル	意味	例
固定	各項目は同じ高さを持つ。この高さは ItemHeight プロパティによって決まる	lbOwnerDrawFixed, csOwner-DrawFixed
可変	各項目は異なる高さを持つ。この高さは実行時のデータによって決まる	lbOwnerDrawVariable, csOwnerDrawVariable, tsOwnerDraw，すべての文字列グリッド
オーナー描画スタイルを設定するには

オーナー描画コンポーネントの Style プロパティを設定します。


文字列リストへのグラフィックオブジェクトの追加
文字列リストへのグラフィックオブジェクトの追加00954

参照

すべての Delphi の文字列リストには文字列のほかにオブジェクトを含めることができます。つまり，文字列リストには文字列を保存するインデックス付きの Strings プロパティのほかに，Objects プロパティもあります。

アプリケーション内にグラフィックイメージが用意されたら，そのグラフィックイメージを文字列リストの Objects プロパティに関連付けることができます。オブジェクトは文字列と同時に追加することも，追加済みの文字列に関連付けることもできます。必要なデータがすべてあれば，一般には文字列とオブジェクトを同時に追加します。

文字列リストの既存の文字列にグラフィックオブジェクトを追加するには

Objects プロパティの同じインデックスにそのオブジェクトを割り当てます。


参照00955

すべての Delphi の文字列リストには文字列のほかにオブジェクトを含めることができます。つまり，文字列リストには文字列を保存するインデックス付きの Strings プロパティのほかに，Objects プロパティもあります。

アプリケーション内にグラフィックイメージが用意されたら，そのグラフィックイメージを文字列リストの Objects プロパティに関連付けることができます。オブジェクトは文字列と同時に追加することも，追加済みの文字列に関連付けることもできます。必要なデータがすべてあれば，一般には文字列とオブジェクトを同時に追加します。

文字列リストの既存の文字列にグラフィックオブジェクトを追加するには

Objects プロパティの同じインデックスにそのオブジェクトを割り当てます。


アプリケーションへのイメージの追加
アプリケーションへのイメージの追加00956

イメージコントロールはビットマップなどのグラフィックイメージを含む非ビジュアルコンポーネントです。イメージコントロールはフォーム上にグラフィックイメージを表示するために使えますが，アプリケーションで使う非表示イメージを保持するために使うこともできます。たとえば，オーナー描画コントロールのためのビットマップを非表示イメージコントロールに格納できます。

アプリケーションにイメージを追加するには

1.	メインフォームにイメージコントロールを追加します。

2.	そのコントロールの Visible プロパティを False に設定します。

3.	ビットマップイメージを表示するように Picture プロパティを設定します。

メモ:	イメージはフォーム上に表示されますが，アプリケーションを実行するときには非表示になります。


オーナー描画項目の描画
オーナー描画項目の描画00957

コントロールのスタイルをオーナー描画に設定すると，Windows は画面上にコントロールを描画しなくなります。かわりに，Windows はコントロールの各表示項目に対するイベントを生成します。アプリケーションはイベントを処理して項目を描画します。

オーナー描画コントロールの項目を描画するには

1	項目をサイズ変更します。

オーナー描画項目がすべて同じサイズの場合 (たとえば，リストボックススタイルが lsOwnerDrawFixed の場合など)，この手順は不要です。

2	項目を描画します。


オーナー描画項目のサイズ変更
オーナー描画項目のサイズ変更00958

例

Windows はアプリケーションが可変オーナー描画コントロールの各項目を描画する前に，項目の寸法を取得するイベントを生成します。項目の寸法を取得するイベントは項目がコントロール上のどの位置に表示されるかをアプリケーションに知らせます。

Windows は項目のサイズを予測します (一般に項目のテキストを現在のフォントで表示するのに十分な大きさになります)。アプリケーションはイベントを処理し，Windows が選択した四角形を変更できます。たとえば，項目のテキストのかわりにビットマップを使う場合は，四角形をビットマップのサイズに変更します。ビットマップとテキストの両方が必要な場合は，両方を表示するのに十分な大きさの四角形になるよう調整します。

オーナー描画項目のサイズを変更するには，オーナー描画コントロールの項目の寸法を取得するイベントにイベントハンドラをアタッチします。コントロールによってイベントの名前は異なります。リストボックスとコンボボックスでは OnMeasureItem を使います。タブセットは OnMeasureTab を使います。

寸法を取得するイベントには 2 つの重要なパラメータがあります。項目のインデックス番号と項目のサイズです。このサイズは可変で，アプリケーションはこのサイズを大きくも小さくもできます。先行する項目のサイズによって後続の項目の位置が決まります。

たとえば，可変のオーナー描画リストボックスでは，アプリケーションが最初の項目の高さを 5 ピクセルに設定した場合，2 番目の項目は最上部から下に 6 番目のピクセルから始まります。リストボックスとコンボボックスでは，アプリケーションが項目に関して変更可能なのは項目の高さだけです。項目の幅は常にコントロールの幅になります。タブセットでは，コントロールのサイズによってタブの高さが固定されるため，タブの幅だけが可変です。オーナー描画グリッドではアプリケーションは各セルの高さと幅の両方を変更できます。


例00959

次のコードはオーナー描画タブセットのタブの幅を調整し，デフォルトのテキストとビットマップの両方を処理できるようにします。

タブセットの場合，各タブのデフォルトの幅はタブに含まれるテキストの幅になります。テキストの横にビットマップを表示するには，項目の寸法を取得するイベントを処理し，グラフィックとテキストの両方を表示するのに十分な領域を確保するようタブ幅の値を増やす必要があります。

次に示すコードはオーナー描画タブセットの OnMeasureItem イベントにアタッチされるコードで，それぞれのタブの幅を関連するビットマップに合わせて増やします。

procedure TFMForm.DriveTabSetMeasureTab(Sender: TObject; Index: Integer;
  var TabWidth: Integer);	{ TabWidth は var パラメータです }

var
  BitmapWidth: Integer;

begin
  BitmapWidth := TBitmap(DriveTabSet.Tabs.Objects[Index]).Width;

  { タブの幅を関連ビットマップ幅に 2 を加えた値に増やします }

  Inc(TabWidth, 2 + BitmapWidth);
end;

メモ:	文字列リストの Objects プロパティの項目は型キャストしなくてはなりません。Objects プロパティはあらゆる種類のオブジェクトを保持できるよう TObject 型になっています。配列からオブジェクトを取り出すとき，項目の実際の型に型キャストしなくてはなりません。


各オーナー描画項目の描画
各オーナー描画項目の描画00960

例

アプリケーションがオーナー描画コントロールの描画または再描画を必要とするとき，Windows はコントロール内の各表示項目に対してアイテム描画イベントを生成します。

オーナー描画コントロールの各項目を描画するには，そのコントロールのアイテム描画イベントにイベントハンドラをアタッチします。オーナー描画のイベントは次のとおりです。

OnDrawCell

OnDrawDataCell

OnDrawItem

OnDrawTab

アイテム描画イベントには次のものが含まれます。

描画する項目のインデックスを示すパラメータ

描画の枠となる四角形を示すパラメータ

項目の状態についての情報 (項目にフォーカスがあるかどうかなど) を示すパラメータ

アプリケーションは該当する項目を指定された四角形の中に描くことによって各イベントを処理します。

メモ:	ほとんどのアイテム描画イベントはキャンバスオブジェクトをパラメータとして渡しません。通常は描画中のコントロールのキャンバスを使います。タブセットの場合は項目間にタブセパレータを描画しなくてはならないため，項目描画のための特別なキャンバスがパラメータとして渡されます。


例00961

次の例は，各文字列にビットマップが関連付けられているタブセットのタブを描画します。

procedure TFMForm.DriveTabSetDrawTab(Sender: TObject; TabCanvas: TCanvas;
  R: TRect; Index: Integer; Selected: Boolean);

var
  Bitmap: TBitmap;

begin
  Bitmap := TBitmap(DriveTabSet.Tabs.Objects[Index]);

  with TabCanvas do
  begin
    Draw(R.Left, R.Top + 4, Bitmap);	{ ビットマップを描画します }

    TextOut(R.Left + 2 + Bitmap.Width,	{ テキストを位置付けして }
      R.Top + 2, DriveTabSet.Tabs[Index]);	{ ビットマップの右に描画します }
  end;
end;


ファイルの処理
ファイルの処理00962

Object Pascal のランタイムライブラリにはいくつかの共通ファイル操作が組み込まれています。ファイルを扱う手続きや関数は上位レベルで動作します。操作するファイルの名前を指定すると，ルーチンがオペレーティングシステムに対して必要な呼び出しをします。

Pascal 言語の以前のバージョンでは，ファイル名ではなくファイル自体に対して同様の操作をしていました。つまり，たとえばファイル名を変更する場合は，その前にファイルを検索してファイル変数に割り当てなくてはなりませんでした。Object Pascal はより高いレベルで動作することによって，コーディングの負担を減らしアプリケーションの効率を高めています。低レベルの関数は現在でも使用可能ですが，それほど多く使う必要はありません。

詳細は次のトピックを参照してください。

ファイルの削除

ファイルの名前の変更

ファイルの属性の変更


ファイルの削除
ファイルの削除00963

例

ファイルを削除するとそのファイルがディスクから消去され，ディスクのディレクトリからエントリが削除されます。削除したファイルを回復するためのこれに対応する操作は存在しないため，アプリケーションでは一般にユーザーにファイルの削除を確認させる必要があります。

ファイルを削除するには，ファイルの名前を DeleteFile 関数に渡します。DeleteFile はファイルを削除した場合は True，削除しなかった場合 (たとえばファイルが存在しなかった場合や読み出し専用だった場合) は False を返します。


例00964

次のコードはメニュー項目［ファイル(F)｜削除(D)］がクリックされたとき，ファイルリストボックスで選択されたファイルを削除し，削除を反映するようリストを更新します。

procedure TFMForm.Delete1Click(Sender: TObject);
begin
  with FileList do
    if DeleteFile(FileName) then Update;
end;


ファイルの属性の変更
ファイルの属性の変更00965

参照	例

各ファイルにはさまざまな属性があり，オペレーティングシステムによってビットマップフラグとして格納されます。ファイル属性にはファイルが読み出し専用か，隠しファイルかなどの項目が含まれます。

ファイルの属性を変更するには次の 3 つの手順が必要です。

1	ファイル属性の読み出し

2	個々のファイル属性の変更

3	ファイル属性の設定

ファイルの属性を調べたい場合や，以前の設定に関係なく属性を設定したい場合，読み出し操作や設定操作を単独で実行できます。ただし，以前の設定を基に属性を変更する場合は，既存の属性を読み出し，変更し，変更した属性を書き込む必要があります。

ファイル属性の読み出し

オペレーティングシステムはさまざまな方法でファイル属性を格納しますが，通常はビットごとのフラグとして格納します。

ファイルの属性を読み出すには，FileGetAttr 関数にファイル名を渡します。戻り値として Word 型のファイル属性グループが返されます。

個々のファイル属性の変更

Delphi ではファイル属性が集合で表現されるため，通常のビット演算子を使って個々の属性を処理できます。各属性には SysUtils ユニットで名前が定義されています。

たとえば，ファイルの読み出し専用属性を設定するには，次のように指定します。

Attributes := Attributes or faReadOnly;

複数の属性を同時に設定またはクリアすることもできます。たとえば，システムファイル属性と非表示ファイル属性の両方をクリアするには，次のようにします。

Attributes := Attributes and not (faSysFile or faHidden);

ファイル属性の設定

Delphi ではファイルの属性はいつでも設定できます。

ファイルの属性を設定するには，設定するファイルの名前と属性を FileSetAttr 手続きに渡します。


参照00966

FindFirst 関数


例00967

次のコードはファイルの属性を読み出して集合型変数に入れ，ファイル属性ダイアログボックスのチェックボックスに現在の属性を設定し，ダイアログボックスを表示します。ユーザーがダイアログボックスの設定を変更し受け入れた場合，コードは変更された設定に合わせてファイル属性を設定します。

procedure TFMForm.Properties1Click(Sender: TObject);
var
  Attributes, NewAttributes: Word;

begin
  with FileAttrForm do
  begin
    FileDirName.Caption := FileList.Items[FileList.ItemIndex];	{ ボックスキャプションを設定します }

    PathName.Caption := FileList.Directory;	{ ディレクトリ名を表示します }

    ChangeDate.Caption := DateTimeToStr(FileDateTime(FileList.FileName));

    Attributes := FileGetAttr(FileDirName.Caption);	{ ファイル属性を読み出します }

    ReadOnly.Checked := (Attributes and faReadOnly) = faReadOnly;

    Archive.Checked := (Attributes and faArchive) = faArchive;

    System.Checked := (Attributes and faSysFile) = faSysFile;

    Hidden.Checked := (Attributes and faHidden) = faHidden;

    if ShowModal <> id_Cancel then	{ ダイアログボックスを表示します }
    begin
      NewAttributes := Attributes;	{ 元の属性から開始します }

      if ReadOnly.Checked then NewAttributes := NewAttributes or faReadOnly
      else NewAttributes := NewAttributes and not faReadOnly;

      if Archive.Checked then NewAttributes := NewAttributes or faArchive
      else NewAttributes := NewAttributes and not faArchive;

      if System.Checked then NewAttributes := NewAttributes or faSysFile
      else NewAttributes := NewAttributes and not faSysFile;

      if Hidden.Checked then NewAttributes := NewAttributes or faHidden
      else NewAttributes := NewAttributes and not faHidden;

      if NewAttributes <> Attributes then	{ 変更された場合 ... }
        FileSetAttr(FileDirName.Caption, NewAttributes);	{ ... 新しい値を書き込みます }
    end;
  end;
end;


ドラッグアンドドロップ
ドラッグアンドドロップ00968

フォーム上の項目のドラッグアンドドロップは，ユーザーにフォームのオブジェクトを操作させる方法として便利な方法です。ユーザーにコンポーネント全体をドラッグさせたり，リストボックスなどのコンポーネントの項目を別のコンポーネントにドラッグさせたりできます。

ドラッグアンドドロップ操作には次の 4 つの基本要素があります。

1.	ドラッグの開始

2.	ドラッグ項目の受け取り

3.	項目のドロップ

4.	ドラッグの終了


ドラッグの開始
ドラッグの開始00969

参照	例

各コントロールには DragMode と呼ばれるプロパティがあり，実行時にユーザーがコンポーネントのドラッグを開始したときコンポーネントがどう応答するかを制御します。DragMode が dmAutomatic の場合，ユーザーがコントロール上でマウスボタンを押したときドラッグが自動的に始まります。最も一般的な使い方は，DragMode を dmManual (デフォルト) に設定し，マウスダウンイベントの処理によってドラッグを開始する方法です。

コントロールのドラッグを手動で開始するには，コントロールの BeginDrag メソッドを呼び出します。

BeginDrag は Immediate と呼ばれる論理パラメータを受け取ります。True を渡した場合，DragMode が dmAutomatic の場合と同じように，ドラッグがすぐに始まります。False を渡した場合，ユーザーが実際にマウスを移動するまでドラッグは始まりません。BeginDrag(False) を呼び出すとコントロールはドラッグ操作を開始せずにマウスクリックを受け付けます。

BeginDrag を呼び出す前にマウスダウンイベントのパラメータをテストすることによって，たとえばユーザーがどのボタンを押したかチェックしてドラッグを開始するかどうかを決めるなど，ドラッグを開始する条件を設定できます。


参照00970

ドラッグ項目の受け取り


例00971

次のコードはファイルリストボックスでのマウスダウンイベントを処理し，マウスの左ボタンが押された場合にだけドラッグを開始します。

procedure TFMForm.FileListBox1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

  if Button = mbLeft then	{ 左ボタンが押された場合だけドラッグします }

    with Sender as TFileListBox do	{ Sender を TFileListBox として扱います }
    begin

      if ItemAtPos(Point(X, Y), True) >= 0 then	{ 項目があるか調べます }
        BeginDrag(False);	{ 項目があればドラッグします }

    end;
end;


ドラッグ項目の受け取り
ドラッグ項目の受け取り00972

例

ユーザーがコントロール上で項目をドラッグすると，コントロールは OnDragOver イベントを受け取り，その時点でコントロールはユーザーがそこで項目をドロップした場合にその項目を受け取れるかどうかを示さなくてはなりません。Delphi はコントロールがドラッグ項目を受け取れるかどうかを示すため，ドラッグカーソルを変化させます。

コントロール上でドラッグされた項目を受け取るには，コントロールの OnDragOver イベントにイベントハンドラをアタッチします。ドラッグオーバーイベントには Accept という名前の変数パラメータがあり，イベントハンドラは項目を受け取る場合このパラメータを True に設定します。

Accept を True に設定すると，ユーザーがその位置でマウスボタンから指を離した場合，つまりドラッグ項目をドロップした場合，アプリケーションは同じコントロールにドラッグドロップイベントを送信できます。Accept が False の場合，アプリケーションはそのコントロール上では項目をドロップしません。つまり，コントロールは処理方法がわからない項目についてはドラッグドロップイベントを処理する必要がないことを意味します。

ドラッグオーバーイベントにはいくつかのパラメータが含まれ，ドラッグのソースやマウスポインタの現在位置が含まれます。イベントハンドラはこれらのパラメータを使ってドロップを受け取るかどうかを決定できます。ほとんどの場合，コントロールは送り手の種類に基づいてドラッグ項目を受け取るか拒否するかを決めますが，特定のインスタンスからの項目だけを受け取ることもできます。


例00973

次のコードではディレクトリアウトラインはドラッグ項目がファイルリストボックスから選択された場合にだけドラッグ項目を受け取ります。

procedure TFMForm.DirectoryOutline1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);

begin
  if Source is TFileListBox then
    Accept := True;
end;


項目のドロップ
項目のドロップ00974

例

コントロールがドラッグ項目を受け取れることを示したら，ドロップされた後項目をどのように処理するかについても定義しなくてはなりません。ユーザーがマウスポインタの変化を確認しコントロールがドラッグ項目を受け取ることを知った場合，ユーザーはそこで項目をドロップすると何らかの処理があるものと期待します。

ドロップ項目を処理するには，ドロップ項目を受け取るコントロールの OnDragDrop イベントにイベントハンドラをアタッチします。

ドラッグオーバーイベントと同様に，ドラッグドロップイベントはドラッグ項目のソースと受け取りコントロール上のマウスポインタの座標を示します。ドラッグドロップハンドラはこれらのパラメータによりドラッグのソースから必要な情報を取得し，処理方法を決定できます。


例00975

次のコードでは，ディレクトリアウトラインはファイルリストボックスからのドラッグ項目を受け取り，ファイルを現在の位置からドロップ位置のディレクトリに移動します。

procedure TFMForm.DirectoryOutline1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  if Source is TFileListBox then

    with DirectoryOutline do
      ConfirmChange('Move', FileList.FileName, Items[GetItem(X, Y)].FullPath);
end;


ドラッグの終了
ドラッグの終了00976

例

ドラッグ操作の終了では，ドラッグ項目をドロップしたときか，ドラッグ項目を受け取らないコントロール上でユーザーがマウスボタンから指を離したときに，ユーザーがドラッグしたコントロールへドラッグ終了イベントが送信されます。

コントロールから項目がドラッグされたときそのコントロールが応答できるようにするには，コントロールの OnEndDrag イベントにイベントハンドラをアタッチします。

OnEndDrag イベントの最も重要なパラメータは Target で，どのコントロールがドロップを受け取ったかを示します。Target が nil の場合，ドラッグ項目を受け取ったコントロールがないことを示します。nil 以外の場合，Target は項目を受け取ったコントロールになります。OnEndDrag イベントには受け取った側のコントロールでドロップされた場所を示す x 座標と y 座標も含まれます。


例00977

次のコードでは，ファイルリストボックスはファイルリストを更新することによってドラッグ終了イベントを処理します。リストからファイルをドラッグするとカレントディレクトリの内容が変化すると想定しています。

procedure TFMForm.FileListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
  if Target <> nil then FileList.Update;
end;


DLL としてのフォームの再利用
DLL としてのフォームの再利用00978

参照

複数のアプリケーションで使うフォームを作成する場合，特に，それらのアプリケーションが Delphi アプリケーションではない場合，フォームをダイナミックリンクライブラリ (DLL) として作成できます。DLL はコンパイル済みの実行可能ファイルなので，Delphi 以外のツールで作成したアプリケーションから呼び出せます。たとえば，C++，Paradox, dBASE などを使って作成したアプリケーションから DLL を呼び出せます。

DLL はスタンドアロンファイルであり，コンポーネントライブラリのオーバーヘッド (約 100 KB) を含みます。このオーバーヘッドを最小にするには，複数のフォームを 1 つの DLL にコンパイルします。たとえば，パスワードのチェック，共有データの表示，ステータス情報の更新などのために複数のすべてのアプリケーションが同一のダイアログボックスを使うとします。これらのダイアログボックスはすべて 1 つの DLL にコンパイルして，コンポーネントライブラリのオーバーヘッドを共有できます。

フォームを DLL として作成するには次の 3 つの手順を実行します。

1.	インターフェースルーチンを宣言します。

2.	プロジェクトファイルを変更します。

3.	DLL に格納してあるルーチンにアクセスします。


参照00979

DLL の作成


インターフェースルーチンの宣言
インターフェースルーチンの宣言00980

参照	例

アプリケーションを DLL にコンパイルする場合，インターフェースルーチンにより外部のアプリケーションから DLL 内のルーチンにアクセスできます。

インターフェースルーチンの宣言を追加するには，DLL にコンパイルするユニットの interface セクションの中で手続きまたは関数を宣言し，その宣言に続けて export 指令を記述します。

Object Pascal 以外の言語から呼び出すインターフェースルーチンを記述する場合，パラメータと戻り値は呼び出し側の言語で使える型を使って宣言しなくてはなりません。たとえば，文字列については Object Pascal でネイティブな string 型ではなく，ヌルで終わる文字配列 (Object Pascal の PChar 型) として渡さなくてはなりません。

インターフェースルーチンを宣言した後，ユニットの implementation セクションにルーチンを定義できます。


参照00981

DLL に格納してあるルーチンのアクセス

export 宣言

関数

Interface

手続き

DLL の作成


例00982

次のコードでは GetPassword 関数をインターフェースルーチンとして宣言しています。宣言に続く export 指令により，DLL がこのインターフェースルーチンを外部プログラムにエクスポートできます。

unit PassForm;

interface

uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Forms, Controls, Forms, Dialogs, StdCtrls, Buttons;

type

  TPasswordForm = class(TForm)

  ... { 各種の宣言 }

  end;

var

  PasswordForm: TPasswordForm;

function GetPassword(APassword: PChar): WordBool; export;


DLL へのプロジェクトのコンパイル
DLL へのプロジェクトのコンパイル00983

参照	例

プロジェクトを DLL にコンパイルする場合，プロジェクトファイルに次の修正が必要です。

1.	ファイルの 1 行目の予約語 program を library に変更します。

2.	プロジェクトの uses 節から Forms ユニットを削除します。

3.	begin とファイルの最後の end の間にあるコードをすべて削除します。

4.	uses 節の後ろで begin..end ブロックより前に予約語 exports を追加し，その exports に続けてインターフェースルーチン名とセミコロンを記述します。

エクスポートされるインターフェースルーチンのリストは作成されません。

これらの修正の後でプロジェクトをコンパイルすると，アプリケーションではなく DLL が作成されます。アプリケーションは DLL を呼び出して，ラップしたダイアログボックスを開くことができます。


参照00984

インターフェースルーチンの宣言

DLL の作成


例00985

修正前と修正後の一般的なプロジェクトファイルの例を次に示します。

program Password;

uses Forms,

     PassForm in 'PASSFORM.PAS' {PasswordForm};

{$R *.RES}

begin

  Application.CreateForm(TPasswordForm, PasswordForm);

  Application.Run;

end.

修正後:

library Password;	{ 1. 予約語を変更します }

uses	{ 2. Forms を削除します }

     PassForm in 'PASSFORM.PAS' {PasswordForm};

exports

  GetPassword;	{ 4. exports 節を追加します }

{$R *.RES}

begin	{ 3. メインブロックからコードを削除します }

end.


フォームに対する操作
フォームに対する操作00986

参照

Delphi で作成したフォームは Delphi の他のプロジェクトに再利用できます。ダイナミックリンクライブラリ (DLL) として保存もでき，C++，Paradox, dBase といった他のアプリケーションを使って構築するプロジェクトにそれらの DLL をロードできます。Delphi にはテンプレートなどのフォーム設計ツールもあり，最初の手間を省けます。

アプリケーションのユーザーインターフェースを構成するフォームの設計を始める前に，フォームを操作する方法に慣れなくてはなりません。詳細は次のトピックを参照してください。

新しいフォームの作成

フォームとユニットの表示

フォーム内フォームの呼び出し

設計済みフォームの使い方

MDI と SDI のフォーム

他のプロジェクトとのフォームの共有

テキストファイルとしてのフォームの保存


参照00987

ユーザーインターフェースの設計


新しいフォームの作成
新しいフォームの作成00988

参照

新しいフォームを作成する方法はいくつかあります。

Delphi を起動する

空白フォーム，空白フォームの関連ユニット，プロジェクトファイルが生成される

メモ:	Object Repository ダイアログボックスで別のフォームやプロジェクトをデフォルトとして選択してある場合，空白フォームではなく選択したフォームが開きます。

［ファイル(F)｜New｜Application］を選択して新しいアプリケーションを作成する

新しいプロジェクトが生成されるたびに，フォームとユニットファイルも新しく生成される

［ファイル(F)｜New｜Form］を選択して既存のプロジェクトに新しいフォームを追加する


参照00989

Object Repository へのフォームの追加


フォームと他のプロパティの共有
フォーム内フォームの呼び出し00990

参照

フォームまたはフォーム内のメソッドを別のフォーム内のメソッドから参照するには，他のフォームがプロジェクトに含まれていることをメソッド呼び出しを含むフォームが参照前に知っていなくてはなりません。プロジェクトにフォームを追加すると，.DPR ファイルの uses 節にフォームが追加されますが，プロジェクト内の他のユニットの uses 節には追加されません。特定のフォームにメソッド呼び出しが記述されるかどうか Delphi は予測できないので，ユニットファイルの uses 節を修正しなくてはなりません。

たとえば，プロジェクトに About Box フォームテンプレートを追加し，アプリケーションのメインフォームのメニュー項目からこのフォームテンプレートを呼び出す場合，About Box のフォーム関連ユニット (About，または追加時に指定した名前) をメインフォームユニットの uses 節に追加しなくてはなりません。

フォームどうしの相互参照の有効化

2 つのフォームが互いを参照する場合，プログラムのコンパイル時に「ユニットの循環参照が発生しています」のエラーになる可能性があります。このエラーを防ぐには次のどちらかをします。

それぞれのユニットファイルの implementation 部にユニット識別子付きで両方の uses 節を記述する (2 つのフォームの相互参照を可能にするには一般にこの方法を使う)

一方の uses 節を interface 部に記述し，もう一方の uses 節を implementation 部に記述する (ほとんどの場合，このユニットの interface 部に別のフォームのユニット識別子を記述する必要はない)

それぞれのユニットファイルの interface 部に両方の uses 節を記述しないでください。コンパイル時に「ユニットの循環参照が発生しています」のエラーになります。


参照00991

他のプロジェクトとのフォームの共有


Sharing forms with other projects
他のプロジェクトとのフォームの共有00992

アプリケーションのユーザーインターフェースを構成するフォームの設計を始める前に，他の開発者やユーザーにもそのフォームを使わせるかどうか考慮しなくてはなりません。フォームを共有する一番簡単な方法は既存のフォームをプロジェクトに追加することです。Delphi のフォームテンプレートはまさにこのためにあります。フォームテンプレートは設計済みのフォームであり，手軽にプロジェクトで再利用できます。

共有フォームの修正

プロジェクト間でフォームを共有する場合，設計時のフォームの変更は共有フォームの変更を意味します。同一のフォームを使うプロジェクトが複数ある場合，1 つのプロジェクト内で共有フォームを変更するとすべてのプロジェクトに影響が及びます。そのつもりで変更するのはかまいません。しかし，その意図がない場合，変更がほかに及ぶのを次のいずれかの方法で防げます。

別名でフォームを保存し，プロジェクトでは，元のフォームではなく名前を変更したフォームを使う

これはプロジェクトにフォームテンプレートを使うことと同じである

設計時ではなく実行時にフォームを変更する

共有フォームをコンポーネントにして，各開発者が設計時にカスタマイズできるようにする (詳細は新しいコンポーネントの作成を参照)

フォームを再利用する第三の方法はフォームを DLL にすることです。詳細は DLL でのダイアログボックスの構築を参照してください。


別名でのフォームの保存
別名でのフォームの保存00993

参照

［ファイル(F)｜ファイルに名前を付けて保存(A)］を選択すると，フォームを別名で保存したり別の場所に保存できます。ただし，［名前を付けて保存］ダイアログボックスでは .DFM ファイルはユニットファイルと別々に表示されません。設計時にフォームを変更し，基になるソースコードを変更しなくても，ファイルを保存するときに表示されるのは .PAS ファイルだけです。この 2 つのファイルは不可分であり，一方を保存するともう一方も保存されます。

フォームを別名で保存すれば，そのフォームを変更しても，元の名前のフォームを使っているかもしれない他のプロジェクトには影響を及ぼさずに済みます。

フォームを別名で保存するには

1.	保存するフォームを選択します。

2.	［ファイル(F)｜名前を付けて保存(A)］を選択します。

3.	［名前を付けて保存］ダイアログボックスでファイルの名前とディレクトリを指定します。

4.	［OK］を選択します。


参照00994

Object Repository へのフォームの追加

ファイルの保存

プロジェクトの保存


フォームとユニットの表示
フォームとユニットの表示00995

設計時にフォームを操作する場合，同時に複数のフォームを開いておけます。開いているフォームの間を移動するには，作業するフォームを前面に出します。作業しているフォームのユニットのソースコードも表示できます。

プロジェクト内の特定のフォームを表示するには

1.	［表示(V)｜フォーム(F)］を選択して［表示フォームの選択］ダイアログボックスを表示します。

2.	フォーカスを与えるフォームを［表示フォームの選択］ダイアログボックスで選択し，［OK］を選択します。

プロジェクト内の特定のユニットを表示するには

1.	［表示(V)｜ユニット(U)］を選択して［表示ユニットの選択］ダイアログボックスを表示します。

2.	表示するユニットを［表示ユニットの選択］ダイアログボックスで選択し，［OK］を選択します。

Delphi のプロジェクトマネージャを使ってもプロジェクト内のユニットやフォームの間を移動できます。


設計済みフォームの使い方
テンプレートの使い方00996

参照

Delphi には，アプリケーションのインターフェースを設計する手助けとなる設計済みのフォームとプロジェクトが数多くあります。フォームテンプレート，簡単な関数呼び出し，Delphi コンポーネントを使うと，簡単なものから複雑なものまで多様なフォームを作成できます。

プロジェクトテンプレートではアプリケーションのデザインを選択でき，アプリケーション構築の土台として使えます。

フォームテンプレートには，ユーザーインターフェースを開発するための一連の設計済みのフォームがあります。

設計済みのフォームをアプリケーションに追加する方法については次の各トピックを参照してください。

メッセージボックスの表示

単純な入力フォームの使い方

プロジェクトへのフォームの追加

データベースフォームエキスパートを使ったフォームの作成


参照00997

Object Repository の使い方


メッセージボックスの表示
メッセージボックスの表示00998

例

メッセージボックスにはユーザーに対するテキストが表示され，ユーザーがメッセージボックスを画面からクリアしない限りアプリケーションを続行できません。メッセージボックスは次のようにさまざまな用途に使われます。

ユーザーに対する警告情報の表示

エラーメッセージの表示

ファイルを閉じる前またはアプリケーションを終了する前の確認要求

Delphi の MsgDlg ユニットには，開発者が指定するパラメータに応じて設計済みのダイアログボックスをユーザーに表示する関数があります。MessageDlg 関数は開発者が指定するテキスト，各種のキャプション，シンボル，ボタンを含むメッセージボックスを表示するために使います。

デフォルトでは MessageDlg は画面の中央にメッセージボックスを表示します。画面に表示する位置を開発者が指定できるメッセージボックスを作成するには，MessageDlgPos 関数を使います。


例00999

次のコードは Button1 をクリックするとメッセージダイアログボックスを呼び出します。

procedure TForm1.Button1Click(Sender: TObject);

begin

  MessageDlg('Save changes?', mtConfirmation,mbYesNoCancel , 0);

end;


単純な入力フォームの使い方
単純な入力フォームの使い方01000

参照	例

ユーザーからのボタンクリックだけが必要な情報フォームを MessageDlg が表示する場合は，次の 2 つの関数はユーザーからの 1 行の入力が必要なフォームを表示します。

InputBoxInputQuery

InputBox と InputQuery は［OK］と［キャンセル］ボタンがあるダイアログボックスを作成します。InputBox を使うのは，ユーザーが［OK］を選択するとユーザー入力文字列を返し，ユーザーが［キャンセル］を選択するかまたは Esc を押してダイアログボックスを閉じると文字列を返さない場合です。InputQuery はユーザーの操作 (［OK］，［キャンセル］，Esc) をプログラムで認識可能な論理変数として解釈する場合に使います。


例01001

InputBox の動作は次の手順で確認できます。

1.	新しい空白プロジェクトを開きます。

2.	Form1 に Button コンポーネントと Label コンポーネントを追加します。

3.	Button1 用に次の OnClick イベントを生成します。

procedure TForm1.Button1Click(Sender: TObject);

begin

  Label1.Caption := InputBox('Password Entry Form', 'Enter Password', '')

end;

ADefault パラメータを空白にすると，入力ボックスに初めに何もテキストが表示されません。

4.	プログラムを実行し，Button1 を選択します。

入力ボックスが表示されます。

5.	入力ボックスに何かテキストを入力し，［OK］を選択します。

Label1 にテキストが表示されます。

6.	もう一度 Button1 を選択して入力ボックスを表示します。

7.	テキストを入力し，今度は［キャンセル］または Esc を押してダイアログボックスを閉じます。

テキストは Label1 に表示されず，ADefault 文字列が返されます。この場合，文字列は空白なので，Label1 の Caption プロパティのテキストがクリアされ，他のテキストは何も Caption プロパティのテキストと置き換わりません。


参照01002

パスワード文字のマスク


パスワード文字のマスク
パスワード文字のマスク01003

参照	例

編集フィールドまたはメモフィールドにユーザーが入力する文字をマスクできます。Edit, DBEdit, MaskEdit の各コンポーネントの PasswordChar プロパティを使うと，ユーザーが入力する文字をアスタリスク (*) やシャープ記号 (#) などの特殊文字として表示できます。

この例については Password Dialog フォームテンプレートを開いて参照してください。

メモ:	Password Dialog フォームテンプレート の Edit コンポーネントの PasswordChar プロパティ Password はアスタリスク (*) に設定してあります。実行時にユーザーがこのダイアログボックスにテキストを入力すると，アスタリスクだけが表示され，ユーザーのパスワードは画面に表示されません (任意の 1 文字を PasswordChar プロパティの値に設定できます)。


パスワード文字のマスク01004

次の例は，Button1 がクリックされたときに Password Dialog フォームテンプレートを表示ます。

1.	新しい空白プロジェクトを開き，そのプロジェクトに Password Dialog フォームテンプレートを追加します。

2.	Form1 にボタンを追加し，次の OnClick イベントハンドラを記述します。

procedure TForm1.Button1Click(Sender: TObject);

begin

  PasswordDlg.ShowModal;

end;

3.	Unit1 の uses 節に Password を追加し，アプリケーションを実行します。

4.	Button1 を選択します。

［パスワードダイアログ］ダイアログボックスが表示されます。

5.	編集ボックスに何かテキストを入力します。

アスタリスクだけが表示されます。


参照01005

TEdit コンポーネント

TDBEdit コンポーネント

TMaskEdit コンポーネント

プロジェクトへのフォームの追加


テンプレートとしてのフォームの保存
Object Repository へのフォームの追加01006

一度作成したカスタムダイアログボックスを他のプロジェクトにも再利用したい場合があります。Object Repository にフォームを追加すれば簡単に再利用できます。

オブジェクトとしてのフォームの保存はフォームのコピーの別名保存と同じです。ただし，フォームをオブジェクトとして保存すると，そのフォームは Object Repository のリストに表示されます。このリストに表示するオブジェクトのビットマップと説明文を指定します。

カレントフォームを Object Repository に追加するには

1.	フォームを右クリックしてフォームスピードメニューを表示します。

2.	フォームスピードメニューで［Add to Repository］コマンドを選択します。

［Add to Repository］ダイアログボックスが表示されます。

3.	［タイトル(T)］編集ボックスにオブジェクトの名前を入力します。

4.	［説明(D)］編集ボックスにこのオブジェクトの簡単な説明文を入力します。

5.	［New Items］ダイアログボックスに表示されるときの Page を選択します。

6.	フォームの Author を指定できます。Author は Object Repository の詳細ビューでのみ表示されます。

7.	オブジェクトのアイコンを指定するために［参照(B)］ボタンを選択します。

［ビットマップの選択］ダイアログボックスが表示されます。

8.	使いたいビットマップがあれば探して選択し，次に［OK］を選択して［ビットマップの選択］ダイアログボックスを閉じます。

9.	［OK］を選択すると，指定した内容が確定されて［Add to Repository］ダイアログボックスが閉じます。

この後で［ファイル(F)｜フォームの新規作成(F)］を選択すると，追加したテンプレート，そのテンプレートを表すビットマップ，入力した説明文がテンプレートリストに表示されます。


リポジトリに追加ダイアログボックス
リポジトリに追加ダイアログボックス01007

［リポジトリに追加］ダイアログボックスを使って新しいフォームをオブジェクトリポジトリに追加します。フォームスピードメニューから［リポジトリに追加(R)］を選択して［リポジトリに追加］ダイアログボックスを開きます。

［リポジトリに追加］ダイアログボックス

［フォーム(F)］

現在のオブジェクト内のフォームの名前を表示します。

［タイトル(T)］

このボックスを使ってリポジトリに追加するフォームの名前を指定します。

［コメント(D)］

このボックスを使ってフォームの説明を入力します。この説明は，［新規作成］ダイアログボックスでスピードメニューから［詳細表示(D)］オプションを選択したときに表示されます。

［ページ(P)］

オブジェクトリポジトリ内の現在のページのリストを表示します。このオプションを使って，フォームを追加したいリポジトリページを選択します。

［作者(A)］

このボックスを使って追加したい作者名を入力します。

［参照(B)］ボタン

［参照(B)］ボタンを使って，リポジトリに追加したいフォームのアイコンを変更します。アイコンは，［新規作成］ダイアログボックスと［Repository Options］ダイアログボックスに表示されるビットマップを表します。このビットマップを変更するには，［参照(B)］ボタンをクリックして［アイコンの選択］ダイアログボックスを開きます。


テキストファイルとしてのフォームの保存
テキストファイルとしてのフォームの保存01008

Delphi では .DFM フォームファイルをテキストファイルとして保存できます。その後，テキストファイルを編集する一般のテキストエディタを使ってフォームを修正できます。続いて，コードエディタにそのファイルをロードして再びバイナリ .DFM 形式に変換できます。これは，チーム開発環境で Delphi プロジェクトを使う場合に役立つほか，ほとんどのバージョン管理システムがテキストベースでの比較に依存しているので，バージョン管理が問題になる場合にも便利です。

フォームファイルをテキストファイル形式に変換するには

1.	［ファイル(F)｜開く(O)］を選択します (プロジェクトを開いていなくてもかまいません)。

2.	テキストに変換する .DFM ファイルを選択します。

フォームのユニットファイル (.PAS) を開いている場合，.DFM ファイルをコードエディタに開く前に変更内容を保存してユニットファイルを閉じるためのプロンプトが表示されます。

3.	［ファイル(F)｜名前を付けて保存(A)］を選択します。

4.	［名前を付けて保存］ダイアログボックスで .TXT のファイル拡張子を使ってファイルの名前を変更します。

.TXT のファイル拡張子を使うと，.DFM ファイルが自動的にテキストファイルに変換されます。

5.	テキストに変換する .DFM ファイルごとに手順 1 ～ 4 を繰り返します。

メモ:	1 つのフォームは同時にビジュアル形式とテキスト形式の両方で開けません。

テキストファイルに変換したフォームの例についてはフォームテキストファイルのサンプルを参照してください。

.DFM 形式へのテキストファイルの変換

フォームテキストファイルを編集した後，それを正規のバイナリ .DFM 形式に変換できます。フォームファイルの構造と内容を理解していれば，構造をテキストファイルとして記述してからバイナリ形式に変換してもフォームを作成できます。しかし，普通は Delphi のビジュアルツールを使ってフォームを作成する方がはるかに効率的です。

フォームテキストファイルをバイナリ (.DFM) 形式に変換するには

1.	［ファイル(F)｜開く(O)］を選択します (プロジェクトを開いていなくてもかまいません)。

2.	バイナリ .DFM 形式に変換するテキストファイルを選択します。

コードエディタにファイルが開きます。

3.	［ファイル(F)｜名前を付けて保存(A)］を選択します。

4.	［ファイルの種類(T)］コンボボックスで［フォーム(*.DFM)］を選択します。

5.	［ファイル名(N)］編集ボックスに .DFM の拡張子を付けてファイル名を入力します。

6.	バイナリ .DFM 形式に変換するファイルごとに手順 1 ～ 5 を繰り返します。


フォームテキストファイルのサンプル
フォームテキストファイルのサンプル01009

Password Dialog フォームテンプレートのテキスト出力を次に示します。これは，フォームを構成するオブジェクトとそれらのオブジェクトの主要なビジュアルプロパティを要約したリストです。

object PasswordDlg: TPasswordDlg

  Left = 200

  Top = 99

  ActiveControl = Password

  AutoScroll = False

  BorderStyle = bsDialog

  Caption = 'Password Dialog'

  Font.Color = clBlack

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = [fsBold]

  PixelsPerInch = 96

  Position = poScreenCenter

  ClientHeight = 93

  ClientWidth = 236

  object Label1: TLabel

    Left = 8

    Top = 9

    Width = 92

    Height = 13

    Caption = 'Enter password:'

  end

  object Password: TEdit

    Left = 8

    Top = 27

    Width = 220

    Height = 20

    TabOrder = 0

    PasswordChar = '*'

  end

  object OKBtn: TBitBtn

    Left = 66

    Top = 59

    Width = 77

    Height = 27

    TabOrder = 1

    Kind = bkOK

    Margin = 2

    NumGlyphs = 2

    Spacing = -1

  end

  object CancelBtn: TBitBtn

    Left = 152

    Top = 59

    Width = 77

    Height = 27

    TabOrder = 2

    Kind = bkCancel

    Margin = 2

    NumGlyphs = 2

    Spacing = -1

  end

end


MDI と SDI のフォーム
MDI と SDI のフォーム01010

参照	例

設計するフォームはどれでも，マルチドキュメントインターフェース (MDI) またはシングルドキュメントインターフェース (SDI) のフォームとしてアプリケーションに実現できます。

MDI フォームは初めから MDI フォームとして設計するのが普通ですが，フォームは FormStyle プロパティを変更するだけで MDI フォームまたは SDI フォームに変更できます。

FormStyle プロパティに使える設定とその目的を次の表に示します。

FormStyle	作成するフォーム	備考

fsNormal	スタンドアロン (SDI) フォーム
fsMDIForm	MDI 親フォームまたは MDI 枠フォーム	このフォームは実行時に他のフォームを含むことができる
fsMDIChild	MDI 子フォーム	このフォームは実行時に MDI 親フォームに含まれる
fsStayOnTop	実行時にほかに開いているフォームの上に常に表示するスタンドアロンフォーム


参照01011

マルチドキュメントインターフェース (MDI) アプリケーション


例01012

子フォームを含む MDI 親フォームがどのようなものか次の手順で確認できます。

1.	新しい空白プロジェクトを開き，新しい空白フォームを追加します。

2.	Form1 の FormStyle プロパティを fsMDIForm に設定し，Form2 の FormStyle プロパティを fsMDIChild に設定します。

3.	Form1 の右下隅に Panel コンポーネントを追加し，Panel コンポーネントの Alignment プロパティを AlTop に変更します。

4.	Panel に SpeedButton コンポーネントを追加し，SpeedButton コンポーネント用に次の OnClick イベントハンドラを記述します。

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

 Form2.Show;

end;

5.	Unit1 の uses 節に Unit2 を追加します。

6.	［Options｜Project｜Forms］を選択して自動作成リストから Form2 を削除します。

7.	プログラムを実行し，SpeedButton1 をクリックします。

Form1 の中に Form2 が開きます。どちらのフォームもサイズ変更と移動ができますが，子フォームは常に親の境界の内側にあります。


プロジェクトへのフォームの追加
プロジェクトへのフォームの追加 01013

オブジェクトリポジトリには，標準フォーム，ダイアログボックス，データモジュール，ユーザーが追加したフォームなどのたくさんの種類のフォームが入っています。

オブジェクトリポジトリからプロジェクトにフォームを追加するには

1	プロジェクトを開いておいて［ファイル(F)｜新規作成(N)］を選択します。

［新規作成］ダイアログボックスが表示されます。

2	フォームページを選択します。

3	追加したいフォームを選択します。

4	ダイアログボックスの下の方にあるラジオボタンで共有オプション (［コピー(C)］，［継承(I)］，［直接使用(U)］) のどれかを選択します。

共有オプションについての詳細はオブジェクトリポジトリの使用オプションを参照してください。

5	［OK］を選択します。

開いているプロジェクトにフォームとフォームに関連付けられたユニットが追加されます。追加したフォームは，プロジェクト内の他のフォームと同じよう使用することができます。カスタマイズ，コンポーネントの追加，コードの付加などが行えます。

どの共有オプションを選択しているかによって，フォームに対する変更がオブジェクトリポジトリ内の元の項目にどのように影響するかが異なります。

メモ:	プロジェクトが開いていないときでも［ファイル(F)｜新規作成(N)］を選択してオブジェクトリポジトリからフォームを選択できます。その場合には，そのフォームのユニットファイルが参照ファイルとして開きます。その後でプロジェクトを開いたり新しいプロジェクトを作成したりしても，先に開いていたテンプレートフォームはプロジェクトの一部にはなりません。このフォームをプロジェクトの一部として保存するには，明示的にプロジェクトに追加しなければなりません。


用語集
用語集01014

－ あ行 －50001

アクセラレータキー

値パラメータ

アプリケーション

一次インデックス

イベント

イベントハンドラ

インクルードファイル

インスタンス

インターフェース部

インデックス

ウィンドウコントロール

ウィンドウハンドル

埋め込み

エリアス

エンドユーザー

オブジェクト型

オブジェクトインスタンス変数

オブジェクトファイル

親

オーナー

オーバーライド

－ か行 －50002

下位オブジェクト

仮想

型

型キャスト

型付き定数

型定義

型なしファイル

型なしポインタ

カプセル化

仮パラメータ

監視式

関数

関数頭部

完全評価

機能

基本型

キャンバス

行

キー

クライアント

クライアント領域

クラス

クラスメソッド

グリッド

グリフ

グローバルヒープ

グローバル変数

継承

限定子

限定識別子

限定のない識別子

限定メソッド識別子

子

項目

コンテナアプリケーション

コンテナコンポーネント

コントロール

コンパイラ指令

コンパイル

コンパイルエラー

コンパイル時

コンポーネント

コールバックルーチン

－ さ行 －50003

再帰

サイズ変更ハンドル

参照テーブル

式

識別子

実現部

実行時

実行時エラー

実行時のみ

実行ポイント

実数型

実パラメータ

実変数

集合型

順序型

上位オブジェクト

使用回数

条件シンボル

ショートサーキット評価

シンボル

スイッチ指令

スカラー型

スコープ

スタック

ステップ実行

スプラッシュ画面

整数型

静的

設計時

セパレータ

統合デバッガ

添字

添字の型

祖父

ソースコード

－ た行 －50004

ダイナミックデータ交換 (DDE)

ダイナミックリンクライブラリ (DLL)

タグプロパティ

定数

定数アドレス式

定数パラメータ

ディスパッチ

手続き

手続き頭部

デフォルトイベント

デフォルト上位オブジェクト

デフォルトの新しいフォーム

デフォルトの新しいプロジェクト

テンプレート

データ

データアクセスコンポーネント

データ型

データコントロールコンポーネント

データセット

データベース

データベースサーバー

データベース対応の

テーブル

問い合わせ

動的

頭部

ドラッグ

トレース

－ な行 －50005

－ は行 －50006

配列

派生

バッチ処理

パブリック

パブリッシュ設定

パラメータ

非ウィンドウコントロール

引数 → パラメータ

ピクセル

ビジュアルコンポーネント

非ビジュアルコンポーネント

ヒント

ヒープ

ヒープのサブアロケータ

ファイルの種類

ファイルバッファ

フィルタ

フィルタプログラム

フィールド

フォーカス

フォーム

部分範囲型

プライベート部

ブレークポイント

プログラム

プロジェクト

プロジェクトディレクトリ

プロジェクトファイル

ブロック

プロテクト

プロテクトブロック

プロパティ

文

分割線

べき集合

ヘッダー → 頭部

ヘルプコンテキスト

言語ドライバ

変数

変数パラメータ

ポインタ

ホストの種類

ボーランドデータベースエンジン

－ ま行 －50007

孫

マスターテーブル

メインフォーム

メソッド

メソッド識別子

文字型 → Char 型

モジュール

文字列型

文字列リスト

モード付き

モードなし

－ や行 －50008

ユニット

ユーザー定義

呼び出し履歴

－ ら行 －50009

ラッパー

ラベル

ランタイムライブラリ

リテラル値

リレーショナルデータベース

リンク

リンクテーブル

ルーチン

ルートクラス

ループ

例外

例外処理

例外の生成

例外ハンドラ

レイトバインディング

レコード

レコード型

列

列挙データ型

レポート

ロック

論理エラー

論理型

ローカルシンボル情報

ローカルヒープ

ローカル変数

－ わ行 －50010

－ 英数 －50011

ASCII

BDE 環境設定ユーティリティ

BDE

BLOB

Boolean 型 → 論理型

Byte 型 → バイト型

case 可変部

Char 型

DDE クライアント

DDE サーバー

DDE 対話

IDAPI

implementation 部 → 実現部

interface 部 → インターフェース部

Longint 型

MDI アプリケーション

nil

OLE オブジェクト

OLE コンテナ

OLE サーバー

OLE

private 部 → プライベート部

Shortint 型

SQL テーブル

SQL

Word 型

Z オーダー


抽象01037

宣言されていて実装されていないメソッド。抽象メソッドは下位型でオーバーライドしなければなりません。


アクセラレータキー01038

キーボードでメニューコマンドまたはコンポーネントにアクセスできるようにするキーの組み合わせ。コード中の & に続く英字と Alt を同時に押して使います。& の直後の英字はメニューまたはコンポーネントのキャプションでは下線付きで示されます。


実パラメータ01039

手続き呼び出しまたは関数呼び出しの仮パラメータに取って代わる変数，式，定数のいずれか。


実変数01040

実行時にプログラムが使える変数。プログラム内でのその変数の定義とは区別されます。格納の目的で使われるメモリロケーションのことで，識別子とは区別されます。


エリアス01041

データベーステーブルの位置を指定する名前。データベースがサーバーにある場合，エリアスはそのサーバーの接続パラメータも指定します。


上位オブジェクト01042

あるオブジェクトの派生元のオブジェクト。上位オブジェクトになることができるのは親または祖父です。「デフォルト上位オブジェクト」を参照してください。


アプリケーション01043

実行可能ファイルと (プログラムが機能するために必要な共通の目的を持った) 関連するすべてのファイル。プロジェクトの設計やソースコードとは区別されます。アプリケーションはプログラムと同じ意味で使われることがよくあります。「プログラム」や「プロジェクト」を参照してください。


配列01044

型が同じデータ要素のグループ。各データ要素は 1 つのデータ構造に配列されており，インデックスによりランダムにアクセスできます。


ASCII01045

American Standard Code for Information Interchange の略で情報交換用米国標準コード。それぞれの文字に特定のコードを割り当てています。たとえば，A の ASCII コードは 65，空白の ASCII コードは 32 です。

Pascal では ASCII コードの前に # を付けて文字を参照できます。たとえば，空白を文字 C に割り当てるには，c := #32; のようにコーディングします。


基本型01046

ポインタ宣言，配列宣言の中で参照される型，または集合宣言で使われる列挙型。型宣言は他の基本型をいくつか参照するかまたは組み合わせて新しい型を構築しますが，それによって型が複雑になる可能性があります。


バッチ処理01047

TBatchMove コンポーネントを使ってレコードグループまたはデータセットに対して行う処理。1 回の処理でレコードグループの追加，削除，コピーなどができます。


BDE01048

ボーランドデータベースエンジン (Borland Database Engine) の略。IDAPI と呼ぶこともあります。Delphi はこのデータベースエンジンを使ってデータのアクセスや提供をします。BDE では，パソコン環境についての情報が BDE 環境設定ファイル (通常は IDAPI.CFG) で管理されます。BDE 環境設定ユーティリティを使ってこの環境設定ファイルの設定を変更します。


BDE 環境設定ユーティリティ01049

BDE 環境設定ファイル (通常は IDAPI.CFG) の設定を変更するのに使うプログラム。この実行可能ファイルの名前は BDECFG.EXE です。


BLOB01050

バイナリ大規模オブジェクト (Binary Large OBject) の略。多くのデータベーステーブルで特定の項目型を使って BLOB データを格納しています。Delphi では，テキストの BLOB データには TDBMemo コンポーネントを使ってアクセスし，グラフィックの BLOB データには TDBImage コンポーネントを使ってアクセスします。


ブロック01051

プログラムまたはサブプログラムの関連付けられた宣言部と文部。たとえば，ルーチンの var ブロックで整数変数を宣言します。if..then 文の then の後に begin を置いて，条件が満たされた場合にだけ実行されるコードブロックを開始します。


論理型01052

True または False の値をとることができるデータ型。データサイズはバイト単位です。


ボーランドデータベースエンジン01053

「BDE」を参照してください。


ブレークポイント01054

デバッグセッション中にプログラムを一時停止したい場所。プログラム中にマークして場所を決めます。プログラムの実行が一時停止したら，実行途中のその場でプログラムの状態を調べられます。プログラムの状態には，変数とデータ構造要素の値と呼び出し履歴でのルーチンが含まれます。


バイト型01055

0 から 255 までの値を保持できるデータ型。8 ビットからなるシーケンスです。


コールバックルーチン01056

ユーザーアプリケーションではなく Windows から呼び出される，アプリケーション内のルーチン。たとえば EnumFonts は，システムにインストールしてあるフォントごとに指定のコールバック関数を呼び出す Windows ルーチンです。


呼び出し履歴01057

現在の位置に到達するまでの呼び出しのリスト。必然的にプログラムの戻り経路を示しています。デバッグ中に利用できます。


キャンバス01058

TCanvas のこと。グラフィックを描画できるオブジェクト。キャンバスにはブラシ，ペン，フォント，ピクセルの配列があります。キャンバスは Windows のデバイスコンテキストをカプセル化します。


case 可変部01059

レコード型定義では，case 可変タグによってそのレコードのインスタンスが同一のメモリ領域を別フィールドとして扱えます。


Char 型01060

1 文字を表す Pascal の型。


子01061

1.	別のクラスを継承した下位クラスが子クラスです。たとえば，type B = class(A) では B が A の子です。「孫」を参照してください。

2.	ウィンドウの子はその内側に表示され，境界の外側での描画はできません。これは子または子ウィンドウと呼ばれます。


クラス01062

データと関連コードを表す機能を 1 つの単位に集めたリスト。クラスには定義にある機能だけでなく，上位オブジェクトから継承した機能も含まれます。「クラス」という用語は「オブジェクト型」と同義です。


クラスメソッド01063

グローバルな性質のクラス，またはインスタンスデータを必要としない非グローバルクラスの動作を規定します。クラスメソッドはクラス名の後にメソッド名 (TClass.SomeMethod) を付けて呼び出し，インスタンスがあってもなくても呼び出せます。クラスメソッドの性質上，実行時にどのプロパティ，フィールド，インスタンスメソッドにも依存してはなりません。


クライアント01064

一般には何かほかからサービスを要求するもの。Object Pascal ではクライアントはオブジェクトまたはユニットの機能を使うコードです。Windows では Windows API を使うコードがクライアントです。

データベースシステムでは，インテリジェントバックエンドサーバーに接続されたワークステーションがクライアントです。このクライアントがサーバーにデータを要求できます。クライアントワークステーションはデータをローカルに処理してそのデータをサーバーに書き戻せます


クライアント領域01065

Windows ではプログラム (つまり，Windows サービスのクライアント) で描画できるコントロール上の領域。たとえばウィンドウ上では通常，枠とタイトルバーを除いた領域をいいます。


列01066

テーブルの垂直成分。項目とも呼びます。列にはテーブルの各行の値が格納されます。「行」も参照してください。


コンパイル01067

ソースコードのブロックを機械語の命令に変換する処理。(ソースコードを 1 行ずつ機械語に翻訳するインタープリタとは対照的です。)

「リンク」も参照してください。


コンパイラ指令01068

プログラム内に埋め込まれるコンパイラへの命令。たとえば {$R+} は範囲チェックをオンにします。


コンパイル時01069

コンパイラがソースコードをコンパイルしている期間。


コンパイルエラー01070

コンパイル時にコンパイラによって検出されるエラー。「構文エラー」や「未知の識別子」などがあります。


完全評価01071

式全体を評価する前にその式の結果がわかった場合でも，and 演算子と or 演算子で構成される論理式の各オペランドを評価します。これはプログラムの意味を変更する可能性のあるルーチンがオペランドに使われている場合に役立ちます。反対はショートサーキット評価です。


コンポーネント01072

構成要素のこと。Delphi では次の意味で使われます。

1.	Delphi アプリケーションの要素。コンポーネントパレットでアイコンの形で示されます。フォームなどのコンポーネントはユーザーが処理するオブジェクトです。フォームは他のコンポーネントを含むことができるコンポーネントです (フォームはコンポーネントパレットでアイコンの形では示されません)。

2.	Delphi では，TComponent から継承した任意のクラス自身がコンポーネントです。広い意味で，コンポーネントは Delphi のフォームデザイナで直接対話ができる任意のクラスといえます。コンポーネントは自己充足的であり，プロパティによってその機能へのアクセスを提供します。

3.	従来の Pascal では，「レコードはいくつかのコンポーネント，つまり 3 つの文字列フィールドと 2 つのバイトフィールドで構成されます」という具合に機能の意味でも「コンポーネント」をよく使います。


条件シンボル01073

条件コンパイラ指令と組み合わせて使い，真または偽になる条件を指定します。$DEFINE と $UNDEF の指令を使って条件シンボルの定義 (真に設定される) と定義解除 (偽に設定される) を指定します。


定数01074

固定値を持ったプログラム内の識別子。コンパイル時にソースコード中の定数のすべてのインスタンスがその固定値に置き換わります。「型付き定数」を参照してください。


定数アドレス式01075

グローバル変数，型付き定数，手続き，関数のいずれかのアドレス，オフセット，セグメントをとる式。

ローカル変数や動的変数のアドレスはコンパイル時には決定できないので，定数アドレスに含めることはできません。


定数パラメータ01076

参照渡しされるが手続きによって変更できないパラメータ。性能とメモリ使用率の面で値パラメータより優れています。「値パラメータ」と「変数パラメータ」を参照してください。


コンテナアプリケーション01077

埋め込み OLE オブジェクトを含むアプリケーション。「OLE」を参照してください。


コンテナコンポーネント01078

他のコンポーネントを含むことのできる継承能力を備えたコンポーネントクラス。TForm, TPanel, TNotebook, TGroupbox などがあります。コンテナコンポーネントはそれが含むコンポーネントの親です。


コントロール01079

ビジュアルコンポーネント。具体的には TControl の下位オブジェクトです。


データ01080

1.	データベースに格納してある情報。データはフィールド内の 1 つの項目であったり，一連の項目で構成されるレコードであったり，あるいはレコードの集合であったりします。Delphi アプリケーションはデータベース内のデータの取り出し，追加，変更，削除ができます。

2.	一般にはアクセス方法に依存しない固有値を持つ情報。


データアクセスコンポーネント01081

データベースへ接続してそのデータにアクセスできるようにする Delphi のコンポーネント。データアクセスコンポーネントがフォーム上で見えるのは設計時だけで，実行時には見えません。


データベース対応の01082

関連テーブルに格納してあるデータの表示と更新が可能な状態。Delphi のすべてのデータコントロールコンポーネントがデータベース対応です。


データコントロールコンポーネント01083

データベースアプリケーションのインターフェースを作成できるようにする Delphi のコンポーネント。データコントロールの多くが，コンポーネントパレットの［Standard］ページで利用可能なコンポーネントクラスのデータベース対応バージョンです。


データ型01084

メモリまたはデータテーブルに格納できるデータの種類と，そのデータに対してできる処理を定義するデータ定義の基本単位。


データベース01085

テーブル内のデータの集まり。


データベースサーバー01086

リレーショナルデータベースを管理するシステム。たとえば SQL Server はデータベースサーバーの一種です。


データセット01087

TTable, TQuery, TStoredProc のいずれかのコンポーネントで決まるデータの集まり。TTable で定義されるデータセットにはテーブルのすべての行が含まれ，TQuery で定義されるデータセットにはテーブルから選択された行と列が含まれます。


DDE クライアント01088

DDE 対話ではデータを要求するアプリケーションがクライアントです。DDE クライアントはデスティネーションと呼ばれることがよくあります。


DDE 対話01089

DDE クライアントアプリケーションと DDE サーバーアプリケーションの間のリンク。データを連続して自動的に互いに送る方法を両方のアプリケーションに提供します。


DDE サーバー01090

DDE 対話では DDE クライアントを更新するアプリケーションがサーバーです。DDE サーバーはソースと呼ばれることがよくあります。


デフォルト上位オブジェクト01091

上位オブジェクトを指定しないクラスの上位オブジェクト (TObject)。


デフォルトイベント01092

設計時にコンポーネントをダブルクリックしたときにそのイベントハンドラがユニットのソースコードに自動で生成または表示するイベント。たとえば OnClick イベントが Button コンポーネントのデフォルトイベントです。


デフォルトの新しいフォーム01093

［ファイル(F)｜フォームの新規作成(F)］を選択したときに，設計時に IDE で新しいフォームを作成するために使われるフォームテンプレート。新しくインストールした場合，空白のフォームテンプレートが使われます。［環境の設定］ダイアログボックス (［オプション(O)｜環境(E)］) の［Gallery］ページで指定のフォームテンプレートの変更ができます。


デフォルトの新しいプロジェクト01094

［File｜New Project］を選択したときに，設計時に IDE で Delphi の新しいプロジェクトを開くために使われるプロジェクトテンプレート。新しくインストールした場合，空白のプロジェクトテンプレートが使われます。［環境の設定］ダイアログボックス (［オプション(O)｜環境(E)］) の［Gallery］ページで指定のプロジェクトテンプレートの変更ができます。


派生01095

既存のクラスに基づいて新しいクラスを作成すること。新しいクラスは既存のクラス (親のことで，もっと一般的には上位オブジェクト) のすべての機能を継承します。


継承 01096

作成途中に別のクラスのすべての特性を取得すること。別のものから継承したクラスが親クラスの下位クラスです。下位クラスの作成過程が派生です。

「上位オブジェクト」「派生」「下位オブジェクト」「親」も参照してください。


下位オブジェクト01097

別オブジェクトから派生したオブジェクト。下位オブジェクトはそのすべての上位オブジェクトと型の互換性があります。


設計時01098

Delphi でフォーム，オブジェクトインスペクタ，コンポーネントパレット，コードエディタなどを使ってアプリケーションの設計ができる期間。設計したアプリケーションを実際に実行する実行時とは対照的です。


リンクテーブル01099

マルチテーブル関係では，そのレコードがマスターテーブルのレコードに従属するテーブル。データモデルでは，別のテーブルでポイントされているテーブルがリンクテーブルです。たとえば次のデータモデルでは，CUSTOMER.DB を除くすべてのテーブルがリンクテーブルです。


ディスパッチ01100

オブジェクトメソッドへの呼び出しを解決する方法。ディスパッチは静的，仮想，動的のいずれにもなることができます。

仮想ではなくメッセージ手続き呼び出しをディスパッチする TObject.Dispatch と混同しないでください。


ドラッグ01101

マウスを使ってオブジェクトを移動すること。

オブジェクトをドラッグするには，マウスの左ボタンを押したまま，マウスポインタを画面の希望の場所まで引っ張って移動します。目的の位置まで移動したらマウスのボタンを離します。


動的01102

単純な仮想よりも領域を効率よく使う (ただし速度の効率は低下する)仮想メソッドの形態。


ダイナミックデータ交換 (DDE)01103

定義済みのメッセージプロトコルを介して他のアプリケーションとメッセージを送受信するプロセス。DDE を使って他のアプリケーションとデータを交換したり，コマンドやマクロによって他のアプリケーションを制御したりできます。


ダイナミックリンクライブラリ (DLL)01104

他の DLL またはアプリケーションによってアクセスできるコードまたはリソースを含む実行可能モジュール (拡張子は .DLL)。Windows 環境では DLL によって複数のアプリケーションがコードやリソースを共有できます。


埋め込み01105

あるものを別のものの内部に配置すること。Windows では具体的には，あるアプリケーションがその独自のサービスに別のアプリケーションのサービスの一部または全部を統合できる機能を指します。たとえば，ワードプロセッサを使って表計算ワークシートを文書に埋め込むと，ワードプロセッサの処理で表計算ワークシートにテキストを書いたり表計算ワークシートを変更したりもできるようになります。「OLE コンテナ」を参照してください。


カプセル化01106

クライアントが実現部の内部詳細に依存したりそれを認識する必要がないように，インターフェース部を介して機能へのアクセスを許すこと。


列挙データ型01107

識別子の順序付きリストで構成されるユーザー定義の順序型。


エンドユーザー01108

アプリケーションを使う予定の人。広い意味では対象者全員を指します。ユーザーと同じ意味ですが，プログラマがユーザーでないことを強調しています。

Delphi の文書ではエンドユーザーは，ほかに特に規定がなければ Delphi を使って開発したアプリケーションのユーザーを指します。


例外01109

発生時に，通常の実行の流れを中断するイベントまたは条件。例外は発生したエラーの種類と発生場所についての情報を含むオブジェクトでもあります。


例外ハンドラ01110

例外を生成した実行時環境の状況を解決するため，また以後安定状態に環境を回復するために設計されたコード。


実行ポイント01111

実行ポイントは統合デバッガでプログラムを実行したときに実行される，プログラム中の次の行を示します。実行ポイントはコードエディタの強調表示されたコード行で示されます。


式01112

値を表すか値の計算に使える文の一部。


イベント01113

ボタンクリックなどのユーザーアクションまたは事前設定の時間間隔などのシステム発生事象で，コンポーネントが認識するもの。

各コンポーネントには応答できるイベントのリストがあります。特定のイベントの発生時に実行されるコードをイベントハンドラと呼びます。


イベントハンドラ01114

イベントにアタッチされたフォームメソッド。イベントハンドラは特定のイベントの発生時に実行されます。

オブジェクトインスペクタを使ってコードをコンポーネントイベントにアタッチすると，手続き頭部と begin..end ブロックが生成されます。たとえば，ボタンクリックイベントには次のようなコードが Delphi で生成されます。

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

begin..end ブロックの内側にユーザーが記述したコードは Button1 をクリックしたときに実行されます。


機能01115

レコードのフィールド，ユニットの型，定数，変数，ルーチン，さらにクラスのフィールド，プロパティ，メソッドを指す一般用語。


フィールド01116

構造化データ型 (つまり，レコードまたはオブジェクト) の可能な 1 つの要素で，特定のデータ型のインスタンスです。「プロパティ」を参照してください。


ファイルバッファ01117

ファイルとのデータ転送を高速化するためのメモリ領域。


ファイルの種類01118

ファイルが保持する特定のデータの種類を指します。


フィルタ01119

データの変更またはチェックのために使われるもの。たとえば，［ファイル名を付けて保存］ダイアログボックスのファイルフィルタでは Pascal ファイルのみを表示できます。


フィルタプログラム01120

別のプログラムからの出力を入力として受け取り，その変更，縮小，確認バージョンの出力を生成するプログラム。


フォーカス01121

実行中アプリケーションでアクティブなコンポーネントまたはウィンドウが「フォーカス」を持っているといいます。ユーザーのキーボード入力はそのコンポーネントまたはウィンドウに向けられます。


仮パラメータ01122

呼び出し時にサブプログラムへ渡される引数を表す手続きまたは関数の頭部見出しにある識別子。


フォーム01123

エンドユーザーにとって，フォームは単に別のウィンドウにすぎません。Delphi ではフォームは，ウィンドウの実行時機能とは関係なくコンポーネント (設計時にプログラマが配置したもの，または実行時にコードで動的に作成されたもの) を受け取るウィンドウです。


関数01124

値を計算して返すサブルーチン。


関数頭部01125

ルーチン名の後に，仮パラメータのリスト，関数の戻りの型が続くテキスト。ユニットではルーチンのインターフェース部に頭部を入力でき，さらに実現部にも入力できます。2 番目に現れる頭部はインターフェース部の頭部と厳密に重複しているか，ルーチン名だけでなければなりません。


グローバルヒープ01126

すべてのアプリケーションが利用できるメモリ。

どんなサイズのグローバルメモリブロックも割り当てできますが，グローバルヒープは大型のメモリブロック (256 バイト以上) にだけ予定されています。各グローバルメモリブロックは最低 20 バイトのオーバーヘッドを伴い，Windows のスタンダードモードとエンハンスドモードではシステム全体で 8192 のグローバルメモリブロックに制限しています。アプリケーションが使えるのはその一部のブロックだけです。

メモ:	Delphi では大型グローバルメモリブロックから小型割り当てへ分割割り当てをして，システムの限界に達する可能性を減らしています。「HeapLimit」と「HeapBlock」を参照してください。


グローバル変数01127

ルーチン (またはプログラムの本体) で使う変数で，そのルーチン (または本体の var 部) で宣言されていないものがそのコードのグローバル変数と考えられます。プログラムの一部にグローバルな変数は同じプログラムの別の部分からアクセスできない場合があり，したがってそのコンテキストではローカルと考えられます。


グリフ01128

BitBtn コンポーネントまたは SpeedButton コンポーネントの Glyph プロパティを使ってそのコンポーネントに表示されるビットマップ。


孫01129

いくつかの中間クラスを通して別のものから継承したクラス。たとえば型宣言 type E = class(D) では，E が D の子です。D がクラス C から継承したものである場合，C の親，C の親の親という具合にルートクラスに達するまでと，クラス C が E の孫です。C とその上位が E の祖父です。


祖父01130

いくつかの中間クラスを通してほかのものを継承する元のクラス。「孫」を参照してください。


グリッド01131

1.	フォーム上の等間隔に並んだ点。設計時のコンポーネントの配置に役立ちます (実行時には見えません)。［オプション(O)｜環境(E)］の［Preferences］ページで制御します。

2.	データベースの用語では，データセットのすべてのレコードを表計算ワークシートに似た形式で表示して編集できるようにするフォーム上のオブジェクトです。グリッドは TDBGrid コンポーネントを使って作成します。


例外処理01132

例外に対して特定の応答をすること。この処理でエラー条件がクリアされ例外オブジェクトが破壊されます。


頭部01133

ルーチン名の後に，仮パラメータのリスト，さらに関数の場合その関数の戻りの型が続くテキスト。ユニットではルーチンのインターフェース部にヘッダー (頭部) を入力でき，さらに実現部にも入力できます。2 番目に現れるヘッダーはインターフェース部のヘッダーと厳密に重複しているか，ルーチン名だけでなればなりません。


ヒープ01134

変数の動的割り当てのために予約してあるメモリ領域。


ヒープのサブアロケータ 01135

大型のメモリブロックの割り当てでは，ヒープマネージャは単に Windows の GlobalAlloc ルーチンを使ってグローバルメモリブロックを割り当てるだけです。

小型のブロックの割り当てでは，Object Pascal のヒープマネージャは大型のグローバルメモリブロックを割り当ててから，必要に応じて小型のブロックに分割します (サブアロケーション)。小型ブロックの割り当てでは，ヒープマネージャが新しいグローバルメモリブロックを割り当ててサブアロケーションを進める前に，利用可能なすべてのサブアロケーション空間が再利用されます。


ヘルプコンテキスト01136

プログラム中のコントロールに個々に割り当てた番号。ヘルプをアクティブにした場合，フォーカスがあるコントロールにヘルプシステムが問い合わせて，ヘルプコンテキストを参照として使いユーザーの処理に合った情報を提供できます。


ヒント01137

マウスポインタがユーザーインターフェースのオブジェクトの上を実行時に通過したときに表示されるポップアップテキスト。多くのビジュアルコンポーネントの Hint プロパティで指定されます。


ホストの種類01138

プロセスまたは一連のプロセスに使われている特定のサーバー。


IDAPI01139

「BDE」を参照してください。


識別子01140

特定の項目 (定数，型，変数，手続き，関数，ユニット，プログラム，フィールド) に対してプログラマが定義した名前。


実現部01141

ユニットのインターフェース部 (パブリック部) の要素がどのように動くかを定義する，ユニットの 2 番目の部分 (プライベート部)。


インクルードファイル (.INC)01142

{$I filename} コンパイラ指令を使ってコンパイルにインクルードされるソースコードのファイル。

インクルードファイルは Delphi プロジェクトにめったにない部分ですが，使うこともできます。


添字01143

要素リスト内部での位置。


添字の型01144

配列の要素の型を指定します。有効な添字の型は Longint 型と Longint 型の部分範囲型を除くすべての順序型です。


継承01145

あるクラスの機能を別のクラスが引き受けること。


インスタンス01146

オブジェクト型の変数。もっと一般的には任意の型の変数です。実メモリが割り当てられます。


整数型01147

-32,768 から +32,767 までの範囲の整数の数値変数型。


統合デバッガ01148

統合デバッガは統合開発環境の内部に含まれています。このデバッガを使うと，Delphi を終了せずにソースコードをデバッグできます。統合デバッガのこの機能は実行メニューと表示メニューで利用できます。


インターフェース部01149

利用できる定数，型，変数，手続き，関数を記述する，ユニットの最初のパブリック部。


キー01150

レコードの順序付けに使うテーブル内の項目または項目グループ。キーには次の効果があります。

テーブルに重複レコードが含まれなくなる

キー項目に基づきレコードのソート順が保たれる

一次インデックスがテーブルに作成される


ラベル01151

goto 文のターゲットをマークする識別子。


言語ドライバ01152

テーブルのソート順と利用できる文字セットを決めます。BDE 環境設定ユーティリティを使ってテーブルにデフォルトの言語ドライバを指定できます。


レイトバインディング01153

仮想メソッドまたは動的メソッドの呼び出しに使われるアドレスが実行時に決められること。


リンク01154

コンパイルしたソースコードを実行可能ファイルに変えるプロセス。リンク段階でリソースが実行可能ファイルにバインドされます。


リテラル値01155

実際のソースコードに現れる値 (計算された値や宣言された値とは対照的です)。文字列の 'Hello, World' や数字の 1 などがあります。


ローカルヒープ01156

アプリケーションまたはライブラリだけが利用できるメモリ。

アプリケーションまたはライブラリのデータセグメントの上位部分に存在します。

ローカルヒープ上に割り当て可能なローカルメモリブロックの合計サイズは，そのアプリケーションのスタックデータと静的データのサイズを 64 KB から引いた値です。このため，ローカルヒープが小型のメモリブロック (256 バイト以下のメモリブロック) には最適です。ローカルヒープのデフォルトサイズは 8 KB ですが，このサイズは $M コンパイラ指令を使って変更できます。


ローカルシンボル情報01157

IDE がルーチンのデバッグに使う情報。ローカルシンボル情報は［プロジェクトの設定］ダイアログボックス (［オプション(O)｜プロジェクト(P)］) で有効にしなくてはなりません。Delphi をインストールした場合，デフォルトでは有効になっています。


ローカル変数01158

手続きまたは関数の内部で宣言されている変数。


ロック01159

あるユーザーがテーブルを処理している間に，別のユーザーがそのテーブルを表示，変更，ロックできないようにする仕組み。


論理エラー01160

論理エラーが発生するのは，プログラム文は正しくても，そのアクションがユーザーの意図したものと異なる場合です。たとえば，間違った値が変数に含まれている，グラフィックイメージが正しく表示されない，プログラムの出力が正しくないなどの場合です。


Longint型01161

-2,147,483,648 から +2,147,483,647 までの範囲の整数を格納できる 4 バイトの整数型。


参照テーブル01162

二次テーブルの一種。データベースシステムで小さいコード項目を使うことによって，一次テーブルの多くのレコードが参照テーブルの情報を参照できるようになります。

参照テーブルは一次テーブルに入力された値が正当な値であることを保証する方法として使えるので，データの整合性が保たれます。


ループ01163

特定の条件が満たされるまで繰り返される文または文グループ。


メインフォーム01164

設計時に，プロジェクトに追加されたかプロジェクトで作成された最初のフォーム。メインフォームとして設計されるフォームは［プロジェクトの設定］ダイアログボックス (［オプション(O)｜プロジェクト(P)］) の［Forms］ページで変更できます。メインフォームは通常，実行時に最初に表示され，プログラムの実行を通じて表示される主要なフォームです。


マスターテーブル01165

マルチテーブル関係では，データモデルの一次テーブル。データモデルにテーブルが 1 つしかない場合は，そのテーブルがマスターテーブルになります。マルチテーブルデータモデルでは，他のテーブルをポイントしているテーブルがマスターテーブルです。たとえば次のデータモデルでは，VENDORS.DB を除くすべてのテーブルがマスターテーブルです。


メソッド01166

特定のオブジェクトに関連付けられた手続きまたは関数。


メソッド識別子01167

メソッドの識別文字列または動的インデックス。


メソッドポインタ90004

特定のオブジェクト内の特定のメソッドを指すポインタ。


メソッドポインタ01168

特定のオブジェクト内の特定のメソッドを指すポインタ。


マルチドキュメントインターフェース (MDI) アプリケーション01169

複数の子ウィンドウまたは文書を含むことができるメインアプリケーションウィンドウ (フレームウィンドウと呼ばれる) でインターフェースが構成されるアプリケーション。子ウィンドウを最大化すると，その子ウィンドウの文書タイトルは親ウィンドウのタイトルバーにマージされます。


モード付き01170

フォームを閉じないとアプリケーションの作業を続けられないダイアログボックスとして設計されているフォームの実行時の状態。モード付きダイアログボックスではアプリケーションの他のすべての領域へのアクセスが制限されます。詳細はヘルプで「ShowModal メソッド」を参照してください。


モードなし01171

ユーザーがダイアログボックスを閉じなくてもそこからフォーカスを切り替えられるダイアログボックスとして設計されているフォームの実行時の状態。詳細はヘルプで「Show メソッド」を参照してください。


モジュール01172

自己充足的なルーチンまたはルーチングループ。ユニットがモジュールの例として挙げられます。


nil01173

空を参照しているポインタ値。ポインタにはメモリアドレスを割り当てて，安全で意味のある使い方をしなくてはなりません。

メモ:	nil 値を持つポインタを参照すると，一般保護障害が発生します。


非ビジュアルコンポーネント01174

設計時にフォーム上に小さい画像として表示されるが，呼び出すまで実行時には表示されないコンポーネント (TSaveDialog など) または実行時にまったく表示されないコンポーネント (TTimer など) 。


非ウィンドウコントロール01175

フォーカスを受け取れないコントロールで，他のコントロールの親にはなれなく，しかもウィンドウハンドルを持たないコントロール。


オブジェクトファイル (.OBJ)01176

アセンブラで通常生成される中間の機械語ファイル。$L filename コンパイラ指令を使ってプロジェクトまたはユニットとリンクします。

.OBJ ファイルにある関数は Pascal 宣言の EXTERNAL で宣言されます。オブジェクトファイル (.OBJ) は Delphi プロジェクトにめったにない部分です。


オブジェクトインスタンス変数01177

オブジェクトのインスタンスに内部的に作成される識別子。


オブジェクト型01178

クラス。


OLE01179

オブジェクトのリンクと埋め込み (Object Linking and Embedding) の略。アプリケーション間で複雑なデータを共有するための方法です。OLE を使うと，サーバーアプリケーションのデータがコンテナアプリケーションに格納されます。データは OLE オブジェクトに格納されます。


OLE コンテナ01180

OLE オブジェクトを格納できるアプリケーション。Delphi では，OLE コンテナアプリケーションが TOLEContainer コンポーネントを持ちます。


OLE オブジェクト01181

OLE サーバーと OLE コンテナが共有するデータ。OLE オブジェクトはコンテナアプリケーションにリンクしたり埋め込んだりできます。リンクオブジェクトのデータは外部ファイルに格納され，埋め込みオブジェクトはコンテナアプリケーションに格納されます。

OLE オブジェクトの例として文書，表計算ワークシート，画像，サウンドなどが挙げられます。


OLE サーバー01182

OLE オブジェクトの作成と編集ができるアプリケーション。


順序型01183

順序付き要素の閉じた集合で構成される Object Pascal の型。


オーバーライド01184

下位オブジェクト型でオブジェクトメソッドを再定義すること。


オーナー01185

他の (所有された) オブジェクトで使われれるリソースを解放できるオブジェクト。


パラメータ01186

関数または手続きに渡される変数または値。


親01187

1.	宣言で示されるあるクラスのすぐ上位。たとえば type B = class(A) では，クラス A がクラス B の親です。

2.	Parent プロパティ (コンポーネントが内部に表示されるコンテキストを与えるコンポーネント)。


ピクセル01188

画面上のイメージを構成する色付きドットのそれぞれ。「picture element」から派生した用語です。


ポインタ01189

特定のメモリロケーションのアドレスを含む変数。


べき集合01190

空集合を含み，基本型の値のすべての可能な部分集合の集まり。


一次インデックス01191

テーブルのキー項目にあるインデックス。インデックスは次のように役立ちます。

レコードの位置を決める

レコードのソート順を保つ

検索処理の効率を上げる

一次インデックスは通常ユニークでなくてはなりません。つまり，重複するキーが存在してはなりません。


private01192

クラス宣言の開始を示すキーワード。


プライベート部01193

クラス宣言のプライベート部で宣言された要素は，そのクラス宣言を含むモジュール内部でのみ使えます。そのモジュールの外側では，未知になりアクセスできません。


手続き01194

より大きいプログラムの各部から呼び出せるサブプログラム。関数とは異なり，手続きは値を返しません。


procedure declaration01195

手続き宣言は，ユニットまたはプロジェクトに現れる手続き頭部の最初にあります。


手続き頭部01196

ルーチン名の後に仮パラメータのリストが続くテキスト。ユニットではルーチンのインターフェース部で頭部を宣言でき，さらに実現部でも宣言できます。2 番目に現れる頭部はインターフェース部の頭部と厳密に重複しているか，ルーチン名だけでなければなりません。


プログラム01197

実行可能ファイル。略式の意味では，プログラムとその実行に必要なすべてのファイルを指します。「アプリケーション」を参照してください。


プロジェクト01198

アプリケーションまたは DLL の構築に使うファイルとリソースの完全なカタログ。もっと具体的には，プログラムのメインソースコードファイルで，アプリケーションまたは DLL が依存しているユニットの一覧を示します。


プロジェクトディレクトリ01199

プロジェクトファイルが入っているディレクトリ。


プロジェクトファイル01200

Delphi プロジェクトのソースコードを含むファイル。拡張子は .DPR で，プロジェクトが使うすべてのユニットファイルの一覧を示し，アプリケーションの起動のためのコードを含みます。


プロパティ01201

オブジェクトのメソッドまたはフィールドに制御付きでアクセスできるようにする機能。パブリッシュプロパティはファイルに格納されます。


プロテクト01202

クラス型宣言で使われ，定義元のクラスとその下位クラスだけに機能が見えるようにします。


プロテクトブロック01203

try..except 文または try..finally 文の try ブロック。


パブリック01204

クラス型宣言で使われ，そのクラスのクライアントに機能が見えるようにします。


パブリッシュ設定01205

クラス型定義の機能をストリーム可能にするために使われます。ストリーム可能な機能は設計時に見えます。


限定識別子01206

ピリオドを含む，つまり限定子を含む識別子。限定識別子は (オブジェクト，レコード，ユニットの) 特定の機能が，現在のスコープ内部でやはり可視の同じ名前の他の機能に関係なく使われるようにします。


限定メソッド識別子01207

後にピリオド (.) とメソッド識別子が続くオブジェクト型識別子。他の識別子と同様に，限定メソッド識別子の前にユニット識別子とピリオドを付けられます。


限定子01208

後にピリオド (.) が続く識別子。メソッド識別子または他の識別子の前にあって特定のシンボル参照を指定します。


問い合わせ01209

テーブルからデータを取り出す方法。問い合わせでは，1 つまたは複数のテーブルのデータを調べられます。


例外の生成01210

例外の生成とは，エラーまたは他の例外条件をシグナル通知するために例外オブジェクトを構築することです。アプリケーションが例外を処理しなくてはなりません。


実数型01211

浮動小数点数または指数表記で表す数。


レコード01212

1.	レコード型のインスタンス。

2.	データベースの用語では，テーブルの水平方向の行でデータの関連項目のグループを含みます。


レコード型01213

フィールドで構成される構造化データ型。


再帰01214

サブルーチン自身を呼び出すプログラミング手法。この手法を使う場合，最終的には再帰を終了するように注意してください。そうしないと，無限の再帰によってスタック障害が引き起こされます。


リレーショナルデータベース01215

データが行 (レコード) と列 (項目) として格納されるデータベース管理モデルで，その中ではあるテーブルのデータが共通のデータ項目によって別のテーブルのデータにアクセスできます。データベース構造を使ってデータ要素との間に 1 対多と多対 1 の関係を作成できます。


レポート01216

エンドユーザーがデータの体系的な集計結果や明細情報をプリンタで印刷または画面に表示できるように用意されている機能。


ルートクラス01217

それ自身の上位クラスを持たないクラス。ルートクラスから他のすべてのクラスが継承されます。Delphi では TObject がルートクラスです。


ルーチン01218

手続きまたは関数。


行01219

テーブルの水平成分。レコードとも呼びます。行にはテーブルの関連する列グループにある各列の値が格納されます。「列」も参照してください。


実行時01220

設計したアプリケーションを実行している期間。


実行時エラー01221

アプリケーションの実行中に発生するエラー。コンパイルエラーとは対照的です。


ランタイムライブラリ01222

すべての Object Pascal プログラムが利用できる標準の手続きと関数。


実行時のみ01223

設計時ではなくアプリケーションの実行中のみ見えるか変更や呼び出しができるルーチン，プロパティ，イベント，コンポーネントのいずれか。


スカラー型01224

順序付きのコンポーネントで構成される Object Pascal の型。


スコープ01225

プログラムまたはユニット内のコードに対する識別子の可視性。


セパレータ01226

空白またはコメント。Object Pascal ではコメントを空白として扱います。


分割線01227

メニュー項目の間に挿入される線。メニューデザイナで新しい項目の Caption プロパティにハイフン (-) を入力すると，現在の位置に分割線が作成されます。


集合型01228

一定のスカラー型または部分範囲基本型の要素の 0 個以上の集まりを表す Pascal の型。


ショートサーキット評価01229

厳密に左から右に論理式を評価して，式全体の結果が明らかになった時点ですぐに評価を打ち切る評価方法。このモデルでは，コードの実行時間が最小になり，通常はコードサイズも最小になります。


Shortint 型01230

-128 から +127 までの範囲の整数を保持できる 1 バイトの型。


サイズ変更ハンドル01231

選択したコンポーネント，フォーム，ウィンドウの周囲に表示される小型の黒い四角。このハンドルをドラッグしてオブジェクトのサイズを変更できます。


ソースコード01232

コンピュータプログラムの開発者が適切な編集ツールを使い特定のプログラミング言語の構文規則に従って作成した 1 行 1 行の文の集まり。


スプラッシュ画面01233

アプリケーションの紹介のために起動直後に表示されるフォーム。メインフォームや二次フォームがメモリに読み込まれるまで，またはデータベースサーバーと接続されるまで表示されます。「メインフォーム」も参照してください。


スピードメニュー01234

ポインティングデバイスによって右クリックして表示できる，オブジェクトのローカルメニュー。


SQL01235

構造化問い合わせ言語 (Structured Query Language) の略。データベース中のデータの定義，処理，検索，取り出しに使うリレーショナルデータベース言語。


SQL テーブル01236

SQL が定義するデータベースサーバー上のテーブル。


スタック01237

ローカル変数の格納用に予約してあるメモリ領域。プログラムの実行とサブルーチンの呼び出しの追跡管理もします。


文01238

プログラム内の最も単純な単位。文の区切りはセミコロンで示します。


静的01239

コンパイル時に解決されることです。手続きやメソッドの呼び出しについて (静的メソッドというように) 使います。


ステップ実行01240

プログラムを一度に 1 行実行するデバッガコマンドで，実行時に 1 つのユニットとして手続きをステップ実行します。「トレース」を参照してください。


文字列型01241

データの 1 単位として扱える文字の並びの列を表す Pascal の型。


文字列リスト01242

文字列または文字列から継承されたオブジェクトを格納できるオブジェクト。


部分範囲型01243

スカラー型の指定の連続した部分を表す Pascal の型。


スイッチ指令01244

スイッチの状態 (+ または -) に応じてコンパイラの機能をオンまたはオフにするコンパイラ指令。たとえば，{F+} は force far 呼び出し指令をオンにし {F-} はオフにします。


シンボル01245

識別子。シンボルは予約語を含みます。


テーブル01246

行 (レコード) と列 (項目) のデータで構成される構造。


タグプロパティ01247

プログラマが必要に応じて使う，コンポーネントの特定のインスタンス用の Longint 型記憶域。


TDBDataset01248

データベースへの接続，パスワード処理，データベースの接続性に関連するその他の作業に必要な機能を含む TDataset の下位。

TDataset のオブジェクトの直接のインスタンス化はできないので，TTable, TQuery，または別の TDataset 下位をインスタンス化します。


テンプレート01249

アプリケーション設計の起点になる設計済みのプロジェクトまたはフォーム。


トレース01250

プログラムを一度に 1 行実行するデバッガコマンドで，デバッグ情報付きでコンパイルした手続きをトレースして各行の実行を続けます。「ステップ実行」を参照してください。


型キャスト01251

型 X の式を型 Y の式としてコンパイラが扱うようにすること。

AS を使ってオブジェクトインスタンスを型キャストすると，コードの生成が実行時に型キャストの互換性を検証するようになります。通常の型キャストはコンパイル時に検証され実行時には検証されません。


型01252

データの格納とアクセスの方法の記述。データの実際の格納域である「変数」を参照してください。


型の互換性01253

別の型のかわりにインスタンスを使えること，または別の型にインスタンスを割り当てられること。

整数型はすべて相互に互換性があります。下位クラスインスタンスは上位の型の変数と型の互換性があります。兄弟クラスには型の互換性がなく，上位クラスとその下位クラスの間にも型の互換性がありません。


型付き定数01254

アプリケーションの起動時にデフォルト値が与えられる変数。すべてのグローバル変数がメモリの一定の空間を占めます。


型定義01255

定義済みでない型の指定。変数が保持できる値のまとまりと，それに対して実行できる処理を定義します。


ユニット01256

パブリック部 (インターフェース部) とプライベート部 (実現部) で構成される独立したコンパイル可能コードモジュール。

Delphi の各フォームにはユニットが関連付けられています。

ユニットのソースコードは .PAS ファイルに格納されます。ユニットは拡張子が .DCU のバイナリシンボルファイルにコンパイルされます。リンク時に各 .DCU ファイルが 1 つの .EXE ファイルまたは .DLL ファイルに結合されます。


型なしファイル01257

その内部形式とは関係なくディスクファイルに直接アクセスできる低レベルの入出力チャネル。


型なしポインタ01258

特定の型をポイントしないポインタ。型なしポインタを参照するには，型キャストしなくてはなりません。「型キャスト」も参照してください。


限定のない識別子01259

ピリオドを含まない識別子，つまり限定子を持たない識別子。限定のない識別子の意味は現在のスコープによって決まります。たとえば Create は，現在のスコープ内で Create と呼ばれるルーチンを呼び出す (そのようなルーチンがないとコンパイルエラーになります) 限定のない識別子ですが，TForm.Create は TForm の機能である特定の Create メソッドを呼び出します。「限定子」を参照してください。


使用回数01260

DLL がメモリに常駐するかどうかを判断するのに Windows が使う内部変数。使用回数がゼロより大きければ，DLL はメモリに常駐します。

アプリケーションが DLL をロードするたびに使用回数は 1 増え，アプリケーションが DLL を解放するたびに 1 減ります。


ユーザー定義01261

プログラマが定義する型で，Pascal 言語本来の部分でないものについていいます。これには，コーディング可能な型定義，ボーランドが提供する定義，その他のソースが含まれます。


値パラメータ01262

値渡しされる手続きパラメータまたは関数パラメータ。つまり，パラメータの値はルーチンが使うローカルメモリにコピーされるので，そのパラメータの変更はローカルになります。

「変数パラメータ」と「定数パラメータ」を参照してください。


変数パラメータ01263

参照渡しされるサブルーチンパラメータ。変数パラメータの変更はサブルーチンが終了したあとでも有効です。「値パラメータ」と「定数パラメータ」を参照してください。


変数01264

メモリ内のアドレスを表す識別子。その内容は実行時に変更できます。


仮想01265

呼び出しが実行時に名前で解決されます。


ビジュアルコンポーネント01266

可視コンポーネント，または実行時にフォーム上で可視にできるコンポーネント。


監視式01267

監視式を使うと，コードのステップ実行またはトレースの進行に従いプログラム変数または式の値を追跡できます。監視式ウィンドウを使って現在設定されている監視式を表示します

プログラムが進むにつれ，監視式の変数が更新されると監視式の値が変わります。


ウィンドウハンドル01268

Windows がコントロールに割り当てる数字。そのコントロールのサービスを Windows API に要求するのに使わなくてはなりません。


ウィンドウコントロール01269

フォーカスを受け取れるコントロールで，他のコントロールを所有でき，しかもウィンドウハンドルを持つコントロール。


Word 型01270

Delphi では，連続する 2 バイトを占めるメモリロケーション。整数型またはワード型の変数に必要な格納域です。0 から 65535 までの範囲の定義済みの型でもあります。


ラッパー01271

プログラマ用，通常はある程度はっきりした利益を得るために機能の一部をカプセル化する目的で設計したオブジェクト，ルーチン，オブジェクトグループ，ルーチングループ。 VCL は Windows API のオブジェクト指向ラッパーです。


Z オーダー01272

画面の表面からのオブジェクトの概念距離。あるコントロールが他のコントロールによって覆われるかどうかは，そのコントロールと他のコントロールとの相対的 Z オーダーで決まります。


マウスへの応答
マウスへの応答01273

参照	例

アプリケーションでは 4 種類のマウスアクションに応答できます。

3 つはマウスに特有のアクションです。

マウスボタンを押す

マウスの移動

マウスボタンから指を離す

4 番目のアクションはクリック (1 箇所でマウスボタンを押して指を離す) ですが，このアクションはある種のキー入力によっても (たとえば，モード付きダイアログボックスで Enter を押しても) 生成できるため，ほかの 3 つとはやや異なります。

マウスダウンアクションへの応答

ユーザーがマウスボタンを押すと，ポインタが位置しているオブジェクトに OnMouseDown イベントが移動します。これによりオブジェクトはイベントに応答可能になります。

マウスダウンアクションに応答するには

OnMouseDown イベントにオブジェクトハンドラを定義する

マウスアップアクションへの応答

ユーザーがマウスボタンから指を離すと，OnMouseUp イベントが発生します。通常，このイベントはユーザーがボタンを押したときにマウスポインタが位置していたオブジェクトに移動します。このオブジェクトはボタンから指を離したときにポインタが位置していたオブジェクトと必ずしも同じではありません。これにより，たとえばフォームの境界を越える線を引くことができます。

マウスアップアクションに応答するには

OnMouseUp イベントにフォームのハンドラを定義する

マウス移動アクションへの応答

ユーザーがマウスを移動する間 OnMouseMove イベントが定期的に発生します。このイベントはユーザーがボタンを押したときにマウスポインタが位置していたオブジェクトに移動します。

マウス移動に応答するには

OnMouseMove イベントにフォームのハンドラを定義する

マウス移動イベントはユーザーがマウスボタンを押していない場合でも発生します。マウスボタンが押されたときだけアプリケーションがマウス移動イベントに応答するようコードを記述する必要があります。

マウスボタンが押されたかどうかを追跡するには

オブジェクトフィールドをフォームオブジェクトに追加する


参照01274

新しいイベントハンドラの生成

マウスイベントとは


例01275

例 (マウスダウンイベントへの応答)

例 (マウスアップイベントへの応答)

例 (マウス移動イベントへの応答)


例01276

次のコードはフォーム上のマウスを使ってクリックされた位置に文字列 筑Here!筑 を表示します。

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

  Canvas.TextOut(X, Y, 'Here!');	{ テキストを (X, Y) に記述します }

end;


例01277

次のコードはマウスボタンから指を離した点まで線を引きます。

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

  Canvas.LineTo(X, Y);	{ PenPos から (X, Y) まで線を引きます }

end;


例01278

次のコードはフォームに OnMouseMove イベントの位置まで線を引きます。

procedure TForm1.FormMouseMove(Sender: TObject;Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

  Canvas.LineTo(X, Y);	{ 現在位置まで線を引きます }

end;


マウスイベントとは
マウスイベントとは01279

参照

Delphi では 3 つのマウスイベントが定義されています。

OnMouseDown

OnMouseMove

OnMouseUp

Delphi アプリケーションがマウスアクションを検出すると，対応するイベントに定義したイベントハンドラが呼び出され，5 つのパラメータが渡されます。これらのパラメータの情報はイベントへの応答をカスタマイズするために使います。5 つのパラメータを次に示します。

パラメータ	意味

Sender	マウスアクションを検出したオブジェクト

Button	どのボタンが関係したかを示す mbLeft, mbMiddle, mbRight のいずれか

Shift	マウスアクション時の Alt, Ctrl, Shift キーの状態を示す

X, Y	イベントが発生した場所の座標

ほとんどの場合，マウスイベントハンドラで最も重要な情報は座標ですが，どのマウスボタンによってイベントが発生したかを調べるために Button をチェックしなくてはならない場合もあります。

メモ:	Delphi はどのマウスボタンが押されたかを調べるときに Microsoft Windows と同じ条件を使います。したがって，デフォルトの「一次」と「二次」のマウスボタンを交換した (マウスの右ボタンが一次ボタンになるようにした) 場合，一次 (右) ボタンをクリックすると Button パラメータの値として mbLeft が記録されます。


参照01280

マウスへの応答


フォームオブジェクトへのフィールドの追加
フォームオブジェクトへのフィールドの追加01281

参照	例

フォームにコンポーネントを追加すると，そのコンポーネントを表すフィールドがフォームオブジェクトに追加されます。このフィールドの名前を使ってコンポーネントを参照できます。フォームのユニットの最上部にある型宣言を編集することによって，独自のフィールドをフォームに追加できます。

独自のフィールドを追加すると，そのフォームに関連付けたすべてのイベントハンドラに対してグローバルな変数を宣言する手段が得られます。

オブジェクトにフィールドを追加するには

宣言部の最後で public 指令の後にフィールドの識別子と型を指定することによって，オブジェクトの型定義を編集する

Delphi はコンポーネントを表すすべてのフィールドと，イベントに応答するすべてのメソッドを public 指令の前に置きます。


参照 01282

フォームオブジェクトへのメソッドの追加

フォームの型宣言の変更


例01283

次のコードは論理型のフィールド Drawing を Form1 の宣言に追加します。

type

  TForm1 = class(TForm)

    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure FormMouseMove(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

  public

    Drawing: Boolean;	{ ボタンが押されたかどうかを追跡するフィールド }

  end;


フォームへのツールバーの追加
ツールバーの作成01284

参照

ツールバーは，通常はフォームの上部にあるメニューバーの下に表示されるパネルで，任意の個数のコンポーネント，特にボタンを持つことができます。ツールバーを使うとアプリケーションユーザーに対しオプションを簡単に視覚的に提示できます。

フォームにツールバーを追加するには

1.	Panel コンポーネントをフォームに追加します。

2.	パネルの Align プロパティを alTop に設定します。フォームの最上部に揃えた場合，パネルの高さは保持されますが，幅はフォームのクライアント領域の最大幅と同じになり，ウィンドウのサイズが変化した場合もその幅になります。

3.	スピードボタンまたはその他のコンポーネントをバーに追加します。

フォームにはいくつでも希望する数のツールバーを追加できます。フォームの上部に複数のパネルを揃えた場合，追加した順に縦に積み重なります。


参照01285

非表示のツールバーの追加

ツールバーの表示と非表示

TPanel


ツールバーへのスピードボタンの追加
ツールバーへのスピードボタンの追加01286

参照

スピードボタンはツールバー上の図形表示ボタンで，メニューコマンドやマクロのショートカットを表すために使います。

スピードボタンをパネルに追加すると，パネルはスピードボタンのコンテナになるため，パネルを移動したり非表示にすることによってスピードボタンも移動し非表示になります。

ツールバーにスピードボタンを追加するには

ツールバーを表すパネルにスピードボタンコンポーネントを配置する

ツールバーのデフォルトの高さは 41 で，スピードボタンのデフォルトの高さは 25 です。各ボタンの Top プロパティを 8 に設定すると，ボタンは縦に中央揃えされます。デフォルトのグリッド設定を使うとスピードボタンはグリッド位置に自動的に配置されます。


参照01287

スピードボタンへのグリフの割り当て

スピードボタンのグループの作成

スピードボタンの初期条件の設定

スピードボタンコンポーネントの使い方


スピードボタンへのグリフの割り当て
スピードボタンへのグリフの割り当て01288

参照

各スピードボタンにはボタンがする操作をユーザーに対して示すためのグリフと呼ばれるグラフィックイメージが必要です。スピードボタンにイメージを 1 つだけ指定した場合，ボタンはそのイメージを処理してボタンが押されている，押されていない，選択されている，使用不可であるのいずれかを表します。必要に応じて，各状態ごとに別の特有のイメージを指定できます。詳細は異なるボタン状態を示す別のグリフの指定を参照してください。

通常，スピードボタングリフは設計時に割り当てます。ただし実行時に別のグリフを割り当てることもできます。

スピードボタンにグリフを割り当てるには

1.	スピードボタンを選択します。

2.	オブジェクトインスペクタで Glyph プロパティを選択します。

3.	Glyph の横の値列をダブルクリックします。

画像エディタが開きます。

4.	画像エディタで［読み込み(L)］をクリックします。

［画像読み込み］ダイアログボックスが開きます。

5.	ボタンに配置するイメージが保存されている .BMP ファイルを選択し，［OK］をクリックします。

［画像読み込み］ダイアログボックスが閉じ，選択したビットマップイメージが画像エディタに表示されます。

6.	［OK］をクリックすると画像エディタが閉じます。


参照01289

ツールバーへのスピードボタンの追加

スピードボタンのグループの作成

スピードボタンの初期条件の設定


スピードボタンの初期条件の設定
スピードボタンの初期条件の設定01290

参照

スピードボタンの外観からユーザーはボタンの状態と目的を表す情報がわかります。スピードボタンにはキャプションがないため，正しい視覚表示をボタンに与えてユーザーの理解の手助けとすることが重要です。スピードボタンへのグリフの指定がこれに大きく関係します。

実行時にユーザーがスピードボタンを選択すると，デフォルトではボタンは押された状態で表示され，ユーザーがボタンから指を離すと上がった状態に戻ります。ボタンをトグルにするかグループ化することによって，ユーザーがスピードボタンを選択したときにボタンが押されたまま (下がったまま) の状態になるよう指定できます。トグルボタンはユーザーがそのボタンを選択するたびに押された状態と上がった状態を切り替えます。

グループ化しないスピードボタンをトグルにするには

1.	AllowAllUp プロパティを True に設定します。

2.	GroupIndex プロパティをゼロ以外の値に設定します。

アプリケーションでスピードボタントグルを初めて表示するとき，押された状態で表示するよう指定できます。たとえば，ボタングループの中でそのボタンがデフォルト選択であることを示す場合などです。

スピードボタンの初期状態を押された状態にするには

Down プロパティを True に設定する

他のコンポーネントと同様に，スピードボタンを使用不可にすることによって，初期状態としてまたはアプリケーション実行中の任意の時点でスピードボタンを使えないようにできます。

スピードボタンを使用不可として表示するには

Enabled プロパティを False に設定する

メモ:	Enabled を False に設定すると，スピードボタン上に表示されるビットマップは自動的に淡色表示になります。スピードボタンにグラフィックが含まれない場合，Enabled を False に設定してもユーザーに対してそのボタンが使えないことを知らせる視覚表示は与えられません。ユーザーが実行時にそのボタンを選択しても，ボタンは応答しません。


参照01291

ツールバーへのスピードボタンの追加

スピードボタンへのグリフの割り当て

スピードボタンのグループの作成


スピードボタンのグループの作成
スピードボタンのグループの作成01292

参照

スピードボタンのグループを作成するときにはフォーム内またはコンテナコンポーネント内にボタンを視覚的に関連付けるだけで，それ以上の指定は必要ありません。ただし，実行時に相互依存的に動作するスピードボタングループを作成することもできます。

実行時にユーザーがスピードボタンを選択すると，デフォルトではボタンは押された状態で表示され，ユーザーがボタンを離すと上がった状態に戻ります。スピードボタンをグループ化することによって，ユーザーがボタンを選択した後そのボタンがグループ内で押されたまま (下がったまま) の状態になるよう指定できます。

メモ:	グループ化していないスピードボタンの場合は，トグルにすると押された状態のまま表示できます。

スピードボタンをグループ化する場合，グループ内では常に 1 つのボタンが押された状態になるように指定できます。反対に，グループ内のすべてのボタンを上がった状態にすることもできます。

任意の個数のスピードボタンを 1 つのグループに関連付けるには

グループに含めるボタンをすべて選択し，グループ全体を選択した状態で，GroupIndex プロパティをゼロ以外の値に設定する (GroupIndex のデフォルト値はゼロで，スピードボタンの間にはグループ関係は設定されない)

既存のグループにはスピードボタンをいつでも追加できます。スピードボタンの GroupIndex プロパティをグループの GroupIndex プロパティと同じ値に設定すると追加できます。フォーム上で，またはフォームの同じコンテナ 内で同じ GroupIndex 値を持つすべてのスピードボタンは，実行時にグループとして連動します。

グループ内のすべてのボタンを上がった状態で表示するには

グループ内のすべてのスピードボタンの AllowAllUp プロパティを True に設定する

グループ内の 1 つのスピードボタンの AllowAllUp を True に設定すると，同じグループ内の他のすべてのスピードボタンの AllowAllUp が自動的に True に設定されます。


参照01293

ツールバーへのスピードボタンの追加

スピードボタンへのグリフの割り当て

コンテナコンポーネント内でのスピードボタンのグループ化

スピードボタンの初期条件の設定


コンテナコンポーネント内でのスピードボタンのグループ化
コンテナコンポーネント内でのスピードボタンのグループ化01294

参照

グループ化するコンポーネントをコンテナコンポーネント (パネルなど) に置くと，設計時に移動やコピー，削除などの操作でこれらをグループとして扱うのが簡単になります。コンテナコンポーネントのプロパティを使って，境界を高くした状態または低くした状態で表示するなど視覚的効果を与えることもできます。

スピードボタンをグループとして動作させるためにはコンテナ内に置く必要はありません。GroupIndex プロパティの設定によって，実行時にどのボタンが連動するかが決まります。ゼロ以外の GroupIndex 値の各種集合を設定することによって，複数のスピードボタングループを作成できます。フォーム上で，またはフォームの同じコンテナ内で同じ GroupIndex 値を持つすべてのスピードボタンが実行時にグループとして連動します。


参照01295

ツールバーへのスピードボタンの追加

フォームへのツールバーの追加

スピードボタンへのグリフの割り当て

スピードボタンのグループの作成

スピードボタンの初期条件の設定


ボタンクリックへの応答
ボタンクリックへの応答01296

参照

ボタンコンポーネントには 2 つのクリックイベントがあります。

OnClick

OnDblClick

ユーザーによるボタンクリックに応答するには

ボタンの OnClick イベントにハンドラを定義する。イベントハンドラの生成方法についての詳細は新しいイベントハンドラの生成を参照

デフォルトでは，クリックされたコンポーネントの名前を使って OnClick イベントハンドラが生成されます。たとえば，LineButton という名前のスピードボタンのデフォルトの OnClick イベントハンドラは次のようになります。

procedure TForm1.LineButtonClick(Sender: TObject);

begin

end;

ユーザーがボタンをクリックしたときに発生させるアクションをこの後に記述します。


参照01297

キーボードイベントの処理

マウスイベントの処理

ドラッグアンドドロップイベントの処理


フォームオブジェクトへのメソッドの追加
フォームオブジェクトへのメソッドの追加01298

参照	例

複数のイベントハンドラが同じコードを使う場合，繰り返し使われるコードをすべてのイベントハンドラが共有可能なメソッドに移動することによって，アプリケーションの効率を高めることができます。

フォームにメソッドを追加するには

1.	メソッド宣言をフォームオブジェクトに追加します。

この宣言はフォームオブジェクト宣言の終わり部分の public 部または private 部に追加できます。コードがイベントの処理方法だけを共有する場合は，共有メソッドをプライベートにするほうが安全です。

2.	フォームユニットの implementation 部にメソッドの実現を記述します。

メソッド実現のヘッダーは宣言と正確に一致しなくてはならず，同じパラメータを同じ順序で記述しなくてはなりません。


参照01299

フォームオブジェクトへのフィールドの追加

フォームの型宣言の変更


例01300

次のコードはフォーム DrawShape にメソッドを追加し各ハンドラからこのメソッドを呼び出すことによって，マウスイベントハンドラから繰り返し使われる図形描画コードを省略します。

1.	DrawShape の宣言をフォームオブジェクトの宣言に追加します。

type

  TForm1 = class(TForm)

    ...	{ 簡略にするため多くのフィールドとメソッドを省きます }

  public

    { パブリック宣言 }

    procedure DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);

  end;

2.	DrawShape の実現をユニットの implementation 部に記述します。

implementation

{$R *.DFM}

...	{ 簡略にするためその他の多くのメソッド実現を省きます }

procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);

begin

  with Canvas do

  begin

    Pen.Mode := AMode;

    case DrawingTool of

      dtLine:

        begin

          MoveTo(TopLeft.X, TopLeft.Y);

          LineTo(BottomRight.X, BottomRight.Y);

        end;

      dtRectangle: Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y);

      dtEllipse: Ellipse(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y);

      dtRoundRect: RoundRect(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y,

        (TopLeft.X - BottomRight.X) div 2, (TopLeft.Y - BottomRight.Y) div 2);

    end;

  end;

end;

3.	他のイベントハンドラを変更し DrawShape を呼び出すようにします。

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

  DrawShape(Origin, Point(X, Y), pmCopy);	{ 最終的な図形を描画します }

  Drawing := False;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

  if Drawing then

  begin

    DrawShape(Origin, MovePt, pmNotXor);	{ 前の図形を消去します }

    DrawShape(Origin, Point(X, Y), pmNotXor);	{ 現在の図形を描画します }

  end;

end;


非表示のツールバーの追加
非表示のツールバーの追加01301

参照

ツールバーは常に表示する必要はありません。実際には，使用可能なツールバーが複数あり，ユーザーが利用するときにだけ表示すると便利です。複数のツールバーを持つフォームを作成し，そのうちいくつかまたはすべてのツールバーを非表示にできます。

非表示のツールバーを作成するには

1.	ツールバーをフォームに追加します (Align を alTop に設定してください)。

2.	パネルの Visible プロパティを False に設定します。

ツールバーは設計時には変更できるように表示されますが，実行時にはアプリケーションが明示的に表示を指定しない限り非表示になります。


参照01302

ツールバーの表示と非表示


ツールバーの表示と非表示
ツールバーの表示と非表示01303

参照

アプリケーションに複数のツールバーを作成する場合，すべてのツールバーが同時に表示されてフォームが混乱するような状況は避ける必要があります。また，ユーザーによってはツールバーをまったく必要としない場合があります。他のすべてのコンポーネントと同様に，実行時にツールバーを表示するか非表示にするかをコードで指定できます。

実行時にツールバーを非表示または表示するには

Visible プロパティを False または True に設定する。通常は特定のユーザーイベントへの応答またはアプリケーションの操作モードの変更への応答として設定する

一般に各ツールバーにはクローズボタンに類するボタンを入れます。ユーザーがそのボタンをクリックしたとき，アプリケーションは対応するツールバーを非表示にします。


参照01304

非表示のツールバーの追加


ステータスラインの追加
ステータスラインの追加01305

参照

ステータスラインはツールバーと似ていますが，通常はウィンドウの上部ではなく下部に表示され，コンポーネントのかわりに通常はテキストを表示します。Delphi の Panel コンポーネントを使うと効果的なステータスラインを表示できます。

ステータスラインを複数のステータス領域に分割し，それぞれに 3 次元ベベル効果を持たせたい場合があります。そのためには，ステータスラインパネル内にネストしたパネルコンポーネントを使います。

アプリケーションへのステータスバーの追加には，次の作業が関連します。

ステータスラインパネルの配置

パネルの分割

3 次元パネルの作成

ステータスラインの更新


参照01306

ツールバーの追加


ステータスラインパネルの配置
ステータスラインパネルの配置01307

参照

一般に，ステータスラインはフォームの下部に表示されます。ステータスラインパネルをフォームの下部に揃える場合，配置とサイズ変更は自動調整されます。

フォームにステータスラインパネルを追加するには

1.	パネルコンポーネントをフォームに配置します。

2.	パネルの Align プロパティを alBottom に設定します。

3.	パネルのキャプションをクリアします。

ステータスラインパネルを追加したら，このパネルを複数のステータスパネルに分割できます。分割しない場合は，BevelInner プロパティと BorderWidth プロパティを設定して 3 次元効果を追加できます。より小さいパネルのコンテナとしてだけ機能するパネルでは通常これらのプロパティを変更しません。

パネル内でテキストを揃えることもできます。デフォルトではパネルのキャプションは中央揃えされますが，ステータスラインでは Align を alLeft に設定することがよくあります。


参照01308

パネルの分割

3 次元パネルの作成

ステータスラインの更新


パネルの分割
パネルの分割01309

参照

ステータスラインとして使うパネルなどでは，パネルを複数の独立した領域に分割する場合があります。1 つのパネル内でテキストの形式を慎重に設定して同様の効果を得ることもできますが，それぞれ独立したパネルを使うともっと効率的です。

パネル内に別のパネルを作成するには

1.	パネル内に新しいパネルを配置します。

2.	新しいパネルに希望する 3 次元効果を設定します。

3.	新しいパネルの Align プロパティを alLeft に設定します。

4.	新しいパネルの右側を移動して幅を調整します。

5.	新しいパネルのキャプションをクリアします。

6.	必要に応じてその他のパネルについて手順 1 ～ 5 を繰り返します。

左揃えの新しいパネルを元のパネルに追加すると，追加したパネルはそれぞれの右側で揃います。最後のパネルについては，元のパネルの残りのスペースをすべて使って表示されるように，Align を alLeft ではなく alClient にするといいでしょう。


参照01310

ステータスラインパネルの配置

3 次元パネルの作成

ステータスラインの更新


3 次元パネルの作成
3 次元パネルの作成01311

参照

ステータスライン情報を表示するために使うパネルコンポーネントには通常 3 次元効果を持たせます。デフォルトでは，すべてのパネルは外部ベベルを持ち，わずかに持ち上げられたような外観になります。反対に，内側に表示されるテキストを押し下げて強調し，パネルがテキストの回りの枠のように見えるようにすると通常は見栄えがよくなります。

テキストが押し下げられて見えるような効果を与えるには，BevelInner と BorderWidth の 2 つのプロパティを変更します。

パネルを「彫り込んだ」ように見せるには，BevelInner を bvLowered に設定する

内部ベベルと外部ベベルの間のスペースを変更するには，BorderWidth プロパティを変更する。BorderWidth を 2 に設定すると見栄えがよくなる

内部ベベルと外部ベベルの組み合わせによってテキストの回りの枠が作成されます。


参照01312

ステータスラインパネルの配置

パネルの分割

ステータスラインの更新


ステータスラインの更新
ステータスラインの更新01313

参照	例

フォームにステータスラインを追加したら，ステータスライン情報を更新する必要があります。パネルのキャプションテキストはいつでも設定でき，これによってグラフィックアプリケーションでカーソル位置を示したり，表計算アプリケーションで選択したセルを示すなど，ユーザーに提供したい情報を表示できます。

ステータスラインパネルを更新するには

パネルの Caption プロパティを使ってユーザーに対して表示する情報を設定する

特定のパネルに表示されるステータスに影響を与えるイベントハンドラにこのコードを追加します。


参照01314

ステータスラインパネルの配置

パネルの分割

3 次元パネルの作成

OnHintEven


例01315

有効なステータスラインを更新する基本手順は次のようになります。

1.	メインフォームの宣言の public セクションにメソッド識別子を追加します。

procedure ShowHint(Sender: TObject);

2.	メインフォームの OnCreate イベントのイベントハンドラに次の代入文をコーディングします。

Application.OnHint := ShowHint;

3.	ShowHint メソッドに次のコードを記述します。

procedure TForm1.ShowHint(Sender: TObject);

begin

 Panel1.Caption := Application.Hint;   { Panel1 はステータスラインです }

end;

有効なステータスラインの作成についての詳細は OnHint イベントの例を参照してください。


ビットマップでの描画
ビットマップでの描画01316

参照

フォーム上に直接描画しなくてはならない機会はあまり多くありません。それよりもアプリケーションではコピーや印刷，保存などの操作で非常に柔軟に扱えるビットマップに描画する機会の方が多くあります。Delphi の Image コンポーネントはビットマップを含むことができるため，フォーム上にビットマップを簡単に表示できます。

記述する描画コードをフォームではなくビットマップに適用するには，次の 2 つのことが必要です。

フォームのキャンバスではなく Image コンポーネントのキャンバスを使う

Image コンポーネントの該当するイベントにイベントハンドラをアタッチする

アプリケーションの描画対象を Image コンポーネントのビットマップに移動した後は，印刷，クリップボード操作，ビットマップファイルのロード，保存操作などを簡単に追加できます。

さらに，ビットマップはフォームと同じサイズである必要はなく，小さくても大きくてもかまいません。フォームにスクロールボックスコンポーネントを追加しイメージをその中に配置すると，フォームより大きいビットマップ，さらには画面より大きいビットマップ上に描画できます。

スクロール可能な描画ビットマップを追加するには，次の 2 つの手順が必要です。

スクロール可能領域の追加

Image コンポーネントの追加


参照01317

設計時のイメージのロード

実行時の描画用の領域の提供


スクロール可能領域の追加
スクロール可能領域の追加01318

参照

アプリケーションが表示する情報が特定の領域内に表示しきれない場合が数多くあります。リストボックスやメモなどのいくつかのコンポーネントは，内容を自動的にスクロールできます。しかし他のコンポーネントや，場合によってはコンポーネントが満載されたフォームでは，スクロール可能として設定する必要があります。Delphi は ScrollBox コンポーネントによってこのようなスクロール領域を作成する手段を提供します。

スクロールボックスは他のコンポーネントを含むことができるという点でパネルやグループボックスに似ています。しかし，スクロールボックスは必要になるまで通常は表示されません。スクロールボックスに含まれるコンポーネントがスクロールボックスの表示領域に表示しきれない場合，自動的に 1 つまたは 2 つのスクロールバーが表示され，ユーザーはそれを使って表示領域の外側にあるコンポーネントを表示および使用可能な位置に移動できます。

スクロール領域を作成するには

フォームに ScrollBox コンポーネントを配置し，そのコンポーネントの境界をスクロールさせたい領域に合わせて設定する

スクロールボックスの Align プロパティを使うと，スクロールボックスの領域をフォームまたはフォームの一部に合わせて調整できます。たとえば，Align を alClinet に設定するとスクロールボックスはフォームのクライアント領域全体を占めます。


参照01319

ビットマップでの描画

フォームへの Image コンポーネントの追加


Image コンポーネントの追加
Image コンポーネントの追加01320

参照

Delphi の Image コンポーネントは一種のプレースホルダコンポーネントです。このコンポーネントを使うと，フォーム上でビットマップやメタファイルなどの画像オブジェクトを含める領域を指定できます。イメージのサイズは手動で設定するか，Image コンポーネントが実行時に画像のサイズに合わせて調整するよう設定できます。

Image コンポーネントは常に表示しておく必要のないビットマップを保持したり，アプリケーションが他の画像を生成するために必要とするビットマップを保持するためにも使えます。

コンポーネントの配置

Image コンポーネントはフォーム上のどの位置にでも配置できます。AutoSize を True に設定した場合，左上隅を考慮する必要があります。この位置はコンポーネントのサイズが変わっても変化しないからです。Image コンポーネントをビットマップのための非表示ホルダとして使う場合，この Image コンポーネントは非表示コンポーネントと同様にどこにでも配置できます。

初期画像の設定

Image コンポーネントが常に特定の画像を保持する場合，設計時に Picture プロパティを設定できます。実行時にファイルからコンポーネントに画像をロードすることもできます。またグラフィックアプリケーションなどでは，Image コンポーネントを使ってユーザーが描画可能な領域を提供することもできます。描画用の空白のビットマップを用意するには，実行時にそのビットマップを作成します。詳細は実行時の描画用の領域の提供を参照してください。


参照01321

Image コンポーネントの使い方

イメージのロード


実行時の描画用の領域の提供
実行時の描画用の領域の提供01322

参照	例

Image コンポーネントを使って空白のビットマップを配置することにより，実行時にユーザーが描画するための領域を提供できます。

アプリケーション起動時に空白のビットマップを作成するには

1.	Image コンポーネントを含むフォームの OnCreate イベントにハンドラをアタッチします。

2.	ビットマップオブジェクトを作成します。

3.	Image コンポーネントの Picture.Graphic プロパティにビットマップオブジェクトを割り当てます。

ビットマップを画像の Graphic プロパティに割り当てることによって，ビットマップのオーナーシップが画像オブジェクトに与えられます。画像オブジェクトが廃棄されるときにビットマップが自動的に廃棄されるので，ビットマップオブジェクトを廃棄するコードを指定する必要はありません。画像には別のビットマップを割り当てることもでき，その時点で古いビットマップは廃棄され，新しいビットマップが制御の対象になります。


参照01323

Image コンポーネントの使い方

ファイルからの画像のロード

画像の置換


例01324

次に示すコードは Form1 の OnCreate イベントにアタッチされるコードで，幅 200 ピクセル×高さ 200 ピクセルの空白のビットマップを作成し，フォームのイメージコンポーネント内に配置します。

procedure TForm1.FormCreate(Sender: TObject);
var
  Bitmap: TBitmap;	{ ビットマップを保存するための一時変数 }

begin
  Bitmap := TBitmap.Create;	{ ビットマップオブジェクトを作成します }

  Bitmap.Width := 200;	{ 幅の初期値を指定します }

  Bitmap.Height := 200;	{ 高さの初期値を指定します }

  Image.Picture.Graphic := Bitmap;	{ ビットマップをイメージコンポーネントに割り当てます }
end;


グラフィックの出力
グラフィックの出力01325

参照	例

Delphi アプリケーションからグラフィックイメージを出力するのは簡単な作業です。出力に必要な指定は，プリンタを呼び出すフォームの uses 節に Printers ユニットを追加するだけです。Printers ユニットは Printer と呼ばれるプリンタオブジェクトを宣言します。このオブジェクトは印刷されたページを表すキャンバスを持ちます。

グラフィックイメージを印刷するには

プリンタのキャンバスにイメージをコピーする

プリンタのキャンバスは他のキャンバスと同じように使えます。特にこれはビットマップなどのグラフィックオブジェクトの内容をプリンタに直接コピーできることを意味します。


例01326

次のコードはボタン PrintButton がクリックされたとき，フォームのイメージをプリンタにコピーします。

procedure TForm1.PrintButtonClick(Sender: TObject);

begin

  with Printer do

  begin

    BeginDoc;	{ 印刷を開始します }

    Canvas.Draw(0, 0, Image);	{ 印刷ページの左上隅に Image を描画します }

    EndDoc;	{ 印刷を終了します }

  end;

end;


参照01327

プリンタオブジェクトの使い方

メモの内容の出力


グラフィックファイルに対する操作
グラフィックファイルに対する操作01328

使い捨てのグラフィックイメージにはあまり価値はありません。同じ画像を毎回使ったり，作成した画像を後で使うために保存しておきたいことがよくあります。Delphi の Image コンポーネントを使うとファイルから画像をロードしたり再びファイルに保存する操作が簡単にできます。

詳細は次の各トピックを選択してください。

ファイルからの画像のロード

ファイルへの画像の保存

画像の置換


ファイルからの画像のロード
ファイルからの画像のロード01329

参照	例

アプリケーションで画像を修正する必要がある場合，または画像をアプリケーションの外部に保存し，ユーザーや別のアプリケーションがコードを変更せずに画像を変更できるようにしたい場合，ファイルから画像をロードできることが重要です。

グラフィックファイルを Image コンポーネントにロードするには

Image コンポーネントの Picture オブジェクトの LoadFromFile メソッドを呼び出す


参照01330

Image コンポーネントの使い方


例01331

次のコードはメニュー項目［開く(O)］の OnClick イベントハンドラです。このコードは［ファイルを開く］ダイアログボックスからファイル名を取り出し，そのファイルを Image という名前の Image コンポーネントにロードします。

procedure TForm1.Open1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    CurrentFile := OpenDialog1.FileName;

    Image.Picture.LoadFromFile(CurrentFile);
  end;
end;


ファイルへの画像の保存
ファイルへの画像の保存01332

参照	例

画像を作成または変更した後，画像を後で使うために保存したい場合があります。Delphi の Picture オブジェクトはグラフィックを複数の形式で保存でき，アプリケーション開発者は独自のグラフィックファイル形式を作成してそれらの形式も保存されるように登録できます。

Image コンポーネントの内容をファイルに保存するには

Image コンポーネントの Picture オブジェクトの SaveToFile メソッドを呼び出す

SaveToFile メソッドは保存するファイルの名前を必要とします。新しく作成する画像にファイル名が指定されていなかったり，ユーザーが既存の画像を別のファイルに保存する場合があります。どちらの場合も，アプリケーションが保存を実行する前に，コード例で示すようにユーザーからファイル名を取得する必要があります。


参照01333

Image コンポーネントの使い方

ファイルからの画像のロード


例01334

次の 2 つのイベントハンドラはメニュー項目［上書き保存(S)］と［名前を付けて保存(A)］のために記述されたもので，名前が指定済みのファイルの再保存，名前が未指定のファイルの保存，新しい名前での既存ファイルの保存を処理します。

procedure TForm1.Save1Click(Sender: TObject);
begin
  if CurrentFile <> '' then
    Image.Picture.SaveToFile(CurrentFile)	{ 名前が指定済みの場合は保存します }

  else SaveAs1Click(Sender);	{ 名前が指定されていない場合は名前を取得します }
end;

procedure TForm1.Saveas1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then	{ ファイル名を取得します }
  begin
    CurrentFile := SaveDialog1.FileName;	{ ユーザーが指定した名前を保存します }

    Save1Click(Sender);	{ その後通常と同様に保存します }
  end;
end;


画像の置換
画像の置換01335

参照	例

Image コンポーネントの画像はいつでも置換できます。すでにグラフィックを持っている画像に新しいグラフィックを割り当てると，新しいグラフィックが既存のものと置換されます。

Image コンポーネントの画像を置換するには

Image コンポーネントの Picture オブジェクトに新しいグラフィックを割り当てる

画像オブジェクトの Graphic プロパティに新しいビットマップを割り当てると，画像オブジェクトは既存のビットマップを廃棄し，新しいビットマップのオーナーシップを取得します。以前のビットマップに関連付けられていたリソースの解放は Delphi が自動的に処理します。


参照01336

Image コンポーネントの使い方

実行時の描画用の領域の提供

ファイルからの画像のロード

ファイルへの画像の保存


例01337

次のコードはメニュー項目［新規作成(N)］の OnClick イベントハンドラです。このコードはダイアログボックス NewBMPForm を開きます。このダイアログボックスでユーザーは既存のビットマップ領域に使われているデフォルトサイズ以外のサイズを選択します。

procedure TForm1.New1Click(Sender: TObject);
var
  Bitmap: TBitmap;	{ 新しいビットマップのための一時変数 }

begin
  with NewBMPForm do
  begin
    ActiveControl := WidthEdit;	{ フォーカスが幅フィールドにあるか確認します }

    WidthEdit.Text := IntToStr(Image.Picture.Graphic.Width);	{ 現在のサイズを ... }

    HeightEdit.Text := IntToStr(Image.Picture.Graphic.Height);	{ ... デフォルトとして使います }

    if ShowModal <> idCancel then	{ ユーザーがダイアログボックスを取り消さなければ続行します }
    begin
      Bitmap := TBitmap.Create;	{ 新しいビットマップオブジェクトを作成します }

      Bitmap.Width := StrToInt(WidthEdit.Text);	{ 指定された幅を使います }

      Bitmap.Height := StrToInt(HeightEdit.Text);	{ 指定された高さを使います }

      Image.Picture.Graphic := Bitmap;	{ グラフィックを新しいビットマップと置換します }

      urrentFile := '';	{ 名前が未指定のファイルを示します }
    end;
  end;
end;


クリップボードでのグラフィックの使い方
クリップボードでのグラフィックの使い方01338

参照	例

Windows のクリップボードを使ってアプリケーションにグラフィックをコピーしたり，貼り付けたり，他のアプリケーションとグラフィックを交換したりできます。Delphi のクリップボードオブジェクトを使うとグラフィックを含めた異なる種類の情報を簡単に扱えます。

アプリケーションでクリップボードオブジェクトを使う前に，クリップボードのデータへのアクセスを必要とするユニットの uses 節に ClipBrd ユニット を追加しなくてはなりません。

クリップボードへのグラフィックのコピー

クリップボードには，Image コンポーネントの内容やフォーム上のグラフィックも含めて，あらゆるグラフィックイメージをコピーできます。クリップボードにコピーした画像はすべての Windows アプリケーションで使えます。

クリップボードに画像をコピーするには

Assign メソッドを使ってクリップボードオブジェクトに画像を割り当てる

クリップボードへのグラフィックの切り取り

クリップボードへのグラフィックの切り取りはコピーとほとんど同じですが，切り取りではソースからグラフィックを消去します。

画像からグラフィックを切り取りクリップボードに入れるには

最初にクリップボードにグラフィックをコピーした後，オリジナルを消去する。オリジナルを消去するには，たとえば領域を白に設定する

クリップボードからのグラフィックの貼り付け

Windows のクリップボードにグラフィックが入っている場合，そのグラフィックを Image コンポーネントやフォームの表面などの任意のイメージオブジェクトに貼り付けできます。

クリップボードからグラフィックを貼り付けるには

1.	クリップボードの HasFormat メソッドを呼び出し，クリップボードにグラフィックが入っているか確認します。

HasFormat は論理関数です。パラメータで指定された型の項目がクリップボードに含まれている場合，True を返します。グラフィックをテストするには，CF_BITMAP を渡します。

2.	Assign メソッドを使ってクリップボード上のビットマップを貼り付け先に割り当てます。


参照01339

クリップボードでのテキストの使い方


例01340

例 (クリップボードへのグラフィックのコピー)

例 (クリップボードへのグラフィックの切り取り)

例 (クリップボードへのグラフィックの貼り付け)


例01341

次のコードはメニュー項目［編集(E)｜コピー(C)］がクリックされたとき，Image という名前の Image コンポーネントからクリップボードへ画像をコピーします。

procedure TForm1.Copy1Click(Sender: TObject);
begin
  Clipboard.Assign(Image.Picture);
end;


例01342

次のコードはメニュー項目［編集(E)｜切り取り(T)］がクリックされたとき，選択されたグラフィックをフォームから削除し，クリップボードにコピーします。

procedure TForm1.Cut1Click(Sender: TObject);
var
  ARect: TRect;

begin
  Copy1Click(Sender);	{ 画像をクリップボードにコピーします }

  with Image.Canvas do
  begin
    CopyMode := cmWhiteness;	{ すべてを白としてコピーします }

    ARect := Rect(0, 0, Image.Width, Image.Height);	{ ビットマップの四角形を取得します }

    CopyRect(ARect, Image.Canvas, ARect);	{ ビットマップをビットマップ自体の上にコピーします }

    CopyMode := cmSrcCopy;	{ 通常のモードを復元します }
  end;
end;


例01343

次のコードはメニュー項目［編集(E)｜貼り付け(P)］がクリックされたとき，クリップボードから Image コンポーネントに画像を貼り付けます。

procedure TForm1.PasteButtonClick(Sender: TObject);

var

  Bitmap: TBitmap;
begin
  if Clipboard.HasFormat(CF_BITMAP) then	{ 画像があるか確認します }

   begin

     Bitmap := TBitmap.Create; 	{ クリップボードの内容を保存するためのビットマップを作成します }

     try

       Bitmap.Assign(Clipboard);	{ Assign を使ってクリップボードからビットマップを取得します }

       Image.Canvas.Draw(0, 0, Bitmap);	{ ビットマップを Image にコピーします }

     finally

       Bitmap.Free;

     end;

   end;

end;

end;


実行時のグラフィックの描画
実行時のグラフィックの描画01344

Delphi アプリケーションでのグラフィックの描画はオブジェクトに直接ではなく，オブジェクトのキャンバスでします。

キャンバスはオブジェクトのプロパティであり，キャンバス自体が独自のプロパティを持つオブジェクトでもあります。キャンバスオブジェクトには 4 つの重要なプロパティがあります。

線を描画するためのペン

図形を塗りつぶすためのブラシ

テキストを書くためのフォント

イメージを表現するためのピクセル配列

キャンバスは実行時にだけ使えるため，キャンバスを使う作業はすべてコードを記述して処理します。

実行時にグラフィックを効果的に使うには，次の概念をよく理解しておいてください。

描画とペイント

ピクセル配列の使い方

直線と図形の描画


描画とペイント
描画とペイント01345

グラフィックを扱う場合，描画やペイントという用語が使われます。この 2 つの用語の相違点を理解することが重要です。

描画

描画とは線や図形などの 1 つの特定のグラフィック要素をコードを使って作成することをいいます。コード内では，キャンバスの描画メソッドを呼び出すことによって，特定のグラフィックをキャンバス上の特定の場所に描画するようオブジェクトに指示します。

ペイント

ペイントとはオブジェクト全体の外観を作成することをいいます。Windows はある時点で画面上のオブジェクトが外観を更新する必要があると判断し，OnPaint イベントを生成します。OnPaint イベントは，たとえば隠れたウィンドウが前面に出る場合などに発生します。

通常，ペイントには描画が伴います。OnPaint イベントへの応答では一般にオブジェクトは何らかのグラフィックを描画するからです。

OnPaint イベントは Windows がフォームを再描画する必要があると判断した場合にはいつでも発生します。たとえば，フォームの上にあった別のウィンドウが閉じた場合などです。フォームの OnPaint イベントのハンドラに対して Delphi が生成するデフォルトの名前は FormPaint です。

フォームの背景をペイントしたい場合やイメージを再生成したい場合は OnPaint イベントを処理できます。


ピクセル配列の使い方
ピクセル配列の使い方01346

参照	例

キャンバスの Pixels プロパティは画面上のイメージを構成する個々の色付きの点を表します。

特定のピクセルが何色かを調べたりピクセルの色を設定する場合以外は，Pixels に直接アクセスする必要はほとんどありません。

ピクセルはキャンバスの表面に描画されている画像であり，ペンやブラシを使うとピクセルグループを操作するのに便利です。

ピクセルの操作

キャンバスのピクセルは 2 次元の配列で，配列内の各要素は特定の色を持ちます。個々のピクセルについて読み出しまたは設定ができます。

キャンバスの左上隅が座標システムの原点です。

特定のピクセルの色を取り出すには

読み出したいピクセルの x 座標と y 座標をインデックスとして使い，キャンバスの Pixels プロパティを読み出す

特定のピクセルの色を設定するには

ピクセルの x 座標と y 座標をインデックスとして使い，Pixels プロパティに色の値を割り当てる


参照01347

ペンの使い方

ブラシの使い方


例01348

例 (ピクセルの読み出し)

例 (ピクセルの設定)


例01349

次のコードはチェックボックスがクリックされたときにチェックボックス内のテキストの色をフォーム内の点 (10, 10) のピクセルの色に変更します。

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

  CheckBox1.Font.Color := Canvas.Pixels[10, 10];

end;


例01350

次のコードはボタンがクリックされたときにフォーム上の任意のピクセルを赤に変更することによって応答します。

procedure TForm1.Button1Click(Sender: TObject);

begin

  Canvas.Pixels[Random(ClientWidth), Random(ClientHeight)] := clRed;

end;


ペンの使い方
ペンの使い方01351

キャンバスの Pen プロパティは線をどのように表示するかを制御するために使います。図形の輪郭として描画する線も含まれます。ペンはオブジェクトのプロパティですが，ペン自体もオブジェクトの 1 つです。

直線は 2 点間に存在するピクセルグループを変更することによって描きます。

次のタスクは複数の手順からなるかプログラミングの知識が必要なものでペンに特有です。

直線と図形の描画

ペンの移動

プロパティタスク

次の表はプロパティを設定するだけで実行できるタスクの一覧です。プロパティの設定方法についての詳細はプロパティの設定を参照してくだ
	ColorvclColorProperty
	WidthvclWidthProperty
ペンスタイルの変更	Style
ペンモードの変更	Mode


ペンの移動
ペンの移動01352

PenPos プロパティはペンの現在位置を格納します。ペン位置は線の描画にだけ影響します。図形とテキストに関しては，必要な座標をすべて指定します。

ペン位置を設定するには

キャンバスの MoveTo メソッドを呼び出す。キャンバスの左上隅が座標位置 (0, 0) になる

LineToメソッドによる線の描画では現在位置が線の終点に移動します。


ブラシの使い方
ブラシの使い方01353

キャンバスの Brush プロパティは領域の塗りつぶし方法を制御するために使います。図形内部の塗りつぶしも含まれます。ブラシを使って領域を塗りつぶすと多くの隣接ピクセルが指定した方法で変更されます。

次のタスクはブラシに特有です。

プロパティタスク

次の表はプロパティを設定するだけで実行できるタスクの一覧です。プロパティの設定方法についての詳細は，プロパティの設定を参照してくだ
	ColorvclColorProperty
	StylevclStyleProperty
ビットマップをブラシの模様として使う	Bitmap


直線と図形の描画
直線と図形の描画01354

参照	例

キャンバスには多くの種類の図形を描画するためのメソッドがあります。

キャンバスはペンを使って図形の輪郭を描画した後，ブラシを使ってその内部を塗りつぶします (該当する場合)。

線や図形を描画するには

そのグラフィックに関連するメソッドを呼び出す

次の表はキャンバスが描画できる図形と各図形を描画するために必要なメソッドを示しています。

描画する
	ArcvclArcMethod
	ChordvclChordMethod
楕円	Ellipse	Ellipse メソッドは四角形の 4 辺すべてに接する楕円を描く
線	LineTo	LineTo は現在のペン位置から指定位置までの線を描画し，線の終点を現在位置とする。キャンバスはペンを使って線を描画する
扇形	Pie
多角形	Polygon	Polygon は唯一のパラメータとして点の配列をとり，ペンを使って点を結び，最後の点と最初の点を結んで多角形を閉じる。線を描画した後，Polygon はブラシを使って多角形の内部の領域を塗りつぶす
多角線	PolyLine	PolyLine メソッドには点の配列がパラメータとして渡される。多角線の描画は最初の点に MoveTo を実行し以降の点に LineTo を実行するのと同じである
四角形	Rectangle	Rectangle メソッドは外接四角形を描画する
角の丸い四角形	RoundRect	最初の 4 つのパラメータは外接四角形で，最後の 2 つは丸い角の描きかたを示す


参照01355

描画とペイント

ペンの使い方

ブラシの使い方


例01356

次のメソッドはフォームのペイント時にフォーム上で交差する対角線を描画します。

procedure TForm1.FormPaint(Sender: TObject);

begin

  with Canvas do

  begin

    MoveTo(0, 0);

    LineTo(ClientWidth, ClientHeight);

    MoveTo(0, ClientHeight);

    LineTo(ClientWidth, 0);

  end;

end;


例01357

例 (弧の描画)

例 (弦の描画)

例 (楕円の描画)

例 (扇形の描画)

例 (多角形の描画)

例 (多角線の描画)

例 (四角形の描画)

例 (角の丸い四角形の描画)

例 (直線の描画)


例01358

次のメソッドはフォームにひし形を描画します。

procedure TForm1.FormPaint(Sender: TObject);

begin

  with Canvas do

    PolyLine([Point(0, 0), Point(50, 0), Point(75, 50), Point(25, 50), Point(0, 0)]);

end;

このコードは Delphi のオープン配列パラメータの自動生成機能を利用しています。点の配列はどんなものでも渡せますが，配列をすばやく作成する簡単な方法は配列要素を [ ] で囲んで全体をパラメータとして渡す方法です。


例01359

次のメソッドはフォームの左上象限を占める四角形を描画し，同じ領域に楕円を描画します。

procedure TForm1.FormPaint(Sender: TObject);

begin

  Canvas.Rectangle(0, 0, ClientWidth div 2, ClientHeight div 2);

  Canvas.Ellipse(0, 0, ClientWidth div 2, ClientHeight div 2);

end;


例01360

次のメソッドはフォームの左上象限に角の丸い四角形を描画します。四角形の角は，直径 10 ピクセルの円の一部であるかのように丸められます。

procedure TForm1.FormPaint(Sender: TObject);

begin

  Canvas.RoundRect(0, 0, ClientWidth div 2, ClientHeight div 2, 10, 10);

end;


例01361

次のコードはウィンドウの左下半分に直角三角形を描画します。

procedure TForm1.FormPaint(Sender: TObject);

begin

  Canvas.Polygon([Point(0, 0), Point(0, ClientHeight),

    Point(ClientWidth, ClientHeight)]);

end;


実行時のフォームのインスタンス化
実行時のフォームのインスタンス化01362

例

［プロジェクトの設定］ダイアログボックスの［Forms］ページにある［選択可能なフォーム(F)］リストボックスにフォームを移動する場合，実行時にそのフォームをインスタンス化しなくてはなりません。［自動作成の対象(A)］リストボックスのフォームは，Delphi が実行時に自動的に作成するので，インスタンス化する必要はありません。

アプリケーションを実行するのに必要なフォームのインスタンス数が設計時にわからない場合，実行時にフォームをインスタンス化します。たとえば，任意の数の MDI 子ウィンドウを開くための MDI アプリケーションを作成する場合，それぞれの子フォームを実行時にインスタンス化する必要があります。実行時にフォームをインスタンス化すると，アプリケーションが使うメモリが少なくなり，アプリケーションの起動時間が短縮されます。

メモ:	フォームを実行時にインスタンス化するアプリケーションを作成する場合，フォームのインスタンスが作成される前に，アプリケーションコードでインスタンスをアクセスしないようにしてください。

実行時にフォームをインスタンス化するには

1.	フォームを宣言しているユニットの名前を，そのフォームをインスタンス化するユニットの uses 節に追加します。この操作は，フォーム型を別のユニットで宣言しているときだけ必要です。

2.	フォーム型を持つメモリ変数を宣言します。

3.	フォーム型を持つ Create コンストラクタの戻り値をメモリ変数に割り当てます。

メモリ変数はフォーム型のインスタンスを指定します。

メモ:	フォームのインスタンスが割り当てられているメモリ変数識別子の名前は，既存のオブジェクトまたはコンポーネントの名前と重複してはなりません。インスタンス名は実行時にユニークである必要はありませんが，フォームのインスタンス名を他のオブジェクトの名前と区別するために，ユニークにしておくようにしてください。


例01363

次のコードは TSpecForm 型の SpecForm1 というメモリ変数を宣言します。TSpecForm を作成し，SpecForm1 に割り当ててから，SpecForm1 を Show メソッドで表示しています。

メモ:	次のコードを含むユニットの uses 節に，TSpecForm を宣言するユニット (SpecUnit) を追加する必要があります。

uses ..., SpecUnit;       { uses 節へユニット名を追加します }

.

.

.

var

  SpecForm1: TSpecForm;   { フォームインスタンス変数を宣言します }

.

.

.

SpecForm1 := TSpecForm.Create(Self);  { フォームインスタンスを作成します }

SpecForm1.Show;                        { SpecForm1 を表示します }


System (brief)
System (brief)01364

These system keyboard shortcuts apply to the Brief keystroke mapping scheme.

Shortcut	Action or command

F7	Records a keyboard macro

F8	Plays back a keyboard macro

F9	Run|RunMRunRun

F10	Accesses the menu bar

F11	View|Object Inspector

F12	View|Toggle Form/Unit

Alt+F2	Add watch at cursorCELMAddWatchAtCursor

Alt+F7	Run to cursorCELMRunToCursor

Alt+F9	Displays a SpeedMenuDefSpeedMenu

Alt+F10	Project|CompileMProjectCompile

Ctrl+F1	Topic searchCELMTopicSearch

Ctrl+F2	Run|Program ResetMRunProgramReset

Ctrl+F3	View|Call StackMViewsCallStack

Ctrl+F7	Evaluate/modifyCELMEvaluateModify

Ctrl+F8	Toggle breakpointCELMToggleBreakpoint

Ctrl+F9	Project|CompileMProjectCompile

Ctrl+F11	Run|Step overMRunStepOver

Ctrl+Hyphen	File|CloseMFileClose

Ctrl+F12	View|UnitsMViewUnit

Shift+ F12	View|FormsMViewForm

Alt+B	View|Window listMViewWindowList

Alt+E	File|OpenMFileOpen (Note: opens Open dialog box, even when Code Editor window does not have focus)

Alt+H	Displays context-sensitive Help

Alt+N	Displays the next page

Alt+O	File|Save AsMFileSaveAs (Note: opens Save As dialog box, even when Code Editor window does not have focus)

Alt+-	Displays the previous page

Alt+W	File|SaveMFileSave

Alt+X	File|ExitMFileExit

Alt+Z	Accesses the File menuMFile


Clipboard control (brief)
Clipboard control (brief)01365

These Clipboard keyboard shortcuts apply to the Brief keystroke mapping scheme.

Shortcut	Command

Ins	Edit|PasteMEditPaste

Plus (+)	Edit|CopyMEditCopy

Minus (-)	Edit|CutMEditCut


Editor (brief)
Editor (brief)01366

See also

These editor keyboard shortcuts apply to the Brief keystroke mapping scheme.

Shortcut	Action or command

F5	Search|FindMSearchFind (forward from cursor position)

F6	Search|ReplaceMSearchReplace (forward from cursor position)

Alt+F2	Control|MaximizeCECMMaximize

Alt+F5	Search|FindMSearchFind (backward from cursor position)

Alt+F6	Search|ReplaceMSearchReplace (backward from cursor position)

Alt+F9	Displays the local menu

Shift+F4	Tiles windows horizontally

Shift+F5	Search|Search AgainMSearchSearchAgain

Shift+F6	Repeats the last Search|ReplaceMSearchReplace operation

Esc	Cancels a command at a prompt or enters an escape character at the cursor

Del	Deletes a character or block at the cursor

Star	Edit|UndoMEditUndo

Backspace	Deletes the character to the left of the cursor

Shift+Backspace	Deletes the character to the left of the cursor

Tab	Inserts a tab character

Enter	Inserts a new line with a carriage return

Ctrl+B	Moves to the bottom of the window

Ctrl+C	Centers line in window

Ctrl+D	Moves down one screen

Ctrl+E	Moves up one screen

Ctrl+K	Deletes to the beginning of a line

Ctrl+M	Inserts a new line with a carriage return

Ctrl+S	Performs an incremental search

Ctrl+T	Moves to the top of the window

Ctrl+U	Edit|RedoMEditRedo

Ctrl+Backspace	Deletes the word to the left of the cursor

Ctrl+Enter	Inserts an empty new line

Ctrl+- (dash)	Closes the current page

Alt+A	Marks a non-inclusive block

Alt+B	Displays a list of open files

Alt+C	Mark the beginning of a column block

Alt+D	Deletes a  line

Alt+G	Search|Go to line numberMSearchGoToLineNumber

Alt+I	Toggles insert mode

Alt+K	Deletes of the end of a line

Alt+L	Marks a line

Alt+M	Marks an inclusive block

Alt+N	Displays the contents of the next page

Alt+P	Prints the selected block

Alt+Q	Causes next character to be interpreted as an ASCII sequence

Alt+R	Reads a block from a file

Alt+S	Search|FindMSearchFind

Alt+T	Search|ReplaceMSearchReplace

Alt+U	Edit|UndoMEditUndo

Alt+Backspace	Deletes the word to the right of the cursor

Alt+Hyphen	Displays the contents of the previous file buffer

Ctrl+Q+[	Finds the matching delimiter (forward)

Ctrl+Q+Ctrl+[	Finds the matching delimiter (forward)

Ctrl+Q+]	Finds the matching delimiter (backward)

Ctrl+Q+Ctrl+]	Finds the matching delimiter (backward)

Ctrl+O+A  	Open file at cursorCELMOpenFileAtCursor

Ctrl+O+B  	Browse symbol at cursorCELMBrowseSymbolAtCursor

Ctrl+O+O  	Toggles the case of a selection

Ctrl+F1	Help keyword search

Ctrl+F5	Toggles case-sensitive searching

Ctrl+F6	Toggles regular expression searching


See also01367

Block commands

Bookmark operations

Cursor movement


Block commands (brief)
Block commands (brief)01368

See also

These block command keyboard shortcuts apply to the Brief keystroke mapping scheme.

Shortcut	Action

Alt+A	Marks a non-inclusive block

Alt+C	Marks a column as a block

Alt+L	Marks a line as a block

Alt+M	Marks an inclusive block

Alt+P	Prints the contents of a block

Alt+R	Reads a block from a file


See also01369

Bookmark operations

Cursor movement

Editor


Bookmark operations (brief)
Bookmark operations (brief)01370

See also

These bookmark operations keyboard shortcuts apply to the Brief keystroke mapping scheme.

Shortcut	Action

Alt+0	Sets bookmark 0

Alt+1	Sets bookmark 1

Alt+2	Sets bookmark 2

Alt+3	Sets bookmark 3

Alt+4	Sets bookmark 4

Alt+5	Sets bookmark 5

Alt+6	Sets bookmark 6

Alt+7	Sets bookmark 7

Alt+8	Sets bookmark 8

Alt+9	Sets bookmark 9

Alt+J+0	Goes to bookmark 0

Alt+J+1	Goes to bookmark 1

Alt+J+2	Goes to bookmark 2

Alt+J+3	Goes to bookmark 3

Alt+J+4	Goes to bookmark 4

Alt+J+5	Goes to bookmark 5

Alt+J+6	Goes to bookmark 6

Alt+J+7	Goes to bookmark 7

Alt+J+8	Goes to bookmark 8

Alt+J+9	Goes to bookmark 9


See also01371

Block commands

Cursor movement

Editor


Cursor movement (brief)
Cursor movement (brief)01372

See also

These cursor movement keyboard shortcuts apply to the Brief keystroke mapping scheme.

Shortcut	Action

UpArrow	Moves up one line in the same column position

DownArrow	Moves down one line in the same column position

Home	Moves to the start of a line

End	Moves to the end of a line

Left Arrow	Moves one character to the left

Right Arrow	Moves one character to the right

PgDn	Moves down one screen in the current window

PgUp	Moves up one screen in the current window

Ctrl+Left Arrow	Moves one word to the left

Ctrl+Right Arrow	Moves one word to the right

Ctrl+PgDn	Moves to the end of a file

Ctrl+PgUp	Moves to the beginning of a file

Shift+Tab	Moves backward one tab stop

Shift+Home	Moves to the first column in a window

Shift+End	Moves to the last column in a window

Ctrl+Home	Moves to the top of a screen in the same column position

Ctrl+End	Moves to the bottom of a screen in the same column position

Ctrl+B	Moves to the bottom of the window

Ctrl+C	Moves to the center of the window

Ctrl+D	Scrolls down one screen

Ctrl+E	Scrolls down one screen


See also01373

Block commands

Bookmark operations

Editor


システム (DOS IDE)
システム (DOS IDE)01374

システムに関する次のキーボードショートカットは，DOS IDE のキー入力割り当てで使われます。

ショートカット	動作またはコマンド

F1	状況感知型のヘルプを表示する

F2	ファイル(F)|上書き保存(S)

F3	ファイル(F)|開く(O)

F4	カーソル位置まで実行(R)

F5	コントロールメニューの［最大表示(X)］

F6	次のページを表示する

F7	実行(R)｜トレース実行(T)

F8	実行(R)｜ステップ実行(S)

F9	実行(R)｜実行(R)

F11	表示(V)｜オブジェクトインスペクタ(O)

F12	表示(V)｜フォーム/ユニット切り替え(G)

Alt+F3	ファイル(F)|閉じる(C)

Alt+F10	スピードメニューを表示する

Alt+X	ファイル(F)|終了(X)

Alt+0	表示(V)｜ウィンドウリスト(I)

Ctrl+F1	トピック検索

Ctrl+F2	実行(R)｜プログラムの終了(E)

Ctrl+F3	表示(V)｜呼び出し履歴(C)

Ctrl+F4	評価/変更(E)

Ctrl+F7	カーソル位置に監視式を追加する

Ctrl+F8	ブレークポイントのトグル

Ctrl+F9	プロジェクト(P)｜コンパイル(C)

Ctrl+F12	表示(V)｜ユニット(U)

Shift+F12	表示(V)｜フォーム(F)

Ctrl+Shift+P	キーマクロを実行する

Ctrl+Shift+R	キーマクロを記録する

Ctrl+Shift+S	インクリメンタルサーチ行なう

Ctrl+K+S	ファイル(F)｜上書き保存(S)


クリップボードコントロール (DOS IDE)
クリップボードコントロール (DOS IDE)01375

クリップボードに関する次のキーボードショートカットは，DOS IDE のキー入力割り当てで使われます。

ショートカット	コマンド

Ctrl+Ins	編集(E)｜コピー(C)

Shift+Del	編集(E)｜切り取り(T)

Shift+Ins	編集(E)｜貼り付け(P)


エディタ (DOS IDE)
エディタ (DOS IDE)01376

参照

エディタに関する次のキーボードショートカットは，DOS IDE のキー入力割り当てで使われます。

ショートカット	動作またはコマンド

F1	トピック検索

Ctrl+F1	トピック検索

F6	次のページを表示する

Shift+F6	前のページを表示する

Ctrl+A	1 語左に移動する

Ctrl+C	１画面下にスクロールする

Ctrl+D	カーソルを右に 1 桁移動してオートインデントの設定を示す

Ctrl+E	カーソルを 1 行上に移動する

Ctrl+F	1 語右に移動する

Ctrl+G	カーソルの右側の文字を削除する

Ctrl+H	カーソルの左側の文字を削除する

Ctrl+I	タブ文字を挿入する

Ctrl+L	検索(S)｜次を検索(S)

Ctrl+N	改行を挿入する

Ctrl+P	次の文字を ASCII 文字と解釈する

Ctrl+R	１画面上に移動する

Ctrl+S	カーソルを左に 1 桁移動してオートインデントの設定を示す

Ctrl+T	1 語を削除する

Ctrl+V	挿入モードのオンとオフを切り替える

Ctrl+W	１画面上に移動する

Ctrl+X	カーソルを 1 行下に移動する

Ctrl+Y	1 行を削除する

Ctrl+Z	カーソルを 1 行上に移動する

Ctrl+Shift+S	インクリメンタルサーチを行なう

End	行の終わりに移動する

Home	行の始めに移動する

Enter	復帰を挿入する

Ins	挿入モードのオンとオフを切り替える

Del	カーソルの右側の文字を削除する

BS	カーソルの左側の文字を削除する

Tab	タブを挿入する

スペースキー	スペースを挿入する

←	カーソルを左に 1 桁移動してオートインデントの設定を示す

→	カーソルを右に 1 桁移動してオートインデントの設定を示す

↑	1 行上に移動する

↓	1 行下に移動する

PgUp	1 ページ上に移動する

PgDn	1 ページ下に移動する

Ctrl+←	1 語左に移動する

Ctrl+→	1 語右に移動する

Ctrl+Home	画面の上部に移動する

Ctrl+End	画面の下部に移動する

Ctrl+PgDn	ファイルの終わりに移動する

Ctrl+PgUp	ファイルの始めに移動する

Ctrl+BS	右に１単語移動する

Ctrl+Del	現在選択されているブロックを削除する

Ctrl+スペースキー	スペースを挿入する

Ctrl+Enter	カーソル位置のファイルを開く

Ctrl+Tab	次のページに移動する

Shift+Tab	カーソルの左側の文字を削除する

Shift+BS	カーソルの左側の文字を削除する

Shift+←	カーソルの左側の文字を選択する

Shift+→	カーソルの右側の文字を選択する

Shift+↑	カーソルを 1 行上に移動して元のカーソル位置の左から選択する

Shift+↓	カーソルを 1 行下に移動して元のカーソル位置の右から選択する

Shift+PgUp	カーソルを 1 画面上に移動して元のカーソル位置の左から選択する

Shift+PgDn	カーソルを 1 画面下に移動して元のカーソル位置の右から選択する

Shift+End	カーソル位置からその行の終わりまで選択する

Shift+Home	カーソル位置からその行の始めまで選択する

Shift+スペースキー	スペースを挿入する

Shift+Enter	復帰改行を挿入する

Shift+Ctrl+Tab	前のページに移動する

Ctrl+Shift+←	カーソルの左側の 1 語を選択する

Ctrl+Shift+→	カーソルの右側の 1 語を選択する

Ctrl+Shift+Home	カーソル位置から現在のファイルの始めまで選択する

Ctrl+Shift+End	カーソル位置から現在のファイルの終わりまで選択する

Ctrl+Shift+PgDn	カーソル位置から画面の終わりまで選択する

Ctrl+Shift+PgUp	カーソル位置から画面の始めまで選択する

Ctrl+Shift+Tab	前のページに移動する

Alt+BS	編集(E)｜元に戻す(U)

Alt+Shift+BS	編集(E)｜再実行(R)

Alt+Shift+←	カーソルの左側の列を選択する

Alt+Shift+→	カーソルの右側の列を選択する

Alt+Shift+↑	カーソルを 1 行上に移動して元のカーソル位置の左から列を選択する

Alt+Shift+↓	カーソルを 1 行下に移動して元のカーソル位置の右から列を選択する

Alt+Shift+PgUp	カーソルを 1 画面上に移動して元のカーソル位置の左から列を選択する

Alt+Shift+PgDn	カーソルを 1 画面下に移動して元のカーソル位置の右から列を選択する

Alt+Shift+End	カーソル位置からその行の終わりまでの列を選択する

Alt+Shift+Home	カーソル位置からその行の始めまでの列を選択する

Ctrl+Alt+Shift+←	カーソルの左側の列を選択する

Ctrl+Alt+Shift+→	カーソルの右側の列を選択する

Ctrl+Alt+Shift+Home	カーソル位置から現在のファイルの始めまでの列を選択する

Ctrl+Alt+Shift+End	カーソル位置から現在のファイルの終わりまでの列を選択する

Ctrl+Alt+Shift+PgUp	カーソル位置から画面の終わりまでの列を選択する

Ctrl+Alt+Shift+PgDn	カーソル位置から画面の始めまでの列を選択する


参照01377

ブロックコマンド

ブックマーク処理

カーソル移動

その他のコマンド


システム (デフォルト)
システム (デフォルト)01378

システムに関する次のキーボードショートカットは，デフォルトのキー入力割り当てで使われます。

ショートカット	動作またはコマンド

F1	状況感知型のヘルプを表示する

F4	実行(R)｜カーソル位置まで実行(C)

F5	実行(R)｜ブレークポイントの追加(B)

F7	実行(R)｜トレース実行(T)

F8	実行(R)｜ステップ実行(S)

F9	実行(R)｜実行(R)

F11	表示(V)｜オブジェクトインスペクタ(O)

F12	表示(V)｜フォーム/ユニット切り替え(G)

Alt+F10	スピードメニューを表示する

Alt+0	表示(V)｜ウィンドウリスト(I)

Ctrl+F1	ヘルプ(H)｜キーワードで検索(T)

Ctrl+F2	実行(R)｜プログラムの終了(E)

Ctrl+F3	表示(V)｜呼び出し履歴(C)

Ctrl+F4	現在のファイルを閉じる

Ctrl+F5	監視式リストへの追加(A)

Ctrl+F7	評価/変更(E)

Ctrl+F9	プロジェクト(P)｜コンパイル(C)

Ctrl+F12	表示(V)｜ユニット(U)

Shift+F12	表示(V)｜フォーム(F)

Ctrl+Shift+P	キーマクロを実行する

Ctrl+Shift+R	キーマクロを記録する

Ctrl+S	ファイル(F)｜上書き保存(S)


クリップボードコントロール (デフォルト)
クリップボードコントロール (デフォルト)01379

クリップボードに関する次のキーボードショートカットは，デフォルトのキー入力割り当てで使われます。

ショートカット	コマンド

Ctrl+Ins	編集(E)｜コピー(C)

Shift+Del	編集(E)｜切り取り(T)

Shift+Ins	編集(E)｜貼り付け(P)

Ctrl+C	編集(E)｜コピー(C)

Ctrl+V	編集(E)｜貼り付け(P)

Ctrl+X	編集(E)｜切り取り(T)


エディタ (デフォルト)
エディタ (デフォルト)01380

参照

エディタに関する次のキーボードショートカットは，デフォルトのキー入力割り当てで使われます。

ショートカット	動作またはコマンド

F1	ヘルプ(H)｜キーワードで検索(T)

Ctrl+F1	ヘルプ(H)｜キーワードで検索(T)

F3	検索(S)｜次を検索(S)

Ctrl+E	検索(S)｜インクリメンタルサーチ(I)

Ctrl+F	検索(S)｜検索(F)

Ctrl+I	タブ文字を挿入する

Ctrl+N	改行を挿入する

Ctrl+P	次の文字を ASCII 文字と解釈する

Ctrl+R	検索(S)｜置換(R)

Ctrl+S	ファイル(F)｜上書き保存(S)

Ctrl+T	1 語を削除する

Ctrl+Y	1 行を削除する

Ctrl+Z	編集(E)｜元に戻す(U)

Ctrl+Shift+I	ブロックをインデントする

Ctrl+Shift+U	ブロックをアウトデントする

Ctrl+Shift+Y	行の終わりまで削除する

Ctrl+Shift+Z	編集(E)｜再実行(R)

Alt+[	対応する区切り記号を探す (前方)

Alt+]	対応する区切り記号を探す (後方)

End	行の終わりに移動する

Home	行の始めに移動する

Enter	復帰を挿入する

Ins	挿入モードのオンとオフを切り替える

Del	カーソルの右側の文字を削除する

BS	カーソルの左側の文字を削除する

Tab	タブを挿入する

スペースキー	空白を挿入する

←	カーソルを左に 1 桁移動してオートインデントの設定を示す

→	カーソルを右に 1 桁移動してオートインデントの設定を示す

↑	1 行上に移動する

↓	1 行下に移動する

PgUp	1 ページ上に移動する

PgDn	1 ページ下に移動する

Ctrl+←	1 語左に移動する

Ctrl+→	1 語右に移動する

Ctrl+Tab	次のページに移動する

Ctrl+Shift+Tab	前のページに移動する

Ctrl+BS	カーソルの右側の語を削除する

Ctrl+Home	ファイルの始めに移動する

Ctrl+End	ファイルの終わりに移動する

Ctrl+Del	現在選択されているブロックを削除する

Ctrl+スペースキー	スペースを挿入する

Ctrl+PgDn	画面の下部に移動する

Ctrl+PgUp	画面の上部に移動する

Ctrl+↑	1 行上にスクロールする

Ctrl+↓	1 行下にスクロールする

Ctrl+Enter	カーソル位置のファイルを開く

Shift+Tab	カーソルを 1 つ左のタブ位置に移動する

Shift+BS	カーソルの左側の文字を削除する

Shift+←	カーソルの左側の文字を選択する

Shift+→	カーソルの右側の文字を選択する

Shift+↑	カーソルを 1 行上に移動して元のカーソル位置の左から選択する

Shift+↓	カーソルを 1 行下に移動して元のカーソル位置の右から選択する

Shift+PgUp	カーソルを 1 画面上に移動して元のカーソル位置の左から選択する

Shift+PgDn	カーソルを 1 画面下に移動して元のカーソル位置の右から選択する

Shift+End	カーソル位置からその行の終わりまで選択する

Shift+Home	カーソル位置からその行の始めまで選択する

Shift+スペースキー	スペースを挿入する

Shift+Enter	復帰改行を挿入する

Ctrl+Shift+←	カーソルの左側の 1 語を選択する

Ctrl+Shift+→	カーソルの右側の 1 語を選択する

Ctrl+Shift+Home	カーソル位置から現在のファイルの始めまで選択する

Ctrl+Shift+End	カーソル位置から現在のファイルの終わりまで選択する

Ctrl+Shift+PgDn	カーソル位置から画面の終わりまで選択する

Ctrl+Shift+PgUp	カーソル位置から画面の始めまで選択する

Ctrl+Shift+Tab	前のページに移動する

Alt+BS	編集(E)｜元に戻す(U)

Alt+Shift+BS	編集(E)｜再実行(R)

Alt+Shift+←	カーソルの左側の列を選択する

Alt+Shift+→	カーソルの右側の列を選択する

Alt+Shift+↑	カーソルを 1 行上に移動して元のカーソル位置の左から列を選択する

Alt+Shift+↓	カーソルを 1 行下に移動して元のカーソル位置の右から列を選択する

Alt+Shift+PgUp	カーソルを 1 画面上に移動して元のカーソル位置の左から列を選択する

Alt+Shift+PgDn	カーソルを 1 画面下に移動して元のカーソル位置の右から列を選択する

Alt+Shift+End	カーソル位置からその行の終わりまでの列を選択する

Alt+Shift+Home	カーソル位置からその行の始めまでの列を選択する

Ctrl+Alt+Shift+←	カーソルの左側の列を選択する

Ctrl+Alt+Shift+→	カーソルの右側の列を選択する

Ctrl+Alt+Shift+Home	カーソル位置から現在のファイルの始めまでの列を選択する

Ctrl+Alt+Shift+End	カーソル位置から現在のファイルの終わりまでの列を選択する

Ctrl+Alt+Shift+PgUp	カーソル位置から画面の終わりまでの列を選択する

Ctrl+Alt+Shift+PgDn	カーソル位置から画面の始めまでの列を選択する


参照01381

ブロックコマンド

ブックマーク処理

カーソル移動

その他のコマンド


System (Epsilon)
System (Epsilon)01382

These system keyboard shortcuts apply to the Epsilon keystroke mapping scheme.

Shortcut	Action or command

F1	Displays context-sensitive Help

F5	Toggle Breakpoint

F8	Run|Step Over

F9	Run|Run

F10	Edit|Redo

F11	View|Object Inspector

F12	View|Toggle Form/Unit

Alt+F9	Project|Compile

Alt+F10	Displays a SpeedMenu

Alt+0	View|Window List

Ctrl+F2	Run|Program Reset

Ctrl+F5	Run|Add Watch

Ctrl+F6	Displays the next page

Ctrl+Shift+F6	Displays the previous page

Ctrl+F7	File|Save As

Ctrl+F9	Project|Compile

Ctrl+F12	View|Units

Shift+F12	View|Forms

Ctrl+X+(	Records a keyboard macro

Ctrl+X+)	Ends a keyboard macro recording

Ctrl+X+e	Plays back the the last keyboard macro recorded

Ctrl+X+E	Plays back the the last keyboard macro recorded

Ctrl+X+b	Displays a list of open files

Ctrl+X+B	Displays a list of open files

Ctrl+X+s	File|Save As

Ctrl+X+S	File|Save As

Ctrl+X+Ctrl+F	File|Open

Ctrl+X+Ctrl+S	File|Save

Ctrl+X+Ctrl+W	File|Save


Clipboard control (Epsilon)
Clipboard control (Epsilon)01383

These Clipboard keyboard shortcuts apply to the Epsilon keystroke mapping scheme.

Shortcut	Action or command

Ctrl+Y	Edit|Paste

Alt+w	Edit|Copy

Esc+@w	Edit|Copy

Ctrl+Alt+w	Edit|Copy (appends to current contents)

Esc+Ctrl+w	Edit|Copy (appends to current contents)


Editor (Epsilon)
Editor (Epsilon)01384

See also

These editor keyboard shortcuts apply to the Epsilon keystroke mapping scheme.

Shortcut	Action or command

Ctrl+H	Deletes the character to the left of the current cursor position

Backspace	Deletes the character to the left of the current cursor position

Alt+Del	Deletes all text in the block between the cursor and the previous matching delimiter (cursor must be on ')', '}' or ']')

Esc+Del	Deletes all text in the block between the cursor and the previous matching delimiter (cursor must be on ')', '}' or ']')

Ctrl+Alt+H	Deletes the word to the left of the current cursor position

Alt+Backspace	Deletes the word to the left of the current cursor position

Esc+BackSpace	Deletes the word to the left of the current cursor position

Esc+Ctrl+H	Deletes the word to the left of the current cursor position

Ctrl+D	Deletes the currently selected character or character to the right of the cursor

Del	Deletes the currently selected character or character to the right of the cursor

Alt+\	Deletes spaces and tabs around the cursor on the same line

Esc+\	Deletes spaces and tabs around the cursor on the same line

Ctrl+Alt+K	Deletes all text in the block between the cursor and the next matching delimiter (cursor must be on ')', '}' or ']')

Esc+Ctrl+K	Deletes all text in the block between the cursor and the next matching delimiter (cursor must be on ')', '}' or ']')

Ctrl+X+0	Deletes the contents of the current window

Alt+d	Deletes to word to the right of the cursor

Esc+@d	Deletes to word to the right of the cursor

Ctrl+K	Cuts the contents of line and places it in the Clipboard

Ctrl+Alt+B	Locates the next matching delimiter (cursor must be on ')', '}' or ']')

Esc+Ctrl+B	Locates the next matching delimiter (cursor must be on ')', '}' or ']')

Alt+)	Locates the next matching delimiter (cursor must be on ')', '}' or ']')

Esc+)	Locates the next matching delimiter (cursor must be on ')', '}' or ']')

Alt+Shift+O	Locates the next matching delimiter (cursor must be on ')', '}' or ']')

Ctrl+Alt+F	Locates the previous matching delimiter (cursor must be on ')', '}' or ']')

Esc+Ctrl+F	Locates the previous matching delimiter (cursor must be on ')', '}' or ']')

Alt+c	Capitalizes the current word

Esc+@c	Capitalizes the current word

Ctrl+L	Centers the active window

Ctrl+M	Inserts a carriage return

Ctrl+X+i	Inserts the contents of a file at the cursor

Ctrl+X+I	Inserts the contents of a file at the cursor

Ctrl+O	Inserts a new line after the cursor

Alt+x	Invokes the specified command or macro

Esc+@x	Invokes the specified command or macro

F2	Invokes the specified command or macro

Ctrl+X+Ctrl+X	Exchanges the locations of the cursor position and a bookmark

Ctrl+Shift+-	Displays context-sensitive Help

Alt+Shift+/	Displays context-sensitive Help

Alt+?	Displays context-sensitive Help

Esc+?	Displays context-sensitive Help

Ctrl+_	Displays context-sensitive Help

Ctrl+X+,	Browses the symbol at the cursor

Tab	Inserts a tab

Alt+Tab	Indents to the current line to the text on the previous line

Esc+Tab	Indents to the current line to the text on the previous line

Alt+l	Converts the current word to lowercase

Esc+@l	Converts the current word to lowercase

Ctrl+X+m	Project|Compile

Ctrl+X+M	Project|Compile

Esc+End	Displays the next window in the buffer list

Ctrl+X+n	Displays the next window in the buffer list

Ctrl+X+N	Displays the next window in the buffer list

Esc+Home	Displays the previous window in the buffer list

Ctrl+X+p	Displays the previous window in the buffer list

Ctrl+X+P	Displays the previous window in the buffer list

Ctrl+X+Ctrl+E	Invoke a command processor

Ctrl+Q	Interpret next character as an ASCII code

Ctrl+X+r	Edit|Redo

Ctrl+X+R	Edit|Redo

F10	Edit|Redo

Ctrl+F10	Edit|Redo

Ctrl+X+Ctrl+R	Edit|Redo

Ctrl+X+u	Edit|Undo

Ctrl+X+U	Edit|Undo

F9	Edit|Undo

Ctrl+F9	Edit|Undo

Ctrl+X+Ctrl+U	Edit|Undo

Ctrl+S	Incrementally searches for a string entered from the keyboard

Ctrl+R	Incrementally searches backward through the current file

Ctrl+Alt+S	Search|Find (using regular expressions)

Esc+Ctrl+S	Search|Find (using regular expressions)

Ctrl+Alt+R	Search|Find (using regular expressions; backward from cursor)

Esc+Ctrl+R	Search|Find (using regular expressions; backward from cursor)

Alt+Shift+5	Search|Replace

Alt+Shift+7	Search|Replace

Alt+&	Search|Replace

Esc+&	Search|Replace

Alt+%	Search|Replace

Esc+%	Search|Replace

Alt+*	Search|Replace (using regular expressions)

Esc+*	Search|Replace (using regular expressions)

Ctrl+X+Ctrl+N	Search|Find Error

Ctrl+X+g	Search|Go To Line Number

Ctrl+X+G	Search|Go To Line Number

Crl+T	Transposes the two characters on either side of the cursor

Ctrl+X+Ctrl+T	Transposes the two lines on either side of the cursor

Alt+t	Transposes the two words on either side of the cursor

Esc+t	Transposes the two words on either side of the cursor

Esc+T	Transposes the two words on either side of the cursor

Alt+U	Converts a word to all uppercase

Esc+U	Converts a word to all uppercase

Esc+@u	Converts a word to all uppercase

Ins	Toggles insert mode on/off


See also01385

Block commands

Bookmark operations

Cursor movement


Block commands (Epsilon)
Block commands (Epsilon)01386

See also

These block command keyboard shortcuts apply to the Epsilon keystroke mapping scheme.

Shortcut	Action

Ctrl+Alt+\	Indents a block

Esc+Ctrl+\	Indents a block

Ctrl+X+Ctrl+I	Indents a block

Ctrl+X+Tab	Indents a block

Ctrl+W	Cuts a block and places its contents in the Clipboard

Ctrl+X+w	Writes a block to a file

Ctrl+X+W	Writes a block to a file


See also01387

Bookmark operations

Cursor movement

Editor


Bookmark operations (Epsilon)
Bookmark operations (Epsilon)01388

See also

These bookmark operations keyboard shortcuts apply to the Epsilon keystroke mapping scheme.

Shortcut	Action

Ctrl+@	Sets a bookmark at the current cursor position

Alt+@	Sets a bookmark at the current cursor position

Esc+@@	Sets a bookmark at the current cursor position

Ctrl+2	Sets a bookmark at the current cursor position

Alt+2	Sets a bookmark at the current cursor position

Ctrl+X+.	Goes to the specified bookmark


See also01389

Block commands

Cursor movement

Editor


Cursor movement (Epsilon)
Cursor movement (Epsilon)01390

See also

These cursor movement keyboard shortcuts apply to the Epsilon keystroke mapping scheme.

Shortcut	Action

Ctrl+B	Moves to the left one character

Left Arrow	Moves to the left one character

Ctrl+F	Moves to the right one character

RightArrow	Moves to the right one character

Alt+m	Moves the cursor to the end of the indentation

Esc+m	Moves the cursor to the end of the indentation

Esc+M	Moves the cursor to the end of the indentation

Alt+b	Moves the cursor to the left one word

Esc+@b	Moves the cursor to the left one word

Ctrl+LeftArrow	Moves the cursor to the left one word

Alt+f	Moves to the cursor to the right one word

Esc+@f	Moves to the cursor to the right one word

Ctrl+RgAr	Moves to the cursor to the right one word

Ctrl+A	Moves to the beginning of the current line

Esc+LeftArrow	Moves to the beginning of the current line

Ctrl+E	Moves to the end of the current line

Esc+RightArrow	Moves to the end of the current line

Alt-,	Moves to the top of the current window

Esc+,	Moves to the top of the current window

Home	Moves to the top of the current window

Alt-.	Moves to the bottom of the current window

Esc+.	Moves to the bottom of the current window

End	Moves to the bottom of the current window

Ctrl+P	Moves the cursor up a line

UpAr	Moves the cursor up a line

Ctrl+N	Moves the cursor down a line

DnAr	Moves the cursor down a line

Alt+Shift-,	Goes to the start of the file

Alt+<	Goes to the start of the file

Esc+<	Goes to the start of the file

Ctrl+Home	Goes to the start of the file

Alt+Shift-.	Goes to the end of the file

Alt+>	Goes to the end of the file

Esc+>	Goes to the end of the file

Ctrl+End	Goes to the end of the file

Ctrl+V	Moves down one page in the current file

PgDn	Moves down one page in the current file

Ctrl+F6	Moves down one page in the current file

Shift+Ctrl+F6	Moves up one page in the current file

Alt+v	Moves up one page in the current file

Esc+@v	Moves up one page in the current file

PgUp	Moves up one page in the current file

Alt+Z	Scrolls the contents of the active window down a line

Esc+Z	Scrolls the contents of the active window down a line

Ctrl+Z	Scrolls the contents of the active window up a line


See also01391

Block commands

Bookmark operations

Editor


日本語脚注タイトル
キーボードショートカット01392

参照

キーボードショートカットは 2 つまたは 3 つのキー入力の組み合わせで，コードエディタ内でこれを押すとコマンドを実行したりダイアログボックスにアクセスしたりできます。キーボードショートカットの機能は，どのキー入力マッピング体系を選択するかによって異なります。

コードエディタで使用可能なキーボードマッピング体系には次のものがあります。

デフォルト	CUA 標準に適合するキー結合

DOS IDE	DOS IDE に適合するキー結合

キーマッピングを選択するには

1.	［環境の設定］ダイアログボックスの［Editor Display］ページを選択します。

2.	使用可能な体系のリストからキーボードマッピング体系を選択します。

3.	［OK］をクリックします。

スピード設定を使ってキーマッピングを設定するには

1.	［環境の設定］ダイアログボックスの［Editor Options］ページを選択します。

2.	［エディタスピード設定］オプションでキーボードマッピング体系を選択します。

3.	［OK］をクリックします。

メモ:	［キーストロークマップ(K)］リストボックスまたは［エディタスピード設定］を使ってキー入力のマッピングを変更すると，標準の Windows キーボードコマンドと衝突する可能性があります。

たとえばAlt+E の標準 Windows アクションは編集メニューの起動です。Alt+E を［ファイル(F)｜開く(O)］として定義するようなキーマッピングを選択した場合，マップされたキーのほうが優先されるので，Alt+E を使うとファイルが開きます。


参照01393

IDE キーボードショートカット

機能別のキーボードショートカット

コードエディタの使い方


デフォルトキー入力マッピング01394

デフォルトのキー入力マッピング体系は CUA 標準に適合したキー結合を提供します。詳細は，次の各トピックを参照してキーボードショートカットのリストを表示してください。

クリップボードコントロール

デバッガ

エディタ

ブロック用コマンド

しおりの操作

カーソル移動

その他のコマンド

システム


DOS IDE キー入力マッピング01395

Delphi のプログラミング環境で，DOS IDE と同じキーストロークマッピングを提供するキーアサインです。詳細は，次の各トピックを参照してキーボードショートカットのリストを表示してください。

クリップボードコントロール

デバッガ

エディタ

ブロック用コマンド

しおりの操作

カーソル移動

その他のコマンド

システム


Brief keystroke mapping01396


Epsilon keystroke mapping01397


デバッガ (デフォルト，DOS IDE)
デバッガ (デフォルト，DOS IDE)01398

デバッガのキーボードショートカットはすべてのキー入力マッピング体系に適用されます。

デフォルト

DOS IDE

ブレークポイントの表示

Ctrl+E	ブレークポイントを編集する

Ctrl+V	ソースコードを表示する

Ctrl+S	ソースコードを編集する

Ctrl+D	ブレークポイントを削除する

Ctrl+A	ブレークポイントを追加する

呼び出し履歴の表示

Ctrl+V	ソースコードを表示する

Ctrl+E	ソースコードを編集する

監視式の表示

Ctrl+E	監視式を編集する

Ctrl+A	監視式を追加する

Ctrl+D	監視式を削除する


ブロック用コマンド (デフォルトと DOS IDE)
ブロック用コマンド (デフォルトと DOS IDE)01399

参照

次のブロック用コマンドショートカットはデフォルトと DOS IDE のキー入力マッピング体系に適用されます。

ショートカット	アクションまたはコマンド

Ctrl+K+B	ブロックの先頭をマークする

Ctrl+K+C	選択したブロックをコピーする

Ctrl+K+H	選択したブロックを非表示または表示する

Ctrl+K+I	［環境の設定］ダイアログボックスの［Editor Options］ページの［インデント幅(N)］コンボボックスで指定した分だけブロックをインデントする

Ctrl+K+K	ブロックの終わりをマークする

Ctrl+K+L	現在の行をブロックとしてマークする

Ctrl+K+N	ブロックを大文字に変更する

Ctrl+K+O	ブロックを小文字に変更する

Ctrl+K+R	ファイルからブロックを読み出す

Ctrl+K+T	語をブロックとしてマークする

Ctrl+K+U	［環境の設定］ダイアログボックスの［Editor Options］ページの［インデント幅(N)］コンボボックスで指定した分だけブロックをアウトデントする

Ctrl+K+V	選択したブロックを移動する

Ctrl+K+W	選択したブロックをファイルに書き込む

Ctrl+K+Y	選択したブロックを削除する

Ctrl+O+C	列ブロックをマークする

Ctrl+O+I	包含ブロックをマークする

Ctrl+O+K	非包含ブロックをマークする

Ctrl+O+L	行をブロックとしてマークする

Ctrl+Q+B	ブロックの先頭に移動する

Ctrl+Q+K	ブロックの終わりに移動する


参照01400

しおりの操作

カーソル移動

エディタ (DOS IDE)

エディタ (デフォルト)

その他のコマンド


しおりの操作 (デフォルトと DOS IDE)
しおりの操作 (デフォルトと DOS IDE)01401

参照

次のしおり操作ショートカットはデフォルトと DOS IDE のキー入力マッピング体系に適用されます。

ショートカット	動作

Ctrl+K+0	しおり 0 を設定する

Ctrl+K+1	しおり 1 を設定する

Ctrl+K+2	しおり 2 を設定する

Ctrl+K+3	しおり 3 を設定する

Ctrl+K+4	しおり 4 を設定する

Ctrl+K+5	しおり 5 を設定する

Ctrl+K+6	しおり 6 を設定する

Ctrl+K+7	しおり 7 を設定する

Ctrl+K+8	しおり 8 を設定する

Ctrl+K+9	しおり 9 を設定する

Ctrl+K+Ctrl+0	しおり 0 を設定する

Ctrl+K+Ctrl+1	しおり 1 を設定する

Ctrl+K+Ctrl+2	しおり 2 を設定する

Ctrl+K+Ctrl+3	しおり 3 を設定する

Ctrl+K+Ctrl+4	しおり 4 を設定する

Ctrl+K+Ctrl+5	しおり 5 を設定する

Ctrl+K+Ctrl+6	しおり 6 を設定する

Ctrl+K+Ctrl+7	しおり 7 を設定する

Ctrl+K+Ctrl+8	しおり 8 を設定する

Ctrl+K+Ctrl+9	しおり 9 を設定する

Ctrl+Q+0	しおり 0 に移動する

Ctrl+Q+1	しおり 1 に移動する

Ctrl+Q+2	しおり 2 に移動する

Ctrl+Q+3	しおり 3 に移動する

Ctrl+Q+4	しおり 4 に移動する

Ctrl+Q+5	しおり 5 に移動する

Ctrl+Q+6	しおり 6 に移動する

Ctrl+Q+7	しおり 7 に移動する

Ctrl+Q+8	しおり 8 に移動する

Ctrl+Q+9	しおり 9 に移動する

Ctrl+Q+Ctrl+0	しおり 0 に移動する

Ctrl+Q+Ctrl+1	しおり 1 に移動する

Ctrl+Q+Ctrl+2	しおり 2 に移動する

Ctrl+Q+Ctrl+3	しおり 3 に移動する

Ctrl+Q+Ctrl+4	しおり 4 に移動する

Ctrl+Q+Ctrl+5	しおり 5 に移動する

Ctrl+Q+Ctrl+6	しおり 6 に移動する

Ctrl+Q+Ctrl+7	しおり 7 に移動する

Ctrl+Q+Ctrl+8	しおり 8 に移動する

Ctrl+Q+Ctrl+9	しおり 9 に移動する

次のショートカットはデフォルトの体系だけに適用されます。

ショートカット	動作

Shift+Ctrl+0	しおり 0 を設定する

Shift+Ctrl+1	しおり 1 を設定する

Shift+Ctrl+2	しおり 2 を設定する

Shift+Ctrl+3	しおり 3 を設定する

Shift+Ctrl+4	しおり 4 を設定する

Shift+Ctrl+5	しおり 5 を設定する

Shift+Ctrl+6	しおり 6 を設定する

Shift+Ctrl+7	しおり 7 を設定する

Shift+Ctrl+8	しおり 8 を設定する

Shift+Ctrl+9	しおり 9 を設定する

Ctrl+0	しおり 0 に移動する

Ctrl+1	しおり 1 に移動する

Ctrl+2	しおり 2 に移動する

Ctrl+3	しおり 3 に移動する

Ctrl+4	しおり 4 に移動する

Ctrl+5	しおり 5 に移動する

Ctrl+6	しおり 6 に移動する

Ctrl+7	しおり 7 に移動する

Ctrl+8	しおり 8 に移動する

Ctrl+9	しおり 9 に移動する


参照01402

ブロック用コマンド

カーソル移動

エディタ (DOS IDE)

エディタ (デフォルト)

その他のコマンド


カーソル移動 (デフォルトと DOS IDE)
カーソル移動 (デフォルトと DOS IDE)01403

参照

次のカーソル移動ショートカットはデフォルトと DOS IDE のキー入力マッピング体系に適用されます。

ショートカット	動作

Ctrl+Q+B	ブロックの先頭に移動する

Ctrl+Q+C	ファイルの終わりに移動する

Ctrl+Q+D	行の終わりに移動する

Ctrl+Q+E	ウィンドウの最上部に移動する

Ctrl+Q+K	ブロックの終わりに移動する

Ctrl+Q+P	前の位置に移動する

Ctrl+Q+R	ファイルの先頭に移動する

Ctrl+Q+S	行頭に移動する

Ctrl+Q+T	カーソルのある行をウィンドウの最上部に移動する

Ctrl+Q+U	カーソルのある行をウィンドウの最下部に移動する

Ctrl+Q+X	ウィンドウの最下部に移動する


参照01404

ブロック用コマンド

しおりの操作

エディタ (DOS IDE)

エディタ (デフォルト)

その他のコマンド


その他のコマンド (デフォルトと DOS IDE)
その他のコマンド (デフォルトと DOS IDE)01405

参照

次に示すその他のコマンドショートカットはデフォルトと DOS IDE のキー入力マッピング体系に適用されます。

ショートカット	アクションまたはコマンド

Ctrl+K+D	メニューバーにアクセスする (DOS IDE のみ)

Ctrl+K+E	小文字に変更する

Ctrl+K+F	大文字に変更する

Ctrl+K+S	［ファイル(F)｜ファイルの上書き保存(S)］(DOS IDE のみ)

Ctrl+Q+A	［検索(S)｜置換(R)］

Ctrl+Q+F	［検索(S)｜検索(F)］

Ctrl+Q+Y	行の終わりまで削除する

Ctrl+Q+[	対応する区切り記号を前方検索する

Ctrl+Q+Ctrl+[	対応する区切り記号を前方検索する

Ctrl+Q+]	対応する区切り記号を後方検索する

Ctrl+Q+Ctrl+]	対応する区切り記号を後方検索する

Ctrl+O+A	コードエディタスピードメニューの［ファイルを開く(O)］

Ctrl+O+B	コードエディタスピードメニューの［カーソル位置のシンボルを調べる(B)］

Ctrl+O+G	［検索(S)｜指定行に移動(G)］

Ctrl+O+O	コンパイラオプションとコンパイラ命令を挿入する

Ctrl+O+U	大文字と小文字を切り替える


参照 01406

ブロック用コマンド

しおりの操作

カーソル移動

エディタ (DOS IDE)

エディタ (デフォルト)


機能別のキーボードショートカット
機能別のキーボードショートカット01407

参照

ショートカットに関する次のトピックを選択すると，共通のメニューコマンドが表示されます。ショートカットはそれぞれのキー入力マッピング体系によって異なります。

再構築用コマンド

デバッグ用コマンド

編集メニューコマンド

ファイルメニューコマンド

検索メニューコマンド


参照01408

キーボードショートカット

コードエディタの使い方


ファイルメニューコマンドのキーボードショートカット
ファイルメニューコマンドのキーボードショートカット01409

参照

次の表はファイルメニューのコマンドのキーボードショートカットの一覧です。

コマンド	ショートカット	マッピング

ファイル(F)｜開く(O)	F3	DOS IDE

ファイルを開く(O)	Ctrl+O+A	デフォルト，DOS IDE

ファイル(F)｜上書き保存(S)	Ctrl+K+S	デフォルト，DOS IDE

Ctrl+S	デフォルト

F2	DOS IDE

ファイル(F)｜閉じる(C)	Alt+F3	DOS IDE

コントロールメニューの［閉じる(C)］	Alt+F4	デフォルト，DOS IDE

ファイル(F)｜終了(X)	Alt+X	DOS IDE

Delphi のキー入力マッピング体系についての詳細は，次の各トピックを参照してください。

デフォルトキー入力マッピング

DOS IDE キー入力マッピング


参照01410

再構築用コマンド

デバッグ用コマンド

編集メニューコマンド

キーボードショートカット

検索メニューコマンド


編集メニューコマンドのキーボードショートカット
編集メニューコマンドのキーボードショートカット01411

参照

次の表は編集メニューのコマンドのキーボードショートカットの一覧です。

コマンド	ショートカット	マッピング

編集(E)｜切り取り(T)	Shift+Del	デフォルト，DOS IDE

Ctrl+X	デフォルト

編集(E)｜コピー(C)	Ctrl+Ins	デフォルト，DOS IDE

Ctrl+C	デフォルト

編集(E)｜貼り付け(P)	Shift+Ins	デフォルト，DOS IDE

Ctrl+V	デフォルト

編集(E)｜再実行(R)	Ctrl+Shift+Z	デフォルト

Alt+Shift+BS	デフォルト，DOS IDE

編集(E)｜元に戻す(U)	Alt+BS	デフォルト，DOS IDE

Delphi のキー入力マッピング体系についての詳細は，次の各トピックを参照してください。

デフォルトキー入力マッピング

DOS IDE キー入力マッピング


参照01412

再構築用コマンド

デバッグ用コマンド

ファイルメニューコマンド

キーボードショートカット

検索メニューコマンド


検索メニューコマンドのキーボードショートカット
検索メニューコマンドのキーボードショートカット01413

参照

次の表は検索メニューのコマンドのキーボードショートカットの一覧です。

コマンド	ショートカット	マッピング

検索(S)｜検索(F)	Ctrl+Q+F	デフォルト，DOS IDE

Ctrl+F	デフォルト

検索(S)｜置換(R)	Ctrl+Q+A	デフォルト，DOS IDE

Ctrl+R	デフォルト

検索(S)｜次を検索(S)	F3	デフォルト

Ctrl+L	DOS IDE

検索(S)｜指定行に移動(G)	Ctrl+O+G	デフォルト，DOS IDE

Delphi のキー入力マッピング体系についての詳細は，次の各トピックを参照してください。

デフォルトキー入力マッピング

DOS IDE キー入力マッピング


参照01414

再構築用コマンド

デバッグ用コマンド

編集メニューコマンド

ファイルメニューコマンド

キーボードショートカット


デバッグ用コマンドのキーボードショートカット
デバッグ用コマンドのキーボードショートカット01415

参照

次の表はデバッグ処理のキーボードショートカットの一覧です。

コマンド	ショートカット	マッピング

実行(R)｜カーソル位置まで実行(C)	F4	デフォルト，DOS IDE

ブレークポイントの設定(K)	F5	デフォルト

実行(R)｜トレース実行(T)	F7	デフォルト，DOS IDE

実行(R)｜ステップ実行(S)	F8	デフォルト，DOS IDE

実行(R)｜プログラムの終了(E)	Ctrl+F2	デフォルト，DOS IDE

監視式リストへの追加(A)	Ctrl+F5	デフォルト

Ctrl+F7	DOS IDE

カーソル位置のシンボルを調べる(B)	Ctrl+O+B	デフォルト，DOS IDE

評価/変更(E)	Ctrl+F7	デフォルト

Ctrl+F4	DOS IDE

ブレークポントのトグル	Ctrl+F8	DOS IDE

カーソル位置まで実行(R)	F4	DOS IDE

Delphi のキー入力マッピング体系についての詳細は，次の各トピックを参照してください。

デフォルトキー入力マッピング

DOS IDE キー入力マッピング


参照01416

再構築用コマンド

編集メニューコマンド

ファイルメニューコマンド

キーボードショートカット

検索メニューコマンド


再構築用コマンドのキーボードショートカット
再構築用コマンドのキーボードショートカット01417

参照

次の表は構築処理のキーボードショートカットの一覧です。

コマンド	ショートカット	マッピング

プロジェクト(P)｜コンパイル(C)	Ctrl+F9	デフォルト，DOS IDE

Alt+F9	デフォルト，DOS IDE

実行(R)｜実行(R)	F9	デフォルト，DOS IDE

Delphi のキー入力マッピング体系についての詳細は，次の各トピックを参照してください。

デフォルトキー入力マッピング

DOS IDE キー入力マッピング


参照01418

デバッグ用コマンド

編集メニューコマンド

ファイルメニューコマンド

キーボードショートカット

検索メニューコマンド


Delphi IDE でのキーボードサポート
Delphi IDE でのキーボードサポート01419

参照

Delphi の IDE キーボードショートカットは 2 つまたは 3 つのキーの組み合わせです。このキーボードショートカットを押すと，メニューを開かずに直接コマンドを実行したりダイアログボックスにアクセスしたりできます。コードエディタウィンドウで使うショートカットについては，キーボードショートカットを参照してください。

他のウィンドウで使うショートカットについては，次の各トピックを参照してください。

フォームのキーボードショートカット

プロジェクトマネージャのキーボードショートカット

オブジェクトインスペクタのキーボードショートカット

ブラウザのキーボードショートカット


参照01420

Keyboard shortcuts by function

Using the Code Editor


フォームのキーボードショートカット
フォームのキーボードショートカット01421

参照

フォームで使うキーボードショートカットを次に示します。

IDE ではキーボードを使って，フォーム上でコンポーネントの移動やサイズ変更ができます。次の表に選択，移動，サイズ変更のためのキー入力を示します。移動したりサイズ変更するには，まずコンポーネントを選択しなくてはなりません。

キーボードコマンド	説明

Tab	コンポーネントを選択する (Z オーダー)

Shift+Tab	前のコンポーネントを選択する (Z オーダー)

矢印キー	矢印キーの方向の最も近いコンポーネントを選択する

Ctrl+矢印キー	選択したコンポーネントを一度に 1 ピクセルだけ移動する

Shift+矢印キー	選択したコンポーネントを一度に 1 ピクセルだけ移動する

Ctrl+Shift+矢印キー	選択したコンポーネントを一度に 1 グリッドだけ移動する (［グリッドに合わせる(G)］が有効な場合)

Del	選択したコンポーネントを削除する

Esc	フォーム，グループボックスなどのコンテナグループを選択する

F11	オブジェクトインスペクタと直前にアクティブだったフォーム (またはユニット) との間で制御を切り替える

F12	フォームとその関連するユニットを切り替える

Ctrl+F12	［表示ユニットの選択］ダイアログボックスを表示する

Shift+F12	［表示フォームの選択］ダイアログボックスを表示する

キーボードを使ってコンポーネントをフォームに追加するには

1.	Alt+V+L を押して［コンポーネントリスト］ダイアログボックスを表示します。

2.	フォームに追加するコンポーネントの名前の先頭文字を入力するか，Tab を押します。矢印キーでリストをスクロールして選択します。

3.	Alt+A または Enter を押して，コンポーネントをフォームに追加します。Enter を押すと，［コンポーネントリスト］ダイアログボックスが閉じます。

コンポーネントリスト内を移動するためのキー

Home	リスト内の最初のコンポーネントを表示する

End	リスト内の最後のコンポーネントを表示する

キーボードを使ってコンポーネントのプロパティを変更するには

1.	変更するコンポーネントを Tab または矢印キーで選択します。

2.	Enter を押してオブジェクトインスペクタに切り替えます。

3.	変更するプロパティを矢印キーで選択します。

4.	プロパティの新しい値を入力して Enter を押します。

5.	フォームに戻るには，Alt+V+F を押してからリストでフォームを選択します。


参照01422

キーボードショートカット


プロジェクトマネージャのキーボードショートカット
プロジェクトマネージャのキーボードショートカット01423

プロジェクトマネージャで使うキーボードショートカットを次に示します。

キーボードコマンド	説明

矢印キー	フォームとユニットを選択する

Alt+A	フォームまたはユニットをプロジェクトに追加する

Alt+R	プロジェクトからフォームまたはユニットを削除する

Alt+U	選択したユニットを表示する

Alt+F	選択したフォームを表示する

Alt+O	［プロジェクトの設定］ダイアログボックスを表示する

Alt+D	現在のプロジェクトを更新する

Enter	選択したユニットを表示する

Shift+Enter	選択したフォームを表示する

Ins	ファイルをプロジェクトに追加する

Del	プロジェクトからファイルを削除する


オブジェクトインスペクタのキーボードショートカット
オブジェクトインスペクタのキーボードショートカット01424

オブジェクトインスペクタで使うキーボードショートカットを次に示します。

キーボードコマンド	説明

Ctrl+I	オブジェクトセレクタを開く

↑と↓	プロパティまたはハンドラを選択する

←と→	値列またはインデント列の値を編集する

Tab	オブジェクトインスペクタでプロパティ列と値列を切り替える

Tab+<英字>	指定した英字で始まる最初のプロパティに直接ジャンプする

Ctrl+Tab	オブジェクトインスペクタでプロパティタブとイベントタブを切り替える

Page Up	プロパティを 1 画面上に移動する

Page Down	プロパティを 1 画面下に移動する

Alt+F10	拡大と縮小を切り替える

キーボードを使ってコンポーネントのプロパティを変更するには

1.	変更するコンポーネントを Tab または矢印キーで選択します。

2.	Enter を押してオブジェクトインスペクタに切り替えます。

3.	変更するプロパティを矢印キーで選択します。

4.	プロパティの新しい値を入力して Enter を押します。

5.	フォームに戻るには，Alt+V+F を押してからリストでフォームを選択します。


コンポーネントメニュー
コンポーネントメニュー01425

コンポーネントメニューは，コンポーネントの構築，新しいコンポーネントのインストール，コンポーネントライブラリの再構築，およびコンポーネントパレットの設定を行うために使います。

コンポーネントメニューには次のコマンドがあります。

新規作成(N)	コンポーネントエキスパートを開きます。

コンポーネントのインストール(I)	新しいコンポーネントをインストールします。

ライブラリを開く(O)	コンポーネントライブラリファイルを開きます。

ライブラリの再構築(R)	コンポーネントライブラリを再コンパイルします。

パレットの設定(P)	［環境オプション］ダイアログボックスを開きます。


ファイル(F)｜コンポーネントの新規作成(T)
ファイル(F)｜新規作成(N)｜コンポーネント01426

参照

［ファイル(F)｜新規作成(N)｜コンポーネント］を選択すると，［コンポーネントエキスパート］ダイアログボックスが開きます。

［コンポーネントエキスパート］ダイアログボックス

このダイアログボックスは新しいコンポーネントの基本ユニットを作成するために使います。

ダイアログボックスオプション

［クラス名(C)］

作成する新しいクラスの名前を入力します。一般的な規則として，Object Pascal クラスには名前の前に T を付けます。たとえば，新しいボタンコンポーネントの名前は TMYBUTTON などとします。

［親の型(A)］

ドロップダウンリストを使って新しいコンポーネントの基本クラスを選択するか，新しいコンポーネントの基本クラス名を入力します。コンポーネント宣言の中でオーバーライドした場合を除いて，新しいコンポーネントは上位クラスですべてのプロパティ，メソッド，イベントを継承します。

［パレットページ(P)］

新しいコンポーネントをライブラリへ追加したときにそのコンポーネントが現れるページをドロップダウンリストから選択するか，そのページの名前を入力します。


オプション(O)｜コンポーネントのインストール(I)
コンポーネント(C)｜インストール(I)01427

参照

［コンポーネント(C)｜インストール(I)］は［コンポーネントのインストール］ダイアログボックスを表示するために使います。

［コンポーネントのインストール］

このダイアログボックスは新しいコンポーネントのインストールに使います。プロジェクトを開いているときに［コンポーネント(C)｜インストール(I)］を選択すると，このダイアログボックスの［OK］ボタンを選択したときに現在のプロジェクトに加えた変更を保存するかどうかが尋ねられます。

ダイアログボックスオプション

［ライブラリファイル名(L)］

ロードしたいライブラリファイルの名前を入力します。

［検索パス(S)］

コンポーネントライブラリを再構築するときにコンパイラに検索させたいパスを入力します。

［インストールされているユニット(U)］

すでにインストールされているユニットを表示します。ユニットを選択すると，そのコンポーネントが［コンポーネントクラス(C)］リストボックスに表示されます。

［コンポーネントクラス(C)］

［インストールされているユニット(U)］リストボックスで選択されたユニットの中にインストールされているコンポーネントを表示します。

［追加(A)］

［追加(A)］をクリックすると新しいユニットが追加されます。このボタンを使うと［モジュールの追加］ダイアログボックスが表示され，新しいユニット名を入力できます。

［OCX(X)］

［OCX(X)］をクリックすると OLE コントロールがコンポーネントパレットへ追加されます。このボタンを使うと［Import OLE Control］ダイアログボックスが表示され，インストールする OCX コントロールを選択できます。

［削除(R)］

［削除(R)］をクリックすると，選択したユニットとそのコンポーネントがコンポーネントパレットから取り除かれます。

［元に戻す(V)］

［元に戻す(V)］をクリックすると，ライブラリの構築中にエラーが起きた場合に変更が破棄されます。ファイルは前の状態へ戻ります。


参照01428

ライブラリコンポーネントの追加

ライブラリコンポーネントの削除


モジュールの追加ダイアログボックス
モジュールの追加ダイアログボックス01429

［Add Module］ダイアログボックスは新しいユニットを追加するために使います。

このダイアログボックスを開くには

［コンポーネントのインストール］ダイアログボックスで［追加(A)］ボタンをクリックする

ダイアログボックスオプション

［モジュール名(M)］

［モジュール名(M)］編集ボックスにはユニット名を入力します。

［参照(B)］

［参照(B)］をクリックするとファイル参照のための［モジュールの追加］ダイアログボックスが表示され，インストールしたいユニットの名前を検索できます。


モジュールの追加ダイアログボックス (ファイル参照)
モジュールの追加ダイアログボックス (ファイル参照)01430

ファイル参照のための［モジュールの追加］ダイアログボックスは追加したいファイルを見つけるためにドライブとディレクトリを検索するために使います。

このダイアログボックスを開くには

［Add Module］ダイアログボックスで［参照(B)］ボタンをクリックする

ダイアログボックスオプション

［ファイル名(N)］

ロードしたいファイルの名前を入力するか，ファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイルの種類は .PAS です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


OLE コントロールのインポートダイアログボックス
OLE コントロールのインポートダイアログボックス01431

参照

［OLE コントロールのインポート］ダイアログボックスはインストールしたい OCX コントロールを指定するために使います。

ダイアログボックスを開くには

［コンポーネントのインストール］ダイアログボックスの［OCX(X)］ボタンをクリックします。

ダイアログボックスオプション

［登録されているコントロール(N)］

システムに登録されている OLE コントロールライブラリの名前が表示されます。インポートする OLE コントロールライブラリを選択するには，リストボックス内の項目をクリックします。コントロールライブラリを選択すると，対応する .OCX ファイルの名前がリストボックスの下に表示されます。

［登録(R)］ボタン

このボタンをクリックすると OLE コントロールを新しく登録することができます。OLE コントロールは，登録してからでないと Delphi にインポートできません。

［削除(U)］ボタン

現在選択されている OLE コントロールをシステムレジストリから削除して登録を解除します。OLE コントロールの登録を解除してもコントロール自体が削除されるのではなく，単にシステムレジストリから登録情報が削除されるだけです。

［ユニットファイル(F)］

Delphi によって生成されるインポートユニットの名前です。OLE コントロールライブラリをインポートするとき，Delphi はライブラリ内の各 OLE コントロールのクラス宣言の入ったインターフェースユニットを作成します。デフォルトではインポートユニットはライブラリ検索パスの最初に指定されているディレクトリに配置されます。

［参照(B)］ボタン

インポートユニットを配置するディレクトリをブラウズできます。

［パレットページ(P)］

OCX コントロールをインストールするコンポーネントパレットのページを指定します。コンポーネントパレットの OCX ページが OCX コントロール用のデフォルトのページです。存在しないページの名前を指定すると，コンポーネントパレットにその名前のページが新しく作成されます。

［クラス名(C)］

選択している OLE コントロールライブラリ内の OLE コントロールの推奨クラス名を表示します。別の OLE コントロールライブラリが同じクラス名を使っている場合以外はこの名前を変更する理由はありません。名前を変更する場合には，Delphi の慣例としてクラス名は「T」で始めることを強くお勧めします。

［OK］ボタン，［キャンセル］ボタン

［OK］を押すと，指定した名前でインポートユニットが作成されて［コンポーネントのインストール］ダイアログボックスに戻り，インストール済みユニットのリストに新たに作成されたユニットが追加されます。

クラス名を変更するには

1.	クラス名を選択します。

2.	［編集(E)］ボタンをクリックして［Edit Class Name］ダイアログボックスを開き，クラス名を変更します。


参照01432

Visual Basic のコンポーネントのインストール

コンポーネント(C)｜インストール(I)


OLE コントロールのインポートダイアログボックス
OLE コントロールのインポートダイアログボックス01433

参照

［OLE コントロールのインポート］ダイアログボックスは，OCX コントロールをインストールしたいコンポーネントパレットのページと，関連付けられたユニットを格納するディレクトリ，およびコントロールのクラス名を指定するために使います。

ダイアログボックスを開くには

［コンポーネントのインストール］ダイアログボックスの［OCX(X)］ボタンをクリックします。

OCX コントロールを登録するには

インストールする OCX ファイルを選択して［OK］をクリックします。


参照01434

Visual Basic のコンポーネントのインストール

［OCX のインストール］ダイアログボックス

コンポーネント(C)｜インストール(I)


クラス名の編集ダイアログボックス
クラス名の編集ダイアログボックス01435

［クラス名の編集］ダイアログボックスはインストールする OCX コントロールのクラス名を変更するために使います。

このダイアログボックスを開くには

［X のインストール］ダイアログボックスで［クラス名(C)］リストボックスから名前を選択し，［編集(E)］をクリックする

ダイアログボックスオプション

［クラス名(C)］

OCX コントロールに使う新しいクラス名を入力します。


ユニットファイル名ダイアログボックス
ユニットファイル名ダイアログボックス01436

参照

［ユニットファイル名］ダイアログボックスは OCX ユニットファイルを格納するディレクトリを変更するために使います。

このダイアログボックスを開くには

［OCX のインストール］ダイアログボックスで［参照(B)］ボタンをクリックする

ダイアログボックスオプション

［ファイル名(N)］

保存したい OCX ユニットファイルの名前を入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

保存したいファイルの種類を選択します。デフォルトのファイルの種類はユニットファイル (*.PAS) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


参照01437

Visual Basic のコンポーネントのインストール

コンポーネント(C)｜インストール(I)


コンポーネント(C)｜OLE コントロールのインポート
コンポーネント(C)｜OLE コントロールのインポート01438

［OLE コントロールのインポート］を選択すると［OLE コントロールのインポート］ダイアログボックスが開きます。


オプション(O)｜ライブラリを開く(O)
コンポーネント(C)｜ライブラリを開く(L)01439

参照

［コンポーネント(C)｜ライブラリを開く(L)］を選択すると［ライブラリを開く］ダイアログボックスが表示されます。

［ライブラリを開く］ダイアログボックス

このダイアログボックスはダイナミックコンポーネントライブラリ (.DCL) をインストールするために使います。プロジェクトを開いているときに［オプション(O)｜ライブラリを開く(O)］を選択すると，現在のプロジェクトに加えた変更を保存するかどうかが尋ねられます。

ダイアログボックスオプション

［ファイル名(N)］

ロードしたいファイルの名前を入力するか，ファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイルの種類はダイナミックコンポーネントライブラリファイル (.DCL) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


参照01440

カスタマイズライブラリの保存

コンポーネントライブラリの読み込み


オプション(O)｜ライブラリの再構築(R)
コンポーネント(C)｜ライブラリの再構築(R)01441

［コンポーネント(C)｜ライブラリの再構築(R)］を選択すると，Delphi 環境から出ることなく既存のコンポーネントライブラリを再コンパイルできます。

ライブラリを再コンパイルするために，Delphi は開いたプロジェクトを閉じなくてはなりません。したがって，Delphi はライブラリを再コンパイルする前に，開いたプロジェクトに加えた変更を保存するよう求めます。


データベースメニュー
データベースメニュー01442

データベースメニューにはデータベースの作成，変更，および表示が行えるコマンドがあります。

データベースメニューには次のコマンドがあります。

エクスプローラ(E)

SQL モニター(S)

データベースフォームエキスパート(F)


データベース(D)｜エクスプローラ(E)
データベース(D)｜エクスプローラ(E)01443

［データベース(D)｜エクスプローラ(E)］を選択するとデータベースエクスプローラが開きます。


データベース(D)｜SQL モニタ(S)
データベース(D)｜SQL モニタ(S)01444

［データベース(D)｜SQL モニタ(S)］を選択すると SQL モニタが開きます。


データベース(D)｜フォームエキスパート(F)
データベース(D)｜フォームエキスパート(F)01445

参照

［データベース(D)｜フォームエキスパート(F)］を選択すると，Delphi のデータベースフォームエキスパートを使ってローカルデータベースまたはリモートデータベースのデータを表示するフォームを作成できます。


参照01446

データベースフォームエキスパートの使い方


データベースフォームエキスパートの使い方
データベースフォームエキスパートの使い方01447

参照

データベースフォームエキスパートを使うと，InterBase，Paradox，dBASE，および ORACLE のデータベースのデータを表示するフォームを簡単に作成できます。

データベースフォームエキスパートでは次の 2 種類のデータベースフォームを作成できます。

単純なデータベースフォーム

マスターリンクフォーム

データベースフォームエキスパートは次のフォーム構築のタスクを自動化しています。

フォームに Table コンポーネントと Query コンポーネントを接続する

Query コンポーネントのための SQL 文を書く

対話型のコンポーネントと対話型でないコンポーネントをフォームに配置する

タブ順を定義する

DataSource コンポーネントに対話型コンポーネントと Table および Query コンポーネントに接続する


参照01448

データベースフォームエキスパートによるフォームの作成


データベースフォームエキスパートによるフォームの作成
データベースフォームエキスパートによるフォームの作成01449

参照

データベースフォームエキスパートを使って単純な情報フォームを作成できます。

データベースフォームエキスパートを使ってフォームを構築するには

1.	［データベース(D)｜フォームエキスパート(F)］を選択してデータベースフォームエキスパートを開きます。

2.	［フォームの形式］を選択して［次>(N)］をクリックします。

3.	［ドライブ/エリアス名］リストからエリアスを選択します。このエリアスは Delphi のサンプルデータベースを指します。エリアスを作成するには，BDE環境設定ユーティリティまたはデータベースエクスプローラを使用してください。

メモ:	 エリアスを作成していなくても，［フォームエキスパート］ダイアログボックスでデータベースへのパスを指定することでデータベース名を入力できます。

4.	作成するフォームで使うフィールドを選択します。

いくつかのフィールドだけを使うには

1.	Ctrl キーを押したままにします。

2.	［選択可能な項目(A)］リストから使いたい各フィールドを選択します。

3.	［>］ボタンを選択します。

［選択可能な項目(A)］リストのすべてのフィールドを使うには

［>>］ボタンをクリックします。

［項目の表示順序(O)］リストからフィールドを削除するには

［<］ボタンまたは［<<］ボタンをクリックします。

［項目の表示順序(O)］リストのフィールドの順序を変更するには

1.	移動するフィールドを選択します。

2.	上向きと下向きのボタンを使ってフィールドの位置を変更します。

この練習の目的上［選択可能な項目(A)］リストのすべてのフィールドを使用してください。［次>(N)］を選択して次に進んでください。

5.	次のフォームエキスパート画面は，選択したフィールドをフォームに表示するためのオプションを表しています。エキスパートには各選択肢の説明が示されます。

この練習の目的上［垂直配置(V)］オプションを選択してください。

6.	フォームエキスパートは，縦方向のレイアウトを選択したときに生成されたフォームの各データ入力コンポーネントにテキストラベルを作成します。これらのラベルをデータ入力フィールドに関連して表示する方法を選択できます。画面には各選択肢の説明が示されます。

この練習では［左(L)］オプションを選択し，［次>(N)］を選択して次に進んでください。

7.	［生成(C)］ボタンを選択してフォームを生成します。

フォームエキスパートはいろいろな選択に従ってデータベースフォームを作成します。


参照01450

TDatabase の使い方


編集メニュー
編集メニュー01451

編集メニューコマンドのキーボードショートカット

編集メニューのコマンドはテキストとコンポーネントを設計時に処理するために使います。

編集メニューには次のコマンドがあります。

元に戻す(U)	直前のアクションまたは削除操作を元に戻します。

再実行(R)	［元に戻す(U)］を取り消します。

切り取り(T)	選択した項目を削除し，クリップボードに入れます。

コピー(C)	選択した項目のコピーをクリップボードへ入れ，項目は元の場所に残します。

貼り付け(P)	クリップボードの内容をコードエディタのウィンドウまたはフォームの中へコピーします。

削除(D)	選択した項目を削除します。

すべてを選択(L)	フォーム上のすべてのコンポーネントを選択します。

グリッドに合わせる(G)	選択したコンポーネントを最も近いグリッドポイントへ揃えます。

前面へ移動(F)	選択したコンポーネントを前に移動します。

背面へ移動(B)	選択したコンポーネントを後ろに移動します。

位置合わせ(A)	コンポーネントを揃えます。

サイズ(S)	コンポーネントのサイズを変更します。

スケール(E)	フォーム上のすべてのコンポーネントのサイズを変更します。

タブ順序(R)	アクティブフォーム上にあるコンポーネントのタブ順を変更します。

作成順序(N)	非ビジュアルコンポーネントの作成順を変更します。

コントロールのロック(K)	フォーム上にあるすべてのコンポーネントを現在の位置に固定します。

オブジェクト(O)	フォームに挿入した OLE オブジェクトの編集または変換をします。


編集(E)｜元に戻す(U)
編集(E)｜元に戻す(U)01452

参照

コードエディタで［編集(E)｜元に戻す(U)］を選択すると，直前のキー入力またはマウスアクションを取り消して元に戻せます。 フォームでの作業中に［編集(E)｜元に戻す(U)］を選択すると，直前に削除した項目を元に戻せます。

コードエディタでの［元に戻す(U)］の使い方

［元に戻す(U)］を使うと，削除した文字を再挿入したり，挿入した文字を削除したり，上書きした文字を元に戻したり，カーソルを元の位置へ戻したりできます。

［元に戻す(U)］を繰り返し選択すれば，複数のアクションを連続して元に戻せます。アクションを１ ステップずつさかのぼって変更を元に戻し，以前の状態を復元できます。元に戻す限度は［オプション(O)｜環境(E)］で表示される［環境の設定］ダイアログボックスの［Editor Options］ページで指定できます。

ブロック処理を元に戻した場合，ファイルはブロック処理をする前と同じ状態になります。

［元に戻す(U)］コマンドでは複数のウィンドウに影響するオプション設定の変更はできません。

［オプション(O)｜環境(E)］で表示される［環境の設定］ダイアログボックスの［Editor Options］ページで［グループ単位の取り消し(G)］にチェックマークを付けると，アクションのグループを元に戻せます。


参照01453

編集(E)｜再実行(R)

編集メニューコマンドのキーボードショートカット


編集(E)｜再実行(R)
編集(E)｜再実行(R)01454

参照

［編集(E)｜再実行(R)］を選択すると，直前に実行した［Undo］を無効にできます。

［再実行(R)］は［Undo］コマンドの直後でだけ使えます。


参照01455

編集(E)｜元に戻す(U)

編集メニューコマンドのキーボードショートカット


編集(E)｜切り取り(T)
編集(E)｜切り取り(T)01456

参照

［編集(E)｜切り取り(T)］を選択すると，次の項目を現在の位置から削除してクリップボードへ入れることができます。

コードエディタで選択したテキスト

フォームのコンポーネント

メニューデザイナのメニュー

［切り取り(T)］を実行すると，現在のクリップボードの内容は選択した項目で置き換わります。

クリップボードの内容をほかの場所へ挿入するには

［編集(E)｜貼り付け(P)］を選択する


参照01457

編集メニューコマンドのキーボードショートカット


編集(E)｜コピー(C)
編集(E)｜コピー(C)01458

参照

［編集(E)｜コピー(C)］を選択すると，選択したテキスト，コンポーネント，メニューのいずれかのコピーをクリップボードに入れることができます。コピー元はそのまま元の場所に残ります。［コピー(C)］を実行すると，現在のクリップボードの内容は選択した項目で置き換わります。

クリップボードの内容をほかの場所へ貼り付けるには

［編集(E)｜貼り付け(P)］を選択する


編集(E)｜貼り付け(P)
編集(E)｜貼り付け(P)01459

参照

［編集(E)｜貼り付け(P)］を選択すると，クリップボードの内容をコードエディタのアクティブページ，アクティブフォーム，メニューデザイナ のアクティブメニューのいずれかへ挿入できます。

メモ:	テキストはコードエディタウィンドウへ，コンポーネントはフォームへ，メニュー項目はメニューデザイナへだけ貼り付けができます。

テキストをコードエディタウィンドウに貼り付けた場合，現在のカーソルの位置に挿入されます。

コンポーネントをフォームに貼り付けた場合，非ビジュアルコンポーネントはフォームの左上隅に貼り付けられ，ビジュアルコンポーネントは切り取り元またはコピー元での位置と同じ位置に貼り付けられます。

メニュー項目をメニューデザイナに貼り付けた場合，カーソル位置に挿入されます。

クリップボードの現在の内容は，新しい項目をクリップボードへ切り取るかコピーするまで何回でも貼り付けできます。


参照01460

編集(E)｜コピー(C)

編集(E)｜切り取り(T)

編集メニューコマンドのキーボードショートカット


編集(E)｜削除(D)
編集(E)｜削除(D)01461

［編集(E)｜削除(D)］を選択すると，クリップボードへコピーを入れずに，選択したテキストまたはコンポーネントを削除できます。

削除したテキストの貼り付けはできませんが，直後に［編集(E)｜元に戻す(U)］を選択すればテキストを復元できます。

［削除(D)］は項目を削除してもクリップボードの内容は上書きしたくない場合に使います。


編集(E)｜すべてを選択(L)
編集(E)｜すべてを選択(L)01462

［編集(E)｜すべてを選択(L)］を選択すると，アクティブフォームのすべてのコンポーネントを選択できます。すべてのコンポーネントを選択した場合，それらのコンポーネントに共通したプロパティだけがオブジェクトインスペクタの中に表示されます。


編集(E)｜グリッドに合わせる(A)
編集(E)｜グリッドに合わせる(A)01463

［編集(E)｜グリッドに合わせる(G)］を選択すると，選択したコンポーネントを最も近いグリッド点に揃います。

グリッドのサイズは［オプション(O)｜環境(E)］で表示される［環境の設定］ダイアログボックスの［Preferences ］ページで指定できます。


編集(E)｜前面へ移動(F)
編集(E)｜前面へ移動(F)01464

参照

［編集(E)｜前面へ移動(F)］を選択すると，選択したコンポーネントをフォーム上にある他のすべてのコンポーネントの前へ移動できます。この操作をコンポーネントの Z オーダーの変更といいます。

メモ:	［前面へ移動(F)］コマンドと［背面へ移動(B)］コマンドはウィンドウコンポーネントと非ウィンドウコンポーネントを組み合わせている場合には使えません。たとえば，ラベルの Z オーダーはボタンと関係しているので変更できません。


編集(E)｜背面へ移動(B)
編集(E)｜背面へ移動(B)01465

参照

［編集(E)｜背面へ移動(B)］を選択すると，選択したコンポーネントをフォーム上にある他のすべてのコンポーネントの後ろへ移動できます。この操作をコンポーネントの Z オーダーの変更といいます。

メモ:	［背面へ移動(B)］コマンドと［前面へ移動(F)］コマンドはウィンドウコンポーネントと非ウィンドウコンポーネントを組み合わせている場合には使えません。たとえば，ラベルの Z オーダーはボタンと関係しているので変更できません。


参照01466

コンポーネントの Z オーダーの変更


編集(E)｜位置合わせ(A)
編集(E)｜位置合わせ(A)01467

参照

［編集(E)｜位置合わせ(A)］を選択すると，［位置合わせ］ダイアログボックスが開きます。

［位置合わせ］ダイアログボックス

このダイアログボックスは選択したコンポーネントをコンポーネント相互の相対関係またはフォームとの相対関係で整列させるために使います。

［水平位置合わせ］の位置合わせオプションはコンポーネントの右端，左端，中心線のいずれかにコンポーネントを揃える

［垂直位置合わせ］の位置合わせオプションはコンポーネントの上端，下端，中心線のいずれかにコンポーネントを揃える

水平または垂直の位置合わせのオプションは次のとおりです。

オプション	説明

変更なし(N)	コンポーネントの位置合わせを変更しない

左寄せ(L)	選択したコンポーネントの左端を揃える (水平のみ)

中央に置く(C)	選択したコンポーネントの中心を揃える

右寄せ(R)	選択したコンポーネントの右端を揃える (水平のみ)

上に寄せる(T)	選択したコンポーネントの上端を揃える (垂直のみ)

下に寄せる(B)	選択したコンポーネントの下端を揃える (垂直のみ)

等間隔に配置(S)	選択したコンポーネントを互いに等間隔で揃える

ウィンドウ中央に置く(W)	選択したコンポーネントをウィンドウの中心に揃える


参照01468

位置合わせパレット

コンポーネントの位置合わせ


編集(E)｜サイズ(S)
編集(E)｜サイズ(S)01469

［編集(E)｜サイズ(S)］を選択すると，［サイズ(S)］ダイアログボックスが開きます。

［コンポーネントのサイズ］ダイアログボックス

このダイアログボックスは複数のコンポーネントを同じ高さと幅にサイズ変更するために使います。

［幅］オプションは選択したコンポーネントの水平サイズを変更する

［高さ］オプションは選択したコンポーネントの垂直サイズを変更する

水平または垂直のサイズ変更オプションは次のとおりです。

オプション	説明

変更なし(N)	コンポーネントのサイズを変更しない

最小の幅に合わせる(S)	コンポーネントグループのサイズを，選択したコンポーネントのうちの最小の幅に変更する

最小の高さに合わせる(S)	コンポーネントグループのサイズを，選択したコンポーネントのうちの最小の高さに変更する

最大の幅に合わせる(G)	コンポーネントグループのサイズを，選択したコンポーネントのうちの最大の幅に変更する

最大の高さに合わせる(G)	コンポーネントグループのサイズを，選択したコンポーネントうちの最大の高さに変更する

幅(W)	選択したコンポーネントの幅を数値で指定して設定する

高さ(T)	選択したコンポーネントの高さを数値で指定して設定する


編集(E)｜スケール(E)
編集(E)｜スケール(E)01470

［編集(E)｜スケール(E)］を選択すると，［スケール］ダイアログボックスが開きます。

［スケール］ダイアログボックス

このダイアログボックスはフォームとそのフォーム上のすべてのコンポーネントを正しい比率で拡大縮小するために使います。

ダイアログボックスオプション

［パーセント単位の倍率(S)］

フォームのサイズ変更を％単位で入力します。

100％を超えるとフォームが大きくなります。

100％未満だとフォームが小さくなります。


編集(E)｜タブ順序(R)
編集(E)｜タブ順序(R)01471

参照

［編集(E)｜タブ順序(R)］を選択すると，［タブ順序の編集］ダイアログボックスが開きます。

［タブ順序の編集］ダイアログボックス

このダイアログボックスは，フォーム上にあるコンポーネントのタブ順や，選択したコンポーネントの中に含まれている複数のコンポーネントのタブ順を変更するために使います。

リストボックスには，アクティブフォーム上にあってタブ停止位置にできるコンポーネントとその種類が現在のタブ順に表示されます。デフォルトのタブ順はコンポーネントをフォーム上に配置した順によって決まります。

コンポーネントのタブ順を変更するには

1.	コンポーネント名を 1 つ選択します。

2.	そのコンポーネントのタブ順を上へ移動したい場合は上矢印のボタンを，下へ移動したい場合は下矢印をクリックします。

選択したコンポーネントをタブ順の中の新しい位置までドラッグすることもできます。

3.	変更を保存するため［OK］をクリックします。


参照01472

タブ順の設定


編集(E)｜作成順序(N)
編集(E)｜作成順序(N)01473

［編集(E)｜作成順序(N)］を選択すると，［作成順序の編集］ダイアログボックスが開きます。

［作成順序の編集］ダイアログボックス

このダイアログボックスはデザイン時または実行時にフォームをロードしたときにアプリケーションによって非ビジュアルコンポーネントが作成される順序を指定するために使います。

リストボックスにはアクティブフォーム上にある非ビジュアルコンポーネントと，それらの種類，現在の作成順が表示されます。デフォルトの作成順は非ビジュアルコンポーネントをフォーム上に配置した順によって決まります。

作成順を変更するには

1.	コンポーネント名を 1 つ選択します。

2.	そのコンポーネントの作成順を上へ移動したい場合は上矢印のボタンを，下へ移動したい場合は下矢印をクリックします。

選択したコンポーネントを作成順の中の新しい位置までドラッグすることもできます。

3.	変更を保存するため［OK］をクリックします。


参照01474

ギャラリー

［Object Repository］ダイアログボックス

［ビットマップの選択］ダイアログボックス


編集(E)｜コントロールのロック(K)
編集(E)｜コントロールのロック(K)01475

［編集(E)｜コントロールのロック(K)］を選択すると，アクティブフォーム上にあるすべてのコンポーネントを現在の位置に固定できます。このコマンドにチェックマークが付いているときはコンポーネントの移動やサイズ変更ができません。ただし，オブジェクトインスペクタを使えば，選択したコンポーネントの Height, Left， Top, Width の各プロパティを編集できます。

このコマンドにチェックマークを付けると，コンポーネントがロックされます。コンポーネントがロックされているときは［コントロールのロック(K)］を選択すればロックを解除できます。

メモ:	［コントロールのロック(K)］はフォーム自体に対しては無効です。［コントロールのロック(K)］を選択してある場合でもフォームのサイズ変更や移動はできます。


編集(E)｜オブジェクト(O)
編集(E)｜オブジェクト(O)01476

［編集(E)｜オブジェクト(O)］を選択すると，フォームに挿入した OLE オブジェクトを編集または変換できます。このメニュー項目は選択した OLE オブジェクトによって異なります。

サブメニューで［変換］を選択すると，［変換］ダイアログボックスが開きます。

［変換］ダイアログボックス

このダイアログボックスは埋め込みオブジェクトのソースアプリケーションを指定するために使います。

ダイアログボックスオプション

［現在の形式］

変換するオブジェクトまたはアクティブにするオブジェクトの種類を表示します。

［オブジェクトの形式(Y)］

ファイルの変換後のオブジェクトの種類を選択します。

［変換(C)］

選択した埋め込みオブジェクトを，［オブジェクトの種類(Y)］ボックスで選択した種類の情報に変換します。

［編集(A)］

［オブジェクトの種類(Y)］ボックスで選択した種類で埋め込みオブジェクトを開きますが，編集後にそのオブジェクトを元の種類に戻します。

［アイコンで表示(D)］

チェックマークを付けると，挿入したオブジェクトがフォーム上にアイコンとして表示されます。このオプションにチェックマークを付けると，［アイコンの変更(I)］ボタンが表示されます。

［アイコンの変更(I)］

［アイコンの変更(I)］をクリックすると［アイコンの変更］ダイアログボックスが開き，フォームへ挿入したオブジェクトのアイコンとラベルを指定できます。

［結果］

選択したオプションの結果を説明します。


DOCUMENTATION TEAM 01477

Thank you to the Delphi documentation team for all your hard work and effort.

The team is:

Lesley Kew	Mike Satenberg	Laura Wall

Linda Jeffries	Richard Nelson	Robert Palomo

Patrick King	Sally Wilcox	JoAnn Findley-Blevens

Holly MacClure


ファイルメニュー
ファイルメニュー01478

参照

ファイルメニューは，新規または既存のプロジェクトおよびファイルを開き，保存し，閉じ，印刷し，また開いているプロジェクトに新しいフォームやユニットを追加するために使います。

ファイルメニューには次のコマンドがあります。

新規作成(N)	新しく作成できる項目，現在のプロジェクト内のフォーム，オブジェクトリポジトリ内の項目が入っている［新規作成］ダイアログボックスを開きます。

アプリケーションの新規作成(T)	フォーム，ユニット，.DPR ファイルが入っている新しいプロジェクトを作成します。

フォームの新規作成(F)	ブランクフォームを作成してプロジェクトに追加します。

データモジュールの新規作成(M)	新しいブランクデータモジュールを作成してプロジェクトに追加します。

開く(O)	［開く］ダイアログボックスを開いて既存のプロジェクト，フォーム，ユニット，またはテキストファイルをコードエディタに読み込みます。

開き直す(R)	最近閉じたプロジェクトとモジュールの入っているカスケードメニューを表示します。

上書き保存(S)	現在のファイルを現在の名前で保存します。

名前を付けて保存(A)	プロジェクトのファイルに対する変更も含めて，現在のファイルを新しい名前で保存します。

プロジェクトに名前を付けて保存(E)	現在のプロジェクトを新しい名前で保存します。

すべて保存(V)	プロジェクトとモジュール両方の開いているすべてのファイルを保存します。

閉じる(C)	現在のプロジェクトとそれに関連付けられているユニットとフォームを閉じます。

すべて閉じる(L)	開いているすべてのファイルを閉じます。

ユニットを使う(U)	選択しているユニットをアクティブなモジュールの uses 節に追加します。

プロジェクトに追加(D)	既存のファイルをプロジェクトに追加します。

プロジェクトから削除(J)	プロジェクトからファイルを削除します。

印刷(P)	アクティブなファイルをプリンタに送ります。

終了(X)	開いているプロジェクトを閉じて Delphi を終了します。


参照01479

ファイルメニューコマンドのキーボードショートカット


ファイル(F)｜新規作成(N)
ファイル(F)｜新規作成(N)01480

参照

［新規作成］ダイアログボックスから，Delphi のオブジェクトリポジトリの中を見ることができます。オブジェクトリポジトリにはフォーム，プロジェクト，およびエキスパートが入っています。これらのオブジェクトは，直接使ったり，プロジェクトにコピーしたり，また既存のオブジェクトから継承したりすることができます。

［新規作成］ダイアログボックスを開くには

1	［ファイル(F)｜新規作成(N)］を選択して［新規作成］ダイアログボックスを開きます。

2	以下のオプションのどれかを選択します。

オブジェクトリポジトリから新しいフォームを追加するには

1	［ファイル(F)｜新規作成(N)］を選択して［新規作成］ダイアログボックスを開きます。

2	［フォーム］ページまたは［ダイアログ］ページから追加したい項目が入っているタブを選択します。

3	追加したいフォームの種類を表すリストビューから項目を選択します。

4	新しいフォームを，コピーするか継承するか，あるいは直接使うかを選択します。

プロジェクトテンプレートから新しいプロジェクトを開始するには

［ファイル(F)｜新規作成(N)］を選択して［新規作成］ダイアログボックスを開きます。

1	［プロジェクト］タブを選択します。

2	使いたいプロジェクトテンプレートを選択して［OK］を選択します。

3	［Select Directory］ダイアログボックスで新しいプロジェクトのファイル用のディレクトリを指定します。

プロジェクトテンプレートのコピーが指定されたディレクトリに開きます。


参照01481

コンポーネントの作成

コンポーネントライブラリのカスタマイズ

コンポーネントエキスパートの使い方

ファイル(F)｜上書き保存(S)

ファイル(F)｜開く(O)

プロジェクトの管理

ツール(T)｜リポジトリ(R)


ファイル(F)｜アプリケーションの新規作成(T)
ファイル(F)｜アプリケーションの新規作成(T)01482

［ファイル(F)｜アプリケーションの新規作成(T)］を選択して Delphi の新しいプロジェクトを作成します。

標準のブランクプロジェクトだけでなく，カスタムプロジェクトをデフォルトプロジェクトとして指定することもできます。

デフォルトプロジェクトを作成するには

1	［ツール(T)｜リポジトリ(R)］を選択して［オブジェクトリポジトリ］ダイアログボックスを開きます。

2	［ページ(P)］リストボックスで［プロジェクト］をクリックします。

1. 4eト(O)］リストボックスにプロジェクトのリストが表示されます。

3	デフォルトプロジェクトにしたいプロジェクトを選択します。

4	［プロジェクトの新規作成時に使用(Q)］チェックボックスを選択します。

5	［OK］を選択します。

以上の手順で指定したデフォルトプロジェクトは［アプリケーションの新規作成(T)］コマンドを選択したときに使用されます。

詳細はプロジェクトテンプレートから新しいプロジェクトを開始するを参照してください。

ある時点で開いておけるプロジェクトは 1 つだけです。［ファイル(F)｜アプリケーションの新規作成(T)］を選択したときにプロジェクトが開いていた場合，現在のプロジェクトに対する変更を保存するよう求められます。

新しいプロジェクトは次のものから構成されます。

•	新しいプロジェクトファイル (PROJECT1.DPR)

•	新しいフォームファイル (FORM1.DFM)，およびそれに関連付けられたフォームユニット (UNIT1.PAS)

プロジェクトファイルとユニットファイルの名前は保存するときに変更できます。


ファイル(F)｜フォームの新規作成(F)
ファイル(F)｜フォームの新規作成(F)01483

［ファイル(F)｜フォームの新規作成(F)］を選択すると，ブランクフォームと新しいユニットを作成してプロジェクトに追加できます。

標準のブランクフォームだけでなく，新しいプロジェクトに追加するデフォルトプロジェクトとしてカスタムフォームを指定することもできます。

デフォルトフォームを作成するには

1	［ツール(T)｜リポジトリ(R)］を選択して［オブジェクトリポジトリ］ダイアログボックスを開きます。

2	［ページ(P)］リストボックスで［フォーム］または［ダイアログ］をクリックします。

1. 4eト(O)］リストボックスに項目のリストが表示されます。

3	デフォルトフォームにしたいフォームを選択します。

4	［フォームの新規作成時に使用(N)］チェックボックスを選択します。

5	［OK］を選択します。

新しいフォームを作成すると， 新しいフォームとそれに関連付けられているユニットファイルが，開いているプロジェクトに含まれるファイルのリストに自動的に追加されます。開いているプロジェクトがない場合はブランクフォームが作成されます。

［新規作成］ダイアログボックスでブランクフォームを選択した場合，あるいはデフォルトフォームを指定しなかった場合は，新しいフォームのタイトルは FormXX となり，新しいユニットは UnitXX.PAS になります (XX はフォームとユニットの番号を表します。最初のフォームであれば Form1，2 番目なら Form2，のようになります)。

フォームの名前は，オブジェクトインスペクタで Name プロパティを編集すれば変更できます。

ユニットの名前は，［ファイル(F)｜名前を付けて保存(A)］でファイルを保存するか， ［ファイル(F)｜プロジェクトに名前を付けて保存(P)］でプロジェクト全体を保存するときに変更できます。

フォームまたはユニットの名前の変更は，ソースコード全体に渡ってそのユニットの名前が使われているすべての個所に反映されます。


ファイル(F)｜データモジュールの新規作成(M)
ファイル(F)｜データモジュールの新規作成(M)01484

参照

［ファイル(F)｜データモジュールの新規作成(M)］を選択してプロジェクトに新しいデータモジュールを追加します。

新しいデータモジュールを作成するには

ファイルメニューから［データモジュールの新規作成(M)］コマンドを選択します。

IDE のデスクトップにデータモジュールコンテナが表示され，データモジュールがプロジェクトファイルに追加されます。

設計時にはデータモジュールは，背景が白で位置合わせグリッドのない Delphi の標準フォームにように見えます。フォームの場合と同じように，コンポーネントパレットから非ビジュアルコンポーネントをモジュールに配置でき，追加したコンポーネントに合わせてデータモジュールのサイズを変更できます。


参照
参照01485

新しいデータモジュールの作成

データモジュールとユニットファイルの命名

オブジェクトリポジトリ内のデータモジュールの再利用

フォームからデータモジュールへのアクセス

データモジュールのコピー

データモジュールの継承

イベントハンドラの継承

データモジュールの使い方

オブジェクトリポジトリへのモジュールの追加


新規作成ダイアログボックス
新規作成ダイアログボックス01486

参照

［新規作成］ダイアログボックスを使って，アプリケーション開発の出発点として使えるフォーム，プロジェクトテンプレート，またはエキスパートを選択します。［新規作成］ダイアログボックスから，Delphi のオブジェクトリポジトリの中を見ることができます。オブジェクトリポジトリにはフォーム，プロジェクト，およびエキスパートが入っています。これらのオブジェクトは，直接使ったり，プロジェクトにコピーしたり，また既存のオブジェクトから継承したりすることができます。

ダイアログボックスオプション

［新規作成］ダイアログボックスのページ

Delphi を最初にインストールしたときには［新規作成］ダイアログボックスには 6 つのページがあります。以下で各ページについて説明します。

［新規作成］ページ

［新規作成］ページにはプロジェクトに取り込める項目があります。デフォルトの項目は次のとおりです。

アプリケーション	フォーム，ユニット，および .DPR の入った新しいプロジェクトを作成する，あるいはテンプレートを選択できるようにする
オートメーションオブジェクト	オートメーションオブジェクトのテンプレートの入った .PAS ファイルを作成する
コンポーネン	コンポーネントエキスパートを使って新しいコンポーネントを作成する
データモジュール	新しいデータモジュールを作成する
DLL	新しい DLL プロジェクトを作成する
フォーム	ブランクフォームを作成して現在のプロジェクトに追加する，あるいはフォームテンプレートを選択できるようにする
テキスト	新しいテキストファイルを作成する
スレッドオブジェクト	新しいスレッドオブジェクトを作成する
ユニット	新しいユニットを作成して現在のプロジェクトに追加する
［プロジェクト］ページ

プロジェクトが開いていれば［新規作成］ダイアログボックスの 2 番目のページは現在のプロジェクトのページです。現在のプロジェクトタイトルがタブに表示されます。現在のプロジェクトのページにはプロジェクトのすべてのフォームが入っています。既存のプロジェクトのどのフォームからでも継承フォームを作成できます。

ユーザー定義ページ

残りのページがある場合には，オブジェクトリポジトリからのフォーム，プロジェクト，データモジュール，エキスパートの入ったユーザー定義のページです。デフォルトでは［新規作成］ダイアログボックスには次のユーザー定義ページがあります。

•	フォーム

•	ダイアログ

•	データモジュール

•	プロジェクト

新規作成スピードメニュー

スピードメニューには［新規作成］ダイアログボックス内の項目用の以下のオプションがあります。

•	大きいアイコンで表示(L)

•	小さいアイコンで表示(S)

•	一覧表示(I)

•	詳細表示(D)

•	名前順(N)

•	コメント順(E)

•	日付順(A)

•	作者順(U)

•	プロパティ(R)

メモ:	スピードメニューから［プロパティ(R)］を選択すると［オブジェクトリポジトリ］ダイアログボックスが開きます。このダイアログボックスを使ってオブジェクトリポジトリ内の項目の編集，ページの追加，項目名の変更が行えます。このダイアログには，［ツール(T)｜リポジトリ(R)］からもアクセスできます。

使い方のオプション

リポジトリ内のオブジェクトをプロジェクトに取り込む方法のオプションが 3 つあります。

•	項目をコピーする

•	項目から継承する

•	項目を直接使用する

項目のコピー

項目をコピーするとその正確な複製が得られ，その項目がフォームまたはデータモジュールであればプロジェクトに追加されます。オブジェクトリポジトリ内のその項目を変更しても，プロジェクト内のコピーには反映されません。また，プロジェクト内のコピーに対する変更もリポジトリ内の元の項目には影響しません。

メモ: 	プロジェクトテンプレートを使うときに利用できるオプションはコピーだけです。

項目の継承

最も柔軟性があって強力なオプションが項目の継承です。項目を継承すると，その項目から新しいクラスが派生してプロジェクトに追加されます。オブジェクトリポジトリ内の項目に対する変更は，特定の部分を変更していなければ，プロジェクトを再コンパイルしたときに派生クラスに反映されます。派生クラスに対する変更はオブジェクトリポジトリ内の項目には影響しません。

メモ:	継承は，フォーム，ダイアログボックス，およびデータモジュールには利用できますが，プロジェクトテンプレートには利用できません。同じプロジェクト内の項目を再利用する場合に使えるオプションは継承だけです。

項目の直接使用

項目の直接使用は主にデータモジュールに対して利用します。項目を直接使用すると，その項目はプロジェクトの一部として作成したのと同じようにプロジェクトに追加されます。その項目に対する設計時の変更は，その項目を直接使用している，あるいはその項目を継承しているすべてのプロジェクトに反映されます。

メモ:	項目の直接使用は，フォーム，ダイアログボックス，およびデータモジュールに対して利用できるオプションです。直接使用の項目への変更が他のモジュールに影響しないようにするには，実行時に変更を行うようにしてください。

フォームまたはプロジェクトエキスパートに対してはコピーオプションしか利用できません。エキスパートを使うと共有されるコードは実際には追加されず，独自のコードを生成するプロセスが実行されます。


参照01487

ツール(T)｜リポジトリ(R)


ディレクトリの選択ダイアログボックス
ディレクトリの選択ダイアログボックス01488

［ディレクトリの選択］ダイアログボックスは新しいプロジェクトの作業用ディレクトリを選択するために使います。

［ディレクトリの選択］ダイアログボックスを開くには

［New Items］ダイアログボックスで空白でないプロジェクトテンプレートを選択する

ダイアログボックスオプション

［ディレクトリ名(N)］

カレントディレクトリを表示します。存在しないディレクトリを入力すると，そのディレクトリが作成されます。

［ディレクトリ(D)］

カレントディレクトリを一覧表示します。

［ファイル(F): (*.*)］

カレントディレクトリにあるすべてのファイルを一覧表示します。ファイルの選択はできません。このファイルリストは単にカレントディレクトリの内容を知らせるために表示されます。

［ドライブ(R)］

使用可能なすべてのドライブを一覧表示します。いずれかの使用可能ドライブを選択できます。

［ネットワーク(T)］

Windows 95 またはWindows NT を実行している場合は，［ネットワーク(T)］ボタンをクリックすれば［ネットワークドライブ接続］ダイアログボックスを開けます。


ファイル(F)｜開く(O)
ファイル(F)｜開く(O)01489

［ファイル(F)｜開く(O)］を選択すると［ファイルを開く］ダイアログボックスが開きます。

［開く］ダイアログボックス

［開く］ダイアログボックスを使って既存のプロジェクト，フォーム，ユニット，またはテキストファイルコードエディタに読み込みます。

ファイルを単に開いただけでは自動的には現在のプロジェクトに追加されません。ファイルをプロジェクトに追加するには［ファイル(F)｜プロジェクトに追加(D)］を選択します。

複数のフォーム，ユニット，テキストファイルを開けますが，プロジェクトは同時に 1 つしか開けません。プロジェクトを開くときに別のプロジェクトが開いていると，現在のプロジェクトへの変更を保存するよう求められます。

ダイアログボックスオプション

［ファイルの場所(I)］

カレントディレクトリを表示します。ドロップダウンリストを使って別のドライブやディレクトリを選択します。

ファイルリストボックス

カレントディレクトリ内で［ファイル名(N)］のワイルドカードまたは［ファイルの種類(T)］のファイルの種類に一致するファイルを表示します。ファイルの一覧を表示する (デフォルト) か，各ファイルの詳細を表示できます。

［ファイル名(N)］

読み込みたいファイルの名前，またはファイルリストボックスのフィルタとなるワイルドカードを入力します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイル種類はDelphiファイル (*.pas;*dpr) です。選択された種類のカレントディレクトリ内のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリ上で［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


ファイル(F)｜開き直す(R)
ファイル(F)｜開き直す(R)01490

［ファイル(F)｜開き直す(R)］を選択すると以前に閉じたプロジェクトまたはモジュールをもう一度開くことができます。

プロジェクトまたはモジュールを閉じると［開き直す(R)］リストに追加されます。

プロジェクトまたはモジュールをもう一度開くには

1	ファイルメニューから［開き直す(R)］を選択します。

2	開きたいプロジェクトまたはモジュールをクリックします。

メモ:	［開き直す(R)］リストに表示されるのは［ファイル(F)｜閉じる(C)］コマンドで閉じたプロジェクトまたはモジュールだけです。保存された項目はリストに表示されません。


ファイル(F)｜上書き保存(S)
ファイル(F)｜上書き保存(S)01491

［ファイル(F)｜上書き保存(S)］を選択すると，開いているプロジェクトに含まれるすべてのファイルへの変更が各ファイルの現在の名前で格納されます。

プロジェクトファイルまたはユニットファイルを一度も保存していないプロジェクトを保存するときには［名前を付けて保存］ダイアログボックスが開いて新しいファイル名を入力できます。

メモ:	プロジェクトに入っていないファイルは保存されません。このようなファイルを保存するにはコードエディタ内の各ファイルを選択して［ファイル(F)｜上書き保存(S)］を選択します。


ファイル(F)｜名前を付けて保存(A)
ファイル(F)｜名前を付けて保存(A)01492

［ファイル(F)｜名前を付けて保存(A)］を選択するとアクティブなファイルを別の名前または別の場所に保存できます。

［名前を付けて保存］ダイアログボックス

［名前を付けて保存］ダイアログボックスを使ってプロジェクトファイル名を変更したりプロジェクトを新しい場所に保存したりします。そのファイル名がすでに存在している場合は，既存のファイルを置き換えるかどうかが尋ねられます。

ダイアログボックスオプション

［ファイル名(N)］

保存するファイルの名前を入力します。

ファイルリストボックス

カレントディレクトリで［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

ファイル拡張子を選択します。デフォルトは .DPR です。カレントディレクトリにある指定した種類のすべてのファイルがファイルリストボックスに表示されます。プロジェクトファイルを別の拡張子で保存してもファイルの形式は変更されません。

［ディレクトリ(D)］

ファイルを格納したいディレクトリを選択します。カレントディレクトリで［ファイルの種類(T)］コンボボックスの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


ファイル(F)｜プロジェクトに名前を付けて保存(E)
ファイル(F)｜プロジェクトに名前を付けて保存(E)01493

［ファイル(F)｜プロジェクトに名前を付けて保存(P)］を選択すると，.DPRファイルを別の名前や別の場所に保存できます。このコマンドは .DPR ファイルのコピーや名前変更をするほかに，開いたプロジェクトの中にある他のすべてのファイルを現在の場所へ現在の名前で保存します。他のプロジェクトで使われるフォームまたはユニットを変更した場合，しかも現在の変更をそれらのプロジェクトに反映させたくない場合は，このコマンドでプロジェクトを保存する前に［ファイル(F)｜ファイルに名前を付けて保存(A)］を使ってそれぞれのユニットファイルのコピーと名前変更をしなくてはなりません。

［名前を付けて保存］ダイアログボックス

［名前を付けて保存］ダイアログボックスはプロジェクトファイル名を変更したりプロジェクトを新しい場所へ保存するために使います。ファイル名がすでに存在する場合，既存のファイルを置き換えるかが尋ねられます。

［ファイル名(N)］編集ボックス

保存するプロジェクトファイルの名前を入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］コンボボックス

ファイルの拡張子を選択します。デフォルトは .DPR です。カレントディレクトリにある選択した種類のファイルがすべてファイルリストボックスに表示されます。プロジェクトファイルを別の拡張子で保存してもファイルの形式は変更されないことに注意してください。

［ディレクトリ(D)］リストボックス

ファイルを格納したいディレクトリを選択します。カレントディレクトリの中にあり，［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］コンボボックス

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


ファイル(F)｜すべて保存(V)
ファイル(F)｜すべて保存(V)01494

［ファイル(F)｜すべて保存(V)］を選択すると，現在のプロジェクトとモジュールを含めて開いているすべてのファイルが保存されます。

すべてのファイルを保存するには

1	ファイルメニューから［すべて保存(V)］を選択します。

2	［名前を付けて保存］ダイアログボックスに保存する項目のデフォルトの名前が表示されます。

3	別の名前を使いたい場合は新しい名前を入力します。

4	［保存(S)］をクリックします。

保存する次の項目のデフォルトの名前を示した［名前を付けて保存］ダイアログボックスがまた表示されます。

5	すべてのモジュールの保存が終わるまで 3～4 の手順を繰り返します。


ファイル(F)｜閉じる(C)
ファイル(F)｜閉じる(C)01495

［ファイル(F)｜閉じる(C)］を選択するとアクティブなウィンドウが閉じます。

フォームを閉じると関連付けられているユニットも閉じられます。ファイルを閉じる前に変更を保存するかどうかが尋ねられます。プロジェクトまたはファイルをまだ保存していない場合は［名前を付けて保存］ダイアログボックスが開いて新しいファイル名を入力できます。

コードエディタ内のプロジェクトファイルを閉じると，プロジェクト全体を閉じることになります。プロジェクトマネージャがアクティブウィンドウのときに［ファイル(F)｜閉じる(C)］を選択した場合もプロジェクト全体が閉じられます。


ファイル(F)｜すべて閉じる(L)
ファイル(F)｜すべて閉じる(L)01496

［ファイル(F)｜すべて閉じる(L)］を選択すると開いているすべてのファイルが閉じられます。

すべてのファイルを閉じるには

ファイルメニューから［すべて閉じる(L)］を選択します。

プロジェクトファイルとすべてのモジュールが閉じられます。


ファイル(F)｜ユニットの新規作成(U)
ファイル(F)｜ユニットの新規作成(U)01497

［ファイル(F)｜ユニットの新規作成(U)］を選択すると，新しいユニットを作成してプロジェクトへ追加できます。

新しいユニットには UnitXX.PAS というタイトルが付きます。XX はユニット番号です。たとえば最初のユニットは Unit1, 2 番目は Unit2 などとなります。

ユニット名は［ファイル(F)｜ファイルに名前を付けて保存(A)］によってファイルを保存するか［ファイル(F)｜プロジェクトに名前を付けて保存(P)］を使ってプロジェクト全体を保存すれば変更できます。

ユニット名に加えた変更はソースコード全体を通じてそのユニット内のその名前が現れるすべての場所に反映されます。


Use Unit dialog box
Use Unit dialog box01498

Choose File|Use Unit to open this dialog box.

You use this dialog box to use a unit in the current unit.

To add a unit,

1	From the File menu, select Use Unit.

The Use Unit dialog box appears.

2	In the Use Unit list, click the unit name you want to add.

3	Click OK to add the unit to the current unit.

Dialog box options

Use Unit list

This list displays a list of all units in the project that are not being used by the current unit.


参照
ファイル(F)｜新規作成(N)｜コンポーネント01499

参照

［ファイル(F)｜新規作成(N)｜コンポーネント］を選択すると，［コンポーネントエキスパート］ダイアログボックスが開きます。

［コンポーネントエキスパート］ダイアログボックス

このダイアログボックスは新しいコンポーネントの基本ユニットを作成するために使います。

ダイアログボックスオプション

［クラス名(C)］

作成する新しいクラスの名前を入力します。一般的な規則として，Object Pascal クラスには名前の前に T を付けます。たとえば，新しいボタンコンポーネントの名前は TMYBUTTON などとします。

［親の型(A)］

ドロップダウンリストを使って新しいコンポーネントの基本クラスを選択するか，新しいコンポーネントの基本クラス名を入力します。コンポーネント宣言の中でオーバーライドした場合を除いて，新しいコンポーネントは上位クラスですべてのプロパティ，メソッド，イベントを継承します。

［パレットページ(P)］

新しいコンポーネントをライブラリへ追加したときにそのコンポーネントが現れるページをドロップダウンリストから選択するか，そのページの名前を入力します。


参照01500

コンポーネントの作成

コンポーネントライブラリのカスタマイズ

コンポーネントエキスパートの使い方


ファイル(F)｜ファイルを開く(O)
ファイル(F)｜ファイルを開く(O)01501

参照

［ファイル(F)｜ファイルを開く(O)］を選択すると，［ファイルを開く］ダイアログボックスが表示されます。

［ファイルを開く］ダイアログボックス

［ファイルを開く］ダイアログボックスは既存のファイルを Delphi の中へロードするために使います。存在しないファイルの名前を入力した場合はファイル形式を選択するための［ファイルを開く］ダイアログボックスが開き，作成したいファイルの種類を選択できます。

ダイアログボックスオプション

［ファイル名(N)］

ロードしたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイルの種類はソースファイル (.PAS) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


参照01502

プロジェクトへのユニットとフォームの追加

ファイルメニューコマンドのキーボードショートカット


ファイルを開くダイアログボックス
ファイルを開くダイアログボックス01503

［ファイルを開く］ダイアログボックスは新しいファイル名を［ファイル名(N)］編集ボックスに入力するときに，作成したいファイルの種類を指定するために使います。［ファイル(F)｜ファイルを開く(O)］を選択すると，このダイアログボックスが表示されます。

次の 3 種類のファイルを作成できます。

フォーム

ユニット

テキストファイル

作成するファイルの種類を選択するには

ファイルの種類を選択して［OK］をクリックする

選択した種類のファイルが作成されますが，プロジェクトへは追加されません。

メモ:	現在のプロジェクトへ組み込みたいファイルを作成する場合は，そのファイルをプロジェクトへ追加する必要があります。ファイルをプロジェクトへ追加するには，［ファイル(F)｜プロジェクトに追加(D)］を選択するかプロジェクトマネージャのスピードメニューで［ファイルの追加(A)］を選択します。


ファイル(F)｜ファイルの追加(D)
ファイル(F)｜プロジェクトに追加(D) 01504

参照

［ファイル(F)｜プロジェクトに追加(D)］を選択すると，［プロジェクトに追加］ダイアログボックスが開きます。

［プロジェクトに追加］ダイアログボックス

［プロジェクトに追加］ダイアログボックスは既存のユニットとそれに関連したフォームを Delphi プロジェクトへ追加するために使います。ユニットをプロジェクトへ追加すると，そのユニットは自動的にプロジェクトファイルの uses 節へ追加されます。

ダイアログボックスオプション

［ファイル名(N)］

ロードしたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイルの種類はソースファイル (.PAS) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


参照01505

プロジェクトへのユニットとフォームの追加

ファイル(F)｜プロジェクトから削除(J)

プロジェクトでのユニットとフォームの表示


ファイル(F)｜ファイルの削除(M)
ファイル(F)｜プロジェクトから削除(J)01506

参照

［ファイル(F)｜プロジェクトから削除(J)］を選択すると，［プロジェクトから削除］ダイアログボックスが開きます。

［プロジェクトから削除］ダイアログボックス

このダイアログボックスは現在のプロジェクトから取り除くモジュールを選択するために使います。［OK］をクリックすると選択したモジュールが現在のプロジェクトファイルの uses 節から取り除かれますが，ファイルがディスクから削除されるわけではありません。そのユニットへの参照を追加してある場合は，手作業でそれらの参照を取り除かなくてはなりません。

その編集セッションで変更したファイルを取り除こうとした場合，そのフォームまたはユニットを別のプロジェクトで使う場合に備えて変更を保存するよう求められます。ファイルに変更を加えていない場合は，そのファイルがプロジェクトから取り除かれます。

警告:	ユニットファイルを他のファイル管理プログラムを使って削除したり，DOS プロンプトから直接削除したりしないでください。エラーの原因になります。


参照01507

ファイル(F)｜プロジェクトに追加(D)

プロジェクトからのユニットとフォームの削除

プロジェクトでのユニットとフォームの表示


ファイル(F)｜印刷(P)
ファイル(F)｜印刷(P)01508

［ファイル(F)｜印刷(P)］を選択すると，コードエディタのアクティブページまたはアクティブフォームを印刷できます。［ファイル(F)｜印刷(P)］を選択した場合，コードエディタとフォームのどちらがアクティブウィンドウであるかに応じて 2 つのダイアログボックスのどちらかが表示されます。

コードエディタがアクティブの場合，［選択部分の印刷］ダイアログボックスが表示される

フォームがアクティブの場合，［Print Form］ダイアログボックスが表示される


フォームの印刷ダイアログボックス
フォームの印刷ダイアログボックス01509

このダイアログボックスはフォームを印刷するときのスケールオプションを指定するために使います。スケールオプションはプリンタ用紙のサイズに応じて動作します。用紙のサイズは［プリンタの設定］ダイアログボックスの［用紙サイズ(Z)］オプションを使って変更できます。

このダイアログボックスを表示するには，フォームがアクティブのときに［ファイル(F)｜印刷(P)］を選択します。

次の 3 つのスケールオプションがあります。

［画面上のサイズで印刷(P)］ － PixelsPerInchプロパティの値を使ってフォームのスケールを設定する。PixelsPerInch の値によっては，フォームが複数のページにわたって印刷されることがある

［ページに収まる(F)］ － 1 ページに収まるようにフォームのスケールを設定する

［プリンタの解像度で印刷(N)］ － 画面上のフォームのビットマップをプリンタの解像度で印刷する。このオプションを選択すると，フォームが複数のページにわたって印刷されることがある

［設定(T)］

［設定(T)］ボタンをクリックすると，［プリンタの設定］ダイアログボックスが表示されます。


選択部分の印刷ダイアログボックス
選択部分の印刷ダイアログボックス01510

このダイアログボックスはコードエディタのアクティブファイルを印刷するために使います。

ダイアログボックスオプション

［印刷するファイル］

印刷するファイルを一覧表示します。表示されるファイルは［ファイル(F)｜印刷(P)］を選択したときにコードエディタでアクティブだったページです。

［選択範囲を印刷(P)］

選択したテキストブロックだけをプリンタへ送ります。このオプションはファイル内でテキストを選択してある場合にだけ使えます。

このオプションにチェックマークを付けていないと，ファイル全体が印刷されます。

［ヘッダーとページ番号(N)］

各ページの上端にファイル名，現在の日付，ページ番号を入れます。

［行番号(L)］

左マージンに行番号を付けます。

［構文強調表示(S)］

太字，斜体，下線付き文字を使って構文の要素を強調表示します。

［カラー印刷(C)］

画面上の色に一致した色を印刷します (カラープリンタが必要です)。

［折り返し印刷(W)］

複数の行を使ってページ幅を超えた文字を印刷します。これを選択しなかった場合，コード行が切り捨てられ，ページ幅を超えた文字は印刷されません。

［左マージン(M)］

ページの左端から行頭までのマージンとして使う文字スペース数を指定します。

［設定(T)］

［設定(T)］をクリックすると，［プリンタの設定］ダイアログボックスが表示されます。


プリンタの設定ダイアログボックス
プリンタの設定ダイアログボックス01511

プリンタオプションを変更し，リストでプリンタを選択します。このダイアログボックスを表示するには，［選択部分の印刷］ダイアログボックスで［設定(T)］をクリックします。

プリンタオプションの設定についての詳細は Windows のマニュアルを参照してください。

［プリンタの設定］

［通常使うプリンタ(D)］

デフォルトプリンタを現在のプリンタにします。

［その他のプリンタ(P)］

特定のプリンタを現在のプリンタにします。希望のプリンタをリストボックスで選択します。

［印刷の向き］

文書を縦長または横長に印刷します。

［縦(R)］

用紙の短い辺を横切るようにテキストを印刷します (たとえば 8.5 インチ× 11 インチ)。

［横(L)］

用紙の長い辺に沿ってテキストを印刷します (たとえば 11 インチ× 8.5 インチ)。

［用紙の選択］

［用紙サイズ(Z)］

プリンタがサポートしている標準用紙サイズを指定します。

［給紙方法(S)］

プリンタの用紙トレイ方式または用紙送り方式を指定します。

［オプション(O)］

［オプション］ダイアログボックスが開き，使うプリンタドライバに固有のオプションを設定できます。それぞれのオプションについての詳細は［オプション］ダイアログボックスで［ヘルプ(H)］ボタンを選択してください。


ファイル(F)｜終了(X)
ファイル(F)｜終了(X)01512

［ファイル(F)｜終了(X)］を選択すると，開いたプロジェクトを閉じて Delphi を終了できます。

変更を保存する前に Delphi を終了しようとすると，変更を保存するかどうかが尋ねられます。


ファイル(F)｜(ヒストリリスト)
ファイル(F)｜(ヒストリリスト)01513

ファイルメニューの下部にあるファイル名を選択すると，そのファイルを再度開けます。再度開いた場合，そのファイルは閉じたファイルのリストから除かれます。

Delphi の編集セッションで閉じた直前の 3 つのファイルがファイルメニューの下部に示されるため，それらのファイルはすばやく再度開けます。


ヘルプメニュー
ヘルプメニュー01514

ヘルプメニューを使って，オンラインヘルプにアクセスします。

ヘルプシステムが提供する情報は，開発環境，Object Pascal，ライブラリなど，事実上 Delphi のすべての方面に渡っています。

ヘルプメニューには次の 2 つのコマンドがあります。

トピックの検索(S)	［トピックの検索］ダイアログボックスを表示します。

バージョン情報(A)	Delphi の著作権情報とバージョン番号を表示します。


ヘルプ(H)｜トピックの検索(S)
ヘルプ(H)｜トピックの検索(S)01515

［ヘルプ(H)｜トピックの検索(S)］を選択すると［トピックの検索］ダイアログボックスが表示されます。

ヘルプのトピックを見つけるには

•	［目次］タブをクリックしてカテゴリ別にトピックをブラウズする

•	［キーワード］タブをクリックしてキーワードの索引リストを見る。言葉を入力するかリストをスクロールする

•	［テキスト検索］タブをクリックしてヘルプトピックの中にあるかもしれない単語または語句を検索する (Windows NT 3.51 のみ)


ヘルプ(H)｜バージョン情報(A)
ヘルプ(H)｜バージョン情報(A)01516

［ヘルプ(H)｜バージョン情報(A)］を選択すると，著作権とバージョンの情報を示す［Delphi のバージョン情報］ダイアログボックスが表示されます。


フォームスピードメニュー
フォームスピードメニュー01517

参照	スピードメニュー

フォームスピードメニューは設計時にフォーム内のコンポーネントを操作するために使います。

フォームスピードメニューを表示するには

1.	操作したいコンポーネントをフォーム上で 1 つ以上選択します。

(コンポーネントを 1 つだけ選択するにはそのコンポーネントをクリックします。複数選択するには，いくつかのコンポーネントにわたってドラッグするか，Shift を押しながら 1 つ 1 つクリックします。)

2.	フォーム上の任意の場所で右クリックするか，Alt+F10 を押します。

次のコマンドは常にフォームスピードメニューに表示されます。

グリッドに合わせる(G)

前面へ移動(F)

背面へ移動(B)

位置合わせ(A)

サイズ(S)

スケール(E)

タブ順序(O)

作成順序(N)

Add to Repository

このほかのコマンドはフォーム上の特定のコンポーネントを選択するとフォームスピードメニューに表示されます。次の追加コマンドがあります。

Fields Editor

実行

次のページ

前のページ

サードパーティによって Delphi システムに追加コマンドがインストールされている場合もあります。前に示した以外のコマンドのヘルプを表示するには，フォームスピードメニューを表示してそのコマンドを選択します。これによってそのコマンド内で指名されているモジュールがアクティブになります。その後，F1 を押せばそのモジュールに関するヘルプが表示されます。


参照01518

フォーム


Query Builder (Form SpeedMenu)
Query Builder (Form SpeedMenu)01519


See also01520


実行 (フォームスピードメニュー)
実行 (フォームスピードメニュー)01521

参照

BatchMove コンポーネントを選択しているときにフォームスピードメニューで［実行］を選択すると，Mode プロパティで指定したプロセスを設計時に実行できます。

Mode プロパティを使うと，次のいずれかを実行できます。

データセットをテーブルへコピーする

データセットをテーブルへ追加する

データセットのデータを使ってテーブルを更新する

コントロールのデータを使ってデータを表示する

このプロセスを実行時に実行するには，BatchMove 用に Execute メソッドを呼び出さなくてはなりません。


参照01522

TBatchMove の使い方

TBatchMove コンポーネント


Edit Report (Form SpeedMenu)
Edit Report (Form SpeedMenu)01523


See also01524


次のページ (フォームスピードメニュー)
次のページ (フォームスピードメニュー)01525

参照

Notebook コンポーネントと TabbedNotebook コンポーネントのどちらかを選択しているときにフォームスピードメニューで［次のページ］を選択すると，ActivePage プロパティがノートブックの次ページに設定されます。

次ページはノートブックエディタを使って指定できるページ順によって決まります。


参照01526

Notebook コンポーネント

TabbedNotebook コンポーネント


前のページ (フォームスピードメニュー)
前のページ (フォームスピードメニュー)01527

参照

Notebook コンポーネントと TabbedNotebook コンポーネントのどちらかを選択しているときにフォームスピードメニューで［前のページ］を選択すると， ActivePage プロパティがノートブックの前ページに設定されます。

前ページはノートブックエディタを使って指定できるページ順によって決まります。


参照01528

Notebook コンポーネント

TabbedNotebook コンポーネント


グリッドに合わせる(G) (フォームスピードメニュー)
グリッドに合わせる(G) (フォームスピードメニュー)01529

フォームスピードメニューで［グリッドに合わせる(G)］を選択すると，選択してあるコンポーネントが最も近いグリッドポイントに揃います。

グリッドのサイズは［オプション(O)｜環境(E)］で表示される［環境の設定］ダイアログボックスの［Preferences］ページで指定できます。

このスピードメニューコマンドは［編集(E)｜グリッドに合わせる(G)］と同じ働きをします。


前面に移動(F) (フォームスピードメニュー)
前面に移動(F) (フォームスピードメニュー)01530

参照

フォームスピードメニューで［前面へ移動(F)］を選択すると，選択してあるコンポーネントがフォーム上のすべてのコンポーネントより前に移動します。

これをコンポーネントの Z オーダーの変更と呼びます。

このスピードメニューコマンドは［編集(E)｜前面へ移動(F)］と同じ働きをします。


背面に移動(B) (フォームスピードメニュー)
背面に移動(B) (フォームスピードメニュー)01531

参照

フォームスピードメニューで［背面へ移動(B)］を選択すると，選択してあるコンポーネントがフォーム上のすべてのコンポーネントより後ろに移動します。

これをコンポーネントの Z オーダーの変更と呼びます。

このスピードメニューコマンドは［編集(E)｜背面へ移動(B)］と同じ働きをします。


位置合わせ(A) (フォームスピードメニュー)
位置合わせ(A) (フォームスピードメニュー)01532

参照

フォームスピードメニューで［位置合わせ(A)］を選択すると，［位置合わせ］ダイアログボックスが開きます。

［位置合わせ］ダイアログボックス

このダイアログボックスは選択したコンポーネントをコンポーネント相互の相対関係またはフォームとの相対関係で整列させるために使います。

［水平位置合わせ］の位置合わせオプションはコンポーネントの右端，左端，中心線のいずれかにコンポーネントを揃える

［垂直位置合わせ］の位置合わせオプションはコンポーネントの上端，下端，中心線のいずれかにコンポーネントを揃える

［水平位置合わせ］または［垂直位置合わせ］の位置合わせのオプションは次のとおりです。

オプション	説明

変更なし(N)	コンポーネントの位置合わせを変更しない

左寄せ(L)	選択したコンポーネントの左端を揃える (水平のみ)

中央に置く(C)	選択したコンポーネントの中心を揃える

右寄せ(R)	選択したコンポーネントの右端を揃える (水平のみ)

上に寄せる(T)	選択したコンポーネントの上端を揃える (垂直のみ)

下に寄せる(B)	選択したコンポーネントの下端を揃える (垂直のみ)

等間隔に配置(S)	選択したコンポーネントを互いに等間隔で揃える

ウィンドウ中央に置く(W)	選択したコンポーネントをウィンドウの中心に揃える

このスピードメニューコマンドは［編集(E)｜位置合わせ(A)］と同じ働きをします。


サイズ(S) (フォームスピードメニュー)
サイズ(S) (フォームスピードメニュー)01533

フォームスピードメニューで［サイズ(S)］を選択すると，［コンポーネントのサイズ］ダイアログボックスが開きます。

［コンポーネントのサイズ］ダイアログボックス

このダイアログボックスは複数のコンポーネントを同じ高さと幅にサイズ変更するために使います。

［幅］オプションは選択したコンポーネントの幅を揃える

［高さ］オプションは選択したコンポーネントの高さを揃える

［幅］または［高さ］のサイズ変更オプションは次のとおりです。

オプション	説明

変更なし(N)	コンポーネントのサイズを変更しない

最小の幅に合わせる(S)	コンポーネントグループのサイズを，選択したコンポーネントのうちの最小の幅に変更する

最小の高さに合わせる(S)	コンポーネントグループのサイズを，選択したコンポーネントのうちの最小の高さに変更する

最大の幅に合わせる(G)	コンポーネントグループのサイズを，選択したコンポーネントのうちの最大の幅に変更する

最大の高さに合わせる(G)	コンポーネントグループのサイズを，選択したコンポーネントうちの最大の高さに変更する

幅(W)	選択したコンポーネントの幅を数値で指定して設定する

高さ(T)	選択したコンポーネントの高さを数値で指定して設定する

このスピードメニューコマンドは［編集(E)｜サイズ(S)］と同じ働きをします。


スケール(E) (フォームスピードメニュー)
スケール(E) (フォームスピードメニュー)01534

フォームスピードメニューで［スケール(E)］を選択すると，［スケール］ダイアログボックスが開きます。

［スケール］ダイアログボックス

このダイアログボックスはフォームとそのフォーム上のすべてのコンポーネントを正しい比率でサイズ変更するために使います。

［パーセント単位の倍率(S)］

フォームのサイズ変更を％単位で指定します。

100％を超えるとフォームが大きくなります。

100％未満だとフォームが小さくなります。

このスピードメニューコマンドは［編集(E)｜スケール(E)］と同じ働きをします。


タブ順序(O) (フォームスピードメニュー)
タブ順序(O) (フォームスピードメニュー)01535

参照

フォームスピードメニューで［タブ順序(O)］を選択すると，［タブ順序の編集］ダイアログボックスが開きます。

［タブ順序の編集］

このダイアログボックスは，アクティブフォーム上にあるコンポーネントの現在のタブ順や，選択したコンポーネントの中に含まれている複数のコンポーネントのタブ順を変更するために使います。

ダイアログボックスオプション

［コントロールのタブ順序一覧］

アクティブフォーム上にあるコンポーネントが現在のタブ順で一覧表示されます。最初に表示されるコンポーネントがタブ順の最初のコンポーネントです。

上矢印

上矢印をクリックすると，［コントロールのタブ順序一覧］リストボックスで選択したコンポーネントのタブ順が上へ移動します。

下矢印

下矢印をクリックすると，［コントロールのタブ順序一覧］リストボックスで選択したコンポーネントのタブ順が下へ移動します。

このスピードメニューコマンドは［編集(E)｜タブ順序(R)］と同じ働きをします。


参照01536

タブ順の設定


作成順序(C) (フォームスピードメニュー)
作成順序(C) (フォームスピードメニュー)01537

フォームスピードメニューで［作成順序(C)］を選択すると，［作成順序の編集］ダイアログボックスが開きます。

［作成順序の編集］ダイアログボックス

このダイアログボックスはアプリケーションによって非ビジュアルコンポーネントが作成される順序を指定するために使います。

リストボックスにはアクティブフォーム上にある非ビジュアルコンポーネントと，それらの種類，現在の作成順が表示されます。デフォルトの作成順は非ビジュアルコンポーネントをフォーム上に配置した順によって決まります。

作成順を変更するには

1.	コンポーネント名を 1 つ選択します。

2.	そのコンポーネントの作成順を上へ移動したい場合は上矢印のボタンを，下へ移動したい場合は下矢印をクリックします。

3.	変更を保存するため［OK］をクリックします。

このスピードメニューコマンドは［編集(E)｜作成順序(N)］と同じ働きをします。


リポジトリに追加(R) (フォームスピードメニュー)
リポジトリに追加(R) (フォームスピードメニュー)01538

スピードメニューで［リポジトリに追加(R)］を選択すると［リポジトリに追加］ダイアログボックスが開きます。このコマンドを使ってオブジェクトリポジトリにどんなフォームでも追加できます。

カスタムダイアログボックスを設計すると，他のプロジェクトでも使いたくなるものです。これを行う最良の方法は，そのフォームをオブジェクトリポジトリに追加することです。

フォームをオブジェクトとして保存するのは，フォームのコピーを別の名前で保存することと似ています。ただし，オブジェクトとして保存すればオブジェクトリポジトリに表示されます。


テキストとして表示(V) (フォームスピードメニュー)
テキストとして表示(V) (フォームスピードメニュー)01539

このコマンドを使ってフォームの属性をテキストとして表示します。

メモ:	このコマンドは，フォームをテキストで表示しているときには［フォームとして表示(V)］に変わります。


フォームとして表示(V)
フォームとして表示(V) (フォームスピードメニュー)01540

このコマンドを使ってフォームをビジュアルオブジェクトとして表示します。

メモ:	このコマンドは，フォームをビジュアルオブジェクトとして表示しているときには［テキストとして表示(V)］に変わります。


ビットマップの選択ダイアログボックス
ビットマップの選択ダイアログボックス01541

［ビットマップの選択］ダイアログボックスは［New Items］ダイアログボックスでテンプレートを表すビットマップを選択するために使います。

任意のサイズのビットマップが使えますが，60×40 ピクセルの大きさに切り取られます。

このダイアログボックスを開くには

［Add To Repository］ダイアログボックスで［参照(B)］をクリックする

ダイアログボックスオプション

［ファイル名(N)］

使いたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイルの種類はビットマップファイル (.BMP) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


プロジェクトマネージャスピードメニュー
プロジェクトマネージャスピードメニュー01542

参照	スピードメニュー

プロジェクトマネージャスピードメニューにはプロジェクトを管理するためのコマンドが入っています。

プロジェクトマネージャスピードメニューには次のコマンドがあります。

プロジェクトの上書き保存(S)

Add To Repository

ユニットの新規作成(N)

フォームの新規作成(W)

ファイルの追加(A)

ファイルの削除(R)

ユニットの表示(U)

フォームの表示(F)

プロジェクトソースの表示(P)

オプション(O)

更新(U)

プロジェクトマネージャスピードメニューを開くには

次のどちらかの操作をします。

スピードバーの任意の場所で右クリックする

プロジェクトマネージャウィンドウがアクティブウィンドウであるときに Alt+F10 を押す


参照01543

プロジェクトマネージャ


プロジェクトの上書き保存(S) (プロジェクトマネージャスピードメニュー)
プロジェクトの上書き保存(S) (プロジェクトマネージャスピードメニュー)01544

プロジェクトマネージャスピードメニューで［プロジェクトの上書き保存(S)］を選択すると，開いたプロジェクトのすべてのファイルに加えた変更をそれぞれのファイルの現在の名前で格納できます。

プロジェクトファイルまたはユニットファイルが保存されていないプロジェクトを保存しようとすると，新しいファイル名を入力する［名前を付けて保存］ダイアログボックスが開きます。

このスピードメニューコマンドは［ファイル(F)｜プロジェクトの上書き保存(S)］と同じ働きをします。


リポジトリに追加(T) (プロジェクトマネージャスピードメニュー)
リポジトリに追加(T) (プロジェクトマネージャスピードメニュー)01545

プロジェクトマネージャスピードメニューで［Add To Repository］を選択すると，［プロジェクトテンプレートの保存］ダイアログボックスが開きます。［プロジェクトテンプレートの保存］ダイアログボックスを使ってプロジェクトテンプレートを Object Repository に追加します。


プロジェクトテンプレートの保存ダイアログボックス
プロジェクトテンプレートの保存ダイアログボックス01546

このダイアログボックスはプロジェクトテンプレートを Object Repository に保存するために使います。

アプリケーションをテンプレートとして保存した後，［Edit Object Info］ダイアログボックスを使って説明の編集，テンプレートの削除，ビットマップの変更ができます。

ダイアログボックスオプション

［タイトル(T)］

テンプレートの名前を入力します。

タイトルの最大の長さは 40 文字です。

［説明(D)］

テンプレートの説明を入力します。この説明は［ギャラリー］ダイアログボックスのテンプレート名の下に表示されます。

説明の最大の長さは 255 文字です。

［Page］

ドロップダウンリストボックスからテンプレートを表示したいページ (たいていは Project) を選択します。

［Author］

アプリケーションの作者を識別するテキストを入力します。

作者の情報は，スピードメニューから［View Detail］を選択したときに表示されるだけです。

［説明用のビットマップの選択］

［参照(B)］ボタンをクリックすると，［ビットマップの選択］ダイアログボックスが開きます。

任意のサイズのビットマップが使えますが，60×40 ピクセルの大きさに切り取られます。


ユニットの新規作成(N) (プロジェクトマネージャスピードメニュー)
ユニットの新規作成(N) (プロジェクトマネージャスピードメニュー)01547

プロジェクトマネージャスピードメニューで［ユニットの新規作成(N)］を選択すると，新しいユニットが作成され，プロジェクトへ追加されます。新しいユニットを追加すると，コードエディタがアクティブウィンドウになり，新しいユニットがアクティブページになります。

新しいユニットには UnitXX.PAS というタイトルが付きます。XX はユニット番号を表します。たとえば最初のフォームは Unit1, 2 番目は Unit2 などとなります。

ユニット名は［ファイル(F)｜名前を付けて保存(A)］によってファイルを保存するか，プロジェクトマネージャスピードメニューで［プロジェクトの上書き保存(S)］を使ってプロジェクト全体を保存すれば変更できます。その他の方法でユニット名を変更すると，エラーの原因になります。

このスピードメニューコマンドは［ファイル(F)｜ユニットの新規作成(U)］と同じ働きをします。


フォームの新規作成(W) (プロジェクトマネージャスピードメニュー)
フォームの新規作成(W) (プロジェクトマネージャスピードメニュー)01548

プロジェクトマネージャスピードメニューで［フォームの新規作成(W)］を選択すると，空白フォームと新しいユニットが作成され，プロジェクトへ追加されます。

新しいフォームには FormXX，新しいユニットに UnitXX.PAS というタイトルが付きます。XX はフォーム/ユニットの番号です。たとえば最初のフォームは Form1, 2 番目は Form2 などとなります。

フォームの名前はオブジェクトインスペクタで Name プロパティを編集すれば変更できます。

ユニット名は［ファイル(F)｜名前を付けて保存(A)］によってファイルを保存するか，プロジェクトマネージャスピードメニューで［プロジェクトの上書き保存(S)］を使ってプロジェクト全体を保存すれば変更できます。

このスピードメニューコマンドは［ファイル(F)｜フォームの新規作成(F)］と同じ働きをします。


ファイルの追加(A) (プロジェクトマネージャスピードメニュー)
ファイルの追加(A) (プロジェクトマネージャスピードメニュー)01549

参照

プロジェクトマネージャスピードメニューで［ファイルの追加(A)］を選択すると，［プロジェクトに追加］ダイアログボックスが開きます。

［プロジェクトに追加］

［プロジェクトに追加］ダイアログボックスは既存のユニットとそれに関連したフォームを Delphi プロジェクトへ追加するために使います。ユニットをプロジェクトへ追加すると，そのユニットは自動的にプロジェクトファイルの uses 節へ追加されます。

ダイアログボックスオプション

［ファイル名(N)］

ロードしたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイルの種類はソースファイル (.PAS) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。

このスピードメニューコマンドは［ファイル(F)｜プロジェクトに追加(D)］と同じ働きをします。


参照01550

プロジェクトへのユニットとフォームの追加

ファイルの削除(R)

プロジェクトでのユニットとフォームの表示


ファイルの削除(R) (プロジェクトマネージャスピードメニュー)
ファイルの削除(R) (プロジェクトマネージャスピードメニュー)01551

参照

プロジェクトマネージャスピードメニューで［ファイルの削除(R)］を選択すると，プロジェクトマネージャで選択したモジュールが現在のプロジェクトファイルの uses 節から取り除かれます。

現在の編集セッションで変更したファイルを取り除こうとした場合，そのフォームまたはユニットを別のプロジェクトで使う場合に備えて変更を保存するよう求められます。ファイルに変更を加えていない場合は，そのファイルがプロジェクトから確認なしで取り除かれます。

現在の編集セッションでファイルを変更した場合，そのファイルはプロジェクトマネージャの中で太字になります。

警告:	ユニットファイルを他のファイル管理プログラムを使って削除したり，DOS プロンプトから直接削除したりしないでください。エラーの原因になります。

このスピードメニューコマンドは［ファイル(F)｜ファイルの削除(M)］と同じ働きをします。


参照01552

ファイルの追加(A)

プロジェクトからのユニットとフォームの削除

プロジェクトでのユニットとフォームの表示


ユニットの表示(U) (プロジェクトマネージャスピードメニュー)
ユニットの表示(U) (プロジェクトマネージャスピードメニュー)01553

参照

プロジェクトマネージャスピードメニューで［ユニットの表示(U)］を選択すると，プロジェクトマネージャで選択したモジュールがコードエディタのアクティブページになります。また，コードエディタがアクティブウィンドウになります。

表示したいモジュールが現在開いていない場合は開きます。

このスピードメニューコマンドは［表示(V)｜ユニット(U)］と同じ働きをします。


参照01554

コードエディタ


フォームの表示(F) (プロジェクトマネージャスピードメニュー)
フォームの表示(F) (プロジェクトマネージャスピードメニュー)01555

参照

プロジェクトマネージャスピードメニューで［フォームの表示(F)］を選択すると，プロジェクトマネージャで選択したモジュールの関連フォームがアクティブウィンドウになります。

表示したいフォームが現在開いていない場合は開きます。

このスピードメニューコマンドは［表示(V)｜フォーム(F)］と同じ働きをします。


プロジェクトソースの表示(P) (プロジェクトマネージャスピードメニュー)
プロジェクトソースの表示(P) (プロジェクトマネージャスピードメニュー)01556

参照

プロジェクトマネージャスピードメニューで［プロジェクトソースの表示(P)］を選択すると，プロジェクトファイルがコードエディタのアクティブページになります。

プロジェクトファイルが現在開いていない場合は開きます。


オプション(O) (プロジェクトマネージャスピードメニュー)
オプション(O) (プロジェクトマネージャスピードメニュー)01557

参照

プロジェクトマネージャスピードメニューで［オプション(O)］を選択すると，［オプション(O)｜プロジェクト(P)］で表示されるのと同じ［プロジェクトの設定］ダイアログボックスが開きます。

このダイアログボックスを使ってコンパイラ指令を設定できます。

このスピードメニューコマンドは［オプション(O)｜プロジェクト(P)］と同じ働きをします。


参照01558

コンパイラ指令


更新(D) (プロジェクトマネージャスピードメニュー)
更新(D) (プロジェクトマネージャスピードメニュー)01559

プロジェクトマネージャスピードメニューで［更新(D)］を選択すると，プロジェクトファイル (.DPR) 自体に直接加えた変更の同期がとられます。

メモ:	このコマンドはプロジェクトファイルを手作業で編集するまで使用不可 (淡色表示) になっています。Delphi ではプロジェクトファイルが自動的に保持されるため，手作業での .DPR ファイルの変更はなるべく避けてください。


スピードバースピードメニュー
スピードバースピードメニュー01560

参照	スピードメニュー

スピードバースピードメニューにはスピードバーのボタンを編集したり再配置するためのコマンドが入っています。スピードバースピードメニューを使ってスピードバーを隠すこともできます。

スピードバースピードメニューには次のコマンドがあります。

設定(C)

ヒント表示(S)

隠す(H)

ヘルプ(E)

スピードバースピードメニューを表示するには

スピードバーの任意の場所で右クリックする


参照01561

スピードバー


設定(C) (スピードバースピードメニュー)
設定(C) (スピードバースピードメニュー)01562

参照

スピードバースピードメニューで［設定(C)］を選択すると，［スピードバーの編集］ダイアログボックスが開きます。

［スピードバーの編集］ダイアログボックス

このダイアログボックスはメニューコマンドを表すボタンをスピードバーに追加したり，スピードバーからボタンを取り除いたり，スピードバーのボタンを再配置したりするために使います。

ダイアログボックスオプション

［分類(C)］

スピードバーにボタンとして追加したいコマンドが入っているメニューを選択します。選択したメニュー上のコマンドが［コマンド(M)］リストボックスに表示されます。

［コマンド(M)］

このリストボックスからコマンドをスピードバーへドラッグアンドドロップします。［コマンド(M)］リストボックスには［分類(C)］リストボックスで選択したメニュー上で使用可能なすべてのコマンドが表示されます。

メニューコマンドの左側にあるアイコンはスピードバー上のボタンの表示方法を示しています。

［デフォルトに戻す(R)］

［デフォルトに戻す(R)］をクリックすると，スピードバーがデフォルトの構成にリセットされます。

［スピードバーの編集］ダイアログボックスが開いている場合，現在スピードバー上にある任意のボタンの削除または再配置ができますが，スピードバー上のボタンはどれもアクティブではありません。


参照01563

スピードバーの構成

スピードバー


スピードバーの構成
スピードバーの構成01564

参照

Delphi のスピードバーは構成が可能です。つまり，次のようにできます。

スピードバーにボタンを追加する

スピードバーからボタンを取り除く

スピードバーのボタンを再配置する

スピードバーを構成するには，前もってスピードバースピードメニューで［設定(C)］を選択し，［スピードバーの編集］ダイアログボックスを開いておかなくてはなりません。

スピードバーにボタンを追加するには

1.	スピードバーとコンポーネントパレットの間にある分割線を右へドラッグすると，スピードバー領域が大きくなります。分割線の上では，カーソルが水平分割カーソルになります。

2.	［分類(C)］リストボックスでメニューを選択します。選択したメニュー上のコマンドが［コマンド(M)］リストボックスに表示されます。

3.	追加したいメニューコマンドを［コマンド(M)］リストボックスからドラッグし，スピードバー上の空きスペースへドロップします。

メモ:	スピードバーのボタンは重ねることができますが，なるべく避けてください。

スピードバーからボタンを取り除くには

ボタンをスピードバーから外へドラッグする。ボタンがあった場所に空きスペースができる

スピードバーのボタンを再配置するには

ボタンを新しい場所へドラッグアンドドロップする


参照01565

スピードバー


隠す(H)
隠す(H)01566

次のスピードメニューで［隠す(H)］を選択すると，そのインターフェース要素が閉じます。

位置合わせパレットスピードメニュー

コンポーネントパレットスピードメニュー

オブジェクトインスペクタスピードメニュー

スピードバースピードメニュー

インターフェース要素を閉じた場合，表示メニューを使えば再度表示できます。


ヒント表示(S)
ヒント表示(S)01567

次のスピードメニューで［ヒント表示(S)］を選択すると，ヘルプヒントの表示が切り替わります。

位置合わせパレットスピードメニュー

コンポーネントパレットスピードメニュー

オブジェクトブラウザスピードメニュー

スピードバースピードメニュー

このコマンドにチェックマークを付けた場合，ヘルプヒントが使用可能になります。


ヘルプ(E)
ヘルプ(E) 01568

次のスピードメニューで［ヘルプ(E)］を選択すると，その要素の使い方に関するヘルプが表示されます。

位置合わせパレットスピードメニュー

コンポーネントパレットスピードメニュー

オブジェクトインスペクタスピードメニュー

スピードバースピードメニュー


コンポーネントパレットスピードメニュー
コンポーネントパレットスピードメニュー01569

参照	スピードメニュー

コンポーネントパレットスピードメニューを使うと，コンポーネントパレットのコンポーネントの編集または再配置ができます。コンポーネントパレットスピードメニューを使ってコンポーネントパレットを隠すこともできます。

設定(C)

ヒント表示(S)

隠す(H)

ヘルプ(E)

コンポーネントパレットスピードメニューを表示するには

スピードバーの任意の場所で右クリックする


参照01570

コンポーネントパレット


設定(C) (コンポーネントパレットスピードメニュー)
設定(C) (コンポーネントパレットスピードメニュー)01571

参照

コンポーネントパレットスピードメニューで［設定(C)］を選択すると，［オプション(O)｜環境(E)］で表示される［環境の設定］ダイアログボックスの［Palette］ページが開きます。

このダイアログボックスを使ってコンポーネントパレットのコンポーネントを再配置できます。


参照01572

コンポーネントパレット

コンポーネントライブラリのカスタマイズ

コンポーネントパレットのカスタマイズ


位置合わせパレットスピードメニュー
位置合わせパレットスピードメニュー01573

参照	スピードメニュー

位置合わせパレットスピードメニューには次のコマンドがあります。

常に前面に(S)

ヒント表示(W)

隠す(H)

ヘルプ(E)


参照01574

位置合わせパレット


常に前面に(S) (位置合わせパレットスピードメニュー)
常に前面に(S) (位置合わせパレットスピードメニュー)01575

位置合わせパレットスピードメニューで［常に前面に(S)］を選択すると，位置合わせパレットが Delphi の他のすべてのウィンドウとダイアログボックスの前にきます。


オブジェクトインスペクタスピードメニュー
オブジェクトインスペクタスピードメニュー01576

参照

オブジェクトインスペクタスピードメニューにはオブジェクトインスペクタを終了したり，ヘルプを表示したり，オブジェクトインスペクタを一番上のウィンドウとして表示するためのコマンドが入っています。

オブジェクトインスペクタスピードメニューには次のコマンドがあります。

1 段下を表示(X)

1 段下を表示しない(C)

常に前面に(S)

隠す(H)

ヘルプ(E)


参照01577

オブジェクトインスペクタ


常に前面に(S) (オブジェクトインスペクタスピードメニュー)
常に前面に(S) (オブジェクトインスペクタスピードメニュー)01578

オブジェクトインスペクタスピードメニューで［常に前面に(S)］を選択すると，オブジェクトインスペクタが Delphi の他のすべてのウィンドウとダイアログボックスの前にきます。


1 段下を表示(X) (オブジェクトインスペクタスピードメニュー)
1 段下を表示(X) (オブジェクトインスペクタスピードメニュー)01579

オブジェクトインスペクタスピードメニューで［1 段下を表示(X)］を選択すると，選択しているプロパティのネストしたプロパティが表示されます。

オブジェクトインスペクタではネストしたプロパティの左側には正符号 (+) が付きます。このようなネストしたプロパティを設定するには，それらを表示する必要があります。

ネストしたプロパティを表示する方法についての詳細はネストしたプロパティの表示を参照してください。


1 段下を表示しない(C) (オブジェクトインスペクタスピードメニュー)
1 段下を表示しない(C) (オブジェクトインスペクタスピードメニュー)01580

オブジェクトインスペクタスピードメニューで［1 段下を表示しない(C)］を選択すると，選択しているプロパティのネストしたプロパティが隠されます。

オブジェクトインスペクタではネストしたプロパティの左側には正符号 (+) が付きます。このようなネストしたプロパティを設定するには，それらを表示する必要があります。

ネストしたプロパティを表示する方法と隠す方法についての詳細はネストしたプロパティの表示を参照してください。


ブレークポイントリストスピードメニュー
ブレークポイントリストスピードメニュー01581

参照	スピードメニュー

ブレークポイントリストスピードメニューはブレークポイントを操作するコマンドへアクセスするために使います。

ブレークポイントリストスピードメニューには次のコマンドがあります。

ブレークポイントの編集(E)	新しいブレークポイントを作成できる［ブレークポイントの編集］ダイアログボックスを開きます。

ブレークポイントの追加(A)	新しいブレークポイントを作成できる［ブレークポイントの編集］ダイアログボックスを開きます。

ブレークポイントの削除(D)	ブレークポイントを削除します。

ブレークポイントの有効化(N)	無効にしたブレークポイントを有効にします。

ブレークポイントの無効化(I)	有効にしたブレークポイントを無効にします。

ソースコードの表示(V)	ソースコード内のブレークポイントをすばやく見つけます。

ソースコードの編集(S)	ソースコード内のブレークポイントをすばやく見つけ，コードエディタをアクティブにします。

すべてのブレークポイントの無効化(L)	有効にしたすべてのブレークポイントを無効にします。

すべてのブレークポイントの有効化(B)	無効にしたすべてのブレークポイントを有効にします。

すべてのブレークポイントの削除(T)	すべてのブレークポイントを削除します。

ブレークポイントリストスピードメニューを表示するには次のどちらかを実行します。

ブレークポイントウィンドウ内の任意の場所で右クリックする

ブレークポイントウィンドウがアクティブのときに Alt+F10 を押す


参照01582

ブレークポイント


ブレークポイントの編集(E) (ブレークポイントリストスピードメニュー)
ブレークポイントの編集(E) (ブレークポイントリストスピードメニュー)01583

参照	ブレークポイントウィンドウスピードメニュー

ブレークポイントリストスピードメニューで［ブレークポイントの編集(E)］を選択すると，新しいブレークポイントを作成できる［ブレークポイントの編集］ダイアログボックスが開きます。

次の方法でも同じことができます。

［実行(R)｜ブレークポイントの追加(B)］を選択する

ブレークポイントリストスピードメニューで［ブレークポイントの追加(A)］を選択する


参照01584

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


ブレークポイントの追加(A) (ブレークポイントリストスピードメニュー)
ブレークポイントの追加(A) (ブレークポイントリストスピードメニュー)01585

参照	ブレークポイントウィンドウスピードメニュー

ブレークポイントリストスピードメニューで［ブレークポイントの追加(A)］を選択すると，新しいブレークポイントを作成できる［ブレークポイントの編集］ダイアログボックスが開きます。

次の方法でも同じことができます。

［実行(R)｜ブレークポイントの追加(B)］を選択する

ブレークポイントウィンドウで既存のブレークポイントの 1 つを右クリックし，ブレークポイントリストスピードメニューで［ブレークポイントの編集(E)］を選択する


参照01586

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


ブレークポイントの削除(D) (ブレークポイントリストスピードメニュー)
ブレークポイントの削除(D) (ブレークポイントリストスピードメニュー)01587

参照	ブレークポイントウィンドウスピードメニュー

ブレークポイントリストスピードメニューで［ブレークポイントの削除(D)］を選択すると，ブレークポイントが削除されます。

ブレークポイント位置にあるコードを調べる必要がなくなった場合，そのブレークポイントをデバッグセッションから削除できます。このコマンドは取り消しができません。


参照01588

すべてのブレークポイントの削除(T) (ブレークポイントリストスピードメニュー)

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


ブレークポイントの有効化(N) (ブレークポイントリストスピードメニュー)
ブレークポイントの有効化(N) (ブレークポイントリストスピードメニュー)01589

参照	ブレークポイントウィンドウスピードメニュー

ブレークポイントリストスピードメニューで［ブレークポイントの有効化(N)］を選択すると，無効にしたブレークポイントが有効になります。

ブレークポイントを無効にすると，そのブレークポイントはプログラムを実行しても無視されます。ブレークポイントを無効にした場合でもそのブレークポイントの設定は定義されたまま残りますが，プログラムはそのブレークポイントで停止しなくなります。デフォルトではブレークポイントは設定された時点で有効になります。

ブレークポイントが一時的に不要になってもその設定を残したい場合，そのブレークポイントを無効にしておくと便利です。


参照01590

すべてのブレークポイントの有効化(B) (ブレークポイントリストスピードメニュー)

ブレークポイントの無効化(I) (ブレークポイントリストスピードメニュー)

すべてのブレークポイントの無効化(L) (ブレークポイントリストスピードメニュー)

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


ブレークポイントの無効化(I) (ブレークポイントリストスピードメニュー)
ブレークポイントの無効化(I) (ブレークポイントリストスピードメニュー)01591

参照	ブレークポイントウィンドウスピードメニュー

ブレークポイントリストスピードメニューで［ブレークポイントの無効化(I)］を選択すると，有効にしたブレークポイントが無効になります。

ブレークポイントを無効にすると，そのブレークポイントはプログラムを実行しても無視されます。ブレークポイントを無効にした場合でもそのブレークポイントの設定は定義されたまま残りますが，プログラムはそのブレークポイントで停止しなくなります。デフォルトではブレークポイントは設定された時点で有効になります。

ブレークポイントが一時的に不要になってもその設定を残したい場合，そのブレークポイントを無効にしておくと便利です。


参照01592

すべてのブレークポイントの無効化(L) (ブレークポイントリストスピードメニュー)

ブレークポイントの有効化(N) (ブレークポイントリストスピードメニュー)

すべてのブレークポイントの有効化(B) (ブレークポイントリストスピードメニュー)

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


ソースコードの表示(V) (ブレークポイントリストスピードメニュー)
ソースコードの表示(V) (ブレークポイントリストスピードメニュー)01593

参照	ブレークポイントウィンドウスピードメニュー

ブレークポイントリストスピードメニューで［ソースコードの表示(V)］を選択すると，ソースコード内のブレークポイントをすばやく見つけられます。

［ソースコードの表示(V)］コマンドを実行すると，ブレークポイントウィンドウで選択したブレークポイントの位置までコードエディタがスクロールします。


参照01594

ソースコードの編集(S) (ブレークポイントリストスピードメニュー)

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


ソースコードの編集(S) (ブレークポイントリストスピードメニュー)
ソースコードの編集(S) (ブレークポイントリストスピードメニュー)01595

参照	ブレークポイントウィンドウスピードメニュー

ブレークポイントリストスピードメニューで［ソースコードの編集(S)］を選択すると，ソースコード内のブレークポイントをすばやく見つけられます。

［ソースコードの編集(S)］コマンドを実行すると，ブレークポイントウィンドウで選択したブレークポイントの位置までコードエディタがスクロールし，コードエディタがアクティブになります。


参照01596

ソースコードの表示(V) (ブレークポイントリストスピードメニュー)

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


すべてのブレークポイントの無効化(L) (ブレークポイントリストスピードメニュー)
すべてのブレークポイントの無効化(L) (ブレークポイントリストスピードメニュー)01597

参照	ブレークポイントウィンドウスピードメニュー

ブレークポイントリストスピードメニューで［すべてのブレークポイントの無効化(L)］を選択すると，有効にしたすべてのブレークポイントが無効になります。

ブレークポイントを無効にすると，そのブレークポイントはプログラムを実行しても無視されます。ブレークポイントを無効にした場合でもそのブレークポイントの設定は定義されたまま残りますが，プログラムはそのブレークポイントで停止しなくなります。デフォルトではブレークポイントは設定された時点で有効になります。

ブレークポイントが一時的に不要になってもその設定を残したい場合，そのブレークポイントを無効にしておくと便利です。


参照01598

ブレークポイントの無効化(I) (ブレークポイントリストスピードメニュー)

ブレークポイントの有効化(N) (ブレークポイントリストスピードメニュー)

すべてのブレークポイントの有効化(B) (ブレークポイントリストスピードメニュー)

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


すべてのブレークポイントの有効化(B) (ブレークポイントリストスピードメニュー)
すべてのブレークポイントの有効化(B) (ブレークポイントリストスピードメニュー)01599

参照	ブレークポイントウィンドウスピードメニュー

［すべてのブレークポイントの有効化(B)］を選択すると，無効にしたすべてのブレークポイントが有効になります。

ブレークポイントを無効にすると，そのブレークポイントはプログラムを実行しても無視されます。ブレークポイントを無効にした場合でもそのブレークポイントの設定は定義されたまま残りますが，プログラムはそのブレークポイントで停止しなくなります。デフォルトではブレークポイントは設定された時点で有効になります。

ブレークポイントが一時的に不要になってもその設定を残したい場合，そのブレークポイントを無効にしておくと便利です。


参照01600

ブレークポイントの有効化(N) (ブレークポイントリストスピードメニュー)

ブレークポイントの無効化(I) (ブレークポイントリストスピードメニュー)

すべてのブレークポイントの無効化(L) (ブレークポイントリストスピードメニュー)

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


すべてのブレークポイントの削除(T) (ブレークポイントリストスピードメニュー)
すべてのブレークポイントの削除(T) (ブレークポイントリストスピードメニュー)01601

参照	ブレークポイントウィンドウスピードメニュー

ブレークポイントリストスピードメニューで［すべてのブレークポイントの削除(T)］を選択すると，すべてのブレークポイントが削除されます。

ブレークポイント位置にあるコードを調べる必要がなくなった場合，そのブレークポイントをデバッグセッションから削除できます。このコマンドは取り消しができません。


参照01602

ブレークポイントの削除(D) (ブレークポイントリストスピードメニュー)

ブレークポイント

ブレークポイントウィンドウ

統合デバッガについて


呼び出し履歴スピードメニュー
呼び出し履歴スピードメニュー01603

参照	スピードメニュー

呼び出し履歴スピードメニューは以前の関数呼び出しを調べるコマンドへアクセスするために使います。

呼び出し履歴リストスピードメニューには次のコマンドがあります。

ソースコードの表示(V)	ソースコード内の関数呼び出しをすばやく見つけます。

ソースコードの編集(S)	ソースコード内の関数呼び出しをすばやく見つけ，コードエディタをアクティブにします。

呼び出し履歴スピードメニューを表示するには

次のどちらかの操作をします。

呼び出し履歴ウィンドウ内の任意の場所で右クリックする

呼び出し履歴ウィンドウがアクティブのときに Alt+F10 を押す


参照01604

呼び出し履歴


ソースコードの表示(V) (呼び出し履歴スピードメニュー)
ソースコードの表示(V) (呼び出し履歴スピードメニュー)01605

参照	呼び出し履歴スピードメニュー

呼び出し履歴スピードメニューで［ソースコードの表示(V)］を選択すると，ソースコード内の関数呼び出しをすばやく見つけられます。

［ソースコードの表示(V)］コマンドを実行すると，呼び出し履歴ウィンドウで選択した関数呼び出しの位置までコードエディタがスクロールします。


参照01606

ソースコードの編集(S) (呼び出し履歴スピードメニュー)

関数呼び出しの検索

統合デバッガについて


ソースコードの編集(S) (呼び出し履歴スピードメニュー)
ソースコードの編集(S) (呼び出し履歴スピードメニュー)01607

参照	呼び出し履歴スピードメニュー

呼び出し履歴スピードメニューで［ソースコードの編集(S)］を選択すると，ソースコード内の関数呼び出しをすばやく見つけられます。

［ソースコードの編集(S)］コマンドを実行すると，呼び出し履歴ウィンドウで選択した関数呼び出しの位置までコードエディタがスクロールし，コードエディタがアクティブになります。


参照01608

ソースコードの表示(V) (呼び出し履歴スピードメニュー)

関数呼び出しの検索

統合デバッガについて


監視式リストスピードメニュー
監視式リストスピードメニュー01609

参照	スピードメニュー

監視式リストスピードメニューは監視ポイントを操作するコマンドへアクセスするために使います。

監視式リストスピードメニューには次のコマンドがあります。

監視式の編集(E)	監視式の作成と変更ができる［監視式の設定］ダイアログボックスを開きます。

監視式の追加(A)	監視式の作成と変更ができる［監視式の設定］ダイアログボックスを開きます。

監視式の有効化(N)	無効にした監視式を有効にします。

監視式の無効化(I)	有効にした監視式を無効にします。

監視式の削除(D)	監視式を削除します。

すべての監視式の無効化(B)	有効にしたすべての監視式を無効にします。

すべての監視式の有効化(L)	無効にしたすべての監視式を有効にします。

すべての監視式の削除(T)	すべての監視式を削除します。

監視式リストスピードメニューを表示するには

次のどちらかの操作をします。

監視式ウィンドウ内の任意の場所で右クリックする

監視式ウィンドウがアクティブのときに Alt+F10 を押す


参照01610

監視式リスト


監視式の編集(E) (監視式リストスピードメニュー)
監視式の編集(E) (監視式リストスピードメニュー)01611

参照	監視式ウィンドウスピードメニュー

監視式リストスピードメニューで［監視式の編集(E)］を選択すると，［監視式の設定］ダイアログボックスが開き，監視式の作成と変更ができます。監視式を作成した後，監視式ウィンドウを使って現在の監視式のリストの表示と管理ができます。

次の方法でも同じことができます。

［実行(R)｜監視式の追加(W)］を選択する

コードエディタスピードメニューで［監視式リストへの追加(A)］を選択する

監視式リストスピードメニューで［監視式の追加(A)］を選択する


参照01612

監視式

監視式ウィンドウ

統合デバッガについて


監視式の追加(A) (監視式リストスピードメニュー)
監視式の追加(A) (監視式リストスピードメニュー)01613

参照	監視式ウィンドウスピードメニュー

監視式リストスピードメニューで［監視式の追加(A)］を選択すると，［監視式の設定］ダイアログボックスが開き，監視式の作成と変更ができます。監視式を作成した後，監視式ウィンドウを使って現在の監視式のリストの表示と管理ができます。

次の方法でも同じことができます。

［実行(R)｜監視式の追加(W)］を選択する

コードエディタスピードメニューで［監視式リストへの追加(A)］を選択する

監視式ウィンドウで既存の監視式の 1 つを右クリックし，監視式リストスピードメニューで［監視式の編集(E)］を選択する


参照01614

監視式

監視式ウィンドウ

統合デバッガについて


監視式の有効化(N) (監視式リストスピードメニュー)
監視式の有効化(N) (監視式リストスピードメニュー)01615

参照	監視式ウィンドウスピードメニュー

監視式リストスピードメニューで［監視式の有効化(N)］を選択すると，無効にした監視式が有効になります。

監視式を無効にすると，その監視式はプログラムを実行しても無視されます。監視式を無効にした場合でもその監視式の設定は定義されたまま残りますが，その監視式は評価されなくなります。

監視式を無効にすると，プログラムをステップ実行するか通常実行したときにデバッガが監視式を監視しないため，デバッガの処理効率が向上します。デフォルトでは監視式は設定された時点で有効になります。


参照01616

すべての監視式の有効化(L) (監視式リストスピードメニュー)

監視式の無効化(I) (監視式リストスピードメニュー)

すべての監視式の無効化(B) (監視式リストスピードメニュー)

監視式

監視式ウィンドウ

統合デバッガについて


監視式の無効化(I) (監視式リストスピードメニュー)
監視式の無効化(I) (監視式リストスピードメニュー)01617

参照	監視式ウィンドウスピードメニュー

監視式リストスピードメニューで［監視式の無効化(I)］を選択すると，有効にした監視式が無効になります。

監視式を無効にすると，その監視式はプログラムを実行しても無視されます。監視式を無効にした場合でもその監視式の設定は定義されたまま残りますが，その監視式は評価されなくなります。

監視式を無効にすると，プログラムをステップ実行するか通常実行したときにデバッガが監視式を監視しないため，デバッガの処理効率が向上します。デフォルトでは監視式は設定された時点で有効になります。


参照01618

すべての監視式の無効化(B) (監視式リストスピードメニュー)

監視式の有効化(N) (監視式リストスピードメニュー)

すべての監視式の有効化(L) (監視式リストスピードメニュー)

監視式

監視式ウィンドウ

統合デバッガについて


監視式の削除(D) (監視式リストスピードメニュー)
監視式の削除(D) (監視式リストスピードメニュー)01619

参照	監視式ウィンドウスピードメニュー

監視式リストスピードメニューで［監視式の削除(D)］を選択すると，監視式が削除されます。

式の値を調べる必要がなくなった場合，その監視式をデバッグセッションから削除できます。このコマンドは取り消しができません。


参照01620

すべての監視式の削除(T) (監視式リストスピードメニュー)

監視式

監視式ウィンドウ

統合デバッガについて


すべての監視式の有効化(L) (監視式リストスピードメニュー)
すべての監視式の有効化(L) (監視式リストスピードメニュー)01621

参照	監視式ウィンドウスピードメニュー

監視式リストスピードメニューで［すべての監視式の有効化(L)］を選択すると，無効にしたすべての監視式が有効になります。

監視式を無効にすると，その監視式はプログラムを実行しても無視されます。監視式を無効にした場合でもその監視式の設定は定義されたまま残りますが，その監視式は評価されなくなります。

監視式を無効にすると，プログラムをステップ実行するか通常実行したときにデバッガが監視式を監視しないため，デバッガの処理効率が向上します。デフォルトでは監視式は設定された時点で有効になります。


参照01622

監視式の有効化(N) (監視式リストスピードメニュー)

監視式の無効化(I) (監視式リストスピードメニュー)

すべての監視式の無効化(B) (監視式リストスピードメニュー)

監視式

監視式ウィンドウ

統合デバッガについて


すべての監視式の無効化(B) (監視式リストスピードメニュー)
すべての監視式の無効化(B) (監視式リストスピードメニュー)01623

参照	監視式ウィンドウスピードメニュー

監視式リストスピードメニューで［すべての監視式の無効化(B)］を選択すると，有効にしたすべての監視式が無効になります。

監視式を無効にすると，その監視式はプログラムを実行しても無視されます。監視式を無効にした場合でもその監視式の設定は定義されたまま残りますが，その監視式は評価されなくなります。

監視式を無効にすると，プログラムをステップ実行するか通常実行したときにデバッガが監視式を監視しないため，デバッガの処理効率が向上します。デフォルトでは監視式は設定された時点で有効になります。


参照01624

監視式の無効化(I) (監視式リストスピードメニュー)

監視式の有効化(N) (監視式リストスピードメニュー)

すべての監視式の有効化(L) (監視式リストスピードメニュー)

監視式

監視式ウィンドウ

統合デバッガについて


すべての監視式の削除(T) (監視式リストスピードメニュー)
すべての監視式の削除(T) (監視式リストスピードメニュー)01625

参照	監視式ウィンドウスピードメニュー

監視式リストスピードメニューで［すべての監視式の削除(T)］を選択すると，すべての監視式が削除されます。

式の値を調べる必要がなくなった場合，その監視式をデバッグセッションから削除できます。このコマンドは取り消しができません。


参照01626

監視式の削除(D) (監視式リストスピードメニュー)

監視式

監視式ウィンドウ

統合デバッガについて


コンパイルメニュー
プロジェクトメニュー01627

参照

プロジェクトメニューはアプリケーションをコンパイルするか構築するために使います。プロジェクトを開いておく必要があります。

プロジェクトメニューには次のコマンドがあります。

Add to Project	プロジェクトにファイルを追加します。

Remove from Project	プロジェクトからファイルを削除します。

Add To Repository	Object Repository に容易にプロジェクトを追加できます。

コンパイル(C)	前回のコンパイル以後に変更したソースコードをコンパイルします。

再構築(B)	ソースを変更したかどうかに関係なく，プロジェクト内のすべてをコンパイルします。

構文チェック(S)	プロジェクトをコンパイルしますが，リンクしません。

情報(I)	プロジェクトの構築情報と構築状態をすべて表示します。

Options	［プロジェクトの設定］ダイアログボックスを開きます。


参照01628

プロジェクトのコンパイル，構築，実行


ファイル(F)｜ファイルの追加(D)
ファイル(F)｜プロジェクトに追加(D) 01629

参照

［ファイル(F)｜プロジェクトに追加(D)］を選択すると，［プロジェクトに追加］ダイアログボックスが開きます。

［プロジェクトに追加］ダイアログボックス

［プロジェクトに追加］ダイアログボックスは既存のユニットとそれに関連したフォームを Delphi プロジェクトへ追加するために使います。ユニットをプロジェクトへ追加すると，そのユニットは自動的にプロジェクトファイルの uses 節へ追加されます。

ダイアログボックスオプション

［ファイル名(N)］

ロードしたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイルの種類はソースファイル (.PAS) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


参照01630

プロジェクトへのユニットとフォームの追加

ファイル(F)｜プロジェクトから削除(J)

プロジェクトでのユニットとフォームの表示


ファイル(F)｜ファイルの削除(M)
ファイル(F)｜プロジェクトから削除(J)01631

参照

［ファイル(F)｜プロジェクトから削除(J)］を選択すると，［プロジェクトから削除］ダイアログボックスが開きます。

［プロジェクトから削除］ダイアログボックス

このダイアログボックスは現在のプロジェクトから取り除くモジュールを選択するために使います。［OK］をクリックすると選択したモジュールが現在のプロジェクトファイルの uses 節から取り除かれますが，ファイルがディスクから削除されるわけではありません。そのユニットへの参照を追加してある場合は，手作業でそれらの参照を取り除かなくてはなりません。

その編集セッションで変更したファイルを取り除こうとした場合，そのフォームまたはユニットを別のプロジェクトで使う場合に備えて変更を保存するよう求められます。ファイルに変更を加えていない場合は，そのファイルがプロジェクトから取り除かれます。

警告:	ユニットファイルを他のファイル管理プログラムを使って削除したり，DOS プロンプトから直接削除したりしないでください。エラーの原因になります。


参照01632

ファイル(F)｜プロジェクトに追加(D)

プロジェクトからのユニットとフォームの削除

プロジェクトでのユニットとフォームの表示


リポジトリに追加(T)
リポジトリに追加(T)01633

参照

［プロジェクト(P)｜リポジトリに追加(T)］を選択すると［リポジトリに追加］ダイアログボックスが開きます。このコマンドを使ってプロジェクトをオブジェクトリポジトリに追加します。

フォームやプロジェクトを再利用するためにオブジェクトリポジトリに追加することができます。この機能は，複数のプロジェクトを開発する時など共通した外見や動作を用意しなければならない状況で役に立ちます。


参照01634

プロジェクトテンプレートの使い方


コンパイル(C)｜コンパイル(C)
プロジェクト(P)｜コンパイル(C)01635

参照

［プロジェクト(P)｜コンパイル(C)］を選択すると，現在のプロジェクトの中にあって前回の構築以後に変更したすべてのファイルが新しい実行可能ファイル (.EXE) にコンパイルされます。

このコマンドは［プロジェクト(PC)｜再構築(B)］と同じですが，変更したファイルだけを構築する点が異なります。［再構築(B)］は変更があるかどうかに関係なく，すべてのファイルを再構築します。

［ツール(T)｜オプション(O) ］ダイアログボックスの［Preferences］ページで［コンパイル状況の表示(C)］を選択した場合，［コンパイル］ダイアログボックスにコンパイルの経過と結果に関する情報が表示されます。

アプリケーションが正常にコンパイルされた場合，［OK］を選択すると［コンパイル］ダイアログボックスが閉じます。

コンパイラがエラーを検出した場合，コードエディタのステータスラインにエラーが表示され，ソースコードのエラー行にカーソルが移動します。

コンパイラは次の規則に従って .EXE ファイルを構築します。

プロジェクトファイル (.DPR) は常に再コンパイルされる

ユニットのソースコードを前回のコンパイル以降に変更した場合，そのユニットはコンパイルされる。ユニットがコンパイルされた場合，そのユニットに .DCU 拡張子を付けたファイルが作成される

ユニットのソースコードが見つからない場合，そのユニットは再コンパイルされない

ユニットのインターフェース部を変更した場合，変更したユニットに依存する他のすべてのユニットが再コンパイルされる

ユニットが .OBJ ファイル (外部ルーチン) にリンクしており，その .OBJ ファイルを変更した場合，そのユニットは再コンパイルされる

ユニットにインクルードファイルが含まれており，そのインクルードファイルを変更した場合，そのユニットは再コンパイルされる

コードの中に条件指令と定義済みシンボルを使った場合，コードの一部分だけを選択してコンパイルできます。


コンパイル(C)｜再構築(B)
プロジェクト(P)｜再構築(B)01636

参照

［プロジェクト(P)｜再構築(B)］を選択すると，アプリケーションのすべてのコンポーネントが変更の有無に関係なく再構築されます。

このコマンドは［プロジェクト(P)｜コンパイル(C)］と同じですが，すべてを構築する点が異なります。［プロジェクト(P)｜コンパイル(C)］は変更されたファイルだけを再構築します。

［プロジェクト(P)｜再構築(B)］はプロジェクトファイルに含まれているすべてのファイルを再コンパイルします。


コンパイル(C)｜構文チェック(S)
コンパイル(C)｜構文チェック(S)01637

［プロジェクト(P)｜構文チェック(S)］を選択すると，プロジェクトのモジュールがコンパイルされますが，リンクはされません。これはコンパイルエラーがあるかどうかの検査に使えます。

プロジェクトを開かずにこのコマンドを選択した場合，現在のモジュールだけがコンパイルされます。


コンパイル(C)｜情報(I)
プロジェクト(P)｜情報(I)01638

［プロジェクト(P)｜情報(I)］を選択すると，［情報］ダイアログボックスが開きます。

［情報］ダイアログボックス

このダイアログボックスはプロジェクトのプログラムコンパイル情報とコンパイル状態を表示するために使います。

［プログラム］

［プログラム］パネルにはプロジェクトに関する情報が表示されます。

オプション	表示される内容

コンパイル対象	コンパイルした合計行数

コード	実行可能コードまたは DLL の合計サイズ (デバッグ情報を除く)

データ	グローバル変数を格納するために必要なメモリ

Initial Stack Size	ローカル変数を格納するために必要なメモリ

ローカルヒープ	変数の動的割り当て用に予約されるメモリ

［ステータス］

［ステータス］パネルにはコンパイルが正しく終了したかどうかが表示されます。


オプション(O)｜プロジェクト(P)
プロジェクト(P) ｜ オプション(O)01639

［プロジェクト(P) ｜ オプション(O) ］を選択すると［プロジェクトの設定］ダイアログボックスが表示されます。このダイアログボックスの各ページを使ってプロジェクト用にフォーム，アプリケーション，コンパイラ，リンカのオプションを指定し，プロジェクトディレクトリを管理します。

［プロジェクトの設定］ダイアログボックスには次のページがあります。

Forms

Application

Compiler

Linker

Directories/Conditionals

ダイアログボックスのページを変更するには

使いたいページを表すタブをダイアログボックス下部でクリックする

［デフォルト］

［デフォルト］にチェックマークを付けると現在のプロジェクトオプションが保存され，新しいプロジェクトを作成するたびにそれらのオプションが使われます。

現在のプロジェクトオプションをデフォルトとして保存するには

［デフォルト］にチェックマークを付けて［OK］をクリックする


Forms (オプション(O)｜プロジェクト(P))
Forms (プロジェクト(P) ｜オプション(O))01640

［プロジェクトの設定］ダイアログボックスの［Forms］ページは，アプリケーションのメインフォームを選択したり，使用可能などのフォームをどの順序で自動作成するかを選択するために使います。

ダイアログボックスオプション

［メインフォーム(M)］

ユーザーがアプリケーションを起動したときに表示されるフォームを表示します。ドロップダウンリストを使って，プロジェクトのメインフォームにするフォームを選択します。

メインフォームは［自動作成の対象(A)］リストボックスに一覧表示される最初のフォームです。

［自動作成の対象(A)］

プロジェクトファイルのスタートアップコードへ自動的に追加され，実行時に作成されるフォームを一覧表示します。フォームの作成順はフォームを新しい位置までドラッグアンドドロップすれば変更できます。

複数のフォームを選択するには，Shift キーを押しながらフォーム名を選択します。

［選択可能なフォーム(F)］

アプリケーションで使われる自動作成されないフォームを一覧表示します。そのようなフォームのインスタンスを作成したい場合は，そのフォームの Create メソッドを呼び出さなくてはなりません。

矢印ボタン

矢印ボタンは 1 つのリストボックスから一部のファイルまたはすべてのファイルを別のリストボックスへ移動するために使います。

1 つのリストボックスからすべてのファイルを別のリストボックスへ移動するには

二重矢印のボタン (［>>］または［<<］) をクリックする

ファイルを 1 つのリストボックスから別のリストボックスへドラッグアンドドロップする

選択したファイルだけを 1 つのリストボックスから別のリストボックスへ移動するには

一重矢印のボタン (［>］または［<］) をクリックする

ファイルを 1 つのリストボックスから別のリストボックスへドラッグアンドドロップする

［デフォルト］

［デフォルト］にチェックマークを付けると現在のプロジェクトオプションが保存され，新しいプロジェクトを作成するたびにそれらのオプションが使われます。


Application (オプション(O)｜プロジェクト(P))
Application (プロジェクト(P) ｜オプション(O))01641

参照

［プロジェクトの設定］ダイアログボックスの［Application］ページはアプリケーションのタイトル，ヘルプファイル，アイコンを指定するために使います。

ダイアログボックスオプション

［タイトル(T)］

アプリケーションをアイコン化したときにアイコンの下に表示されるタイトルを指定します。文字の限度は 255 文字です。

［ヘルプファイル(F)］

アプリケーションからヘルプを呼び出したときに使われるヘルプファイル (.HLP) の名前を指定します。このヘルプファイル名は WinHelp 関数呼び出しへ渡されます。

ヘルプファイル名が不確かな場合は，［参照(B)］ボタンをクリックすれば［アプリケーションヘルプファイル］ダイアログボックスを表示できます。

［アイコン(I)］

プログラムマネージャの中やアイコン化したときにアプリケーションを表すアイコンファイル (.ICO) を表示します。

［デフォルト］

［デフォルト］にチェックマークを付けると現在のプロジェクトオプションが保存され，新しいプロジェクトを作成するたびにそれらのオプションが使われます。

アイコンを変更するには

［アイコンの読み込み(L)］をクリックして［アプリケーションアイコン］ダイアログボックスを表示し，アイコンを選択できる


参照01642

Windows ヘルプの作成

プロジェクトのメインフォームの指定

プロジェクトのヘルプとアイコンのファイルの指定

［アプリケーションアイコン］ダイアログボックス


アプリケーションアイコンダイアログボックス
アプリケーションアイコンダイアログボックス01643

［アプリケーションアイコン］ダイアログボックスはプログラムマネージャの中やアイコン化したときにアプリケーションを表すアイコンを選択するために使います。

このダイアログボックスを表示するには

［プロジェクトの設定］ダイアログボックスの［Application］ページで［アイコンの読み込み(L)］をクリックする

ダイアログボックスオプション

［ファイル名(N)］

使いたいファイルの名前を入力するか，ファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するすべてのファイルを表示します。

［ファイルの種類(T)］

使いたいファイルの種類を選択します。デフォルトのファイルの種類はアイコン (.ICO) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


アプリケーションヘルプファイルダイアログボックス
アプリケーションヘルプファイルダイアログボックス01644

［アプリケーションヘルプファイル］ダイアログボックスはアプリケーションのヘルプファイルを選択するために使います。ここに指定したヘルプファイルは［プロジェクトの設定］ダイアログボックスの［Application］ページにあるヘルプファイル編集ボックスに入ります。

このダイアログボックスを表示するには

［プロジェクトの設定］ダイアログボックスの［Application］ページで［参照(B)］をクリックする

ダイアログボックスオプション

［ファイル名(N)］

使いたいファイルの名前を入力するか，ファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するすべてのファイルを表示します。

［ファイルの種類(T)］

使いたいファイルの種類を選択します。デフォルトのファイルの種類はヘルプファイル (.HLP) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

現在アクティブなドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


プロジェクト(P)｜オプション(O) のコンパイラページ
コンパイラ (プロジェクト(P)｜オプション(O))01645

参照

［プロジェクトの設定］ダイアログボックスの［コンパイラ］ページを使って，プログラムをどのようにコンパイルするかについてのオプションを設定します。このページのオプションは，プログラムコード内でも直接設定できるスイッチ指令に対応します。

オプションを選択するのは，スイッチ指令を正 (+) 状態に設定することと同じです。

コード生成	効果

最適化をおこなう	コンパイラの最適化を有効にする。{$O} に対応する

構造体を境界に配置	 構造体の要素を 32 ビット境界に配置する。{$A} に対応する

Pentium FDIV 対応(U)	問題のある浮動小数点演算を回避するコードを生成する。{$U} に対応する

スタックフレームの生成(K)	すべての手続きと関数に対してスタックフレームを生成する。{$W} に対応する

実行時エラー	効果

範囲チェック(R)	配列と文字列の添字が範囲内にあるかどうかを検査する。 {$R} に対応する

スタックチェック(S)	スタック上にローカル変数を確保するスペースがあるかどうかを検査する。{$S} に対応する

I/O チェック(I)	入出力呼び出しのたびに入出力エラーがあったかどうかを検査する。{$I} に対応する

オーバーフローチェック(Q)	整数演算のオーバーフローを検査する。{$Q} に対応する

構文オプション	効果

VAR 文字列の厳密処理(V) 	文字列パラメータのエラーチェックを設定する。{$V} に対応する (［オープンパラメータ(P)］オプションを選択した場合，このオプションは適用されない))

完全な論理評価(B) 	論理型を返す式の各部分を，オペランドの結果が偽として評価されるかどうかに関係なくすべて評価する。{$B} に対応する

拡張構文(X) 	関数呼び出しを手続きとして定義できるようにし，関数の結果を無視できるようにする。PChar 型のサポートも可能にする。{$X} に対応する

型付き @ 演算子(T) 	@ 演算子が戻すポインタの型を制御する。{$T} に対応する

オープンパラメータ(P) 	手続きと関数の宣言の中のオープン文字列パラメータを使用可能にする。{$P} に対応する。一般に，オープンパラメータはより安全で効率もよい

長い文字列を使う(H)	新しいガーベージコレクション文字列を有効にする。これを有効にすると string キーワードは新しい AnsiString 型に対応する。有効にしない場合は string キーワードは ShortString 型に対応する。{$H} に対応する

型付き定数への代入(J)	これを有効にすると Delphi 1.0 との下位互換性が  得られる。有効にするとコンパイラは型付き定数への代入を許可する。{$J} に対応する

メッセージ	効果

ヒントを表示(N)	コンパイラにヒントメッセージを生成させる

警告を表示(W)	コンパイラに警告メッセージを生成させる

デバッグ	効果

デバッグ情報(D) 	ユニットファイル (.DCU) の中にデバッグ情報を挿入する。{$D} に対応する

ローカルシンボル(L)	ローカルシンボル情報を生成する。{$L} に対応する

シンボル情報(Y)	シンボル情報を生成する。{$Y} に対応する

［デフォルト］チェックボックス

［デフォルト］をチェックすると現在のプロジェクトオプションが保存され，新しいプロジェクトを作成するたびにそれらのオプションが使われます。


参照01646

コンパイラ指令


プロジェクト(P)｜オプション(O) のリンカページ
リンカ (プロジェクト(P)｜オプション(O))01647

参照

［プロジェクトの設定］ダイアログボックスの［リンカ］ページを使ってプログラムファイルをどのようにリンクするかを指定します。

［マップファイル］オプション

マップファイルを生成する場合はマップファイルの種類を選択します。マップファイルは［ディレクトリ/条件］ページで指定した［出力ディレクトリ］に配置され，.MAP という拡張子を持ちます。

オプション	効果

なし(F)	マップファイルを生成しない

セグメント表示のみ(S)	リンカはセグメントのリスト，プログラム開始アドレス，リンク中に生成された警告メッセージやエラーメッセージが入ったマップファイルを生成する

パブリックラベルを含む(P)	リンカはセグメントのリスト，プログラム開始アドレス，リンク中に生成された警告メッセージやエラーメッセージ，アルファベット順にソートしたパブリックシンボルのリストが入ったマップファイルを生成する

詳細表示(D)	リンカはセグメントのリスト，プログラム開始アドレス，リンク中に生成された警告メッセージやエラーメッセージ，アルファベット順にソートしたパブリックシンボルのリスト，追加の詳細セグメントマップが入ったマップファイルを生成する。詳細セグメントマップにはセグメントアドレス，バイト数で表した長さ，セグメント名，グループ，モジュール情報が含まれる

［リンク結果］オプション

リンカの出力を指定します。

オプション	効果

DCU ファイルを

作成(U)	Delphi 標準の DCU 形式ファイルを出力する

OBJ ファイルを作成(O)	バイナリオブジェクトファイル (OBJ) を出力する

［EXE/DLL オプション］オプション

チェックボックス	効果

コンソールアプリケーションの作成(C)	コンソールモードアプリケーションであることを示すフラグをアプリケーションの .EXE ファイル内に設定する

TDW デバッグ情報を含む(T)	実行可能ファイルの中にデバッグ情報を入れる。生成される .EXE ファイルは大きくなるが，必要メモリや処理効率に影響はない

Turbo Debugger for Windows を使ってデバッグする場合は，このオプションを選択しなくてはならない

［メモリサイズ］オプション

この編集ボックスを使って，コンパイル後の実行形式ファイルのスタックの最小サイズと最大サイズおよびヒープイメージベースを指定します。メモリサイズの設定はソースコード内で $M コンパイラ指令を使って行うこともできます。

オプション	指定内容

最小スタックサイズ(N)	起動時に必ず確保されるスタックのサイズ

最大スタックサイズ(X)	スタックの総予約サイズ

イメージベース(I)	コンパイル済みイメージのロードアドレスを指定する。通常この値は DLL をコンパイルするときにだけ変更する

［デフォルト］

［デフォルト］をチェックすると現在のプロジェクトオプションが保存され，新しいプロジェクトを作成するたびにそれらのオプションが使われます。


参照01648

コンパイラ指令


プロジェクト(P)｜オプション(O) のディレクトリ/条件ページ
ディレクトリ/条件(プロジェクト(P)｜オプション(O))01649

参照

参照

［プロジェクトの設定］ダイアログボックスの［ディレクトリ/条件］ページを使って，プログラムのコンパイル，リンク，配布に必要なファイルの位置を指定します。編集ボックスの隣にある下矢印をクリックすると，前に入力したディレクトリまたはシンボルのリストから選択できます。

ダイアログボックスオプション

［出力ディレクトリ(O)］

コンパイラがコンパイル後のユニットと実行可能ファイルを入れる場所です。

［検索パス(S)］

ソースファイルが位置する場所です。コンパイラの検索パスまたはライブラリ検索パスにあるファイルだけが構築に使われます。検索パスにないファイルを使ってプロジェクトを構築しようとした場合はコンパイルエラーが起きます。

完全なパス名を記述しなければなりません。

［条件定義(Ｃ)］

条件コンパイラ指令で参照されるシンボルです。複数の定義をセミコロンで区切って指定できます。

［ユニットの別名(A)］

下位互換性を保つために定義されています。名前が変更されたユニット，あるいは 1 つのユニットに統合されたユニットのためのエリアスを指定します。指定の形式は <旧ユニット>=<新ユニット> です。復数のエリアスをセミコロンで区切って指定できます。デフォルト値は WinTypes=Windows;WinProcs=Windows です。

［デフォルト］

［デフォルト］にチェックマークを付けると現在のプロジェクトオプションが保存され，新しいプロジェクトを作成するたびにそれらのオプションが使われます。

検索パスの入力ガイドライン

［検索パス(S)］編集ボックスにディレクトリ名を入力する場合は次のガイドラインに従ってください。

複数のディレクトリパス名はセミコロン (;) で区切る

セミコロンの前後にホワイトスペースを付けても付けなくてもよい

最大で (ホワイトスペースを含め) 127 文字まで使える (将来変更されるかもしれません...)

相対パス名と絶対パス名が使え，現在のドライブ以外のドライブから見た相対的なパス名も使える


参照01650

プロジェクトのコンパイル，構築，実行

プロジェクトの管理


実行メニュー
実行メニュー01651

実行メニューには Delphi の中からプログラムをデバッグするためのコマンドが入っています。次のコマンドが統合デバッガの中心機能を形成します。

実行(R)	アプリケーションをコンパイルして実行します。

実行時引数(P)	アプリケーションの起動時パラメータを指定します。

ステップ実行(S)	手続き呼び出しを 1 つの単位としてプログラムを一度に 1 行ずつステップ実行します。

トレース実行(T)	手続きをトレースして各行の実行を追跡し，プログラムを一度に 1 行ずつ実行します。

次の行まで実行(N)	プログラムの実行を続け，次の表れる実行可能な行で停止します。

カーソル位置まで実行(C)	ロードされているプログラムをコードエディタウィンドウ内のカーソル位置まで実行します。

実行中の行を表示(H)	カーソルを編集ウィンドウ内の実行ポイントに位置付けます。

プログラムの停止(G)	実行中のプログラムを一時停止します。

プログラムの終了(E)	現在のプログラムの実行を終了し，メモリを解放します。

監視式の追加(W)	監視式の作成と変更ができる［監視式の設定］ダイアログボックスを開きます。

ブレークポイントの追加(B)	ブレークポイントの作成と変更ができる［ブレークポイントの編集］ダイアログボックスを開きます。

評価/変更(V)	既存の式の値を評価したり変更したりできる［評価/変更］ダイアログボックスを開きます。

メモ:	統合デバッガのコマンドは，作業対象のプロジェクトに関するシンボリックデバッグ情報を生成した時点でアクセス可能になります。


実行(R)｜引数(P)
実行(R)｜実行(R)01652

参照

［実行(R)｜実行(R)］を選択すると，［実行時の引数］ダイアログボックスで指定した起動時パラメータを使ってアプリケーションがコンパイルされ実行されます。

前回のコンパイル後にソースコードを変更した場合，コンパイラは変更されたモジュールだけを再コンパイルし，アプリケーションを再リンクします。

コンパイラはエラーを検出すると［エラー］ダイアログボックスを表示します。［OK］を選択するとダイアログボックスが閉じ，コードエディタによってエラーのあるコード行にカーソルが位置付けられます。

コンパイラは次の規則に従って .EXE ファイルを構築します。

プロジェクトファイル (.DPR) は常に再コンパイルされる

ユニットのソースコードを前回のコンパイル以降に変更した場合，そのユニットはコンパイルされる。ユニットがコンパイルされた場合，そのユニットに .DCU 拡張子を付けたファイルが作成される

ユニットのソースコードが見つからない場合，そのユニットは再コンパイルされない

ユニットのインターフェース部を変更した場合，変更したユニットに依存する他のすべてのユニットが再コンパイルされる

ユニットが .OBJ ファイル (外部ルーチン) にリンクしており，その .OBJ ファイルを変更した場合，そのユニットは再コンパイルされる

ユニットにインクルードファイルが含まれており，そのインクルードファイルを変更した場合，そのユニットは再コンパイルされる


参照01653

Delphi のデバッガ

プログラム実行の制御

再構築用コマンドのキーボードショートカット

プロジェクトのコンパイル，構築，実行


Run|Parameters
実行(R)｜引数(P)01654

参照

［実行(R)｜引数(P)］を選択すると，［実行時の引数］ダイアログボックスが開きます。

［実行時の引数］ダイアログボックス

このダイアログボックスはプログラムマネージャの［アイコン(F)｜ファイル名を指定して実行(R)］メニューでアプリケーションを実行した場合のように，アプリケーション実行時にコマンドラインパラメータをアプリケーションへ渡すために使います。

これらのパラメータは ParamCount 関数と ParamStr() 関数で使えます。

ダイアログボックスオプション

［実行時の引数(R)］

アプリケーションの起動時にアプリケーションへ渡したいパラメータを入力するか，ドロップダウンボタンを使って前に指定したパラメータの履歴から選択します。パラメータはアプリケーションを起動したときにだけ効力を持ちます。この編集ボックスにアプリケーション名を入力しないでください。


参照01655

Delphi のデバッガ


実行(R)｜ステップ実行(S)
実行(R)｜ステップ実行(S)01656

参照

［実行(R)｜ステップ実行(S)］を選択すると，手続き呼び出しを 1 つの単位としてプログラムを一度に 1 行ずつステップ実行します。

［ステップ実行(S)］コマンドは実行ポイントが強調表示しているプログラム文を実行し，実行ポイントを次の文まで進めます。

実行ポイントが関数呼び出し上にあるときに［ステップ実行(S)］コマンドを実行した場合，デバッガはその関数をフルスピードで実行した後，実行ポイントを関数呼び出しの直後の文に位置付ける

実行ポイントがルーチンの end 文にあるときに［ステップ実行(S)］を実行した場合，ルーチンはそのルーチンの呼び出しから戻り，実行ポイントはルーチン呼び出しの直後の文に位置付けられる

デバッガは 1 つのテキスト行にある複数のプログラム文を単一のコード行とみなします。単一のテキスト行に入っている複数の文を個別にデバッグすることはできません。デバッガは複数のテキスト行にまたがった単一の文を単一のコード行とみなすこともできません。

［実行(R)｜ステップ実行(S)］でデバッグセッションを開始した場合，デフォルトでは実行ポイントはデバッグ情報が入っている最初のコード行 (通常，これはユーザーが書いたコードが入っている位置) まで移動します。Delphi が自動生成したスタートアップコードをステップ実行するには，スタートアップコードのデバッグを参照してください。

手続きはステップ実行以外に，各行の実行を追跡しながらトレースすることもできます。手続きの各行を実行するには，［実行(R)｜トレース実行(T)］を使います。

次の方法でもステップ実行ができます。

［ステップ］ボタンを選択する


参照01657

Delphi のデバッガ

プログラム実行の制御

デバッグ用コマンドのキーボードショートカット


実行(R)｜トレース実行(T)
実行(R)｜トレース実行(T)01658

参照

［実行(R)｜トレース実行(T)］を選択すると，手続きをトレースして各行の実行を追跡し，プログラムを一度に 1 行ずつ実行します。

［トレース実行(T)］コマンドは実行ポイントが強調表示しているプログラム文を実行し，実行ポイントを次の文まで進めます。

実行ポイントが関数呼び出し上にあるときに［トレース実行(T)］コマンドを実行した場合，デバッガはその関数をトレースし，実行ポイントを関数の最初の文に位置付ける

実行ポイントがルーチンの end 文にあるときに［ステップ実行(S)］を実行した場合，ルーチンはそのルーチンの呼び出しから戻り，実行ポイントはルーチン呼び出しの直後の文に位置付けられる

ライブラリ関数など，デバッグ情報がない関数呼び出し上に実行ポイントがある場合，デバッガはその関数をフルスピードで実行した後，実行ポイントを関数呼び出しの直後の文に位置付ける

［実行(R)｜トレース実行(T)］でデバッグセッションを開始した場合，デフォルトでは実行ポイントはデバッグ情報が入っている最初のコード行 (通常，これはユーザーが書いたコードが入っている位置) まで移動します。Delphi が自動生成したスタートアップコードをトレースするには，スタートアップコードのデバッグを参照してください。

手続きはトレース以外に，ステップ実行し個々の手続きを 1 つの単位として実行することもできます。手続きを 1 つの単位として実行するには，［実行(R)｜ステップ実行(S)］を使います。

次の方法でもトレースができます。

［トレース］ボタンを選択する


参照01659

Delphi のデバッガ

プログラム実行の制御

デバッグ用コマンドのキーボードショートカット


次の行まで実行(N)
実行(R)｜次の行まで実行(N)01660

参照

このコマンドを使うと，制御の流れに関係なくアプリケーションの次のソース行で停止します。たとえば，コールバック関数をとる Windows API 呼び出しのところで停止しているときにこのコマンドを選択すると，制御は次のソース行 (この場合にはコールバック関数) に戻ります。


参照01661

Delphi のデバッガ

プログラム実行の制御

デバッグ用コマンドのキーボードショートカット


実行(R)｜カーソル位置まで実行(C)
実行(R)｜カーソル位置まで実行(C)01662

参照

［実行(R)｜カーソル位置まで実行(C)］を選択すると，ロードしたプログラムがコードエディタウィンドウ内のカーソル位置まで実行されます。

カーソル位置まで実行するとプログラムはフルスピードで実行された後に一時停止し，実行ポイントはカーソルのあるコード行に位置付けられます。

［カーソル位置まで実行(C)］を使うと，問題がありそうな位置の前までプログラムを実行して一時停止できます。その後，［実行(R)｜ステップ実行(S)］または［実行(R)｜トレース実行(T)］を使って個々のコード行の実行を制御できます。

次の方法でもカーソル位置までの実行ができます。

コードエディタスピードメニューで［カーソル位置まで実行(R)］を選択する


参照01663

Delphi のデバッガ

プログラム実行の制御

デバッグ用コマンドのキーボードショートカット


実行(R)｜実行中の行を表示(H)
実行(R)｜実行中の行を表示(H)01664

参照

［実行(R)｜実行中の行を表示(H)］を選択すると，カーソルが編集ウィンドウ内の実行ポイントに位置付けられます。実行ポイントが入った編集ウィンドウが閉じている場合は編集ウィンドウが開き，実行ポイントの位置にあるソースコードが表示されます。


参照01665

Delphi のデバッガ

プログラム実行の制御

デバッグ用コマンドのキーボードショートカット


実行(R)｜プログラムの停止(G)
実行(R)｜プログラムの停止(G)01666

参照

［実行(R)｜プログラムの停止(G)］を選択すると，実行中のプログラムが一時停止します。

デバッガはプログラムの実行を一時停止し，実行ポイントを次に実行するコード行に位置付けます。この位置でプログラムの状態を調べた後，実行，ステップ実行，トレースのいずれかによってデバッグを続行できます。

プログラムに制御がありデバッガへ戻らない場合，たとえばプログラムが無限ループを実行中の場合は，Ctrl+Alt+Sys Req (または Ctrl+GRPH+STOP) を押すとプログラムが停止します。このコマンドは Windows カーネルコードの実行中は機能しないため，プログラムを実際に停止させるまでにこのキーの組み合わせを何度も押さなくてはならない場合があります。

デバッガで実行中のプログラムを一時停止できるだけでなく，プログラムを停止してメモリを解放できます。プログラムを停止してメモリを解放するには，［実行(R)｜プログラムの終了(E)］を使います。


参照01667

Delphi のデバッガ

プログラム実行の制御

デバッグ用コマンドのキーボードショートカット


実行(R)｜プログラムの終了(E)
実行(R)｜プログラムの終了(E)01668

参照

［実行(R)｜プログラムの終了(E)］を選択すると現在のプログラムの実行が終了し，メモリが解放されます。

［プログラムの終了(E)］はステップ実行でバグ位置を通過した場合や変数構造またはデータ構造が不良値によって壊れた場合などにプログラムを最初から起動し直すために使います。

プログラムをリセットした場合，次のようになります。

開いているすべてのプログラムファイルが閉じる

VCL 呼び出しによって割り当てられたリソースが解放される

すべての変数設定がクリアされる

プログラムをリセットしても設定済みのブレークポイントや監視式は削除されないため，デバッグセッションを簡単に再開できます。

Windows リソース

プログラムをリセットしても，必ずしもプログラムによって割り当てられたすべての Windows リソースが解放されるわけではありません。ほとんどの場合，VCL ルーチンによって割り当てられたすべてのリソースは解放されます。しかし，ユーザーが書いたコードによって割り当てられた Windows リソースは正しく解放されない場合があります。

複数のハードウェア例外や言語例外によってシステムが不安定になった場合，またはプログラムのリセットでシステムリソースがなくなったためシステムが不安定になった場合は，いったん Delphi を終了してからデバッグセッションを再開してください。


参照01669

Delphi のデバッガ

プログラム実行の制御

デバッグ用コマンドのキーボードショートカット


実行(R)｜監視式の追加(W)
実行(R)｜監視式の追加(W)01670

参照

［実行(R)｜監視式の追加(W)］コマンドを実行すると［監視式の設定］ダイアログボックスが開き，監視式の作成と変更ができます。監視式を作成した後，監視式ウィンドウを使って現在の監視式リストの表示と管理ができます。

次の方法でも同じことができます。

コードエディタスピードメニューで［監視式のリストへの追加(A)］を選択する

監視式リストスピードメニューで［監視式の追加(A)］を選択する

監視式ウィンドウで既存の監視式の 1 つを右クリックし，監視式リストスピードメニューで［監視式の編集(E)］を選択する


参照01671

Delphi のデバッガ

監視式

デバッグ用コマンドのキーボードショートカット


実行(R)｜ブレークポイントの追加(B)
実行(R)｜ブレークポイントの追加(B)01672

参照

［実行(R)｜ブレークポイントの追加(B)］コマンドを実行すると［ブレークポイントの編集］ダイアログボックスが開き，ブレークポイントの作成と変更ができます。

次の方法でも同じことができます。

ブレークポイントリストスピードメニューで［ブレークポイントの追加(A)］を選択する

ブレークポイントウィンドウで既存のブレークポイントの 1 つを右クリックし，ブレークポイントリストスピードメニューで［ブレークポイントの編集(E)］を選択する


参照01673

Delphi のデバッガ

ブレークポイント

プログラム実行の制御

デバッグ用コマンドのキーボードショートカット


実行(R)｜評価/変更(V)
実行(R)｜評価/変更(V)01674

参照

［実行(R)｜評価/変更(V)］コマンドを実行すると［評価/変更］ダイアログボックスが開き，既存の式の値を評価したり変更したりできます。

次の方法でも同じことができます。

コードエディタスピードメニューで［評価/変更(E)］を選択する


参照01675

Delphi のデバッガ

デバッグ用コマンドのキーボードショートカット


検索メニュー
検索メニュー01676

検索メニューコマンドのキーボードショートカット

検索メニューにはコードエディタ内のテキスト，エラー，オブジェクト，ユニット，変数，シンボルを検索するためのコマンドが入っています。

検索メニューには次のコマンドがあります。

検索(F)	特定のテキストを検索します。

置換(R)	特定のテキストを検索し，新しいテキストに置き換えます。

次を検索(S)	検索を繰り返します。

インクリメンタルサーチ(I)	入力に応じてテキストを検索します。

指定行に移動(G)	カーソルを特定の行番号まで移動します。

最後のコンパイルエラーを表示(C)	カーソルを直前のコンパイルエラーの原因となったコード行まで移動します。

エラーの検索(E)	直前に起きた実行時エラーを見つけます。

シンボルを調べる(Y)	指定したシンボルを見つけます。


検索(S)｜検索(F)
検索(S)｜検索(F)01677

参照

［検索(S)｜検索(F)］を選択すると，［検索］ダイアログボックスが表示されます。

［検索］ダイアログボックス

このダイアログボックスは見つけたいテキストを指定したり，検索に影響を及ぼすオプションを設定したりするために使います。

ダイアログボックスオプション

［検索文字列(T)］

検索文字列を入力するか，この入力ボックスの隣にある下矢印をクリックして前に入力した検索文字列のリストから選択します。

［オプション］

検索文字列の属性を指定します。

大/小文字の区別(C)	検索を実行するときに英字の大文字と小文字を区別します。

ワード検索(W)	単語の単位でだけ検索します (このオプションをオフにした場合，単語より長いものからも検索文字列が検出されます)。

正規表現検索(R)	検索文字列内の正規表現を認識します。

全/半角の区別(Z)	検索を実行するときに英数字記号とカタカナの全角文字と半角文字を区別します。

［検索方向］

現在のカーソル位置から見た検索方向を指定します。

前方検索(D)	現在の位置からファイルの終わりまで。［前方検索(D)］がデフォルトの設定です。

後方検索(B)	現在の位置からファイルの始めまで。

［検索範囲］

検索するファイルの範囲を決めます。

ファイル全体(G)	指定した方向にファイル全体で検索します。［ファイル全体(G)］がデフォルトの設定です。

選択領域のみ(S)	指定した方向に選択テキストだけで検索します。テキストブロックを選択するにはマウスまたはブロックコマンドを使います。

［検索開始位置］

検索の開始位置を指定します。

カーソル位置から(F)	現在のカーソル位置から検索を開始し，［検索方向］の設定に応じてスコープの終わりまで，またはスコープの始めまで検索を進めます。［カーソル位置から(F)］がデフォルトの設定です。

対象範囲の先頭から(E)	［検索範囲］オプションに応じて (ファイル内のカーソルの位置に関係なく) 選択したテキストブロック全体またはファイル全体を検索します。


参照01678

ブロックコマンドのキーボードショートカット (デフォルト)

検索メニューコマンドのキーボードショートカット


検索(S)｜置換(R)
検索(S)｜置換(R)01679

参照

［検索(S)｜置換(R)］を選択すると，［置換］ダイアログボックスが表示されます。

［置換］ダイアログボックス

このダイアログボックスは検索して別のテキストに置き換えたい (または削除したい) テキストを指定するために使います。

［置換］ダイアログボックスのほとんどのコンポーネントは［検索］ダイアログボックスのコンポーネントと同じです。

ダイアログボックスオプション

［検索文字列(T)］

検索文字列を入力するか，この入力ボックスの隣にある下矢印をクリックして前に入力した検索文字列のリストから選択します。

［置換文字列(R)］

置換文字列を入力するか，この入力ボックスの隣にある下矢印をクリックして前に入力した文字列のリストから選択します。テキストを削除するには，この入力ボックスを空白のままにします。

［オプション］

検索文字列の属性を指定します。

大/小文字の区別(C)	検索や置換を実行するときに英字の大文字と小文字を区別します。

ワード検索(W)	単語の単位でだけ検索します (このオプションをオフにした場合，単語より長いものからも検索文字列が検出されます)。

正規表現検索(R)	検索文字列内の特定の正規表現を認識します。

全/半角の区別(Z)	検索や置換を実行するときに英数字記号とカタカナの全角文字と半角文字を区別します。

置き換え動作の確認(P)	検索した個々の文字列を置き換える前にプロンプトを表示します。［置き換え動作の確認(P)］がオフの場合，エディタは検索文字列を自動的に置き換えます。

［検索方向］

現在のカーソル位置から見た検索方向を指定します。

前方検索(D)	現在の位置からファイルの終わりまで。［前方検索(D)］がデフォルトの設定です。

後方検索(B)	現在の位置からファイルの始めまで。

［検査範囲］

検索するファイルの範囲を決めます。

ファイル全体(G)	指定した方向にファイル全体で検索します。［ファイル全体(G)］がデフォルトの設定です。

選択領域のみ(S)	指定した方向に選択テキストだけで検索します。テキストブロックを選択するにはマウスまたはブロックコマンドを使います。

［検索開始位置］

検索の開始位置を指定します。

カーソル位置から(F)	現在のカーソル位置から検索を開始し，［検索方向］の設定に応じてスコープの終わりまで，またはスコープの始めまで検索を進めます。［カーソル位置から(F)］がデフォルトの設定です。

対象範囲の先頭から(E)	［検索範囲］オプションに応じて (ファイル内のカーソルの位置に関係なく) 選択したテキストブロック全体またはファイル全体を検索します。

［すべてを変更(A)］

［すべてを変更(A)］をクリックすると，検索したすべての文字列が置き換わります。［置き換え動作の確認(P)］オプションにチェックマークを付けてある場合は，検索文字列が見つかるたびに［確認］ダイアログボックスが表示されます。


検索(S)｜次を検索(S)
検索(S)｜次を検索(S)01680

参照

［検索(S)｜次を検索(S)］を選択すると，直前の［検索(F)］コマンドまたは［置換(R)］コマンドが繰り返されます。

［次を検索(S)］を選択した場合，直前に［検索］または［置換］のダイアログボックスで指定した設定が有効です。たとえば［Replace Text］の設定をクリアしなかった場合，［次を検索(S)］コマンドを実行すると直前に指定した文字列が検索され，［置換］ダイアログボックスで指定したテキストに置き換わります。


検索(S)｜インクリメンタルサーチ(I)
検索(S)｜インクリメンタルサーチ(I)01681

［検索(S)｜インクリメンタルサーチ(I)］を選択すると［検索］ダイアログボックスは表示されずに，入力したテキストが次に出現する場所までカーソルが直接移動します。

インクリメンタルサーチでは，コードエディタのステータスラインに［検索:］と表示され，入力した文字が 1 文字ずつ表示されます。

たとえば class と入力した場合，1 文字入力するたびにその文字が強調表示され，カーソルはこの語が次に出現する場所まで移動します。この動作はエディタからフォーカスがなくなるまで，または Enter か Esc を押すまで続きます。

［インクリメンタルサーチ(I)］のキー入力オプションは次のとおりです。

BS	検索文字列の最後の文字を削除し，前の一致まで移動する

F3	検索を繰り返す (デフォルトのキー割り当て)


検索(S)｜指定行に移動(G)
検索(S)｜指定行に移動(G)01682

参照

［検索(S)｜指定行に移動(G)］を選択すると，［指定行に移動(G)］ダイアログボックスが開きます。

［指定行に移動］ダイアログボックス

このダイアログボックスでは見つけたい行番号の入力が求められます (現在の行番号と桁番号はコードエディタのステータスバー上にある行と列のインジケータの中に表示されます)。

このダイアログボックスが最初に表示された時点では現在の行番号が入力ボックスに入っています。

ダイアログボックスオプション

［移動先の行番号(E)］

移動先のコードの行番号を指定するか，この入力ボックスの隣にある下矢印をクリックして前に入力した行番号のリストから選択します。


検索(S)｜最後のコンパイルエラーを表示(C)
検索(S)｜最後のコンパイルエラーを表示(C)01683

参照

［検索(S)｜最後のコンパイルエラーを表示(C)］を選択すると，コードエディタのステータスラインにエラーが表示され，最新のコンパイル時エラーのコード行までカーソルが移動します。

エラーがアクティブファイルの中にない場合は直前のコンパイルエラーがあるファイルがアクティブになり，必要であれば閉じたファイルが開きます。


参照01684

検索メニューコマンドのキーボードショートカット


検索(S)｜エラーの検索(E)
検索(S)｜エラーの検索(E)01685

参照

［検索(S)｜エラーの検索(E)］を選択すると，［エラーの検索］ダイアログボックスが開きます。

［エラーの検索］ダイアログボックス

このダイアログボックスは直前に起きた実行時エラーのアドレスを指定するために使います。

ダイアログボックスオプション

［エラーアドレス］

直前に起きた実行時エラーのアドレスを入力します。

［OK］をクリックするとプログラムが再コンパイルされ，入力したアドレス位置で停止し，実行時エラーを起こした行が強調表示されます。


検索(S)｜シンボルを調べる(Y)
検索(S)｜シンボルを調べる(Y)01686

参照

［検索(S)｜シンボルを調べる(Y)］を選択すると，［シンボルを調べる］ダイアログボックスが開きます。

［シンボルを調べる］ダイアログボックス

このダイアログボックスは特定のシンボルを参照するために使います。

ダイアログボックスオプション

［検索するシンボル名(S)］

インスペクトしたいシンボル名を入力するか，下矢印をクリックして前に入力したシンボルのリストから選択します。矢印キーを使えばリストボックス内を移動できます。

［OK］をクリックするとオブジェクトブラウザが開き，シンボルの宣言を表示できます。


参照01687

オブジェクトブラウザウィンドウ


正規表現
正規表現01688

正規表現は検索文字列をカスタマイズする文字です。

Delphi は次の正規表現を認識します。

文字	説明

 ^	文字列の先頭では行頭に一致する

 $	式の末尾では行末に一致する

 .	任意の 1 文字に一致する

 *	文字列の後ではその文字列の後に任意の文字が 0 個以上任意の数だけ続いた文字列に一致する。たとえば bo*t は bt, bot, boot に一致するが bet には一致しない

 +	文字列の後ではその文字列の後に任意の文字が 1 つ以上任意の数だけ続いた文字列に一致する。たとえば bo+t は bot と boot に一致するが bt や bet には一致しない

[ ]	カッコ内の任意の 1 文字に一致し，それ以外の文字には一致しない。たとえば [bot] は b, o, t のいずれかに一致する

[^]	カッコ内の文字列の先頭で NOT を意味する。したがって，[^bot] は b, o, t を除く任意の文字に一致する

[-]	カッコ内で文字の範囲を示す。たとえば [b-o] は b から o までの任意の 1 文字に一致する

{ }	文字列または式をグループ化する。グループは 1 つのパターンの中に最高 10 グループまでネストできる

  \	ワイルドカード文字の前にある円記号はその文字をワイルドカードでなく文字通りに扱うようコードエディタに指示する。たとえば \^ は ^ に一致し，行頭を意味しない


BRIEF 正規表現
BRIEF 正規表現01689

BRIEF 正規表現には，以下のものがあります。

 <	文字列の先頭の左不等号は行の先頭と一致します。

 %	文字列の先頭のパーセント記号は行の先頭と一致します。

 $	表現の最後のドル記号は行の最後と一致します。

 >	表現の最後の右不等号は行の最後と一致します。

  ?	疑問符は，任意の１文字と一致します。

 @	文字列の後のアットマークは，後に任意の文字(ゼロ個の文字を含む)が数文字付いた文字列と一致します。たとえば，bo@ は bot, boo，さらに bo と一致します。

 +	文字列の後の正符号は，後に任意の文字(ゼロ個の文字を除く)が数文字付いた文字列と一致します。たとえば，bo+ は bot および boo とは一致しますが，b または bo とは一致しません。

  |	縦棒は縦棒の左右いずれかの表現と一致します。たとえば，bar|car は bar または car のいずれかと一致します。

  ~	チルダは集合の中のメンバーではない任意の１文字と一致します。

[ ]	大カッコ内の文字は，大カッコにある任意の１文字に一致しますが，それ以外の文字には一致しません。たとえば，[bot]は b, o，または t と一致します。

[^]	大カッコの文字列の先頭のキャレットは否定を意味します。つまり，[^bot]は b, o，または t 以外の任意の文字と一致します。

[-]	大カッコのハイフンは文字の範囲を示します。たとえば，[b-o]は b から o までの任意の文字と一致します。

{ }	中カッコはグループ文字またはグループ表現を示します。１ つのパターン内で最大 10 グループまでネストできます。

  \	ワイルドカードの前の円記号は，C++ IDE にそのワイルドカード文字をワイルドカードとしてではなく，文字として扱うように指示します。たとえば，\^ は ^ と一致するものであって，行の先頭を検索するものではありません。


オプションメニュー
オプションメニュー01690

参照ツールメニューは，環境の設定，ツールメニューのプログラムリスト，テンプレートとエキスパートをそれぞれ変更するために使います。

ツールメニューには次のコマンドがあります。

プロジェクト(P)	プロジェクト用にフォーム，アプリケーション，コンパイラ，リンカのオプションを指定し，プロジェクトディレクトリを管理します。

Repository	［Object Repository］ダイアログボックスを表示します。

オプション(O)	エディタ，ブラウザ，動作環境の初期設定値を指定し，コンポーネントパレットの外観をカスタマイズします。

Database Desktop	データベースの保守とデータの定義を行うツールである Database Desktop を起動します。


参照01691

ツールメニューへのプログラムの追加

ツール(T)｜ツール(T)


オプション(O)｜環境(E)
ツール(T)｜オプション(O)01692

［ツール(T)｜オプション(O) ］を選択すると［環境の設定］ダイアログボックスが表示されます。このダイアログボックスのページを使ってエディタ，ブラウザ，動作環境の初期設定値を指定し，コンポーネントとページをコンポーネントパレット上に配置する方法をカスタマイズします。

［環境の設定］ダイアログボックスには次のページがあります。

Preferences

Library

Editor Options

Editor Display

Editor Colors

Palette

Browser

ダイアログボックスのページを変更するには

使いたいページを表すタブをダイアログボックス下部でクリックする


Preferences (オプション(O)｜環境(E))
Preferences (ツール(T)｜オプション(O))01693

参照	環境の設定

［環境の設定］ダイアログボックスの［Preferences］ページは Delphi の動作環境の初期設定値を指定するために使います。

［保存の対象］オプション

Delphi を終了するときに保存するデスクトップ設定を選択します。

オプション	選択時の効果

デスクトップのみ(D)	ディレクトリ情報，エディタ内のオープンファイル，オープンウィンドウを保存する

デスクトップとシンボル情報(S)	デスクトップ情報と，正常終了した最新のコンパイルによるブラウザシンボル情報を保存する

［自動保存の設定］のチェックボックス

プログラムを実行したとき，または環境によって自動的に保存されるファイルとオプションを指定します。チェックマークはそれが使用可能であることを意味します。

チェックボックス	チェックマークを付けた場合

編集ファイル(F)	［実行(R)｜実行(R)］［実行(R)｜トレース(T)］［実行(R)｜ステップ実行(S)］［実行(R)｜カーソル位置まで実行(C)］を選択したとき，または Delphi を終了するときに，コードエディタ内の変更されたすべてのファイルを保存する

デスクトップ(K)	プロジェクトを閉じるとき，または Delphi を終了するときに，デスクトップの配置を保存する。後で同じプロジェクトを開くと，前回プロジェクトを閉じたときに開いていたすべてのファイルが，プロジェクトで使われているかどうかに関係なく再度開く

［フォームデザイナ］オプション

フォームの設計を容易にするグリッドの初期設定値を設定します。

オプション	効果

グリッドを表示(G)	フォームのグリッドを示すドットを見えるようにする

グリッドに合わせる(P)	フォーム上のコンポーネントを最も近いグリッドラインへ自動的に揃える。コンポーネントをグリッドラインの「中間」には配置できない

グリッドの幅(X)	x 軸方向のグリッド間隔をピクセル単位で設定する。数 (2 ～ 128) を大きく指定するほどグリッド間隔が広くなる

グリッドの高さ(Y)	y 軸方向のグリッド間隔をピクセル単位で設定する。数 (2 ～ 128) を大きく指定するほどグリッド間隔が広くなる

Show Component Captions	このオプションを選択するとコンポーネントのキャプションが表示される

［デバッグ］のチェックボックス

［デバッグ］のチェックボックスはデバッガを使うかどうかを選択し，ステップ実行を使用可能にするために使います。

チェックボックス	チェックマークを付けた場合

統合デバッガ(I)	Delphi 統合デバッガを使う

初期化部のデバッグ(I)	デバッグ情報が入った最初のユニット初期化でデバッガを停止させる

例外でデバッガに戻る(B)	例外が起きたときにアプリケーションを停止し，次の情報を表示する

例外クラス

例外メッセージ

例外の位置

このオプションにチェックマークがない場合，例外が起きてもアプリケーションの実行は停止しない。アプリケーションをステップ実行している場合，連続的にコードを実行したときと同じように例外ハンドラをステップ実行できる

実行時アイコン化(M)	［実行(R)｜Run］を選択することによってアプリケーションを実行したときに Delphi をアイコン化する。アプリケーションを終了すると Delphi が復元される

実行時デザイナを閉じる(R)	アプリケーションの実行中，オブジェクトインスペクタやフォームウィンドウなどのデザイナウィンドウを表示しない。アプリケーションを終了するとウィンドウが再表示される

［コンパイル状況の表示(C)］

これにチェックマークを付けると，プログラムのコンパイル時に進行状況を知らせるダイアログボックスを表示できます。


参照01694

デバッガについて

例外処理

フォーム

［Project］オプション

プロジェクトの保存


Library (オプション(O)｜環境(E))
Library (ツール(T)｜オプション(O))01695

［環境の設定］ダイアログボックスの［Library］ページはデバッグ情報や検索パスなど，コンポーネントライブラリのさまざまな面を制御するために使います。コンポーネントライブラリはコンポーネントパレットによって使われます。

このページのオプションは［コンポーネント(C)｜ライブラリの再構築(R)］を選択したときに効果があります。

［マップファイル］オプション

ライブラリを再構築するときにマップファイルを生成するならマップファイルの種類を選択します。マップファイルはライブラリと同じディレクトリに配置され，.MAP という拡張子が付きます。

オプション	効果

なし(O)	マップファイルを生成しない

セグメントのみ(S)	リンカはセグメントのリスト，プログラム開始アドレス，リンク中に生成された警告メッセージやエラーメッセージが入ったマップファイルを生成する

パブリックラベルを含む(U)	リンカはセグメントのリスト，プログラム開始アドレス，リンク中に生成された警告メッセージやエラーメッセージ，アルファベット順にソートしたパブリックシンボルのリストが入ったマップファイルを生成する

詳細表示(D)	リンカはセグメントのリスト，プログラム開始アドレス，リンク中に生成された警告メッセージやエラーメッセージ，アルファベット順にソートしたパブリックシンボルのリスト，追加の詳細セグメントマップが入ったマップファイルを生成する。詳細セグメントマップにはセグメントアドレス，バイト数で表した長さ，セグメント名，グループ，モジュール情報が含まれる

［Show Hints］

このオプションを選択すると，コンパイラはヒントメッセージを生成します。

［Show Warnings］

このオプションを選択すると，コンパイラは警告メッセージを生成します。

［デバッグ情報付き .DCL を作る(C)］

これにチェックマークを付けると，ライブラリファイル (.DCL) がデバッグ情報を付けてコンパイルされます。その結果，生成される .DCL ファイルは大きくなりますが，必要メモリや処理効率に影響はありません。

デバッグ情報を使ってライブラリをコンパイルした場合，統合デバッガまたは Turbo Debugger for Windows を使ってライブラリファイルをデバッグできます。

［ライブラリソースコードを保存する(V)］

これにチェックマークを付けると，ライブラリプロジェクトファイルのコードが .DPR という拡張子を付けて保存されます。

このライブラリソースファイルの uses 節には，コンポーネントパレットの構築に使われるすべてのユニット (.DCU) が一覧表示されます。

［ライブラリパス(L)］

コンパイラがコンポーネントライブラリ用のソースファイルを見つける検索パスを指定します。コンパイラは［ライブラリパス(L)］に一覧表示されているファイルだけを見つけることができます。ライブラリパスとプロジェクトオプションパスのどちらにもないファイルを使ってプロジェクトを構築しようとすると，コンパイルエラーが起きます。

［Aliases］

下位互換性のために用意されています。名前が変更されたユニットや 1 つのユニットに統合されたユニットのためのエリアスを指定します。デフォルト値は，WinTypes=Windows および WinProcs=Windows です。


参照

コンポーネントパレット

コンポーネントライブラリのカスタマイズ


Palette (オプション(O)｜環境(E))
Palette (ツール(T)｜オプション(O))01696

参照	環境の設定

［環境の設定］ダイアログボックスの［Palette］ページはコンポーネントパレットの表示方法をカスタマイズするために使います。ページとコンポーネントの名前変更，追加，除去，順序変更ができます。

［ページ(P)］

コンポーネントパレットのページを一覧表示します。各ページは現在の順序で一覧表示されます。これらのページを再配置するかページ内容を表示することによって，これらのページのコンポーネントを再配置できます。

［Library］ページにはライブラリ内にインストールされたすべてのコンポーネントのリストが入っています。このページへ任意のコンポーネントを移動できますが，それによってライブラリ内にそのコンポーネントの 2 番目のインスタンスが作成されるわけではありません。

［コンポーネント(C)］

コンポーネントをコンポーネントパレットのページごとに現在の順序で一覧表示します。表示されるコンポーネントは［ページ(P)］リストボックス内で現在選択されているページに対応します。あるページに現れるコンポーネントの順序を変更することも，コンポーネントを別のページへ移動することもできます。

上下の矢印ボタン

上下の矢印ボタンをクリックすると，選択したページまたはコンポーネントの位置を変更できます。ページまたはコンポーネントを新しい位置までドラッグすることもできます。

［追加(A)］

［追加(A)］をクリックすると，コンポーネントパレット上に新しいページを作成できる［Add Page］ダイアログボックスが表示されます。

新しいコンポーネントパレットページを作成した後，そのページへ他のページからコンポーネントを移動したり，新しいコンポーネントを追加したりできます。

［削除(D)］

［削除(D)］をクリックすると，選択したページまたはコンポーネントがパレットから削除されます。ページを削除するには，前もってコンポーネントを空にしておかなくてはなりません。

誤ってコンポーネントを削除した場合は，［Library］ページを使ってコンポーネントを復元できます。

［名称変更(R)］

［名称変更(R)］をクリックすると，コンポーネントパレットのページ名を変更できる［ページの名称変更］ダイアログボックスが表示されます。

［デフォルトに戻す(S)］

［デフォルトに戻す(S)］をクリックすると，コンポーネントパレットがコンポーネントライブラリ内で指定されたレイアウトへリセットされます。


参照01697

コンポーネントパレット

コンポーネントライブラリのカスタマイズ

コンポーネントパレットのカスタマイズ


ページ名の変更ダイアログボックス
ページ名の変更ダイアログボックス01698

参照	ツール(T)｜オプション(O) - Palette

このダイアログボックスはコンポーネントパレットのページに新しい名前を指定するために使います。

(最初に，名前を変更したいページを［ツール(T)｜オプション(O)］で表示される［環境の設定］ダイアログボックスの［Palette］ページにある［ページ(P)］リストボックスから選択する必要があります。)

このダイアログボックスを開くには

［ツール(T)｜オプション(O)］ダイアログボックスの［Palette］ページで［名称変更(R)］ボタンをクリックする

［ページ名(P)］

［ページ名(P)］編集ボックスには新しいページ名を入力します。

［OK］をクリックすると新しい名前が［ページ(P)］リストボックスに反映されますが，コンポーネントパレットには［環境の設定］ダイアログボックスで［OK］をクリックするまで反映されません。

ページ名を変更せずにこのダイアログボックスを終了するには，［キャンセル］を選択します。


参照01699

コンポーネントパレットのカスタマイズ


ページの追加ダイアログボックス
ページの追加ダイアログボックス01700

参照	ツール(T)｜オプション(O) - Palette

このダイアログボックスはコンポーネントパレットへ新しいページを追加するために使います。

新しいページは［ページ(P)］リストの末尾に追加されます。ページの位置は［ツール(T)｜オプション(O)］で表示される［環境の設定］ダイアログボックスの［Palette］ページを使って変更できます。

このダイアログボックスを開くには

［ツール(T)｜オプション(O)］で表示される［環境の設定］ダイアログボックスの［Palette］ページで［追加(A)］ボタンをクリックする

［ページ名(P)］

［ページ名(P)］編集ボックスには新しいページ名を入力します。

［OK］をクリックすると新しい名前が［ページ(P)］リストボックスに追加されますが，コンポーネントパレットには［環境の設定］ダイアログボックスで［OK］をクリックするまで追加されません。

ページ名を変更せずにこのダイアログボックスを終了するには，［キャンセル］を選択します。


Browser (オプション(O)｜環境(E))
Browser (ツール(T)｜オプション(O))01701

参照	環境の設定

［環境の設定］ダイアログボックスの［Browser］ページはオブジェクトブラウザの機能とシンボル情報の表示を指定するために使います。

［シンボルフィルタ］チェックボックス

オブジェクトブラウザで表示するシンボル情報を指定します。デフォルトではすべてのチェックボックスが選択され，したがってすべての情報が表示されます。

次のシンボルから選択できます。

定数(C)	継承(I)

型(T)	仮想関数のみ(R)

関数と手続き(F)	Private(A)

変数(V)	Protected(D)

プロパティ(P)	Public(B)

Published(E)

［初期画面］オプション

オブジェクトブラウザを最初に開いたときに何を表示するかを指定します。次の 3 つの選択項目があります。

オブジェクト(O)

ユニット(U)

グローバルシンボル(G)

ブラウザセッションでは常時，オブジェクトブラウザスピードメニューを使って表示を切り替えることができます。

［表示］のチェックボックス

これらのチェックボックスを使うと，シンボルについて表示する詳細の程度とソートして表示するかどうかを選択できます。

オプション	動作

厳密な名前で表示(Q)	シンボル名にそれを定義しているユニット名 (限定識別子) を付けて表示する。このオプションがオフの場合，シンボル名だけが表示される

シンボル名でソート(S)	シンボルをシンボル名のアルファベット順に表示する。このオプションがオフの場合，シンボルは宣言した順でソートされる

メモ:	［厳密な名前で表示(Q)］と［シンボル名でソート(S)］の両方にチェックマークを付けた場合，シンボルはオブジェクト名でなくシンボル名でソートされます。

［表示しないノードの選択(L)］コンボボックス

オブジェクトブラウザを起動したときにオブジェクトツリー階層のどの部分を折りたたむか展開するかを指定します。

この設定を有効にするには，オブジェクトを参照中でなくてはなりません。


参照01702

オブジェクトブラウザウィンドウ


Editor Options (オプション(O)｜環境(E))
Editor (ツール(T)｜オプション(O))01703

参照	環境の設定

［環境の設定］ダイアログボックスの［Editor］ページは Delphi エディタの動作をカスタマイズするために使います。

［エディタスピード設定］

［エディタスピード設定］はエディタの構成に使います。

オプション	自動的に設定されるもの

デフォルトの設定	［オートインデント(A)］［挿入モード(I)］［スマートタブ(M)］［バックスペースアンインデント(U)］［グループ単位の取り消し(G)］［ブロックの置き換え(W)］［構文強調表示(S)］

DOS IDE	［オートインデント(A)］［挿入モード(I)］［スマートタブ(M)］［バックスペースアンインデント(U)］［タブ間のカーソル移動(C)］［グループ単位の取り消し(G)］［ブロックの保存(P)］［構文強調表示(S)］

［エディタ設定］のチェックボックス

次のエディタオプションはコードエディタでのテキスト処理を制御するために使います。チェックマークを付けると，そのオプションが使用可能になります。

チェックボックス	選択した場合

オートインデント(A)	Enter を押すと直前の非空白行の最初の非空白文字の下にカーソルが位置付けられる

挿入モード(I)	既存のテキストを上書きせずにテキストをカーソル位置に挿入する。［挿入モード(I)］を使用不可にした場合，カーソル位置のテキストは上書きされる (コードエディタで［挿入モード(I)］を切り替えるには，このデフォルト設定を変更せずに Ins キーを使う)

タブ文字の使用(R)	タブ文字を挿入する。使用不可の場合はスペース文字を挿入する。［スマートタブ(M)］が使用可能の場合，このオプションはオフになる

スマートタブ(M)	直前行の最初の非ホワイトスペース文字までタブを挿入する。［タブ文字の使用(R)］が使用可能の場合，このオプションはオフになる

オプティマルフィル(O)	必要に応じてタブとスペースを使い，すべての自動インデント行を可能な最小限の文字数で開始する

バックスペースアンインデント(U)	カーソルが行の最初の非空白文字にある場合，BS を押したときに挿入点を前のインデントレベルに揃える (アウトデントする)

タブ間のカーソル移動(C)	カーソルをタブによる空白の任意の位置へ移動できる

グループ単位の取り消し(G)	Alt+BS を押した場合または［編集(E)｜元に戻す(U)］を選択した場合，直前に実行した編集コマンドまたはそれ以後の同じ種類の編集コマンドを元に戻す

文末以降への移動(E)	ファイルの末尾を越えてカーソルを位置付ける

保存後の取り消し(V)	ファイルの保存をしても，取り消しができるようにする

行末の空白の保存(K)	行末にある空白をそのまま残す

BRIEF 型正規表現(B)	BRIEF 正規表現を使う

ブロックの保存(P)	カーソルを移動した場合でも，新しいブロックを選択するまで，マークしたブロックを選択したままで残す

ブロックの置き換え(W)	マークしたテキストブロックを次に入力するもので置き換える。［ブロックの保存(P)］も選択した場合，入力したテキストは現在選択しているブロックへ追加される

ダブルクリックによる行選択(D)	行の中のいずれかの文字をダブルクリックすると，その行が強調表示される。使用不可の場合，選択した語だけが強調表示される

カーソル位置の文字列を検索(X)	［検索(S)｜検索(F)］を選択したときに，カーソル位置にあるテキストを［検索］ダイアログボックスの［検索文字列(T)］リストボックスの中へ入れる。このオプションを使用不可にした場合は検索テキストを入力しなくてはならない。ただし［検索文字列(T)］リストボックスが空の場合は除く。その場合でもエディタはテキストをカーソル位置へ挿入する

コピー/切り取りを常に有効にする(F)	テキストを選択していない場合でも［編集(E)｜切り取り(T)］と［編集(E)｜コピー(C)］を使用可能にする

構文強調表示(S)	構文の強調表示を使用可能にする。構文の強調表示の初期設定値を設定するには，［Editor Colors］ページのオプションを使う

［インデント幅(N)］

マークしたブロックをインデントするスペース数を指定します。デフォルトは 1 で上限は 16 です。16 を超える値を入力した場合はエラーが起きます。

［取り消しバッファの深さ(L)］

元に戻せるキー入力の数を指定します。デフォルト値は 32,767 (32KB) です。

メモ:	元に戻すためのバッファは Delphi がコードを生成するたびにクリアされます。

［タブ幅(T)］

Tab を押したときにカーソルが移動する文字桁を設定します。後続のタブストップが前のタブストップより大きくないとエラーが起きます。デフォルトのタブストップは 9 と 17 です。

［構文強調表示の対象(Y)］

どのファイルが構文強調表示情報を表示するかを拡張子によって指定します。デフォルトの拡張子は .PAS，.DPR，.DFM，.INC，.INT です。


参照01704

コードエディタの使い方


Editor Display (オプション(O)｜環境(E))
Display (ツール(T)｜オプション(O))01705

参照	環境の設定

［環境の設定］ダイアログボックスの［Display］ページはコードエディタの表示オプションとフォントオプションを選択するために使います。選択したフォントがサンプルウィンドウに表示されます。

新しい設定は［OK］をクリックしたときに有効になります。

［表示とファイル設定］チェックボックス

エディタの表示を構成し，ファイルの保存方法を選択します。

チェックボックス	効果

BRIEF 風カーソル形状(C)	BRIEF 風のカーソル形状を使う

バックアップファイルの作成(B)	［ファイル(F)｜ファイルの上書き保存(S)］または［ファイル(F)｜プロジェクトの上書き保存(V)］を選択したとき，拡張子の 1 文字目を波形記号 (~) に置き換えたバックアップファイルを作成する

行末の保存(P)	行の終わりの位置を保存する

最大化で画面表示(Z)	コードエディタを画面全体まで最大化する。このオプションがオフの場合，コードエディタを最大化しても Delphi のメインウィンドウは隠れない

［キーストロークマップ(K)］

キー結合をすばやく切り替えられるようにします。

マッピング	効果

デフォルト	CUA マッピングに一致したキー結合を使う (デフォルト)

［右マージンの表示(V)］

これにチェックマークを付けると，コードエディタの右マージンの位置に線が表示されます。

［右マージン(M)］

コードエディタの右マージンを設定します。デフォルトは 80 文字です。有効な範囲は 0 ～ 1024 です。1024 より大きい値を入力した場合はエラーが起きます。

［エディタフォント(F)］

システムにインストールしてある (リストに表示される) 使用可能な画面フォントからフォントの種類を選択します。コードエディタは FixedSys などの等幅スクリーンフォントだけを表示して使います。サンプルテキストがコンボボックスの下に表示されます。

［サイズ(S)］

［エディタフォント(F)］リストボックスで選択したフォントへ関連付けられている定義済みフォントサイズからフォントサイズを選択します。サンプルテキストがコンボボックスの下に表示されます。

［サンプル］

選択したフォントとサイズのサンプルを表示します。


参照01706

コードエディタ

コードエディタの使い方


Editor Colors (オプション(O)｜環境(E))
Colors (ツール(T)｜オプション(O))01707

参照	環境の設定

［環境の設定］ダイアログボックスの［Colors］ページはコードエディタの中でコードのさまざまな要素をどのように表示するかを指定するために使います。

［文法要素(E)］リストボックスに一覧表示されたすべての要素に前景色と背景色を指定できます。サンプルのコードエディタによって設定が Delphi コードエディタでどのように見えるかが示されます。

［表示色とスピード設定(S)］

定義済みの色の組み合わせを使って，すばやくコードエディタの表示を構成できます。サンプルのコードエディタによって設定が Delphi コードエディタでどのように見えるかが示されます。

オプション	効果

デフォルト	予約語を太字で表示する。背景は白

DOS IDE	予約語を白，コードを黄色で表示する。背景は濃い青

トワイライト	予約語とコードを淡い青で表示する。背景は黒

オーシャン	予約語を黒，コードを濃い青で表示する。背景は淡い青

［文法要素(E)］

特定のコード要素の構文強調表示を指定します。［文法要素(E)］リストボックスから選択するか，サンプルのコードエディタで要素をクリックできます。

次の要素オプションがあります。

ホワイトスペース	選択領域

コメント	検索結果

予約語	実行中の行 (デバッグ用)

識別子	有効なブレーク (デバッグ用)

シンボル	無効なブレーク (デバッグ用)

文字列	不正なブレーク (デバッグ用)

数値	エラー

アセンブラ	不正な文字

テキスト	右マージン

［色(C)］のグリッド

選択したコード要素の前景色 (FG) と背景色 (BG) を設定します。

マウスを使って色を選択するには，次のどちらかの方法で選択します。

色をクリックして前景色を選択する

色を右クリックして背景色を選択する

前景と背景に同じ色を選択した場合，その色には FB のマークが付く (これは推奨できない)。

キーボードを使って色を選択するには

1.	矢印キーを使って色を強調表示します。

2.	F を押すとその色が前景色として選択され，B を押すとその色が背景色として選択されます。

［文字属性］チェックボックス

コード要素の形式属性を指定します。Delphi は次の属性オプションをサポートしています。

太字(B)

斜体(I)

下線(U)

［デフォルトを使用(U)］チェックボックス

デフォルトの Windows システム色 (前景か背景，またはその両方) を使ってコード要素を表示します。

オプションのチェックマークをはずすと前に選択した色が復元されますが，前に色を選択していない場合には，そのコード要素は Windows システム色に設定されます。

メモ:	Windows システム色を変更するには，Windows のプログラムマネージャでコントロールパネルを使います。


参照01708

コードエディタ

構文強調表示の使い方


構文強調表示の使い方
構文強調表示の使い方01709

参照

構文強調表示はエディタ内でコードの色と属性を変更し，コードの各部分をすばやく簡単に識別できるようにする機能です。

構文強調表示を使用可能にするには

［ツール(T)｜オプション(O)］で表示される［環境の設定］ダイアログボックスの［Editor］ページで［構文強調表示(S)］オプションにチェックマークを付ける

コードの要素の構文強調表示色を変更するには

［ツール(T)｜オプション(O)］で表示される［環境の設定］ダイアログボックスの［Colors］ページを使う


参照01710

コードエディタ


オプション(O)｜ツール(T)
ツール(T)｜｜ツール(T)01711

参照

［ツール(T)｜｜ツール(T)］を選択すると［ツールの設定］ダイアログボックスが表示されます。［ツールの設定］ダイアログボックスを使ってツールメニューのプログラムの追加，削除，編集を行います。


オプション(O)｜ツール(T)
ツール(T)｜｜ツール(T)01712

［ツール(T)｜｜ツール(T)］を選択すると［ツールの設定］ダイアログボックスが表示されます。

このダイアログボックスはツールメニューでのプログラムの追加，削除，編集のために使います。

ダイアログボックスオプション

［ツール(T)］

現在ツールメニューにインストールされているプログラムを一覧表示します。

［追加(A)］

［追加(A)］をクリックすると［ツールの編集］ダイアログボックスが表示され，プログラムのメニュー名，パス，起動時パラメータを指定できます。

［削除(D)］

［削除(D)］をクリックすると，現在選択しているプログラムがツールメニューから削除されます。

［編集(E)］

［編集(E)］をクリックすると［ツールの編集］ダイアログボックスが表示され，現在選択しているプログラムのメニュー名，パス，起動時パラメータを編集できます。

矢印ボタン

矢印ボタンはリスト内のプログラムの配置を変更するために使います。各プログラムは［ツールの設定］ダイアログボックスに一覧表示されているのと同じ順序でツールメニューに表示されます。

ツールメニューにプログラムを追加するには

［追加(A)］を選択する。［ツールの編集］ダイアログボックスが表示され，追加するプログラムに関する情報を指定できる

ツールメニューからプログラムを削除するには

削除するプログラムを選択してから［削除(D)］を選択する。削除を確定するプロンプトが表示される

ツールメニューのプログラムを変更するには

変更するプログラムを選択して［編集(E)］を選択する。選択したプログラムに関する情報が入った［ツールの編集］ダイアログボックスが表示される


参照01713

ツールメニューへのプログラムの追加


ツールの編集ダイアログボックス
ツールの編集ダイアログボックス01714

［ツールの編集］ダイアログボックスはツールメニューに一覧表示されるプログラムのプロパティを入力するか編集するために使います。

［ツールの編集］ダイアログボックスを表示するには

［ツールの設定］ダイアログボックスで［追加(A)］または［編集(E)］をクリックする

ダイアログボックスオプション

［タイトル(T)］

追加するプログラムの名前を入力します。この名前はツールメニューに表示されます。

アンド記号 (&) を付けた英字を前に付けることによって，メニューコマンドにアクセラレータを追加できます。重複したアクセラレータを指定した場合は［ツールの設定］ダイアログボックス内のプログラム名の隣に * が表示されます。

［プログラム(P)］

追加するプログラムの位置を入力します。そのプログラムへの絶対パスを含めることができます。［参照(B)］ボタンをクリックすると，プログラムのパスとファイル名を見つけるためにドライブとディレクトリが検索されます。

［実行時のディレクトリ(W)］

プログラムの作業用ディレクトリを指定します。［プログラム(P)］編集ボックスでプログラム名を選択すると，Delphi によってデフォルトの作業用ディレクトリが指定されます。このディレクトリパスは必要に応じて変更できます。

［引数(A)］

起動時にプログラムへ渡すパラメータを入力します。たとえば，プログラムを起動するときにファイル名を渡すことができます。パラメータを入力するか，［マクロ(M)］ボタンを使って起動時パラメータを指定できます。複数のパラメータとマクロを指定できます。

［参照(B)］

［参照(B)］をクリックすると，［プログラム(P)］編集ボックス用にプログラム名を選択できます。［参照(B)］をクリックすると［プログラムの選択］ダイアログボックスが開きます。

［マクロ(M)］

［マクロ(M)］をクリックすると［ツールの編集］ダイアログボックスが展開し，使用可能なマクロのリストが表示されます。これらのマクロを使ってアプリケーションに起動時パラメータを渡すことができます。

パラメータのリストにマクロを追加するには

リストからマクロを選択して［追加(I)］をクリックする


トランスファマクロ
トランスファマクロ01715

トランスファマクロはツールメニューのプログラムへ起動時パラメータを渡すために使います。

マクロを表示するには

［ツールの編集］ダイアログボックスで［マクロ(M)］ボタンをクリックする

次のトランスファマクロがあります。

マクロ	説明

$COL	アクティブなコードエディタウィンドウ内のカーソルの桁番号へ展開する

たとえば，カーソルが 50 桁目にある場合，Delphi は起動時にプログラムへ 50 を渡す

$ROW	アクティブなコードエディタウィンドウ内のカーソルの行番号へ展開する

たとえば，カーソルが 8 行目にある場合，Delphi は起動時にプログラムへ 8 を渡す

$CURTOKEN	アクティブなコードエディタウィンドウ内のカーソル位置にある語へ展開する

たとえば，カーソルが Token という語にある場合，Delphi は起動時にプログラムへ Token を渡す

$PATH	指定したパラメータのディレクトリ部分へ展開する。$PATH マクロを挿入すると Delphi によって $PATH() が挿入され，ユーザーがカッコの中にパラメータを指定する

たとえば，$PATH($EDNAME) を指定すると，Delphi はアクティブなコードエディタウィンドウ内にあるファイルへのパスを起動時にプログラムへ渡す

$NAME	指定したパラメータのファイル名の部分へ展開する。$NAME マクロを挿入すると Delphi によって $NAME() が挿入され，ユーザーがカッコの中にパラメータを指定する

たとえば，$NAME($EDNAME) を指定すると，Delphi はアクティブなコードエディタウィンドウ内にあるファイルのファイル名を起動時にプログラムへ渡す

$EXT	指定したパラメータのファイル拡張子の部分へ展開する。$EXT マクロを挿入すると Delphi によって $EXT() が挿入され，ユーザーがカッコの中にパラメータを指定する

たとえば，$EXT($EDNAME) を指定すると，Delphi はアクティブなコードエディタウィンドウ内にあるファイルのファイル拡張子を起動時にプログラムへ渡す

$EDNAME	アクティブなコードエディタウィンドウ内の絶対ファイル名へ展開する

たとえば，C:\PROJ1\UNIT1.PAS というファイルを編集中の場合，Delphi は起動時にプログラムへ C:\PROJ1\UNIT1.PAS を渡す

$EXENAME	現在のプロジェクトの実行可能コードの絶対ファイル名へ展開する

たとえば，C:\PROJ1 にある PROJECT1 というプロジェクトに対して作業中の場合，Delphi は起動時にプログラムへ C:\PROJ1\PROJECT1.EXE を渡す

$PARAMS	［実行時の引数］ダイアログボックスで指定したコマンドラインパラメータへ展開する

$PROMPT	起動時にパラメータを入力するプロンプトを表示する。$PROMPT マクロを挿入すると Delphi によって $PROMPT() が挿入され，ユーザーがカッコの中にデフォルトパラメータを指定する

$SAVE	コードエディタ内のアクティブファイルを保存する

$SAVEALL	現在のプロジェクトを保存する

$TDW	Turbo Debugger の実行環境を設定する。たとえば，このマクロはプロジェクトを保存し，プロジェクトをコンパイルするときにデバッグ情報が必ずオンになるようにし，デバッグ情報をオンにしてコンパイルできない場合はプロジェクトを再コンパイルする。ツールメニューに Turbo Debugger を追加した場合は，必ずこのマクロを使わなくてはならない


プログラムの選択ダイアログボックス
プログラムの選択ダイアログボックス01716

［プログラムの選択］ダイアログボックスはドライブとディレクトリを検索してツールメニューへ追加するプログラムを見つけるために使います。

トランスファ項目を見つけるには

［ツールの編集］ダイアログボックスで［参照(B)］ボタンをクリックする

［ファイル名(N)］

ロードしたいファイルの名前を入力するか，ファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイルの種類は .EXE，.COM，.PIF の各ファイルです。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。


ツール(T)｜リポジトリ(R)
ツール(T)｜リポジトリ(R)01717

［ツール(T)｜リポジトリ(R)］を選択すると［オブジェクトリポジトリ］ダイアログボックスが表示されます。［オブジェクトリポジトリ］ダイアログボックスを使ってオブジェクトリポジトリのページの追加，削除，および名前の変更を行います。またオブジェクトリポジトリの項目の編集と削除も行えます。さらにフォームとプロジェクトのためのテンプレートとエキスパートのオプションも指定できます。

参照

オブジェクトリポジトリダイアログボックス

オブジェクトリポジトリについて


オブジェクトリポジトリダイアログボックス
オブジェクトリポジトリダイアログボックス01718

［ツール(T)｜リポジトリ(R)］を選択すると［オブジェクトリポジトリ］ダイアログボックスが表示されます。

［オブジェクトリポジトリ］ダイアログボックスの設定は，新しいプロジェクトを開始したり開いているプロジェクトで新しいフォームを作成するときの Delphi の動作に影響を与えます。このダイアログボックスでは次の点について指定できます。

デフォルトのプロジェクト

デフォルトの新規フォーム

デフォルトのメインフォーム

これらのデフォルトは，［ファイル(F)｜新規作成(N)］を選択して［新規作成］ダイアログボックスから別のものを選択することでいつでも変更できます。

デフォルトでは新しいプロジェクトを開始するとブランクフォームが開きます。オブジェクトリポジトリオプションを変更することで，このデフォルトの動作を変更できます。

［オブジェクトリポジトリ］ダイアログボックス

［ページ(P)］

このリストボックスはオブジェクトリポジトリ内のページを表示します。どれかページを選択すると，そのページにある項目が［オブジェクト(O)］リストボックスに表示されます。［オブジェクトリポジトリ］を選択するとオブジェクトリポジトリ内のすべての項目を見ることができます。

［オブジェクト(O)］

［オブジェクト(O)］リストボックスにはオブジェクトリポジトリの現在選択しているページの項目が表示されます。

［ページの追加(A)］ボタン

［ページの追加(A)］ボタンを使ってオブジェクトリポジトリに新しいブランクページを追加します。

ページを追加するには

1	［ページの追加(A)］ボタンをクリックします。

［ページの追加］ダイアログボックスが表示されます。

2	追加したいページの名前を入力します。

3	［OK］をクリックします。

［ページの削除(D)］ボタン

［ページの削除(D)］ボタンを使ってオブジェクトリポジトリからページを削除します。

ページを削除するには

1	［ページ(P)］リストボックスで削除したいページの名前を選択します。

2	［ページの削除(D)］ボタンをクリックします。

選択していたページがオブジェクトリポジトリから削除されます。

［名称変更(R)］ボタン

［名称変更(R)］ボタンを使ってオブジェクトリポジトリのページの名前を変更します。

ページ名を変更するには

1	［ページ(P)］リストボックスで名前を変更したいページを選択します。

2	［名称変更(R)］ボタンをクリックします。

［名称変更］ダイアログボックスが表示されます。

3	変更するページの新しい名前を入力します。

4	［OK］をクリックします。

［ページ(P)］リストボックスに名前の変更されたページが表示されます。

［オブジェクトの設定(E)］

［オブジェクトの設定(E)］ボタンを使ってオブジェクトリポジトリの項目のプロパティを編集します。

オブジェクトを編集するには

1	［オブジェクト(O)］リストボックスで編集したい項目を選択します。

2	［オブジェクトの設定(E)］をクリックします。

［オブジェクトの設定情報］ダイアログボックスが表示されます。

3	必要に応じて情報を編集します。

4	［OK］をクリックします。

［オブジェクトの削除(L)］

［オブジェクトの削除(L)］ボタンを使ってオブジェクトリポジトリから項目を削除します。

オブジェクトリポジトリオプション

［オブジェクトリポジトリ］ダイアログボックスの設定は，新しいプロジェクトを開始したり開いているプロジェクトで新しいフォームを作成するときの Delphi の動作に影響を与えます。［オブジェクト(O)］リストボックスの項目を選択すると，［オブジェクト(O)］リストボックスの一番下にある適切なオプションが使用可能になります。選択している項目によって次のオプションのどれかが使用できるようになります。

デフォルトのプロジェクト

デフォルトの新規フォーム

デフォルトのメインフォーム

これらのデフォルトは，［ファイル(F)｜新規作成(N)］を選択して［新規作成］ダイアログボックスから別のものを選択することでいつでも変更できます。

デフォルトでは新しいプロジェクトを開始するとブランクフォームが開きます。オブジェクトリポジトリオプションを変更することで，このデフォルトの動作を変更できます。詳細はオブジェクトリポジトリのカスタマイズを参照してください。

上矢印，下矢印

上矢印または下矢印をクリックすると選択しているページの位置を変更できます。またドラッグアンドドロップ操作でページを移動することもできます。


ページの追加ダイアログボックス
ページの追加ダイアログボックス01720

［ページの追加］ダイアログボックスには［オブジェクトリポジトリ］ダイアログボックスからアクセスします。［ページの追加］ダイアログボックスを使ってオブジェクトリポジトリにページを追加します。

［ページの追加］ダイアログボックス

［ページ名(P)］

新しいページの名前を［ページ名(P)］テキストボックスに入力します。


名称変更ダイアログボックス
名称変更ダイアログボックス01721

［名称変更］ダイアログボックスには［オブジェクトリポジトリ］ダイアログボックスからアクセスします。［名称変更］ダイアログボックスを使ってオブジェクトリポジトリのページの名前を変更します。

［名称変更］ダイアログボックス

［ページ名(P)］

ページの新しい名前を［ページ名(P)］テキストボックスに入力します。


オブジェクトの設定情報ダイアログボックス
オブジェクトの設定情報ダイアログボックス01722

［オブジェクトの設定情報］ダイアログボックスを使ってオブジェクトリポジトリの項目の情報を編集します。

［オブジェクトの設定情報］ダイアログボックス

［タイトル(T)］

このテキストボックスには選択している項目のタイトルが表示されます。

［コメント(D)］

このテキストボックスには選択している項目のタイトル説明が表示されます。

項目の説明を表示するには

1	ファイルメニューから［新規作成(N)］を選択します。

2	［新規作成］ダイアログボックスで項目を選択します。

3	マウスを右クリックします。

4	スピードメニューで［詳細表示(D)］を選択します。

項目の説明が［コメント」列に表示されます。

［ページ(P)］

選択している項目が入っている現在のページが表示されます。

項目を入れるページを変更するには［ページ(P)］ドロップダウンリストから別のページを選択します。

［作者(A)］

選択している項目の作者名が表示されます。

［参照(B)］ボタン

選択している項目のアイコンが［参照(B)］ボタンの左に表示されます。［参照(B)］ボタンを使って別のアイコンを選択できます。


ツールメニューへのプログラムの追加
ツールメニューへのプログラムの追加01723

参照

ツールメニューのコマンドは実行を外部アプリケーションへ転送します。ツールメニューのプログラムは追加，削除，編集ができます。

ツールメニューへプログラムを追加するには

1.	［［ツール(T)｜ツール(T)］を選択します。

［ツールの設定］ダイアログボックスが表示され，現在ツールメニューにあるプログラムが一覧表示されます。

2.	［追加(A)］を選択します。

［ツールの編集］ダイアログボックスが表示されます。

3.	プログラムのタイトルを指定します。指定したタイトルはツールメニューに一覧表示されます。

4.	プログラムファイルを指定するか，［参照(B)］を選択してリストからプログラムファイルを選択します。

5.	プログラムの作業用ディレクトリが必要であればそれを指定します。

6.	プログラムの起動時パラメータが必要であればそれを指定します。パラメータを入力するか，［マクロ(M)］ボタンを使って起動時パラメータを指定できます。複数のパラメータとマクロを指定できます。

7.	［OK］を選択します。

［ツールの編集］ダイアログボックスが閉じます。新しいプログラムが［ツールの設定］ダイアログボックスの［ツール(T)］リストに表示されます。

8.	［閉じる］を選択します。

［ツールの設定］ダイアログボックスが閉じます。新しいプログラムがツールメニューに表示されます。


参照01724

ツール(T)｜ツール(T)

［ツールの設定］ダイアログボックス

［ツールの編集］ダイアログボックス

トランスファマクロ


表示メニュー
表示メニュー01725

参照

表示メニューには Delphi 環境の各種の要素を表示したり隠したり，また統合デバッガに所属するウィンドウを開くためのコマンドが入っています。

表示メニューには次のコマンドがあります。

プロジェクトマネージャ(P)	プロジェクトマネージャを表示します。

プロジェクトソース(J)	コードエディタ内にプロジェクトファイルを表示します。

オブジェクトインスペクタ(O)	オブジェクトインスペクタを表示します。

位置合わせパレット(A)	位置合わせパレットを表示します。

ブラウザ(B)	オブジェクトブラウザを表示します。

ブレークポイント(R)	［ブレークポイントリスト］ダイアログボックスを表示します。

呼び出し履歴(C)	［呼び出し履歴］ダイアログボックスを表示します。

監視式(W)	［監視式リスト］ダイアログボックスを表示します。

スレッド(R)	［Thread Status］ボックスを表示します。

コンポーネントリスト(L)	［コンポーネント］ダイアログボックスを表示します。

ウィンドウリスト(I)	開いているウィンドウのリストを表示します。

フォーム/ユニット切り替え(G)	非アクティブなフォームウィンドウまたはユニットウィンドウをアクティブに切り替えます。

ユニット(U)	［表示ユニットの選択］ダイアログボックスを表示します。

フォーム(F)	［表示フォームの選択］ダイアログボックスを表示します。

編集ウィンドウの作成(E)	新しいコードエディタを起動します。

スピードバー(S)	スピードバーを隠すか表示します。

コンポーネントパレット(C)	コンポーネントパレットを隠すか表示します。


参照01726

コンポーネントの位置合わせ


表示(V)｜プロジェクトマネージャ(P)
表示(V)｜プロジェクトマネージャ(P)01727

［表示(V)｜プロジェクトマネージャ(P)］を選択するとプロジェクトマネージャが開きます。プロジェクトマネージャがすでに開いている場合はそれがアクティブウィンドウになります。

プロジェクトマネージャウィンドウはファイルを現在のプロジェクトへ追加したり，削除したり，保存したり，コピーしたりするために使います。プロジェクトマネージャには現在のプロジェクトで使われているすべてのユニットとそれらの関連フォームのリストも入っています。

メモ:	ユニットは現在オープンされていなくてもプロジェクトマネージャの中に一覧表示されます。

プロジェクトマネージャはデスクトップ上の任意の場所へ配置できます。


表示(V)｜プロジェクトソース(J)
表示(V)｜プロジェクトソース(J)01728

参照

［表示(V)｜プロジェクトソース(J)］を選択すると，開いているプロジェクトのプロジェクトファイルがコードエディタのアクティブページになります。このコマンドを選択した時点でプロジェクトファイルが開いていない場合，プロジェクトファイルが自動的に開きます。

次の方法でも同じことができます。

プロジェクトマネージャスピードメニューで［プロジェクトソースの表示(P)］を選択する


参照01729

プロジェクトファイル

プロジェクトマネージャ


表示(V)｜オブジェクトインスペクタ(O)
表示(V)｜オブジェクトインスペクタ(O)01730

［表示(V)｜オブジェクトインスペクタ(O)］を選択すると，オブジェクトインスペクタと直前のアクティブフォームまたはコードエディタファイルが切り替わります。オブジェクトインスペクタをすでに閉じている場合，このコマンドを選択するとオブジェクトインスペクタが再び開きます。

オブジェクトインスペクタを使ってプロパティの値とイベントハンドラリンクを編集します。


表示(V)｜位置合わせパレット(A)
表示(V)｜位置合わせパレット(A)01731

参照

［表示(V)｜位置合わせパレット(A)］を選択すると位置合わせパレットが表示され，これを使ってコンポーネントの位置をフォームや他のコンポーネントに揃えることができます。

メモ:	［位置合わせ］ダイアログボックスを使ってもコンポーネントの位置を揃えることができます。


位置合わせパレット
位置合わせパレット01732

参照

位置合わせパレットはコンポーネントの位置をフォームや他のコンポーネントに揃えるために使います。

位置合わせパレットを開くには

［表示(V)｜位置合わせパレット(A)］を選択する

位置合わせパレットには各ボタンにツールヘルプがあります。

位置合わせパレットには次のアイコンがあります。

アイコン	効果

	選択した複数のコンポーネントを最初に選択したコンポーネントの左端に揃える (コンポーネントが 1 つだけの場合は除く)
	選択した複数のコンポーネントを水平方向に移動し，それぞれの中心を最初に選択したコンポーネントに揃える (コンポーネントが 1 つだけの場合は除く)
	選択した 1 つ以上のコンポーネントをフォームの水平方向の中心に揃える
	選択した複数のコンポーネントを最初に選択したコンポーネントの右端に揃える (コンポーネントが 1 つだけの場合は除く)
	選択した複数のコンポーネントを最初に選択したコンポーネントの上端に揃える (コンポーネントが 1 つだけの場合は除く)
	選択した複数のコンポーネントを垂直方向に移動し，それぞれの中心を最初に選択したコンポーネントに揃える (コンポーネントが 1 つだけの場合は除く)
	選択した 1 つ以上のコンポーネントをフォームの垂直方向の中心に揃える
	選択した複数のコンポーネントを最初に選択したコンポーネントの下端に揃える (コンポーネントが 1 つだけの場合は除く)
位置合わせパレット上にある特定のボタンの動作がよくわからない場合は，そのボタンをクリックするとボタン上のアイコンが変化し，選択したコンポーネントの位置合わせ方法が示されます。

メモ:	［位置合わせ］ダイアログボックスを使ってもコンポーネントの位置合わせができます。


参照01733

コンポーネントの位置合わせ

コンポーネントの選択

コンポーネントの位置合わせのためのグリッドの使い方


表示(V)｜監視式(W)
表示(V)｜監視式(W)01734

［表示(V)｜監視式(W)］を選択すると監視式ウィンドウが開きます。

監視式ウィンドウには現在設定されているすべての監視式が表示されます。

このウィンドウをデバッグセッション中に開いておくと，重要な変数の値がプログラムの実行につれて更新される様子を監視できます。


表示(V)｜スレッド(H)
表示(V)｜スレッド(H)01735

［表示(V)｜スレッド(H)］を選択すると［スレッドの状態］ステータスボックスが表示されます。

このステータスボックスを使うと，デバッグ中のアプリケーション内で現在実行されているすべてのスレッドの状態を見ることができます。


スレッドの状態ステータスボックス
スレッドの状態ステータスボックス01736

［表示(V)｜スレッド(H)］を選択すると［スレッドの状態］ステータスボックスが表示されます。

このステータスボックスを使うと，デバッグ中のアプリケーション内で現在実行されているすべてのスレッドの状態を見ることができます。

デバッグイベント (ブレークポイント，例外，一時停止) が発生したとき，スレッドステータスビューは実行中の各スレッドの状態を示します。ローカルメニューを使うと，ユーザーが別のスレッドをカレントにすることができます。スレッドがカレントとしてマークされると，次のステップまたは実行操作はそのスレッドに対する相対になります。

［スレッドの状態］ステータスボックス

［状況］

スレッドステートは［走行中］または［停止］です。

［状態］

スレッドステータスとして次のいずれかが表示されます。

ブレークポイント	このスレッドはブレークポイントによって停止した

フォルト	このスレッドはプロセッサ例外によって停止した

不明	このスレッドはカレントスレッドではないのでステータスは不明

ステップ	直前のステップコマンドは問題なく実行された

［位置］

ソースコード上の位置が表示されます。ソースコード上の位置がわからない場合はアドレスが表示されます。

［スレッド ID］

OS が割り当てたスレッド ID が表示されます。


表示(V)｜ブレークポイント(R)
表示(V)｜ブレークポイント(R)01737

［表示(V)｜ブレークポイント(R)］を選択するとブレークポイントウィンドウが開きます。

ブレークポイントウィンドウには現在設定されているすべてのブレークポイントが一覧表示されます。

個々のブレークポイントリストには次の情報が示されます。

そのブレークポイントが設定されているファイル

そのブレークポイントの行番号

そのブレークポイントに関連した条件またはパスカウント


表示(V)｜呼び出し履歴(C)
表示(V)｜呼び出し履歴(C)01738

［表示(V)｜呼び出し履歴(C)］を選択すると呼び出し履歴ウィンドウが開きます。

呼び出し履歴ウィンドウにはプログラムが呼び出すルーチンの現在のシーケンスが一覧表示されます。このリストでは最も新しく呼び出されたルーチンがウィンドウの一番上に示され，前のルーチン呼び出しほど下に表示されます。

呼び出し履歴ウィンドウには個々のエントリごとに手続き名とそのプロシージャへ渡されたパラメータの値が表示されます。


表示(V)｜ブラウザ(B)
表示(V)｜ブラウザ(B)01739

参照

［表示(V)｜ブラウザ(B)］を選択するとオブジェクトブラウザウィンドウが開きます。

［ブラウザ(B)］コマンドが使えない場合はプログラムをコンパイルしてからオブジェクトブラウザを開きます。

オブジェクトブラウザを使うと，アプリケーション内で使っているオブジェクト，ユニット，クラス階層，メソッドをビジュアルに調べることができます。


参照01740

オブジェクトブラウザウィンドウ


表示(V)｜コンポーネントリスト(L)
表示(V)｜コンポーネントリスト(L)01741

参照

［表示(V)｜コンポーネントリスト(L)］を選択するとコンポーネントウィンドウが表示されます。

コンポーネントウィンドウ

このウィンドウはキーボードを使ってコンポーネントをフォームへ追加するために使います。

ダイアログボックスオプション

［名前で検索(S)］

追加したいコンポーネントの名前を入力します。このリストボックスはインクリメンタルサーチをするので，カーソルは入力した文字列が入っている最初のコンポーネントまで移動します。

コンポーネントリストボックス

追加したいコンポーネントを選択します。コンポーネントはアルファベット順に一覧表示され，左側にボタン表現が示されます。

コンポーネントを選択すると，その名前が［名前で検索(S)］編集ボックスに表示されます。

［フォームに追加(A)］

［フォームに追加(A)］をクリックすると，選択したコンポーネントのインスタンスがフォームの中央に置かれます。［フォームに追加(A)］は Enter を押せば選択できます。

コンポーネントリストボックスで選択したコンポーネントを追加するには

次のいずれかの操作をします。

Enter を押す

コンポーネント名をダブルクリックする

［フォームに追加(A)］ボタンをクリックする

メモ:	キーボードを使ってフォームにコンポーネントを追加した場合，そのコンポーネントはデフォルトのコンポーネントサイズでフォームの中央に追加されます。ただし，コンテナコンポーネント (グループボックスまたはパネルなど) を選択した場合は除きます。

コンテナコンポーネントを選択した場合，追加コンポーネントはそのコンテナの中央に置かれます。コンテナの中にコンポーネントを追加するには，［フォームに追加(A)］を選択する前にコンテナを選択しておかなくてはなりません。


参照01742

キーボードを使ったコンポーネントの追加


表示(V)｜フォーム/ユニット切り替え(G)
表示(V)｜フォーム/ユニット切り替え(G)01743

参照

［表示(V)｜フォーム/ユニット切り替え(G)］を選択すると，アクティブなフォームまたはユニットに関連した非アクティブなフォームまたはユニットが表示されます。

次の方法でも同じことができます。

スピードバーで［フォーム/ユニット切り替え］ボタンを選択する

プロジェクトマネージャスピードメニューで［ユニットの表示(U)］または［フォームの表示(F)］を選択する


参照01744

プロジェクトでのユニットとフォームの表示

表示(V)｜フォーム(F)

表示(V)｜ユニット(U)


表示(V)｜ユニット(U)
表示(V)｜ユニット(U)01745

参照

［表示(V)｜ユニット(U)］を選択すると［表示ユニットの選択］ダイアログボックスが表示されます。

［表示ユニットの選択］ダイアログボックス

このダイアログボックスはプロジェクトファイルを開くか現在のプロジェクトの任意のユニットをオープンするために使います。ユニットを選択すると，そのユニットがコードエディタ内でアクティブページになります。

オープンしたいユニットが現在オープンされていない場合，そのユニットが自動的にオープンします。

次の方法でも同じことができます。

スピードバーで［ユニットリスト表示］ボタンを選択する

プロジェクトマネージャスピードメニューで［ユニットの表示(U)］を選択する


参照01746

プロジェクトファイル

ユニットファイル

プロジェクトでのユニットとフォームの表示


表示(V)｜フォーム(F)
表示(V)｜フォーム(F)01747

参照

［表示(V)｜フォーム(F)］を選択すると［表示フォームの選択］ダイアログボックスが表示されます。

［表示フォームの選択］ダイアログボックス

このダイアログボックスは現在のプロジェクト内の任意のフォームをすばやく開くために使います。フォームを選択するとそのフォームがアクティブフォームになり，関連ユニットがコードエディタ内でアクティブモジュールになります。

フォームを選択した時点で関連ユニットがオープンされていない場合，そのユニットが自動的にオープンします。

次の方法でも同じことができます。

スピードバーで［フォームリスト表示］ボタンを選択する

プロジェクトマネージャスピードメニューで［フォームの表示(F)］を選択する


参照01748

フォーム

プロジェクトでのユニットとフォームの表示


表示(V)｜ウィンドウリスト(L)
表示(V)｜ウィンドウリスト(L)01749

［表示(V)｜ウィンドウリスト(I)］を選択すると［ウィンドウリスト］ダイアログボックスが開きます。

［ウィンドウリスト］ダイアログボックス

このダイアログボックスは非アクティブな Delphi ウィンドウをアクティブにするために使います。多くのウィンドウを開いている場合，これが特定のウィンドウを見つける最も簡単な方法です。［ウィンドウリスト］ダイアログボックスには開いているすべての Delphi ウィンドウが表示されます。

ウィンドウを選択するには

次のどちらかの操作をします。

ウィンドウ名をダブルクリックする

ウィンドウ名を選択して［OK］をクリックする


表示(V)｜編集ウィンドウの作成(E)
表示(V)｜編集ウィンドウの作成(E)01750

［表示(V)｜編集ウィンドウの作成(E)］を選択すると，コードエディタのアクティブページをコピーした新しいコードエディタが開きます。

コピー元とコピーのどちらに変更を加えても，その変更は両方のファイルに反映されます。

ウィンドウを区別するため，元のウィンドウのキャプションには末尾に 1 が付き，最初のコピーは 2, 2 番目のコピーは 3 などとなります。


表示(V)｜スピードバー(S)
表示(V)｜スピードバー(S)01751

［表示(V)｜スピードバー(S)］を選択すると，スピードバーが表示されるか隠されます。

このコマンドにチェックマークが付いている場合，スピードバーが表示されています。

次の方法でもスピードバーを隠せます。

スピードバースピードメニューで［隠す(H)］を選択する


表示(V)｜コンポーネントパレット(C)
表示(V)｜コンポーネントパレット(C)01752

［表示(V)｜コンポーネントパレット(C)］を選択すると，コンポーネントパレット が表示されるか隠されます。

このコマンドにチェックマークが付いている場合，コンポーネントパレットが表示されています。

次の方法でもコンポーネントパレットを隠せます。

コンポーネントパレットスピードメニューで［隠す(H)］を選択する


DDE の使い方
DDE の使い方01818

参照

ダイナミックデータ交換 (DDE) は，他のアプリケーションとの間でデータを送ったり受け取ったりします。Delphi ではこのデータを使って他のアプリケーションとテキストを交換できます。他のアプリケーションにコマンドとマクロを送ることもでき，これによってユーザーのアプリケーションは他のアプリケーションを制御できます。

DDE は次のように使います。ユーザーのアプリケーションまたは他のアプリケーションによって 2 つのアプリケーション間のリンクを確立します。このリンク (対話と呼ばれる) が確立されると，2 つのアプリケーションは互いの間で連続的かつ自動的にテキストデータを送れます。一方のアプリケーションでテキストを変更すると，DDE が自動的に他方のアプリケーションのテキストを更新します。

DDE アプリケーションを理解するには，DDE 対話の概念を熟知する必要があります。

いつ DDE を使うか

DDE は明確なテキスト文字列を交換するときに使います。収益の表計算ワークシートの最終結果だけが知りたい場合は，その結果が入ったセルを Delphi DDE クライアントアプリケーションにリンクするとよいでしょう。

データは編集ボックスまたはラベルに出力できます。DDE はユーザーがクライアントアプリケーションから表計算ワークシートを起動したり編集できないようにすることによって，表計算ワークシート内のデータを保護します。

メモ:	すべてのアプリケーションが DDE をサポートしているわけではありません。アプリケーションが DDE をサポートしているかどうかを調べるには，そのアプリケーションのマニュアルを参照してください。


参照01819

DDE クライアントアプリケーションの作成

DDE サーバーアプリケーションの作成


DDE 対話
DDE 対話01820

参照

DDE 対話は DDE クライアントアプリケーションと DDE サーバーアプリケーションでできています。Delphi では DDE クライアントと DDE サーバーの両方を作成できます。1 つの Delphi アプリケーションは同時に DDE クライアントにも DDE サーバーにもなれます。

DDE 対話は次の 3 つの特性によって定義されます。

DDE サービス

DDE トピック

DDE 項目

メモ:	対話のサービス，トピック，項目の指定についての詳細は DDE サーバーのマニュアルを参照してください。

DDE サービス

対話のサービスは DDE サーバーアプリケーションのメイン実行可能ファイルの名前から .EXE 拡張子を取り除いたものです。

サービス名はメイン実行可能ファイル名と異なる場合もあります。

サーバーが Delphi アプリケーションの場合，サービスはプロジェクト名から .DPR または .EXE 拡張子を取り除いたものです。

メモ:	DDE サービスをアプリケーション名と呼ぶこともあります。これらの用語は互いに置き換え可能です。

DDE トピック

DDE 対話のトピックはリンクテキストが入った，サーバーに対して認識可能なデータの単位です。一般にトピックはファイルです。

サーバーが Delphi アプリケーションの場合，トピックは (TDDEServerConv コンポーネントを使っていないときは) リンクするデータが入ったフォームの Caption か，または (TDDEServerConv コンポーネントを使っているときは) DDE サーバー対話コンポーネントの  Name です。

DDE 項目

DDE 対話の項目は表計算ワークシートのセルまたはデータベースの項目などの実際にリンクするデータを識別します。

DDE 項目の指定に使われる構文は DDE サーバーアプリケーションによって異なります。

サーバーが Delphi アプリケーションの場合，項目はリンクされる  TDDEServerItem コンポーネントの Name です。


参照01821

DDE クライアントアプリケーションの作成

DDE サーバーアプリケーションの作成

DDE の使い方


DDE クライアントアプリケーションの作成
DDE クライアントアプリケーションの作成01822

参照	例

DDE クライアントは DDE クライアント対話  (TDDEClientConv) コンポーネントと DDE クライアント項目  (TDDEClientItem) コンポーネントをフォームに追加することによって作成できます。

クライアントアプリケーションは PokeData または  PokeDataLines メソッドによってデータをポークできます (サーバーにデータを送信できます)。

クライアントはサーバーを実行するか ExecuteMacro または  ExecuteMacroLines メソッドでマクロを送ることによってサーバーを制御できます。

DDE クライアントを作成するには

1.	DDE クライアント対話コンポーネント (TDDEClientConv) と DDE クライアント項目コンポーネント (TDDEClientItem) をフォームに追加します。

2.	対話コンポーネントの名前をクライアント項目コンポーネントの  DDEConv プロパティに代入します。

設計時にリンクを確立するには，オブジェクトインスペクタ内で DDEConv に関する対話のリストからこの値を選択する

実行時にリンクを確立するには，アプリケーションが DDEConv プロパティに値を代入するためのコードを実行しなくてはならない


例01823

次の例は DDEClientItem1 という項目コンポーネントを DDEClientConv1 という対話コンポーネントとリンクします。

DDEClientItem1.DDEConv := 'DDEClientConv1';


参照01824

DDE を使った他のアプリケーションの制御

DDE サーバーアプリケーションの作成

DDE サーバーとのリンクの設定

データのポーク

DDE の使い方


DDE サーバーとのリンクの設定
DDE サーバーとのリンクの設定01825

DDE サーバーのアプリケーションとデータにアクセスできる場合，設計時にクリップボードから貼り付けることによって DDE リンクを確立できます。

設計時に DDE リンクを確立するには

1.	サーバーアプリケーションを起動し，クライアントアプリケーションとリンクするデータを選択します。

2.	サーバーの編集メニューで［コピー(C)］を選択することによってサーバーアプリケーションからクリップボードへデータと DDE リンク情報をコピーします。

3.	Delphi を起動し，DDE クライアント対話コンポーネントを選択します。

4.	オブジェクトインスペクタ内で DDEService または  DDETopic プロパティの省略記号ボタンをクリックします。

［DDE 設定］ダイアログボックスが表示されます。

5.	［リンク貼り付け］を選択します。

サービスとトピックに正しい値が自動的に入力されます。［リンク貼り付け］ボタンが使用不可の場合，サーバーになるアプリケーションが DDE をサポートしていないか，または DDE 情報がクリップボードにうまくコピーされていません。

6.	［OK］を選択します。

DDEService と DDETopic プロパティに DDE リンクを確立するのに適切な値が代入されます。

7.	DDE クライアント項目コンポーネントを選択し，オブジェクトインスペクタ内でリストから DDEConv プロパティのためのリンク DDE クライアント対話コンポーネントの名前を選択します。

8.	クリップボードに DDE リンク情報がまだ入っている場合，オブジェクトインスペクタ内でリストから DDEItem プロパティのための適切な値を選択します。情報が入っていない場合，DDEItem プロパティの正しい値を入力します。

実行時に DDE リンクを確立するには

1.	DDE クライアント対話コンポーネントの SetLink メソッドによって DDE サービスとトピックを指定します。

次の例は作業ディレクトリにある GADGETS.DB という Borland Paradox 5.0 テーブルとのリンクを確立します。

DDEClientConv1.SetLink('PDOXWIN', ':WORK:GADGETS.DB');

2.	DDE クライアント項目コンポーネントの DDEItem プロパティに項目を代入します。

次の例は Paradox テーブルの Price 項目とのリンクを確立します。

DDEClientItem1.DDEItem := 'PRICE';


DDE リンクデータの処理
DDE リンクデータの処理01826

例

DDE サーバーのデータを処理する前に DDE リンクを確立する必要があります。

DDE リンクが確立すると，リンクデータが DDE クライアント項目コンポーネントの Text プロパティに現れます (データが文字列に格納するには長すぎる場合は，Lines プロパティに格納されます)。データは DDE サーバーによって連続的に更新され，データを変更すると，クライアント項目コンポーネントの OnChange イベントが発生します。

リンクテキストデータを処理するには

1.	編集ボックス (TEdit コンポーネント) をフォームに追加します。

2.	Text プロパティの値を編集ボックスの Text プロパティに代入する文を作成します。

代入文を DDE クライアント項目の OnChange イベントハンドラにアタッチします。


例01827

次のイベントハンドラは DDE クライアント項目のテキストを編集ボックスに代入します。

procedure TForm1.DDEClientItem1.Change(sender: TObject);

begin

  Edit1.Text := DDEClientItem1.Text;

end;


データのポーク
データのポーク01828

例

データをポークすることは，DDE クライアントアプリケーションから DDE サーバーアプリケーションへデータを送ることで，DDE に関する通常のデータフローとは逆です。

データをポークするには，DDE クライアント対話コンポーネントの PokeData メソッドを呼び出す。文字列に入れるには長すぎるテキストデータをポークするには，PokeDataLines を使う

PokeData には 2 つのパラメータがあります。

最初のパラメータは DDE 対話の項目 (関連する DDE クライアント項目コンポーネントの DDEItem プロパティで指定されたもの) を指定する

2 番目のパラメータは送るテキストが入った文字列である


例01829

次の例は DDEClientConv1 という DDE クライアント対話コンポーネントからリンク DDE サーバーへテキスト 'Hello' を送ります。文字列は DDEClientItem1 という DDE クライアント項目コンポーネントの DDEItem プロパティで指定された DDE 項目内に挿入されます。

DDEClientConv1.PokeData(DDEClientItem1.DDEItem, 'Hello');


DDE を使った他のアプリケーションの制御
DDE を使った他のアプリケーションの制御01830

例

すべての DDE クライアントアプリケーションは DDE サーバーアプリケーションを制御できます。実行中ではない DDE サーバーとのリンクを DDE クライアントが確立しようとする場合，クライアントはそのサーバーを起動し，(DDETopic プロパティで指定された) 対話トピックをロードします。

DDE クライアント対話コンポーネントの  ConnectMode プロパティには次の 2 つの値があります。

値	アクティブになると

ddeAutomatic	クライアントは DDE クライアント対話コンポーネントが入ったフォームの実行時作成のときにサーバーを実行する

ddeManual	アプリケーションは DDE クライアント対話コンポーネントの  OpenLink メソッドを実行しなくてはならない

マクロの使い方

他のアプリケーションを制御するもう 1 つの方法としてマクロコマンドの実行があります。DDE クライアント対話コンポーネントの ExecuteMacro メソッドを使って 1 つまたは複数のマクロコマンドが入った文字列をサーバーに送ります。サーバーは受け取ったマクロを処理します。DDE サーバーにマクロ文字列のリストを送るには，ExecuteMacroLines を使います。

メモ:	すべての DDE サーバーがマクロを処理できるわけではありません。サーバーアプリケーションがマクロをサポートしているかどうかと，マクロ構文については，そのアプリケーションのマニュアルを参照してください。


例01831

次の例は DDE クライアント対話コンポーネントが DDEClientConv1 という名前であると想定し，マクロを使ってクライアントアプリケーションの中で次のコードを実行することにより，Microsoft Excel 4.0 にアクティブなワークシートを閉じるように指示します。

DDEClientConv1.ExecuteMacro('[FILE.CLOSE()]', False);


DDE サーバーアプリケーションの作成
DDE サーバーアプリケーションの作成01832

例

DDE サーバーアプリケーションは DDE クライアントに対して応答します。サーバーアプリケーションにはクライアントアプリケーションがアクセスする必要のあるデータが入っています。サーバーはクライアントを更新するだけです。

DDE クライアントによって送られるマクロを取り扱うには，TDDEServerItem と TDDEServerConv の両方を使って DDE サーバーを作成します。すると，DDE サーバー対話コンポーネントの OnExecuteMacro イベントを使ってマクロを処理できます。DDE サーバー対話コンポーネントの Name を DDE 対話のトピックにしたい場合も両方のコンポーネントを使います。DDE サーバー項目コンポーネントだけでは，DDE サーバー項目が入ったフォームの Caption が対話のトピックになります。

DDE サーバー項目コンポーネントだけを使って DDE サーバーを作成するには

DDE サーバー項目 (TDDEServerItem) コンポーネントをフォームに追加する

DDE サーバー対話コンポーネントを使って DDE サーバーを作成するには

1.	DDE サーバー対話 (TDDEServerConv) コンポーネントと DDE サーバー項目コンポーネントをフォームに追加します。

2.	対話コンポーネントの名前を項目コンポーネントの ServerConv プロパティに代入します。

設計時にリンクを確立するには，オブジェクトインスペクタ内で ServerConv に関する対話のリストからこの値を選択する

実行時にリンクを確立するには，アプリケーションが ServerConv プロパティに値を代入するコードを実行しなくてはならない


例01833

次の例は DDEServerItem1 という項目コンポーネントを DDEServerConv1 という対話コンポーネントとリンクします。

DDEServerItem1.ServerConv := 'DDEServerConv1';


DDE クライアントとのリンクの設定
DDE クライアントとのリンクの設定01834

例

DDE サーバーを DDE クライアントとリンクすると，ユーザーのクライアントアプリケーションが DDE クライアントアプリケーションとデータを共有できます。

DDE リンクを確立するには

1.	DDE サーバー項目コンポーネントの CopyToClipboard メソッドを使って Textプロパティ (または Lines プロパティ) の値を DDE リンク情報と一緒にクリップボードにコピーします。

2.	リンクデータを DDE クライアントアプリケーションに挿入します。これにはクライアントアプリケーションの (［編集(E)｜形式を指定して貼り付け(S)］または［編集(E)｜リンク貼り付け(L)］などの) 適切なコマンドを選択します。

メモ:	DDE リンクを確立する方法は DDE クライアントアプリケーションによって異なります。DDE リンクの確立についての詳細はクライアントアプリケーションのマニュアルを参照してください。DDE クライアントが Delphi アプリケーションの場合は，DDE サーバーとのリンクの設定を参照してください。


例01835

次の例は DDEServerItem1 という DDE サーバー項目コンポーネントから WordPerfect 6.0 文書へのリンクを作成します。リンクを貼り付けできる他の DDE クライアントアプリケーションでもおそらく同様の手順が必要になるので，WordPerfect がない場合もこの例は参照する価値があります。

1.	DDE サーバーアプリケーションは実行時に次のコードを実行しなくてはなりません。

DDEServerItem1.CopyToClipboard;

2.	WordPerfect を起動し，［編集(E)｜形式を指定して貼り付け(S)］を選択します。

WordPerfect の［形式を指定して貼り付け］ダイアログボックスが表示されます。

3.	［リンク貼り付け(L)］を選択します。

［形式を指定して貼り付け］ダイアログボックスが閉じ，DDEServerItem1 の Value プロパティのリンクテキストが WordPerfect 文書の挿入点に表示されます。Value プロパティを変更すると，WordPerfect 文書内のテキストが自動的に更新されます。


OLE の使い方
OLE の使い方01836

参照

OLE を使うには，一方のアプリケーションが OLE サーバーで，もう一方のアプリケーションが OLE コンテナでなくてはなりません。Delphi では OLE オブジェクトを入れる OLE コンテナアプリケーションを作成できます。

OLE は次のように使います。OLE コンテナアプリケーションは OLE オブジェクトを表す画像を表示します。ユーザーは画像をダブルクリックすることによって OLE オブジェクトをアクティブにします。OLE オブジェクトがアクティブになると，OLE サーバーアプリケーションが起動し，ユーザーは OLE サーバーを使って OLE オブジェクトを編集できます。編集の後ユーザーは OLE コンテナ内で OLE オブジェクトを更新し，OLE サーバーを終了します。

いつ OLE を使うか

OLE は音声やドキュメントなどの複雑な情報を交換するときに使います。OLE コンテナ内でオブジェクトをアクティブにすると，OLE サーバーアプリケーションに制御が移り，ユーザーはコンテナアプリケーション内からサーバーアプリケーションのすべての機能にアクセスできます。

サーバーがすべての処理をするので，OLE オブジェクトを編集するためにコンテナをプログラムする必要はありません。

メモ:	すべてのアプリケーションが OLE をサポートしているわけではありません。アプリケーションが OLE をサポートしているかどうかを調べるには，そのアプリケーションのマニュアルを参照してください。


参照01837

OLE コンテナアプリケーションの作成

OLE オブジェクトのドロップ

OLE オブジェクトの挿入

リンクと埋め込み

OLE 1.0 と OLE 2.0

ファイルの OLE データ

OLE オブジェクトの貼り付け

OLE オブジェクトクリップボード形式の登録

OLE のクラス，ドキュメント，項目


OLE 1.0 と OLE 2.0
OLE 1.0 と OLE 2.001838

参照

現在 2 つの OLE バージョンがあります。

OLE 1.0

OLE 2.0

OLE 1.0

ユーザーが OLE 1.0 サーバーアプリケーションによって作成された OLE オブジェクトをアクティブにすると，そのサーバーアプリケーションのウィンドウが前景に開き，フォーカスがそこに移ります。OLE コンテナアプリケーションは背景にある別のウィンドウに存在します。

OLE 2.0

ユーザーが OLE 2.0 サーバーアプリケーションによって作成された OLE オブジェクトをアクティブにすると，オブジェクトはその場所でアクティブになります。これは，OLE コンテナのメニューとツールバーがサーバーのメニューとツールバーに変わることを意味します。オブジェクトは OLE コンテナウィンドウ内で編集できますが，すべての処理が OLE サーバーによって取り扱われます。


参照01839

OLE のクラス，ドキュメント，項目


リンクと埋め込み
リンクと埋め込み01840

参照

リンク OLE オブジェクト内のデータはそれを作成した OLE サーバーによって保持されます。

埋め込み OLE オブジェクト内のデータは OLE コンテナアプリケーションによって保持されます。

リンクオブジェクト

リンクオブジェクトはファイルに格納しなくてはなりません。OLE サーバーアプリケーションから OLE オブジェクトをファイルに保存しておかないと，新しい OLE リンクを作成できません。

リンク OLE オブジェクトファイル内のデータは OLE コンテナアプリケーションと他のアプリケーションによって変更できます。OLE サーバーアプリケーションと他の OLE コンテナアプリケーションのすべてが OLE オブジェクトにアクセスしてそれを変更できます。データは 1 つの場所に存在できますが，複数のアプリケーションからアクセスできます。

OLE オブジェクトファイルから最新のデータを連続的に得るように，Delphi 内で OLE コンテナアプリケーションをプログラムできます。OLE オブジェクトのデータが変化すると，それが他のアプリケーションによるものであっても，そのファイルとのリンクが入ったすべての OLE コンテナアプリケーション内で変化が現れます。

埋め込みオブジェクト

埋め込みオブジェクトはユーザーの OLE コンテナアプリケーションに格納され，他の OLE コンテナアプリケーションはその OLE オブジェクトにアクセスできません。他のアプリケーションが埋め込み OLE オブジェクトを編集できるのは，ユーザーが OLE コンテナアプリケーションからオブジェクトをアクティブにしたときだけです。そのときだけ OLE サーバーは OLE オブジェクトデータを編集できます。

埋め込み OLE オブジェクトはファイルとして存在しなくてもかまいません。すべてのデータはユーザーのコンテナアプリケーションに格納できます。OLE データを外部ファイルに格納しないため，誤って削除，変更，破壊することがありません。

埋め込みオブジェクトの欠点は OLE コンテナアプリケーションのサイズが挿入した OLE データの分だけ大きくなることです。

埋め込み OLE オブジェクトに対する変更がアプリケーションを次回実行したときに現れるようにしたい場合，OLE データをファイルに保存する必要があります。

OLE オブジェクトをリンクする場合と埋め込む場合について次の表に示します。

リンク	埋め込み

元のオブジェクトを変更でき，変更結果が元のオブジェクトとリンクされたすべてのアプリケーションまたはドキュメントに反映されるようにしたい	オブジェクトを変更でき，変更結果が特定のアプリケーションまたはドキュメント 1 つだけに反映されるようにしたい
元のオブジェクトを頻繁に変更したり，複数の OLE コンテナアプリケーションから変更する	元のオブジェクトを頻繁には変更せず，OLE コンテナアプリケーションの 1 つのインスタンスからだけ変更する
元のオブジェクトファイルを頻繁に移動することはなく，また削除はしない	元のオブジェクトファイルを頻繁に移動し，削除することもある
オブジェクトが大きく，ネットワークまたは電子メールによって配布する	オブジェクトが小さいか，大きいがネットワークまたは電子メールでは配布しない
ディスク容量節約のためにオブジェクトのコピーを 1 つだけにする必要がある	ディスク容量節約のためにオブジェクトのコピーを 1 つだけにする必要がない


参照01841

ファイルの OLE データ

OLE の使い方

OLE のクラス，ドキュメント，項目


OLE のクラス，ドキュメント，項目
OLE のクラス，ドキュメント，項目01842

参照

OLE クラス，ドキュメント，項目は OLE オブジェクトを定義します。

OLE クラス

OLE オブジェクトのクラスによってその OLE オブジェクトを作成した OLE サーバーアプリケーションが決まります。

OLE クラスは OLE サーバーアプリケーションの名前です。たとえば OLE オブジェクトが Novell Quattro Pro 6.0 ノートブックの場合，クラスによってサーバーアプリケーションが Quattro Pro であることがわかります。

OLE サーバーアプリケーションから複数の種類のオブジェクトをリンクしたり埋め込むことができる場合があります。たとえば表計算アプリケーションからワークシート全体，セルの範囲，グラフをリンクしたり埋め込むことができます。

OLE クラスによって OLE オブジェクトにどの種類のデータが入っているかもわかります。

OLE コンテナコンポーネントでは，OLE クラスは OBJClass プロパティによって決まります。

OLE ドキュメント

OLE オブジェクトのドキュメントによって，OLE オブジェクトのデータが入ったソースファイルが決まります。リンクオブジェクトはファイル内に存在しなければならないので，リンクオブジェクトにはオブジェクトドキュメントを使わなくてはなりません。既存のソースファイルからオブジェクトを作成する場合，オブジェクトドキュメントは埋め込みオブジェクトにだけ使います。ファイルに存在しない新しい埋め込みオブジェクトを作成する場合，OLE ドキュメントは指定しません。

たとえば OLE オブジェクトを Novell Quattro Pro 6.0 ノートブック SALES.WB1 とリンクする場合，OLE ドキュメントによって SALES.WB1 というファイルにデータが格納されていることがわかります。

OLE コンテナコンポーネントでは，OLE クラスは ObjDoc プロパティによって決まります。

OLE 項目

OLE オブジェクトの項目によって，リンクするまたは埋め込むデータが入った OLE ドキュメントの部分が決まります。項目は OLE オブジェクトにドキュメントファイルの一部分のデータを入れたいときに使います。

たとえば OLE オブジェクトが Novell Quattro Pro 6.0 ノートブックのセル範囲 E2 から F5 とリンクされている場合，OLE 項目によってデータがノートブック全体ではなくセル E2 から F5 だけに格納されていることがわかります。

OLE コンテナコンポーネントでは，OLE 項目は ObjItem プロパティによって決まります。

メモ:	OLE オブジェクトに入れるデータが OLE ドキュメント全体の場合は，OLE 項目を使う必要はありません。


参照01843

ObjClass プロパティ

ObjDoc プロパティ

ObjItem プロパティ


OLE コンテナアプリケーションの作成
OLE コンテナアプリケーションの作成01844

参照

OLE コンテナアプリケーションは単純に OLE オブジェクトを保持します。

OLE コンテナアプリケーションを作成するには

フォームに入れたいすべての OLE オブジェクトについて OLE コンテナコンポーネント (TOLEContainer) をフォームに追加する

OLE オブジェクトを初期化するには

OLE コンテナコンポーネントの PInitInfo プロパティを指定する。PInitInfo プロパティは OLE 初期化情報を識別するポインタである。PInitInfo プロパティが有効な初期化情報を指している場合，オブジェクトクラス，オブジェクトドキュメント，オプションのオブジェクト項目が自動的に指定される

次のいずれかによって OLE オブジェクトを初期化できます。

OLE オブジェクトの挿入

OLE オブジェクトの貼り付け

OLE オブジェクトのドロップ


参照01845

OLE のクラス，ドキュメント，項目


OLE オブジェクトの挿入
OLE オブジェクトの挿入01846

例

OLE オブジェクトは設計時または実行時にシステム上の任意の OLE サーバーから挿入できます。

OLE オブジェクトを設計時に挿入して OLE コンテナを初期化するには

1.	フォーム上で OLE コンテナコンポーネントを選択します。

2.	オブジェクトインスペクタ内で ObjClass またはObjDoc プロパティの省略記号ボタンをクリックします。［オブジェクトの挿入］ダイアログボックスが表示されます。

3.	［オブジェクトの種類(T)］リストから OLE オブジェクトを選択します。

4.	OLE サーバーによってすでに作成されファイルに保存してあるオブジェクトを挿入するには，［ファイルから作成(F)］を選択します。OLE オブジェクトファイルのファイル名とパスを指定します。オブジェクトをリンクするには，［リンク(L)］チェックボックスにチェックマークを付けます。

新しいオブジェクトを埋め込むには，［新規に作成(N)］を選択します。新しいオブジェクトのリンクはできません。

5.	［OK］を選択します。

OLE サーバーがアクティブになります。OLE サーバーから OLE オブジェクトを編集できます。編集が終わったら，OLE サーバーを終了し OLE コンテナアプリケーション内の OLE オブジェクトを更新します。

6.	ObjClass プロパティには OLE クラスについての適切な値が入り，OLE コンテナコンポーネントには OLE オブジェクトを表す画像が入ります。既存のファイルから OLE オブジェクトを作成した場合，ObjDoc プロパティには OLE ドキュメントについての適切な値が入ります。

OLE オブジェクトを実行時に挿入して OLE コンテナを初期化するには

1.	InsertOLEObjectDlg 関数を呼び出すコードを実行します。

InsertOLEObjectDlg が呼び出されると，［オブジェクトの挿入］ダイアログボックスが表示されます。このダイアログボックスを使って，リンクするまたは埋め込む OLE オブジェクトを指定できます。オブジェクトを指定し［OK］を選択すると，InsertOLEObjectDlg がTrue を返します。

2. InsertOLEObjectDlg が True を返した場合，InsertOLEObjectDlg の PInitInfo パラメータの値を OLE コンテナコンポーネントのPInitInfo プロパティに代入します。

OLE サーバーがアクティブになります。OLE サーバーから OLE オブジェクトを編集できます。編集が終わったら，OLE サーバーを終了し OLE コンテナアプリケーション内の OLE オブジェクトを更新します。

3.	ObjClass プロパティには OLE クラスについての適切な値が入り，OLE コンテナコンポーネントには OLE オブジェクトを表す画像が入ります。既存のファイルから OLE オブジェクトを作成した場合，ObjDoc プロパティには OLE ドキュメントについての適切な値が入ります。

4. OLE コンテナコンポーネントが初期化され，InsertOLEObjectDlg の PInitInfo パラメータによって指された OLE オブジェクト初期化情報がアプリケーションで不要になったら，ReleaseOLEInitInfo 手続きによって割り当てメモリを解放します。


例01847

次の例は OLE オブジェクトを OLEContainer1 に挿入し，初期化情報のために割り当てられたメモリを解放します。

var

  Info: Pointer;

begin

  if InsertOLEObjectDlg(Form1, 0, Info) then

  begin

    OLEContainer1.PInitInfo := Info;

    ReleaseOLEInitInfo(Info);

  end;

end;


OLE オブジェクトの貼り付け
OLE オブジェクトの貼り付け01848

例

OLE サーバーのアプリケーションとデータにアクセスできる場合，OLE 項目が入った OLE オブジェクトを設計時または実行時に貼り付けできます。

OLE オブジェクトを設計時に貼り付けて OLE コンテナを初期化するには

1.	サーバーアプリケーションを起動し，OLE コンテナコンポーネントによって OLE オブジェクト内に入れる項目を選択します。

2.	サーバーアプリケーションからデータと OLE オブジェクト情報をクリップボードにコピーします。

3.	Delphi を起動し，OLE コンテナコンポーネントを選択します。

4.	オブジェクトインスペクタ内でObjItem プロパティの省略記号ボタンをクリックします。

［形式を指定して貼り付け］ダイアログボックスが表示されます。

5.	［データの種類(A)］リストから OLE オブジェクトを選択します。

6.	埋め込みオブジェクトを作成するには ［貼り付け(P)］，リンクオブジェクトを作成するには ［リンク貼り付け(L)］を選択します。

7.	［OK］を選択します。

ObjClass, ObjDoc, ObjItemプロパティに OLE オブジェクトについての適切な値が入ります。OLE コンテナコンポーネントには OLE オブジェクトを表す画像が入ります。

OLE オブジェクトを実行時に貼り付けて OLE コンテナを初期化するには

1.	PasteSpecialDlg 関数を呼び出すコードを実行します。PasteSpecialDlg を呼び出す前に OLE オブジェクトのクリップボード形式を登録する必要があります。

PasteSpecialDlg が呼び出されると，［形式を指定して貼り付け］ダイアログボックスが表示されます。このダイアログボックスを使って，リンクするまたは埋め込む OLE オブジェクトを指定できます。オブジェクトを指定し［OK］を選択すると，PasteSpecialDlg が True を返します。

2. PasteSpecialDlg が True を返した場合，PasteSpecialDlg の PInitInfo パラメータの値を OLE コンテナコンポーネントのPInitInfo プロパティに代入します。

OLE サーバーがアクティブになります。OLE サーバーから OLE オブジェクトを編集できます。編集が終わったら，OLE サーバーを終了し OLE コンテナアプリケーション内の OLE オブジェクトを更新します。

3.	ObjClass プロパティには OLE クラスについての適切な値が入り，OLE コンテナコンポーネントには OLE オブジェクトを表す画像が入ります。既存のファイルから OLE オブジェクトを作成した場合，ObjDoc プロパティには OLE ドキュメントについての適切な値が入ります。ObjItem プロパティには貼り付けられた項目についての適切な値が入ります。

4. OLE コンテナコンポーネントが初期化され，PasteSpecialDlg の PInitInfo パラメータによって指された OLE オブジェクト初期化情報がアプリケーションで不要になったら，ReleaseOLEInitInfo 手続きによって割り当てメモリを解放します。


例01849

次の例は OLE オブジェクトを OLEContainer1 内に貼り付け，初期化情報のために割り当てられたメモリを解放します。貼り付ける前にリンク OLE オブジェクトと埋め込み OLE オブジェクトのためのクリップボードの形式が登録され，オブジェクト形式の Fmts 配列の要素が初期化されます。

var

  FEmbedClipFmt,

  FLinkClipFmt: Word;

  Fmts: array[0..1] of BOLEFormat;

  Fmt: Word;

  Hndl: THandle;

  Info: Pointer;

begin

  FEmbedClipFmt := RegisterClipboardFormat('Embedded Object');

  FLinkClipFmt := RegisterClipboardFormat('Linked Object');

  Fmts[0].fmtId := FEmbedClipFmt;

  Fmts[0].fmtMedium := BOLEMediumCalc(FEmbedClipFmt);

  Fmts[0].fmtIsLinkable := False;

  StrPCopy (Fmts[0].fmtName, '%s');

  StrPCopy (Fmts[0].fmtResultName, '%s');

  Fmts[1].fmtId := FLinkClipFmt;

  Fmts[1].fmtMedium := BOLEMediumCalc(FLinkClipFmt);

  Fmts[1].fmtIsLinkable := True;

  StrPCopy (Fmts[1].fmtName, '%s');

  StrPCopy (Fmts[1].fmtResultName, '%s');

  if PasteSpecialDlg(Form1, Fmts, 0, Fmt, Hndl, Info) then

  begin

    OLEContainer1.PInitInfo := Info;

    ReleaseOLEInitInfo(Info);

  end;

end;


OLE オブジェクトのドロップ
OLE オブジェクトのドロップ01850

参照	例

OLE コンテナコンポーネントを初期化するために，OLE ドラッグアンドドロップをサポートする任意の OLE サーバーから OLE オブジェクトをドラッグして Delphi アプリケーションにドロップできます。

OLE オブジェクトを設計時にドロップして OLE コンテナを作成し初期化するには

1.	設計時に OLE サーバーアプリケーションから OLE オブジェクトをドラッグしてフォームにドロップします。

ドロップした時点で OLE コンテナコンポーネントがフォームに追加されます。ObjClass プロパティには OLE クラスについての適切な値が入り，OLE コンテナコンポーネントには OLE オブジェクトを表す画像が入ります。

OLE オブジェクトを実行時にドロップして OLE コンテナを初期化するには

1.	RegisterFormAsOLEDropTarget 手続きによってフォームを OLE のドロップターゲットとして登録します。RegisterFormAsOLEDropTarget を呼び出す前に OLE オブジェクトのクリップボード形式を登録する必要があります。

2.	登録したフォームの OnDragDrop イベントハンドラの中で (Source パラメータによって渡される) ドロップオブジェクトを TOLEDropNotify オブジェクトとして型キャストします。

3. Source オブジェクトのPInitInfo プロパティの値を OLE コンテナコンポーネントの PInitInfo プロパティに代入します。

4.	ObjClass プロパティには OLE クラスについての適切な値が入り，OLE コンテナコンポーネントには OLE オブジェクトを表す画像が入ります。


参照01851

OLE オブジェクトクリップボード形式の登録


例01852

次の例ではユーザーが実行時に OLE オブジェクトまたはテキストをフォームにドロップできます。テキストをドロップした場合，テキストの値が Label1 に表示されます。OLE オブジェクトをドロップした場合，OLEContainer1 が初期化されます。

最初のルーチンは OLE オブジェクト形式を登録し，Fmts 配列を初期化し，Form1 を OLE のドロップターゲットとして登録する Form1 のための OnCreate イベントハンドラです。2 番目のルーチンは Label1 の Caption にテキストを代入するか OLEContainer1 を初期化する Form1 のための OnDragDrop イベントハンドラです。

procedure TForm1.FormCreate(Sender: TObject);

var

  FEmbedClipFmt,

  FLinkClipFmt: Word;

  Fmts: array[0..2] of BOLEFormat;

begin

  FEmbedClipFmt := RegisterClipboardFormat('Embedded Object');

  FLinkClipFmt := RegisterClipboardFormat('Linked Object');

  Fmts[0].fmtId := FEmbedClipFmt;

  Fmts[0].fmtMedium := BOLEMediumCalc(FEmbedClipFmt);

  Fmts[0].fmtIsLinkable := False;

  StrPCopy (Fmts[0].fmtName, '%s');

  StrPCopy (Fmts[0].fmtResultName, '%s');

  Fmts[1].fmtId := FLinkClipFmt;

  Fmts[1].fmtMedium := BOLEMediumCalc(FLinkClipFmt);

  Fmts[1].fmtIsLinkable := True;

  StrPCopy (Fmts[1].fmtName, '%s');

  StrPCopy (Fmts[1].fmtResultName, '%s');

  Fmts[2].fmtId := CF_TEXT;

  Fmts[2].fmtMedium := BOLEMediumCalc(CF_TEXT);

  Fmts[2].fmtIsLinkable := False;

  StrPCopy (Fmts[2].fmtName, '%s');

  StrPCopy (Fmts[2].fmtResultName, '%s');

  RegisterFormAsOLEDropTarget(Form1, Fmts);

end;

procedure TForm1.FormDragDrop(Sender, Source: TObject; X,

  Y: Integer);

var

  Ptr: PChar;

  Str: String;

begin

  if Source is TOLEDropNotify then

    with Source as TOLEDropNotify do

    begin

      if (DataFormat = CF_TEXT) then

      begin

        Ptr := GlobalLock(DataHandle);

        Str := StrPas(Ptr);

        GlobalUnlock(DataHandle);

        GlobalFree(DataHandle);

        Label1.Caption := Str;

      end

      else if (DataFormat = FLinkClipFmt) or

              (DataFormat = FEmbedClipFmt) then

      begin

        OLEContainer1.PInitInfo := PInitInfo;

        ReleaseOLEInitInfo(PInitInfo);

      end;

    end;

end;


OLE オブジェクトクリップボード形式の登録
OLE オブジェクトクリップボード形式の登録01853

参照

OLE オブジェクトの貼り付けまたはドロップによって OLE コンテナコンポーネントを初期化する前に，リンクするか埋め込む OLE オブジェクトのクリップボード形式を登録する必要があります。これらの形式は PasteSpecialDlg またはRegisterFormAsOLEDropTarget の Fmts パラメータに渡される配列を初期化するのに使われます。

リンクまたは埋め込み OLE オブジェクトのクリップボード形式を登録するには

1.	形式を登録するために RegisterClipboardFormat を呼び出します。形式の説明が入った文字列をパラメータとして渡します。

RegisterClipboardFormat は新しく登録されたクリップボード形式をユニークに識別する Word 値を返します。

OLE オブジェクト形式の配列を初期化するには

1.	処理できるようにしたいオブジェクト形式について，1 つの要素を持った BOLEFormat 型の配列を宣言します。

たとえばリンクオブジェクトだけを貼り付けたい (またはドロップしたい) 場合，1 要素配列を宣言します。リンクオブジェクト，埋め込みオブジェクト，テキスト，メタファイルグラフィックを処理したい場合，4 要素配列を宣言します。

2. 配列の BOLEFormat 要素の fmtId, fmtMedium, fmtIsLinkable, fmtName, fmtResultName フィールドを初期化します。BOLEMediumCalc を使って fmtId のクリップボード形式の値に対応する fmtMedium フィールドの値を計算できます。


参照01854

OLE オブジェクトのドロップ

OLE オブジェクトの貼り付け


ファイルの OLE データ
ファイルの OLE データ01855

例

OLE コンテナアプリケーション内から OLE オブジェクトへの変更を保存するには，オブジェクトデータをファイルに保存する必要があります。

オブジェクトがリンクされている場合，データは自動的に元のソースファイルに格納され，データが変化するたびにオブジェクトが更新されます。

オブジェクトが埋め込まれている場合，アプリケーションはデータを特殊な OLE 形式で保存しなくてはなりません。

OLE データファイルの形式

OLE データファイルは元の OLE オブジェクトを作成したアプリケーションによって使われる形式と同じではありません。たとえばコンテナアプリケーションが埋め込み表計算ワークシートをファイルに保存する場合，OLE サーバーの表計算アプリケーションはファイルをワークシートとして開けません。このファイルに保存されたデータを使えるのは OLE コンテナアプリケーションだけです。

OLE オブジェクトを保存するには OLE コンテナコンポーネントの SaveToFile メソッドを呼び出す

SaveToFile メソッドで保存されたファイルから OLE データを得るには LoadFromFile メソッドを使う

OLE コンテナコンポーネントが入ったフォームの OnCreate イベントに LoadFromFile 呼び出しをアタッチした場合，OLE コンテナアプリケーションを実行するたびに，アプリケーションは OLE オブジェクトの最新バージョンを復元します。


例01856

例 (OLE データをファイルに保存する)

例 (OLE データをファイルからロードする)


例01857

次の例は C:\TIPPER ディレクトリの SALES.OLE というファイルに OLE データを格納します。

OleContainer1.SaveToFile('C:\TIPPER\SALES.OLE');


例01858

次の例は C:\TIPPER ディレクトリの SALES.OLE というファイルから OLE データをロードします。

OleContainer1.LoadFromFile('C:\TIPPER\SALES.OLE');


プリンタオブジェクトの使い方
プリンタオブジェクトの使い方01859

参照	例	TPrinter reference

プリンタオブジェクトには，アプリケーションから文書の印刷を制御するためのメソッドとプロパティがあります。これらのメソッドとプロパティをユーザーに設定させるために［印刷］と［プリンタの設定］のコモンダイアログボックスを使います。

Canvas

Canvas は現在印刷中の文書の画面を表します。AssignPrn を使えばプリンタオブジェクトの Canvas プロパティをテキストファイルのように取り扱えます。プリンタオブジェクトは Canvas プロパティ (テキストファイル) の内容をプリンタに送ります。

Fonts

現在のプリンタがサポートするフォントのリストを表します。これらのフォントの内容は TFontDialog コンポーネントの Device プロパティを fdPrinter にしたときに［フォント名(F)］リストボックスに表示されるものと同じです。

このダイアログボックスで選択したフォントを印刷したいテキストが入ったメモコンポーネントのための Font プロパティに反映しても，プログラムが別の指定をするまでプリンタは Windows デバイスドライバが返すデフォルト (System) フォントを使ってテキストファイルを印刷します。プリンタオブジェクトと［フォントの指定］ダイアログボックスまたはメモの Font プロパティとの間には何の関係もないからです。

プリンタのフォントを変更するには

メモコンポーネント (またはテキストを印刷したい他のコンポーネント) の Font プロパティをプリンタオブジェクトの Canvas の Font プロパティに割り当てます。これによって，選択したフォントがプリンタにダウンロードされます。


参照01860

メモの内容の出力


メモの内容の印刷
メモの内容の印刷01861

参照	例

メモコンポーネントの内容を印刷するには

1.	AssignPrn を呼び出すことによってプリンタにテキストファイル変数を割り当てます。

2.	Rewrite を呼び出すことによって，出力ファイルを作成し開きます。

ファイル変数に送られた Write 文または Writeln 文はプリンタオブジェクトの Canvas プロパティ上に書き込まれます。

AssignPrn 手続きは Delphi の Printers ユニットで宣言するので，AssignPrn を呼び出すユニットの uses 節に Printers を追加しなくてはなりません。

プリンタの入力準備ができたら，プリンタにメモの内容 (つまり Lines プロパティ)を書き込めます。


参照01862

プリンタオブジェクトの使い方


例01863

次の例は，ユーザーが［ファイル(F)｜印刷(P)］を選択したときに Memo フィールドの内容を印刷します。

procedure TForm1.Print1Click(Sender: TObject);

var

  Line: Integer;

  PrintText: TextFile;   {ファイル変数を宣言します}

begin

  if PrintDialog1.Execute then

  begin

    AssignPrn(PrintText);   {PrintText をプリンタに割り当てます}

    Rewrite(PrintText);     {出力ファイルを作成して開きます}

    Printer.Canvas.Font := Memo1.Font;  {assigns Font settings to the canvas}

{Font 設定をキャンバスに割り当てます}

    for Line := 0 to Memo1.Lines.Count - 1 do

      Writeln(PrintText, Memo1.Lines[Line]);	{writes the contents of the Memo1 to the printer object}

    CloseFile(PrintText); {プリンタ変数を閉じます}

  end;

end;


実行時のメニューのアクセスと編集
実行時のメニューのアクセスと編集01864

参照

アプリケーションメニューは Delphi メニューデザイナを使ってビジュアルに設計しますが，メニューを最終的に便利にするのは基礎のコードです。メニューコマンドは OnClick イベントに応答する必要があり，プログラム条件に従ってメニューを動的に変更したいときはよくあります。

アプリケーションメニューを独自に設計するか，または Delphi に付属の設計済みメニューテンプレートを使うことができます。メニューバーとポップアップ (ローカル) メニューの設計方法についての詳細はメニューの設計を参照してください。

次の各トピックでは設計時にコードをメニューイベントと関連付ける方法と，実行中のアプリケーションでメニューにアクセスしたりメニューを変更する方法について説明しています。

コードへのメニューイベントの関連付け

メニュー項目の動的追加

メニューのマージ

メニュー項目の無効化 (淡色表示)

メニューコマンドを使ったダイアログボックスのオープン


参照01865

TPopupMenu コンポーネント

開いた文書リストのメニューへの表示


コードへのメニューイベントの関連付け
コードへのメニューイベントの関連付け01866

参照

メニュー項目にあるイベントは OnClick 1 つだけです。メニュー項目の OnClick イベントと関連付けるコードはユーザーが実行中のアプリケーションでメニューコマンドをクリックするか，またはアクセラレータキーかショートカットキーを使ってそのメニュー項目を選択したときに実行されます。

任意のメニュー項目のためのイベントハンドラを生成するには

1.メニューデザイナウィンドウでメニュー項目をダブルクリックします。

2.	begin...end ブロック内でユーザーがこのメニューコマンドをクリックしたときに実行したいコードを入力します。

フォームに表示されるメニュー項目のためのイベントハンドラを生成するには

メニュー項目 (メニューコンポーネントではない) をクリックする

たとえば下位に［開く(O)］メニュー項目を持つファイルメニューがフォームに入っている場合，関連付けられたイベントハンドラを生成するか開くために，［開く(O)］メニュー項目をクリックできる

コードをメニュー項目の OnClick イベントと関連付けるには

1.	オブジェクトインスペクタの［Properties］ページを表示することによって，メニュー項目の Name プロパティが空白になっていないことを確認します。Name プロパティが空白の場合，プロパティの値を入力し，Enter を押します。

2.	オブジェクトインスペクタの［Events］ページを表示し，OnClick イベントを選択します。

3.	OnClick イベントの値列をダブルクリックします。

4.	begin...end ブロック内でユーザーがこのメニューコマンドをクリックしたときに実行したいコードを入力します。

メニュー項目を既存の OnClick イベントハンドラと関連付けるには

1.メニューデザイナウィンドウでメニュー項目を選択します。

2.	オブジェクトインスペクタの［Properties］ページを表示し，メニュー項目の Name プロパティに値が割り当てられていることを確認します。

3.	オブジェクトインスペクタの［Events］ページを表示します。

4.	前に作られたイベントハンドラのリストを開くために OnClick の隣の下矢印をクリックします。

このフォーム内の OnClick イベントについて作られたイベントハンドラがリストに表示されます。

5.	リストのイベントハンドラの名前をクリックして選択します。

このイベントハンドラのために作られたコードが選択したメニュー項目と関連付けられます。

メモ:	Delphi はコードエディタ内で新しい項目のためにイベントハンドラの新しいコピーは作成しません。新しい項目が OnClick イベントを受け取ったときに元のコードを呼び出すだけです。


参照01867

実行時のメニューのアクセスと編集

メニュー項目の動的追加

開いた子ウィンドウの配列とアクセス

メニュー項目の無効化 (淡色表示)

メニューのマージ

メニューコマンドを使ったダイアログボックスのオープン

コードエディタ


メニュー項目の動的追加
メニュー項目の動的追加01868

参照	例

アプリケーションの実行中にユーザーにより多くの情報またはオプションを提供するために，既存のメニュー構造にメニュー項目を追加することができます。

メニュー項目の Add メソッドまたは Insert メソッドを使ってメニュー項目を挿入する

Visible プロパティを変更することによってメニュー内の項目を隠すか表示する。Visible プロパティによってメニュー項目をメニューに表示するかどうかが決まる

Enabled プロパティを使ってメニュー項目を隠さずに淡色表示にする

マルチドキュメントインターフェース (MDI) とオブジェクトのリンクと埋め込み (OLE) のアプリケーションでは，メニュー項目を既存のメニューバー内にマージできます。詳細はメニューのマージを参照してください。

メニュー項目を既存のメニュー内に挿入するには

1.	応答させたいイベントに対するイベントハンドラを作成します。

2.	メニュー項目を TMenuItem 型の変数として宣言します。

3.	メニュー項目を既存のメニューに追加する手続きを作ります。すべての手続きと同様にイベントハンドラの作成から始めます。

この手続きの (手続き宣言自身ではなく) 最初の行はファイルメニュー内に新しい項目を作成するために Create メソッドを呼び出します。次の行は項目のキャプションを指定します。最後の行は Insert メソッドを呼び出します。これはどこに何を挿入するかに関する値をとります。最初の位置は常にオフセット 0 なので，1 はメニューのリストの 2 番目の位置を指定します。


参照01869

実行時のメニューのアクセスと編集

コードへのメニューイベントの関連付け

開いた子ウィンドウの配列とアクセス

メニュー項目の無効化 (淡色表示)

メニューのマージ

メニューコマンドを使ったダイアログボックスのオープン


例01870

The following example adds a new menu item to the Window menu (WindowMenu) when Button1 is clicked.

procedure TForm1.Button1Click(Sender: TObject);

var

  NewItem: TMenuItem;

begin

  NewItem := TMenuItem.Create(WindowMenu); {Creates the new menu item}

  NewItem.Caption := 'My Menu Command';  {Caption for the new menu item}

  WindowMenu.Insert(1, NewItem);   {Inserts the new menu item}

end;


メニューのマージ
メニューのマージ01871

参照

マルチドキュメントインターフェース (MDI) アプリケーションでは，アプリケーションのメインメニューは他のフォームまたは OLE サーバーオブジェクトからメニュー項目を受け取れる必要があります。これはメニューのマージとよく呼ばれます。

マージのためのメニューを準備するには 2 つのプロパティの値を指定します。

Menu (フォームのプロパティ)

GroupIndex (メニューのメニュー項目のプロパティ)

アクティブメニューの指定: Menu プロパティ

Menu プロパティはフォームについてアクティブなメニューを指定します。メニューマージ操作はアクティブなメニューにだけ適用されます。フォームに複数のメニューコンポーネントがある場合，実行時にコード内で Menu プロパティを設定することによってアクティブなメニューを変更できます。たとえば

Form1.Menu := SecondMenu;

マージメニュー項目の順序の決定: GroupIndex プロパティ

GroupIndex プロパティはマージメニュー項目を共有メニューバーに表示する順序を決めます。マージメニュー項目はメインメニューバー上の項目のかわりに使ったり，または挿入できます。

GroupIndex のデフォルト値は 0 です。GroupIndex の値を指定するにはいくつかの規則があります。

最も小さい値を持つメニューが最初 (左端) に表示される

たとえば，ファイルメニューのように常に左端に表示したいメニューでは GroupIndex プロパティを 0 (ゼロ) に設定する。同様にヘルプメニューのように常に右端に表示したいメニューでは十分に大きい数を指定する (数が連続している必要はない)

メインメニューの項目を置き換えるには子メニューの項目に同じ GroupIndex 値を与える

これはグループ化または単一項目に適用できる。たとえばメインフォームに GroupIndex 値が 1 の編集メニュー項目がある場合，子フォームのメニューの 1 つまたは複数の項目にも GroupIndex 値 1 を与えることによって，それらの項目に置き換えられる

子メニューの複数の項目に同じ GroupIndex 値を与えると，そのままの順序でメインメニューにマージされる

メインメニューの項目を置き換えずに項目を挿入するには，メインメニューの項目の数値範囲に空きを作っておき，子フォームの値を差し込む

たとえばメインメニューの項目に 0 と 5 を付け，子メニューの項目には 1, 2, 3, 4 を付けることによってそれらを挿入する

OLE クライアントアプリケーションにはこのほかにも規則が適用されます。


参照01872

実行時のメニューのアクセスと編集

OLE の使い方


メニュー項目の無効化 (淡色表示)
メニュー項目の無効化 (淡色表示)01873

参照	例

メニューからコマンドを取り除かなくても，現在のプログラム条件に従ってユーザーが特定のメニューコマンドにアクセスできないようにすることができます。たとえば文書でテキストが選択されていない場合，編集メニューの［切り取り(T)］［コピー(C)］［削除(D)］を淡色表示にします。

メニュー項目を無効化するには

メニュー項目の Enabled プロパティを False に設定します。Visible プロパティとは対照的に Enabled プロパティを False にしてもメニュー項目が淡色表示になるだけで，項目は見える状態のままです。

ほとんどのプロパティと同様にオブジェクトインスペクタを使って Enabled プロパティの初期値を設定できます。このプロパティのデフォルト値は True です。


参照01874

実行時のメニューのアクセスと編集


例01875

ここに示す UpdateMenus 手続きはメモフィールドでテキストが選択されているかどうかに基づいて［切り取り(T)］［コピー(C)］［削除(D)］メニュー項目の Enabled プロパティを設定します。一方［貼り付け(P)］コマンドの Enabled プロパティはクリップボードにテキストがあるかどうかに基づいて設定します。

この手続きを編集メニュー項目の OnClick イベントハンドラなどから呼び出すと，メニュー項目の状態がこれらの条件を動的に反映します。

procedure TEditForm.SetEditItems(Sender: TObject);

begin

  UpdateMenus;

end;

UpdateMenus は論理変数 HasSelection を使ってメモの SelLength プロパティの値を反映します。SelLength がゼロに等しくない (つまりメモ内でテキストが選択されている) 場合，HasSelection は True を格納します。それ以外の場合は，False を格納します。手続きの残りの部分は HasSelection の値に基づいてメニュー項目の Enabled プロパティに値を割り当てます。

procedure TEditForm.UpdateMenus;

var

  HasSelection: Boolean;

begin

  Paste1.Enabled := Clipboard.HasFormat(CF_TEXT);

  HasSelection := Memo1.SelLength <> 0;

  Cut1.Enabled := HasSelection;

  Copy1.Enabled := HasSelection;

  Delete1.Enabled := HasSelection;

end;

クリップボードの HasFormat メソッドはクリップボードに特定の形式のオブジェクト，テキスト，イメージが入っているかどうかに基づいて論理値を返します。型テキスト (CF_TEXT) の HasFormat の論理式の値をチェックすることによって， UpdateMenus 手続きはクリップボードにテキストが入っているならば［貼り付け(P)］メニュー項目を使用可能にし，クリップボードにテキストが入っていないならば［貼り付け(P)］を使用不可にします。


メニューコマンドを使ったダイアログボックスのオープン
メニューコマンドを使ったダイアログボックスのオープン01876

参照

メニューコマンドによってダイアログボックスを開くために，メニュー項目の OnClick イベントに応じてダイアログボックスの Execute メソッドを呼び出せます。たとえば次のイベントハンドラコードはユーザーがアプリケーションの［ファイル(F)｜開く(O)］コマンドを選択したときに［ファイルを開く］コモンダイアログボックスを呼び出します (コマンドの Name プロパティは FileOpen に設定されているとします)。

procedure TForm1.FileOpenClick(Sender: TObject);

begin

  OpenDialog1.Execute;

end;

開いたダイアログボックスとアプリケーションがどのように対話するかについては指定する必要があります。


参照01877

実行時のメニューのアクセスと編集

コードへのメニューイベントの関連付け

メニュー項目の動的追加

開いた子ウィンドウの配列とアクセス


文字列リストエディタ
文字列リストエディタ01878

参照

文字列リストエディタは設計時に文字列を TStrings として宣言したプロパティへ追加，編集，読み込み，保存するために使います。

文字列リストエディタを開くには

1.	フォーム上に文字列リストを使うコンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

後に示すいずれかのプロパティの値列で省略記号ボタンをクリックする

後に示すいずれかのプロパティの値列で TStrings という語をダブルクリックする

［読み込み(L)］

［読み込み(L)］をクリックすると［文字列リストの読み込み］ダイアログボックスが表示され，既存のファイルを選択して文字列リストエディタの中へ読み出せます。

［保存(S)］

［保存(S)］をクリックすると，現在の文字列リストがファイルへ書き込まれます。［文字列リストの保存］ダイアログボックスが開き，ディレクトリとファイル名を指定できます。


参照01879

文字列リストに対する操作


文字列リストの読み込みダイアログボックス
文字列リストの読み込みダイアログボックス01880

［文字列リストの読み込み］ダイアログボックスはテキストファイルを選択してプロパティへ読み込むために使います。

［文字列リストの読み込み］ダイアログボックスを開くには

文字列リストエディタで［読み込み(L)］をクリックする

ダイアログボックスオプション

［ファイル名(N)］

読み込みたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

各種のファイルを表示するためのフィルタを選択します。デフォルトではカレントディレクトリのテキストファイル (*.TXT) がファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

カレントドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


文字列リストの保存ダイアログボックス
文字列リストの保存ダイアログボックス01881

［文字列リストの保存］ダイアログボックスは文字列リストエディタ内の文字列リストをテキストファイルへ格納するために使います。

［文字列リストの保存］ダイアログボックスを開くには

文字列リストエディタで［保存(S)］をクリックする

ダイアログボックスオプション

［ファイル名(N)］

保存したいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

各種のファイルを表示するためのフィルタを選択します。デフォルトではカレントディレクトリのテキストファイル (*.TXT) がファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

カレントドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


画像エディタ
画像エディタ01882

画像エディタはグラフィック互換コンポーネントへ追加するイメージを選択したり，フォーム用のアイコンを指定したりするために使います。

画像エディタを開くには

1.	フォーム上にグラフィック互換コンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

後に示すいずれかのプロパティの値列で省略記号ボタンをクリックする

後に示すいずれかのプロパティの値列をダブルクリックする

メモ:	フォーム内で Image コンポーネントをダブルクリックしても画像エディタが開きます。

［読み込み(L)］

［読み込み(L)］をクリックすると［Load Picture］ダイアログボックスが表示され，既存のファイルを選択して画像エディタの中へ読み出せます。画像エディタへイメージを読み込む方法についての詳細は設計時のイメージの読み込みを参照してください。

［保存(S)］

［保存(S)］をクリックすると［Save Picture As］ダイアログボックスが開き，イメージを格納するディレクトリとファイル名を指定できます。

［初期化(C)］

［初期化(C)］をクリックすると，現在のイメージと選択したコンポーネントの間の関連付けが解除されます。


設計時のイメージの読み込み
設計時のイメージの読み込み01883

参照

Delphi 画像エディタは任意のグラフィック互換コンポーネントへイメージを読み込んだり，実行時にフォームを最小化したときのフォーム用アイコンを指定したりするために使います。

個々のグラフィック互換コンポーネントは Delphi 画像エディタを使うプロパティを持っています。グラフィック互換コンポーネントとそのプロパティのリストについては，画像エディタを参照してください。

設計時にイメージを読み込むには

1.	グラフィック互換コンポーネントをフォームに追加します。

2.	コンポーネントのサイズを自動的にグラフィックに合わせるには，グラフィックを読み込む前にコンポーネントの AutoSize プロパティを True に設定します。

3.	オブジェクトインスペクタで画像エディタを使うプロパティを選択します。

4.	値列をダブルクリックするか省略記号ボタンをクリックすると，画像エディタが開きます。

(フォーム内で Image コンポーネントをダブルクリックしても画像エディタが開きます。)

5.	［読み込み(L)］ボタンを選択して［画像読み込み］ダイアログボックスを開きます。

6.	［画像読み込み］ダイアログボックスを使って表示したいイメージを選択し，［OK］を選択します。

選択したイメージが画像エディタの中に表示されます。

7.	［OK］を選択すると選択したイメージが受け入れられ，［画像エディタ］ダイアログボックスが閉じます。

フォーム上のコンポーネントの中にイメージが表示されます。

メモ:	グラフィックを Image コンポーネントの中へ読み込むとき，Image コンポーネントの Stretch プロパティを True に設定すると，グラフィックがコンポーネントに合うよう自動的にサイズ変更されます (Stretch はアイコンファイル (.ICO) のサイズには影響を及ぼしません)。


参照01884

AutoSize プロパティ

異なるボタン状態を示す別のグリフの指定

TBitBtn コンポーネント

TImage コンポーネント

TOutline コンポーネント

TForm コンポーネント

TSpeedButton コンポーネント


画像読み込みダイアログボックス
画像読み込みダイアログボックス01885

参照

［画像読み込み］ダイアログボックスはグラフィック互換コンポーネントに追加するイメージを選択したり，フォーム用のアイコンを指定したりするために使います。

［画像読み込み］ダイアログボックスを開くには

画像エディタで［読み込み(L)］をクリックする

ダイアログボックスオプション

［ファイル名(N)］

読み込みたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

各種のイメージファイルを表示するためのフィルタを選択します。デフォルトではカレントディレクトリのアイコンファイル (*.ICO) がファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

カレントドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


参照01886

設計時のイメージの読み込み


画像の保存ダイアログボックス
画像の保存ダイアログボックス01887

［画像の保存］ダイアログボックスは画像エディタ内に読み込んだイメージを新しいファイルまたはディレクトリへ格納するために使います。

［画像の保存］ダイアログボックスを開くには

画像エディタで［保存(S)］をクリックする

ダイアログボックスオプション

［ファイル名(N)］

読み込みたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

各種のイメージファイルを表示するためのフィルタを選択します。デフォルトではカレントディレクトリのアイコンファイル (*.ICO) がファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

カレントドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


ノートブックエディタ
ノートブックエディタ01888

ノートブックエディタは TabbedNotebook コンポーネントまたは Notebook コンポーネントのページの追加，編集，削除，再配置をするために使います。ノートブックエディタを使って各ノートブックページのヘルプコンテキスト番号の追加や編集もできます。

ノートブックエディタはノートブックのカレントページを現在の順序で表示し，そのページへ関連付けられているヘルプコンテキストも表示します。

ノートブックエディタを開くには

1.	フォーム上に Notebook コンポーネントまたは TabbedNotebook コンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

Pages プロパティの値列で省略記号ボタンをクリックする

Pages プロパティの値列をダブルクリックする

［編集(E)］

［編集(E)］をクリックすると［Edit Page］ダイアログボックスが開き，選択したノートブックページのページ名とヘルプコンテキスト番号を変更できます。

［追加(A)］

［追加(A)］をクリックすると［Add Page］ダイアログボックスが開き，新しいノートブックページを作成できます。ノートブックへページを追加する方法についての詳細はノートブックページの操作を参照してください。

［削除(L)］

［削除(L)］をクリックすると，ノートブック内の選択したページが削除されます。

［上へ(U)］/［下へ(D)］

［上へ(U)］または［下へ(D)］をクリックすると，選択した 1 つ以上のページの順序を再配置できます。


ページの編集ダイアログボックス
ページの編集ダイアログボックス01889

参照

［ページの編集］ダイアログボックスは Notebook コンポーネントまたは TabbedNotebook コンポーネントに入っている既存のノートブックページを編集するために使います。

このダイアログボックスを開くには

ノートブックエディタで［編集(E)］をクリックする

ダイアログボックスオプション

［ページ名(P)］

ノートブックページの名前を入力します。ページ名は最大で 255 文字です。

［コンテキスト(X)］

ノートブックページのコンテキスト ID 番号を入力します。この番号は個々のノートブックページに状況感知型ヘルプを付けたいときに重要です。ヘルプコンテキストは省略可能です。


参照01890

ノートブックページの操作ノートブックエディタ

TNotebook コンポーネント

TTabbedNotebook コンポーネント


ページの追加ダイアログボックス
ページの追加ダイアログボックス01891

参照

［ページの追加］ダイアログボックスは Notebook コンポーネントまたは TabbedNotebook コンポーネントにノートブックページを追加するために使います。

このダイアログボックスを開くには

ノートブックエディタで［追加(A)］をクリックする

ダイアログボックスオプション

［ページ名(P)］

ノートブックページの名前を入力します。ページ名は最大で 255 文字です。

［コンテキスト(X)］

ノートブックページのコンテキスト ID 番号を入力します。この番号は個々のノートブックページに状況感知型ヘルプを付けたいときに重要です。ヘルプコンテキストは省略可能です。


参照01892

ノートブックページの操作

ノートブックエディタ

TNotebook コンポーネント

TTabbedNotebook コンポーネント


入力マスクエディタ
入力マスクエディタ01893

参照

入力マスクエディタは特定の形式にユーザーを拘束して有効な文字だけを受け入れる編集ボックスを定義するために使います。たとえば，電話番号用のデータ入力フィールドに数値入力だけを受け入れる編集ボックスを定義できます。この編集ボックスにユーザーが文字を入力しようとしても，アプリケーションはその文字を受け入れません。

入力マスクエディタを使うと MaskEdit コンポーネントの EditMask プロパティを編集できます。

入力マスクエディタを開くには,

1.	フォーム上に MaskEdit コンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

EditMask プロパティの値列で省略記号ボタンをクリックする

EditMask プロパティの値列をダブルクリックする

［入力マスク(I)］

編集ボックス用のマスクを定義します。特殊文字を使ってマスクを指定できます。それらの文字のリストは EditMask プロパティを参照してください。

マスクはセミコロンで区切った 3 つのフィールドで構成されます。次の 3 つのフィールドです。

マスク本体。定義済みのマスクを使うか，独自に作成できる

マスクのリテラル文字をデータの一部として保存するかどうかを決める文字

マスク内で空白を表すために使う文字

［文字列として保存(L)］

チェックマークを付けると，編集マスク内のリテラル文字がデータの一部として格納されます。このオプションは MaskEdit コンポーネントの Text プロパティだけに影響します。EditText プロパティを使ってデータを保存すると，リテラル文字も常に保存されます。

このチェックボックスは編集マスクの 2 番目のフィールドを切り替えます。

［空白文字の指定(B)］

マスク内で空白として使う文字を指定します。マスク内の空白はユーザーの入力を必要とする領域です。

この編集ボックスは編集マスクの 3 番目のフィールドを変更します。

［テスト(T)］

［テスト(T)］はマスクを照合するために使います。この編集ボックスには編集マスクがフォーム上に表示されるとおりに表示されます。

［マスクの例(S)］

MaskEdit コンポーネントの中に使う定義済みマスクを選択します。このリストからマスクを選択すると，その定義済みマスクが［入力マスク(I)］編集ボックスの中に入り，［テスト(T)］編集ボックスにサンプルが表示されます。自分の国に合ったマスクを表示したい場合は［マスク(M)］ボタンを選択します。

［マスク(M)］

［マスク(M)］を選択すると［マスクファイルを開く］ダイアログボックスが表示され，［マスクの例(S)］リストボックスに表示されているサンプルマスクが入ったファイルを選択できます。


参照01894

TMaskEdit コンポーネント


マスク文字列エディタ
マスク文字列エディタ01895

参照

マスクテキストエディタは編集マスクの中へ値を入力するために使います。

マスクテキストエディタを使うと，MaskEdit コンポーネントのText プロパティを編集できます。

マスクテキストエディタを開くには

1.	フォーム上に MaskEdit コンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

Text プロパティの値列で省略記号ボタンをクリックする

Text プロパティの値列をダブルクリックする

［入力文字列(I)］

MaskEdit コンポーネントの初期値を入力します。これらの値は実行時に上書きできます。

［マスク］

現在のコンポーネントのマスク定義を表示します。


参照01896

EditText プロパティ

TMaskEdit コンポーネント


フォントエディタ
フォントエディタ01897

参照

フォントエディタは選択したコンポーネントまたはフォームのフォントとその他のフォント属性を設計時に指定するために使います。フォントエディタを使って加えた変更はコンポーネントの Font プロパティに反映されます。

フォントエディタを開くには

1.	任意のコンポーネントまたはフォームを選択します。

2.	次のどちらかを実行します。

Font プロパティまたは後に示すいずれかのプロパティ (フォントエディタを使うもの) の値列で省略記号ボタンをクリックする

Font プロパティまたは後に示すいずれかのプロパティ (フォントエディタを使うもの) の値列をダブルクリックする

［フォント名(F)］

アプリケーション内で使えるすべてのフォントのリストから 1 つのフォントを選択します。

［スタイル(Y)］

フォントのスタイルを選択します。このコンボボックスには選択されているフォントに使えるスタイルだけが表示されます。使えるほとんどのフォントに次の 4 つのスタイルがあります。

標準

斜体 (イタリック)

太字 (ボールド)

太字の斜体 (ボールドイタリック)

［サイズ(S)］

フォントのサイズを選択します。このコンボボックスには選択されているフォントに使えるフォントサイズだけが表示されます。

［文字飾り］

これらのオプションにチェックマークを付けると，テキストが打ち消し線付きか下線付きになります。

［色(C)］

フォントの色を選択します。このコンボボックスには選択されているフォントに使えるすべての色が一覧表示されます。

［サンプル］

選択したフォントのサンプルがコンポーネントへ適用される前に表示されます。この領域内のフォントはフォント設定を変更するたびに更新されます。


参照01898

TFontDialog コンポーネント


カラーエディタ
カラーエディタ01899

カラーエディタは選択したコンポーネントの色を定義するために使います。カラーエディタを使って加えた変更はコンポーネントの Color プロパティに反映されます。

カラーエディタを開くには

1.	任意のコンポーネントまたはフォームを選択します。

2.	Color プロパティまたは後に示すいずれかのプロパティ (カラーエディタを使うもの) の値列をダブルクリックします。

［基本色(B)］グリッド

選択されている標準色が表示されます。選択したコンポーネントに適用する色をクリックします。

［作成した色(C)］グリッド

作成した色が表示されます。［色の作成(D)］をクリックすればカスタム色を作成できます。

［色の作成(D)］

［色の作成(D)］をクリックするとカラーエディタが展開し，独自の色を作成できるオプションが表示されます。

色フィールド

使える色のスペクトルを表示します。現在の色が十字で示されます。たとえば現在の色が黄色系の色ならば，次のようになります。

色を選択するには，色フィールドの任意の場所をクリックするかドラッグします。ここで色を選択してから［Add To Custom Color］をクリックすると，選択した色が［作成した色(C)］ボックスの 1 つへ追加され，再度使えるようになります。

［色｜純色］

現在選択されている色とそれに最も近い純色を表示します。純色をダブルクリックすると，それが現在の色になります。

［色合い(U)］

色調の値を入力します。色調は「実際」の色で，たとえば赤，黄緑，紫などです。色調は彩度や明るさ (輝度) に関係なく色自体を指します。

［鮮やかさ(S)］

彩度の値を入力します。彩度はその色の中にどれくらい灰色が多く含まれているかを意味します。［鮮やかさ(S)］フィールドに示される彩度は 0 (中間灰色) ～ 240 (純粋色) です。

メモ:	彩度は色の鮮やかさに影響します。輝度は色の明るさに影響を及ぼします。

［明るさ(L)］と明るさのスライダーコントロール

輝度の値を入力するか，スライド上のポインタをドラッグして輝度を設定します。輝度は色の明るさです。［明るさ(L)］フィールドに示される輝度は 0 (黒) ～ 240 (白) です。色フィールドの右側の欄に現在の色の輝度の範囲が示されます。この欄の右側にある矢印を上下にスライドさせれば輝度を調節できます。輝度を変更すると［赤(R)］［緑(G)］［青(B)］の色の値も変わります。

［赤(R)］［緑(G)］［青(B)］

使いたい色の中の赤，緑，青の割合をそれぞれの値で入力します。これらのフィールドの値は現在の色の赤，緑，青のバランスを示します。これは RGB カラーとも呼ばれます。RGB カラーに使える値の範囲は 0 ～ 255 です。

［追加(A)］

このボタンをクリックすると，定義した色がカラーエディタの［作成した色(C)］グリッドへ追加されます。


オブジェクトの挿入ダイアログボックス
オブジェクトの挿入ダイアログボックス01900

［オブジェクトの挿入］ダイアログボックスは設計時に OLE オブジェクトを OLEContainer コンポーネントへ挿入するために使います。OLEContainer コンポーネントを使うと，OLE サーバーアプリケーションとデータを共有するアプリケーションを作成できます。OLE サーバーオブジェクトをアプリケーションに挿入した後，OLEContainer コンポーネントをダブルクリックすればサーバーアプリケーションを起動できます。

［オブジェクトの挿入］ダイアログボックスを開くには

1.	フォーム上に OLEContainer コンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

ObjClass プロパティかObjDoc プロパティの値列で省略記号ボタンをクリックする

ObjClass プロパティか ObjDoc プロパティの値列をダブルクリックする

［新規に作成(N)］/［ファイルから作成(F)］

選択した OLE サーバー用に新しいファイルを作成するか，既存のファイルを使うかを選択します。既存のファイルを使う場合，そのファイルは OLE サーバーとして使えるアプリケーションへ関連付けられていなくてはなりません。

［オブジェクトの種類(T)］

OLE サーバーとして使いたいアプリケーションを選択します。このリストボックスには OLE サーバーとして使えるすべてのアプリケーションが表示されます。アプリケーションを選択すると，Delphi はそのアプリケーションを起動します。

メモ:	このリストボックスは［新規に作成(N)］ラジオボタンを選択したときにだけ使えます。

［ファイル名(E)］

アプリケーションへ挿入したいファイルの絶対限定パスを入力します。選択したファイルは OLE サーバーとして使えるアプリケーションへ関連付けられていなくてはなりません。

メモ:	このオプションは［ファイルから作成(F)］ラジオボタンを選択した場合にだけ使えます。

［参照(B)］

［参照(B)］をクリックすると［参照］ダイアログボックスが表示され，OLE サーバーとして使うファイルを選択できます。

メモ:	このオプションは［ファイルから作成(F)］ラジオボタンを選択した場合にだけ使えます。

［リンク(L)］

［リンク(L)］にチェックマークを付けると，フォーム上のオブジェクトがファイルへリンクされます。リンクされたオブジェクトはソースファイルを変更すると自動的に更新されます。［リンク(L)］にチェックマークを付けなかった場合，オブジェクトを埋め込んで元のオブジェクトに変更を加えてもコンテナ内に変更が反映されません。

［アイコンで表示(D)］

チェックマークを付けると，挿入したオブジェクトがフォーム上にアイコンとして表示されます。このオプションにチェックマークを付けると，［アイコンの変更(I)］ボタンが表示されます。

［アイコンの変更(I)］

［アイコンの変更(I)］をクリックすると［アイコンの変更］ダイアログボックスが開き，フォームへ挿入したオブジェクトのアイコンとラベルを指定できます。

［結果］

選択したオプションの結果を説明します。


参照ダイアログボックス
参照ダイアログボックス01901

［参照］ダイアログボックスには，どこで開くかに応じて複数の用途があります。［参照］ダイアログボックスは次のいずれかに使えます。

既存のファイルを OLE コンテナの中に読み込む。選択するファイルは OLE サーバーとして使えるアプリケーションへ関連付けられていなくてはならない

フォーム上で OLE オブジェクトを表すアイコンを選択する

［参照］ダイアログボックスを開くには

次のどちらかの操作をします。

［ファイルから作成(F)］を選択した場合は［オブジェクトの挿入］ダイアログボックスで［参照(B)］をクリックする

［アイコンの変更］ダイアログボックスで［参照(B)］をクリックする

ダイアログボックスオプション

［ファイル(S)］

読み込みたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル(S)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

OLE サーバーとして使いたいファイルの種類を選択します。デフォルトではカレントディレクトリにあるすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル(S)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

カレントドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


アイコンの変更ダイアログボックス
アイコンの変更ダイアログボックス01902

［アイコンの変更］ダイアログボックスはフォーム上に配置するオブジェクトのアイコンとラベルを指定するために使います。

［アイコンの変更］ダイアログボックスを開くには

1.	［オブジェクトの挿入］，［変換］，［形式を選択して張り付け］ダイアログボックスで［アイコンで表示(D)］にチェックマークを付けます。

2.	［アイコンの変更(I)］をクリックします。

アイコンラジオボタン

使いたいアイコンを選択します。次の 3 つのオプションがあります。

オプション	選択した場合の効果

現在(C)	現在のアイコンを使う

標準(D)	デフォルトアイコンを使う

ファイル名(F)	絶対限定パス名を使ってアイコンを指定できる。アイコン名またはパスがわからない場合，［参照(B)］をクリックすれば［参照］ダイアログボックスが開く。指定したファイルに入っているすべての使用可能なアイコンが編集ボックスの下の表示ボックスに表示される。アイコンを選択するには，このオプションを選択する

［タイトル(L)］

フォーム上のアイコンの下に表示するラベルを入力します。

［参照(B)］

［参照(B)］をクリックすると［参照］ダイアログボックスが開き，フォーム上に挿入したオブジェクトを表すアイコンを選択できます。

サンプルアイコンの表示

アイコンとラベルがフォーム上にどのように表示されるかを示します。


形式を選択して貼り付けダイアログボックス
形式を選択して貼り付けダイアログボックス01903

［形式を選択して貼り付け］ダイアログボックスはオブジェクトを Windows のクリップボードから OLE コンテナへ挿入するために使います。

［形式を選択して貼り付け］ダイアログボックスを開くには

1.	フォーム上に OLEContainer コンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

ObjItem プロパティの値列で省略記号ボタンをクリックする

ObjItem プロパティの値列をダブルクリックする

［貼り付け元］

貼り付けるファイルのパスを表示します。

［貼り付け(P)］/［リンク貼り付け(L)］

［貼り付け(P)］を選択するとフォームにオブジェクトが埋め込まれます。オブジェクトをフォームに埋め込んだとき，コンテナアプリケーションはそのオブジェクトに関するすべての情報を格納します。外部ファイルでなくてもかまいません。

［リンク貼り付け(L)］を選択すると，オブジェクトがフォームへリンクされます。オブジェクトをフォームへリンクするとメインソースがファイルに格納され，オブジェクトを更新するとソースファイルも更新されます。

［データの種類(A)］

貼り付けるアプリケーションオブジェクトの種類を一覧表示します。一覧表示されるアプリケーションはソースアプリケーションであり，ここから貼り付けるオブジェクトを受け取りました。


DDE 設定ダイアログボックス
DDE 設定ダイアログボックス01904

参照

［DDE 設定］ダイアログボックスは設計時に DDE サーバーアプリケーションと DDE 対話のトピックを指定するために使います。

［DDE 設定］ダイアログボックスを開くには

1.	フォーム上に DDEClientConv コンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

DdeService プロパティまたは DdeTopic プロパティの値列で省略記号ボタンをクリックする

DdeService プロパティまたは DdeTopic プロパティの値列をダブルクリックする

ダイアログボックスオプション

［DDE サービス］

DDE 対話のサーバーアプリケーションを指定します。指定したアプリケーションは DdeService プロパティの値列に入力されます。

サーバーアプリケーションの拡張子を指定する必要はありません。

そのアプリケーションが入っているディレクトリが現在のパス上にない場合は絶対限定パスを指定する必要があります。

［DDE トピック］

DDE 対話のトピックを入力します。トピックはデータの単位であり，サーバーによって識別され，リンクテキストを含んでいます。たとえばファイル名や Quattro Pro の表計算ワークシートはトピックにできます。

サーバーが Delphi アプリケーションならば，トピックはリンクしたいデータが入っているフォームの名前です。

トピックが入っているディレクトリが現在のパス上にない場合は絶対限定パスを指定する必要があります。

［リンク貼り付け］

［リンク貼り付け］をクリックすると，クリップボードの内容のアプリケーション名とファイル名が［App］と［File］編集ボックスへ貼り付けられます。

このボタンは DDE サーバーにできるアプリケーションからのデータがクリップボードに入っているときにだけアクティブになります。


参照01905

DDE クライアントアプリケーションの作成

DDE 対話

DDE サーバーとのリンクの設定


フィルタエディタ
フィルタエディタ01906

参照

フィルタエディタは OpenDialog コンポーネントと SaveDialog コンポーネントにフィルタを定義するために使います。これらのコモンダイアログボックスは［ファイルの種類(T)］コンボボックスの［Filter］の値を使って特定のファイルだけをファイルリストボックスに表示します。

フィルタエディタを使うと Filters プロパティを編集できます。

フィルタエディタを開くには

1.	フォーム上に OpenDialog コンポーネントまたは SaveDialog コンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

Filter プロパティの値列で省略記号ボタンをクリックする

Filter プロパティの値列をダブルクリックする

［フィルタ名］列

［ファイルの種類(T)］コンボボックスに表示したいフィルタの名前を入力します。

［フィルタ］列

フィルタを定義するワイルドカードと拡張子を入力します。たとえば *.TXT と入力すると，.TXT の拡張子を持つファイルだけが表示されます。

フィルタに複数のファイル拡張子を適用するには，それらの拡張子をセミコロン (;) で区切ります。


参照01907

TOpenDialog コンポーネント

TSaveDialog コンポーネント


Select Directory dialog box
Select Directory dialog box (ReportSmith)01908


See also01909


ファイルを開くダイアログボックス
ファイルを開くダイアログボックス01910

参照

［ファイルを開く］ダイアログボックスは設計時にマルチメディアファイルを MediaPlayer コンポーネントへ読み込むために使います。

［ファイルを開く］ダイアログボックスを開くには

1.	フォーム上に MediaPlayer コンポーネントを配置します。

2.	そのコンポーネントを選択した状態で次のどちらかを実行します。

後に示すいずれかのプロパティの値列で省略記号ボタンをクリックする

後に示すいずれかのプロパティの値列をダブルクリックする

ダイアログボックスオプション

［ファイル名(N)］

読み込みたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

読み込みたいファイルの種類を選択します。マルチメディアファイルを読み込むときはカレントディレクトリにあるすべてのファイルが表示されます。表示を WAVE ファイル，MIDI ファイル，Windows ビデオファイルのいずれかに制限することもできます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］編集ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

カレントドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


参照01911

TMediaPlayer コンポーネント


テキストに対する操作
テキストに対する操作01912

参照

はほとんどすべてのアプリケーションは何かの方法でテキストを操作します。その方法はユーザーに文章処理機能を提供するものから，ラベルやメニュー項目などユーザーが変更できない項目にテキストを表示するものまで多岐にわたります。

Delphi の Memo コンポーネントと Edit コンポーネントは実行時にユーザーがテキストを読み書きできるようにするための機能です。

詳細は次の各トピックを参照してください。

テキスト処理用の領域の提供

文字の位置合わせとワードラップの設定

クリップボードでのテキストの使い方


参照01913

Memo コンポーネントの使い方

Edit コンポーネントの使い方

プロパティの設定

TDBMemo コンポーネント

TDBEdit コンポーネント


テキスト処理用の領域の提供
テキスト処理用の領域の提供01914

参照

Memo コンポーネントを使うとアプリケーション内で複数行にわたるテキストを読み出したり表示したりできます。テキストは既存ファイルからロードされたものや，クリップボードから貼り付けたもの，ユーザーが入力したものを扱えます。Memo コンポーネントのプロパティを使ってワードラップの有効化，スクロールバーの提供，フォーム内でのメモの境界スタイルと位置合わせの制御について設定できます。

ユーザーがテキストを処理するための領域を提供するには

1.	フォームに Memo コンポーネントを追加します。

2.	実行時にメモコンポーネントとフォームを区別できないものにするため，次のプロパティを設定します。

プロパティ	値	目的

Align	alClient	メモがフォームのクライアント領域または作業領域全体を占めるよう設定する

BorderStyle	bsNone	メモコンポーネントからすべての境界を取り除く

ScrollBars	ssBoth	テキストがフォームの境界を越えて続く場合にスクロールバーを表示する

Text	<空白>	初期状態ではフォームにテキストが表示されないようにする

WordWrap	True	テキストを右マージンで折り返しフォーム内に収まるようにする


参照01915

文字の位置合わせとワードラップの設定

クリップボードでのテキストの使い方


文字の位置合わせとワードラップの設定
文字の位置合わせとワードラップの設定01916

参照

Alignment と WordWrap は Memo コンポーネントのプロパティです。すべてのプロパティと同様に，単純な代入文を使って実行時にこれらの値を設定できます。

次の各トピックは実行時にテキストの位置合わせとワードラップを設定する方法を説明しています。

文字の位置合わせの設定

ワードラップの設定


参照01917

テキスト処理用の領域の提供


文字の位置合わせの設定
文字の位置合わせの設定01918

参照

設計時にコンポーネントの Alignment プロパティを設定することによって初期のテキストの位置合わせを設定できます。実行時にユーザーに希望する位置合わせの種類を指定させることもできます。

次のコードは［文字(T)］というメニュー項目を参照します。［文字(T)］メニューには［左揃え(L)］［右揃え(R)］［中央揃え(C)］の位置合わせ用コマンドが含まれています。このコードはメニュー項目［左揃え(L)］が Click イベントを受け取ったとき，メモ項目のテキストを左に位置合わせし，メニュー内の［左揃え(L)］コマンドにチェックマークを付けます。

procedure TForm1.AlignLeft;

begin

   MemoLeft.Checked := True;

   MemoRight.Checked := False;

   EditCenter.Checked := False;

   Memo1.Alignment := taLeft;

end;

チェックマークが付くメニューコマンドは常に 1 つでなくてはならないため，このコードは他のコマンドにチェックマークが付かないようにしています。


参照01919

ワードラップの設定

テキスト処理用の領域の提供


ワードラップの設定
ワードラップの設定01920

参照	例

Memo コンポーネントでは WordWrap プロパティはデフォルトで True に設定されます。メモには垂直と水平の両方のスクロールバーを含めることができ，ワードラップが False の場合に設定します。ワードラップは多くの場合実行時のトグルとして設定します。

Memo コンポーネントの ScrollBars プロパティの初期値は設計時に設定します。ScrollBars プロパティは実行時に Memo.WordWrap 設定に応じて変更できます。コード例はその変更をするための 1 つの方法を示しています。


参照01921

文字の位置合わせの設定

テキスト処理用の領域の提供


例01922

次のコードでは［文字(C)］というメニューに［ワードラップ(W)］という項目があり，ユーザーはこの項目を使ってワードラップのオンとオフを動的に切り替えます。メニュー項目の横にチェックマークが表示された場合ワードラップがオンであることを示します。

OnClick イベントハンドラは Memo コンポーネントの WordWrap プロパティの値をトグルとして設定します。ユーザーが［ワードラップ(W)］コマンドを選択すると，WordWrap プロパティの値は反対の値に変わります。WordWrap が True だった場合は False になり，False だった場合は True になります。

イベントハンドラは WordWrap プロパティの値に基づいて垂直スクロールバーまたは垂直と水平の両方のスクロールバーを Memo コンポーネントに追加します。

最後に，イベントハンドラは Checked プロパティに WordWrap プロパティと同じ値を設定します。WordWrap が True ならば，Checked プロパティも True に設定されます。Checked はメニュー項目の論理プロパティです。True ならば，メニュー項目の横にチェックマークが表示されます。

procedure TEditForm.SetWordWrap(Sender: TObject);

begin

  with Memo1 do

  begin

    WordWrap := not WordWrap;

    if WordWrap then

      ScrollBars := ssVertical else

      ScrollBars := ssBoth;

    WordWrap1.Checked := WordWrap;

  end;

end;


クリップボードでのテキストの使い方
クリップボードでのテキストの使い方01923

参照

テキストを処理する多くのアプリケーションでは，選択したテキストを文書間で移動できます。これは異なるアプリケーションの文書間でもできます。Delphi のクリップボードオブジェクトは Windows のクリップボードをカプセル化し，テキスト (とその他の形式) の切り取り，コピー，貼り付けなどの基本操作のためのメソッドを含んでいます。

クリップボードオブジェクトは Delphi の Clipbrd ユニットで宣言します。クリップボードオブジェクトで宣言したメソッドにアクセスする前に，これらのメソッドを使うユニットの uses 節に Clipbrd を追加する必要があります。

詳細は次のトピックを参照してください。

テキストの選択

テキストの切り取り，コピー，貼り付け

テキストの削除


参照01924

クリップボードでのグラフィックの使い方

テキスト処理用の領域の提供


テキストの選択
テキストの選択01925

参照	例

テキストはクリップボードに入れる前に選択しなくてはなりません。選択したテキストの読み出しや表示の機能は Memo コンポーネントと Edit コンポーネントのネイティブ機能です。つまり，選択したテキストを Memo コンポーネントに表示するためのコードを記述する必要はありません。Memo コンポーネントに最初からそのための機能が備わっているからです。

Delphi の Stdctrls ユニットには，選択されたテキストを処理するためのメソッドが用意されています (Stdctrls 内で宣言されたコンポーネントがユニットのフォームに含まれる場合，そのユニットの uses 節に Stdctrls ユニットが自動的に追加されます)。 実行時のみのプロパティの SelText には，コンポーネント内で選択されたテキストに基づく文字列が含まれます。SelectAll メソッドはメモまたはその他のコンポーネント内のすべてのテキストを選択します。SelLength プロパティと SelStart プロパティは選択された文字列の長さと開始位置の値をそれぞれ返します。


参照01926

テキストの切り取り，コピー，貼り付け

テキストの削除

クリップボードでのテキストの使い方

テキスト処理用の領域の提供


例01927

次のコードはメモコンポーネント内のすべてのテキストを選択します。このコードは，たとえばメニュー項目［すべてを選択(A)］などのイベントハンドラとして使います。

procedure TEditForm.SelectAll(Sender: TObject);

begin

  Memo1.SelectAll;

end;


テキストの切り取り，コピー，貼り付け
テキストの切り取り，コピー，貼り付け01928

参照	例

次のメソッドはテキストの切り取り，コピー，貼り付けをします。

CutToClipboard はメモ項目または編集フィールドから選択テキストを切り取りクリップボードに配置する

CopyToClipboard はメモ項目または編集フィールド内のすべての選択テキストをクリップボードにコピーする

PasteFromClipboard は現在クリップボード上にあるすべてのテキストを挿入ポイントの位置にコピーする


参照01929

テキストの選択

テキストの削除

クリップボードでのテキストの使い方

テキスト処理用の領域の提供


例01930

次の OnClick イベントハンドラは選択されたテキストをメモコンポーネントからクリップボードへ切り取り，コピー，または貼り付けします。これらのイベントハンドラは編集メニューの［切り取り(T)］［コピー(C)］［貼り付け(P)］コマンドで使えます。

procedure TEditForm.CutToClipboard(Sender: TObject);

begin

  Memo1.CutToClipboard;

end;

procedure TEditForm.CopyToClipboard(Sender: TObject);

begin

  Memo1.CopyToClipboard;

end;

procedure TEditForm.PasteFromClipboard(Sender: TObject);

begin

  Memo1.PasteFromClipboard;

end;


テキストの削除
テキストの削除01931

参照	例

ClearSelection メソッドを使うと選択されたテキストをクリップボードへコピーせずにメモコンポーネントから削除できます。

ClearSelection メソッドと対照的なのが CutToClipboard メソッドで，このメソッドは選択されたテキストを削除してクリップボードにコピーします。


参照01932

テキストの選択

テキストの切り取り，コピー，貼り付け

クリップボードでのテキストの使い方

テキスト処理用の領域の提供


例01933

次のイベントハンドラは選択テキストをクリップボードへコピーせずにメモコンポーネントから削除します。

procedure TEditForm.Delete(Sender: TObject);

begin

  Memo1.ClearSelection;

end;


ワークグループメニュー
ワークグループメニュー: Delphi バージョン管理インターフェース01934

Delphi で複数のアプリケーションやソースコードを作成してくると，プログラムを組織化し作成の過程を跡づけられるようにしたくなるものです。新しいバージョンのアプリケーションの作成作業を始める前に，古いバージョンをアーカイブしておきたいということもあります。プログラマグループを管理する場合には，どのファイルにどのプログラマがアクセス権を持つかを調整する手段が必要になり，プログラマが誤って別のプログラマのコードを消去や変更，あるいは上書きするということがないようにしなければなりません。

バージョン管理システムは，複数の開発プロジェクトや複雑なプロジェクトを管理する場合に有効な手段です。バージョン管理は，ファイルのアーカイブ，ロックによるファイルへのアクセス制御，およびプロジェクトの複数のバージョンの管理を行うために使用します。Delphi にはIntersolv PVCS Version Manager 5.1 以上のインターフェースが含まれています。

メモ:	チーム開発は Delphi Client/Server でのみサポートされます。

PVCS サポートを有効にする

Delphi のバージョン管理システムに対するサポートは SETUP プログラムを実行したときに有効になりますが，Delphi をインストールした後でPVCS Developer Toolkit または Version Manager をインストールした場合には次の作業を行う必要があります。

1.	PVCS 製品をインストールしたら Windows ディレクトリの DELPHI.INI に次の 2 行を追加します。

[Version Control]

VCSManager=C:\Program Files\Borland\Delphi\Bin\STDVCS32.DLL

上に示したパスには，Delphi をインストールしたディレクトリを指定しなければならないので注意してください。必要であれば C:\Program Files\Borland\Delphi\Bin (デフォルト) をシステムに合わせて変更してください。

PVCS のランタイム DLL は，Delphi が参照できるように DOS のパス上に配置しておく必要があることに注意してください。

2.	Delphi を実行します。

Delphi のメニューバーに ワークグループメニューグループが表示されます。 PVCS Version Manager を使用するには ワークグループメニューからコマンドを選択します。ワークグループメニューには次のコマンドがあります。

ワークグループ| PVCS プロジェクトの参照

ワークグループ|アーカイブディレクトリの管理

ワークグループ|プロジェクトの追加


ワークグループ|アーカイブディレクトリの管理
ワークグループ|アーカイブディレクトリの管理01935

参照

［ワークグループ|アーカイブディレクトリの管理］を選択してアーカイブディレクトリの位置を指定します。

［アーカイブディレクトリの管理］ダイアログボックスを使うには

1.	［ディレクトリ(D)］リストと［ドライブ(V)］リストでアーカイブディレクトリを指定します。

2.	指定したディレクトリをアーカイブ場所として設定するには［追加(A)］を選択します。

3.	［アーカイブ］ディレクトリリストからアーカイブ場所を削除するには［削除(M)］を選択します。

4.	［OK］を選択してアーカイブディレクトリの指定を保存します。


ワークグループ|プロジェクトの追加
ワークグループ|プロジェクトの追加01936

参照

［ワークグループ|プロジェクトの追加］を選択すると，現在の Delphi プロジェクト用の新しい PVCS プロジェクト が作成されます。


ワークグループ| PVCS プロジェクトの参照
ワークグループ| PVCS プロジェクトの参照01937

参照

［ワークグループ｜ PVCS プロジェクトの参照］を選択すると，エクスプローラ形式で現在のプロジェクトが表示されます。PVCS プロジェクトは最初に［Add Project to Version Control］メニュー項目を使って作成しなければなりません。


カスタムエキスパートメニュー項目
カスタムエキスパートメニュー項目01938

追加インストールされたエキスパートのためのメニュー項目で〔F1〕が押されました。詳細については，この項目を選択してエキスパートを開いてください。そのエキスパートの開発者がヘルプを提供していれば，それを参照することができます。


バージョンコントロールメニュー項目
バージョンコントロールメニュー項目01939

カスタムインストールされたバージョン管理システムのためのメニュー項目で〔F1〕が押されました。詳細については，この項目を選択してバージョン管理システムにアクセスしてください。バージョン管理システムのインストール形式によって，ヘルプを利用できる場合とできない場合があります。


参照01940

ワークグループメニュー

ワークグループ| PVCS プロジェクトの参照

ワークグループ|プロジェクトの追加


参照01941

ワークグループメニュー

ワークグループ| PVCS プロジェクトの参照

ワークグループ|アーカイブディレクトリの管理


参照01942

ワークグループメニュー

ワークグループ|アーカイブディレクトリの管理

ワークグループ|プロジェクトの追加


SQL モニタ
SQL モニタ01943

SQL モニタを使うと，SQL Link を介したリモートサーバーへの SQL 文，あるいは ODBC ソケットを介した ODBC データソースへの SQL 文の実際の呼び出しを見ることができます。

［SQL モニタ］を開くには

［データベース(D)｜SQL モニタ(S)］を選択します。

さまざまな種類の動作をモニタできます。［オプション(O)｜トレースオプション(O)］を選択して，モニタする動作のカテゴリを選択します。次のカテゴリの中からいくつでもモニタできます。

カテゴリ	表示

Prepared Query Statements	サーバーに送るために準備された文

Executed Query Statements	サーバーが実行する文。準備されるのは 1 回に 1 つの文ですが，異なるパラメータで 1 つの文が複数回実行されることがあるので注意してください。

Statement Operations	ALLOCATE，PREPARE，EXECUTE，FETCH などの実行される各処理

Connect / Disconnect	データベースの接続と切断に関連する処理。サーバー側の必要に応じて，接続ハンドルの割り当て，接続ハンドルの解放が含まれる

Transactions	BEGIN，COMMIT，ROLLBACK (ABORT) などのトランザクション処理

Blob I/O	GET BLOB HANDLE，STORE BLOB などの BLOB データ型に対する処理

Miscellaneous	他のカテゴリに分類されない処理

Vendor Errors	サーバーが返したエラーメッセージ。サーバーによってエラーメッセージにエラーコードが含まれる場合がある

Vendor Calls	サーバーに対する実際の API 関数呼び出し。たとえば Oracle での ORLON，InterBase での ISC_ATTACH_DATABASE()


文字列リストに対する操作
文字列リストに対する操作01944

参照

Delphi アプリケーションで文字列リストを扱う機会は数多くあります。それらのリストとしてはリストボックスまたはコンボボックス内の項目，メモフィールド内のテキスト行，画面でサポートされているフォントのリスト，ノートパッド上のタブの名前，アウトライン内の項目，文字列グリッド内のエントリの行または列などがあります。

アプリケーションでこれらのリストを使う方法はさまざまですが，Delphi では文字列リストというオブジェクトを通してそれらすべてのリストへの共通インターフェースが提供され，しかも文字列リストは相互に交換可能です。つまり，たとえばメモフィールド内の文字列リストを編集し，そのリストをリストボックス内の項目のリストとして使えます。

すでにオブジェクトインスペクタを通して文字列リストを使ったことがあるはずです。文字列リストプロパティはオブジェクトインスペクタでは値列に TStrings と表示されます。TStrings をダブルクリックすると文字列リストエディタが開き，行の編集，追加，削除ができます。

実行時にも文字列リストを処理できます。最も一般的な種類の文字列リストタスクは次のとおりです。

リストでの文字列処理

文字列リストのロードと保存

新しい文字列リストの作成

文字列リストへのオブジェクトの追加

文字列リストでのオブジェクト処理


参照01945

オーナー描画コントロールの作成


リストでの文字列処理
リストでの文字列処理01946

参照

ほとんどの Delphi アプリケーションで既存の文字列リスト内の文字列を処理するコードを書く必要があります。最も一般的な事例はアプリケーション内の何かのコンポーネントが文字列リストプロパティを持ち，そのリストを変更するかリストから文字列を取得する必要がある場合です。

共通の操作として次を実行する必要があります。

リストの文字列のカウント

特定の文字列のアクセス

文字列の位置の検索

文字列の追加

文字列の移動

文字列の削除

文字列リスト全体のコピー

リストでの文字列の反復処理


参照01947

文字列リストのロードと保存

新しい文字列リストの作成

文字列リストへのオブジェクトの追加

文字列リストでのオブジェクト処理


リストの文字列のカウント
リストの文字列のカウント01948

参照	例

文字列リスト内の文字列の数を知るには Count プロパティを使います。

Count はリスト内の文字列の数を示す読み出し専用プロパティです。文字列リストに使われるインデックスはゼロから始まるので，Count はリストの最後にある文字列のインデックスより 1 だけ多くなります。


参照01949

特定の文字列のアクセス

文字列の位置の検索

文字列の追加

文字列の移動

文字列の削除

文字列リスト全体のコピー

リストでの文字列の反復処理


例01950

次のコードは現在の画面がサポートするフォントの数を返します。

FontCount := Screen.Fonts.Count;


特定の文字列のアクセス
特定の文字列のアクセス01951

参照	例

文字列リストはインデックスが付いた Strings というプロパティを持ち，このプロパティは文字列の配列のように扱えます。たとえばリスト内の最初の文字列は Strings[0] です。

Strings プロパティは文字列リストの最も頻繁にアクセスされる部分なので，文字列リストのデフォルトのプロパティになっています。つまり，Strings 識別子は省略でき，文字列リスト自体をインデックス付き文字列配列として扱えます。

文字列リスト内の特定の文字列へアクセスするには

リスト内での文字列の順序番号，つまりインデックスを参照する

文字列の番号はゼロから始まるので，リストに 3 つの文字列が入っていればインデックスは 0..2 の範囲になる

インデックスの最大値を知るには

Count プロパティを調べる

有効なインデックスの範囲外にある文字列へアクセスしようとすると，文字列リストは例外を生成する


参照01952

リストの文字列のカウント

文字列の位置の検索

文字列の追加

文字列の移動

文字列の削除

文字列リスト全体のコピー

リストでの文字列の反復処理


例01953

次のコードは，どちらもメモフィールドの 1 行目を「This is the first line.」に設定します。

Memo1.Lines.Strings[0] := 'This is the first line.';

Memo1.Lines[0] := 'This is the first line.';


リスト内での文字列の位置の検索
リスト内での文字列の位置の検索01954

参照	例

文字列のリストがある場合，文字列リスト内の文字列の位置や文字列がリスト内にあるかどうかを簡単に知ることができます。

文字列リスト内での文字列の位置を知るには

文字列リストの IndexOf メソッドを使う

IndexOf は文字列をパラメータとして受け取り，リスト内のそれに一致する文字列のインデックスを返すか，その文字列がリスト内になければ -1 を返す

メモ:	IndexOf は文字列全体について機能します。つまり，渡された文字列全体に正確に一致するものを検索するために，リスト内の個々の文字列全体と突き合わせます。文字列が部分的に一致するかどうか (たとえば，ある一連の文字がリストのいずれかの文字列に含まれているかどうか) を調べるには，自分自身でリストを繰り返し，文字列を比較する必要があります。


参照01955

リストの文字列のカウント

特定の文字列のアクセス

文字列の追加

文字列の移動

文字列の削除

文字列リスト全体のコピー

リストでの文字列の反復処理


例01956

次のコードは，あるファイル名がファイルリストボックス内のファイルリストに入っているかどうかを IndexOf を使って調べます。

if FileListBox1.IndexOf('AUTOEXEC.BAT') > -1 then { ルートディレクトリ内にいます };


既存のリストへの文字列の追加
既存のリストへの文字列の追加01957

参照	例

文字列リストへ文字列を追加するには，次の 2 つの方法があります。

リストの末尾に文字列を追加する

リストの中間に文字列を挿入する

リストの末尾に文字列を追加するには

新しい文字列をパラメータとしてAdd メソッドを呼び出す。追加された文字列はリストの最後の文字列になる

リストへ文字列を挿入するには

2 つのパラメータ，つまり挿入する文字列とその文字列の挿入後の位置を示すインデックスを渡して Insert メソッドを呼び出す

リスト内に 2 つ以上の文字列がない場合はインデックス範囲外の例外が生成される


参照01958

リストの文字列のカウント

特定の文字列のアクセス

文字列の位置の検索

文字列の移動

文字列の削除

文字列リスト全体のコピー

リストでの文字列の反復処理


例01959

次のコードは「Three」という文字列を 3 番目の文字列としてリストに挿入します。

Insert(2, 'Three');

メモ:	リスト内に 2 つ以上の文字列がない場合，Delphi によってインデックス範囲外の例外が生成されます。


リスト内での文字列の移動
リスト内での文字列の移動01960

参照	例

文字列リストをソートしたい場合などは，文字列をリスト内の別の位置へ移動できます。その文字列へオブジェクトが関連付けられている場合は，そのオブジェクトも文字列と一緒に移動します。

リスト内で文字列を移動するには

2 つのパラメータ，つまりその項目の現在のインデックスと移動先のインデックスを渡して Move メソッドを呼び出す


参照01961

リストの文字列のカウント

特定の文字列のアクセス

文字列の位置の検索

文字列の追加

文字列の削除

文字列リスト全体のコピー

リストでの文字列の反復処理


例01962

次のコードはリスト内の 3 番目の文字列を 5 番目の位置へ移動します。

Move(3, 5);


リストからの文字列の削除
リストからの文字列の削除01963

参照	例

既存の文字列のリストを使っていると，そのリストから文字列を削除したい場合がよくあります。

文字列リストから文字列を削除するには

削除したい文字列のインデックスを渡して文字列リストの Delete メソッドを呼び出す

削除したい文字列のインデックスがわからない場合は IndexOf メソッドを使って位置を見つける

文字列リスト内のすべての文字列を削除するには

Clear メソッドを使う


参照01964

リストの文字列のカウント

特定の文字列のアクセス

文字列の位置の検索

文字列の追加

文字列の移動

文字列リスト全体のコピー

リストでの文字列の反復処理


例01965

次のコードは IndexOf を使ってリスト内の文字列の位置を突き止め，その文字列があれば削除します。

with ListBox1.Items do

begin

  if IndexOf('bureaucracy') > -1 then

    Delete(IndexOf('bureaucracy'));

end;


文字列リスト全体のコピー
文字列リスト全体のコピー01966

参照	例

文字列をリストから別のリストへコピーすると，コピー先リストに元から入っていた文字列が上書きされます。

文字列リストを別の文字列リストへコピーするには

コピー元リストをコピー先リストへ代入する

リストが別の種類のコンポーネントへ関連付けられている (あるいはどのコンポーネントへも関連付けられていない) 場合でも，リストのコピー作業は Delphi がユーザーにかわって処理する

しかし，既存のリストへ新しい文字列リストを追加したい場合があります。

文字列のリストを別のリストの末尾へ追加するには

追加したい文字列のリストをパラメータとして AddStrings メソッドを呼び出す


参照01967

リストの文字列のカウント

特定の文字列のアクセス

文字列の位置の検索

文字列の追加

文字列の移動

文字列の削除

リストでの文字列の反復処理


例01968

次のコードはコンボボックスの項目をアウトラインの中へコピーします。

Outline1.Lines := ComboBox1.Items;

次のコードはコンボボックスに入っているすべての項目をアウトラインの末尾に追加します。

Outline1.AddStrings(ComboBox1.Items);


リストでの文字列の反復処理
リストでの文字列の反復処理01969

参照	例

特定の部分文字列の検索や文字列の大文字小文字の変更など，リスト内の文字列を個々に処理しなくてはならない場合もあります。

リスト内の個々の文字列について処理を反復するには

for ループを整数型のインデックスと一緒に使う。ループの内部で個々の文字列にアクセスし，求める処理を実行できる

ループはゼロから，リスト内の文字列数引く 1 (Count - 1) まで実行される


参照01970

リストの文字列のカウント

特定の文字列のアクセス

文字列の位置の検索

文字列の追加

文字列の移動

文字列の削除

文字列リスト全体のコピー


例01971

次のコードはボタンがクリックされるたびにリストボックス内の文字列を 1 つずつ大文字だけの文字列に変換します。

procedure TForm1.Button1Click(Sender: TObject);

var

  Index: Integer;

begin

  for Index := 0 to ListBox1.Items.Count - 1 do

    ListBox1.Items[Index] := UpperCase(ListBox1.Items[Index]);

end;


文字列リストのロードと保存
文字列リストのロードと保存01972

参照	例

Delphi の文字列リストは簡単にテキストファイルへ格納したり元どおりにロードしたり (または別のリストへロードしたり) できます。

同じメカニズムを使ってリストボックスまたは完全なアウトラインの項目リストの保存もできます。

文字列リストをファイルからロードするには

LoadFromFile メソッドを呼び出してロード元のテキストファイルの名前を渡す

LoadFromFile はテキストファイル内の 1 行を 1 つの文字列としてリスト内へ読み出す

文字列リストをテキストファイルに格納するには

SaveToFile メソッドを呼び出して保存先のテキストファイルの名前を渡す

そのファイルがまだ存在しなければ，SaveToFile がそのファイルを作成する。存在する場合は，そのファイルの現在の内容は文字列リストに入っている文字列を使って上書きされる


参照01973

リストでの文字列処理

新しい文字列リストの作成

文字列リストへのオブジェクトの追加

文字列リストでのオブジェクト処理


例01974

次のコードは C ドライブのルートディレクトリから AUTOEXEC.BAT ファイルのコピーをメモフィールドへロードし，AUTOEXEC.BAK というバックアップコピーを作成します。

procedure TForm1.FormCreate(Sender: TObject);

var

  FileName: string;	{ ファイル名用の記憶域 }

begin

  FileName := 'C:\AUTOEXEC.BAT';	{ ファイル名を設定します }

  with Memo1 do

  begin

    LoadFromFile(FileName);	{ ファイルからロードします }

    SaveToFile(ChangeFileExt(FileName, 'BAK'));	{ バックアップファイルの中へ保存します }

  end;

end;


新しい文字列リストの作成
新しい文字列リストの作成01975

参照

文字列リストを使う場合は，たいていコンポーネントの一部である文字列リストを使うので，自分自身でリストを構築する必要はありません。しかし，コンポーネントへ関連付けられていない独立した文字列リストも作成できます。たとえば，アプリケーションで参照テーブル用の文字列リストを保持しなくてはならない場合があります。

独自の文字列リストを作成したときは，処理が済んだら必ずそのリストを解放しなくてはなりません。処理を必要とする事例として次の 2 つが考えられます。

アプリケーションが 1 つのルーチンの中で作成し，使い，廃棄するリスト

アプリケーションが作成し，実行時全体を通じて使い，シャットダウンする前に廃棄するリスト

文字列リストを作成して管理する方法は文字列リストの種類によって異なります。文字列リストは次のどちらかです。

長期文字列リスト

短期文字列リスト


参照01976

リストでの文字列処理

文字列リストのロードと保存

文字列リストへのオブジェクトの追加

文字列リストでのオブジェクト処理


短期文字列リスト
短期文字列リスト01977

参照	例

短期文字列リストは 1 つのルーチンの間だけ文字列リストを使う必要がある場合に役立ちます。文字列の作成，使用，廃棄のすべてが 1 つの場所でできます。これは文字列リストオブジェクトを使う最も安全な方法です。

文字列リストオブジェクトが自分自身と文字列用のメモリを割り当てるので，その割り当てを保護するため，たとえ例外が発生してもオブジェクトがメモリを解放するよう try..finally ブロックを使うことが重要です。

短期文字列リストの基本的な使い方は次のとおりです。

1.	文字列リストオブジェクトを構築します。

2.	try..finally ブロックの try 部で文字列リストを使います。

3.	finally 部でその文字列リストオブジェクトを解放します。


参照01978

長期文字列リスト


例01979

次のイベントハンドラはボタンのクリックに応答して文字列リストを構築し，それを使い，再び廃棄します。

procedure TForm1.Button1Click(Sender: TObject);

var
  TempList: TStrings;	{ リストを宣言します }

begin

  TempList := TStringList.Create;	{ リストオブジェクトを構築します }

  try
    { 文字列リストを使います }

  finally
    TempList.Free;	{ リストオブジェクトを廃棄します }

  end;

end;


長期文字列リスト
長期文字列リスト01980

参照	例

長期文字列リストはアプリケーション実行中にいつでも使える文字列リストが必要な場合に役立ちます。このリストはアプリケーションを最初に実行したときに構築し，アプリケーションを終了する前に廃棄する必要があります。

実行時全体を通じて使える文字列リストを作成するには

1.	アプリケーションのメインフォームオブジェクトに TStrings 型のフィールドを追加し，そのフィールドに任意の名前を付けます。

2.	メインフォームの OnCreate イベント用のハンドラを作成します。この作成イベントハンドラは実行時にフォームが画面に表示される前に実行されます。

3.	その作成イベントハンドラの中で文字列リストオブジェクトを構築します。

4.	メインフォームの OnDestroy イベント用のハンドラを作成します。この廃棄イベントハンドラはアプリケーションの実行が停止する前，画面からメインフォームが消えた直後に実行されます。

このようにすれば手順 1 で宣言した名前を使って他のイベントハンドラからこの文字列リストにアクセスできます。


参照01981

短期文字列リスト


例01982

次のコードは ClickList というリストに文字列を追加します。メインフォーム用のクリックイベントハンドラはユーザーがマウスボタンを押すたびに文字列をリストへ追加します。このアプリケーションはリストを廃棄する前にリストをファイルへ書き込みます。

unit Unit1;

interface

uses WinTYpes, WinProcs, Classes, Graphics, Forms, Controls, Apps;

type

  TForm1 = class(TForm)

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

  private

    { プライベート宣言 }

  public

    { パブリック宣言 }

    ClickList: TStrings;	{フィールドを宣言します}

  end;

var

  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

  ClickList := TStringList.Create;	{リストを構築します}

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

  ClickList.SaveToFile(ChangeFileExt(Application.ExeName, '.LOG'));

{リストを保存します}

  ClickList.Free;	{リストオブジェクトを廃棄します}

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

  ClickList.Add(Format('Click at (%d, %d)', [X, Y]));	{リストに文字列を追加します}

end;

end.


文字列リストへのオブジェクトの追加
文字列リストへのオブジェクトの追加01983

参照	例

文字列リストは Strings プロパティの中に格納される文字列のリストだけでなく，オブジェクトのリストも持つことができ，オブジェクトのリストは Objects プロパティの中に格納されます。Objects は Strings と同様なインデックス付きプロパティですが，文字列のインデックス付きリストでなくオブジェクトのインデックス付きリストです。

リスト内の文字列だけを使っている場合，オブジェクトがあるかどうかは問題になりません。ユーザーが特にオブジェクトにアクセスした場合を除き，リストはオブジェクトに対して何もしません。Objects プロパティにどのような種類のオブジェクトを割り当てても問題になりません。Delphi は情報を保管しておくだけで，ユーザーはその情報を必要に応じて操作します。

メモ:	一部の文字列リストではオブジェクトがあっても意味がないのでオブジェクトが使えません。たとえば，メモ内の行やノートブック内のページを表す文字列リストにはオブジェクトを関連付けられません。

既存の文字列にオブジェクトを関連付けるには

そのオブジェクトを同じインデックスの Objects プロパティに割り当てる

Objects には任意の型のオブジェクトを割り当てできますが，最も一般的な用途はオーナー描画コントロールのビットマップと文字列を関連付けることです。文字列リスト内の文字列とオブジェクトは対で機能することを忘れてはなりません。どの文字列にも 1 つの関連オブジェクトがありますが，そのオブジェクトはデフォルトでは nil です。

文字列リストは関連オブジェクトを所有しないことも覚えておく必要があります。文字列リストオブジェクトを廃棄しても，それらの文字列へ関連付けられているオブジェクトは廃棄されません。


参照01984

オーナー描画コントロールの作成

文字列リストでのオブジェクト処理


文字列リストでのオブジェクト処理
文字列リストでのオブジェクト処理01985

参照

文字列を使って文字列リストに対して実行できるどのような処理でも，それと同等な処理を文字列とその関連オブジェクトを使って実行できます。たとえば Strings プロパティの場合とまったく同じように，Objects プロパティのインデックスを指定して特定のオブジェクトへアクセスできます。最も大きな違いは Objects という名前を省略できないことです。文字列リストのデフォルトのプロパティは Strings だからです。

次の表は文字列リスト内の文字列とオブジェクトに対して同等な処理を実行するためのプロパティとメソッドの要約です。

処理	Strings 用	Objects 用

項目のアクセス	Strings プロパティ	Objects プロパティ

項目の追加	Add メソッド	AddObject メソッド

項目の挿入	Insert メソッド	InsertObject メソッド

項目の検索	IndexOf メソッド	IndexOfObject メソッド

Delete, Clear, Move などのメソッドは 1 つの項目全体を処理します。つまり，ある項目を削除すると，文字列とそれに対応するオブジェクトの両方が削除されます。LoadFromFile メソッドと SaveToFile メソッドが文字列だけを処理することにも注意してください。これらのメソッドはテキストファイルを処理するからです。

関連オブジェクトのアクセス

文字列リスト内の文字列へアクセスするのとまったく同じように，文字列リストへ関連付けられているオブジェクトにアクセスできます。たとえば文字列リスト内の最初の文字列を入手するには，インデックスを 0 にして文字列リストの Strings プロパティにアクセスします。つまり Strings[0] です。この文字列に対応するオブジェクトは Objects[0] です。


参照01986

オーナー描画コントロールの作成

文字列リストへのオブジェクトの追加


例01987

次のコードは AppleBitmap というビットマップを Fruits という文字列リスト内の「apple」という文字列へ関連付けます。

with Fruits do Objects[IndexOf('apple')] := AppleBitmap;

文字列を追加すると同時にオブジェクトも追加するには，単に文字列を追加するだけの Add メソッドでなく，文字列リストの AddObject メソッドを呼び出します。AddObject は文字列とオブジェクトという 2 つのパラメータをとります。例を次に示します。

Fruits.AddObject('apple', AppleBitmap);


コードに対する操作
コードに対する操作01988

参照

ユーザーインターフェースの設計ではアプリケーションで起こりうるイベントにコンポーネントがどのように応答するかを決めます。コンポーネントがイベントに応答する方法を指定するコードをイベントハンドラと呼びます。

Delphi のオブジェクトインスペクタを使ってコンポーネントのための初期イベントハンドラを生成します。Delphi のコードエディタでコードを作成することによってイベントハンドラを完成します。

次の各トピックでは Delphi をどのように使ってアプリケーションコードを作成するかを説明します。

イベントの処理

コードエディタの使い方


参照01989

コンポーネントの処理

プロパティの設定

プロジェクトに対する操作


イベントの処理
イベントの処理01990

参照

イベントはマウスクリックなどプログラムが認識できるユーザーアクション (または内部システムオカレンス) を表します。Delphi ではユーザーが作成するほとんどのコードはこのようなイベントに応答して実行されます。イベントにコンポーネントが応答する方法を指定するコードをイベントハンドラと呼びます。

イベントハンドラは特殊な手続きです。サブルーチンまたはサブプログラムとも呼ばれる手続きと関数は一般にプログラムコードの大部分を構成します。コンポーネントと関連付けられた手続きと関数をメソッドと呼びます。

オブジェクトインスペクタを使ってコードエディタ内からイベントハンドラを簡単に生成，検索，変更できます。複数のコンポーネントに共通なイベントを表示したり，新しいイベントを既存のイベントハンドラと関連付けることもできます。

イベントの処理についての詳細は次の各トピックを参照してください。

新しいイベントハンドラの生成

デフォルトイベントのハンドラの生成

イベントハンドラの再利用

共有コンポーネントイベントの表示とコーディング

既存のイベントハンドラの検索

共有イベントハンドラの変更

イベントハンドラの削除


参照01991

コードエディタの使い方

コンポーネントの処理

プロパティの設定


新しいイベントハンドラの生成
新しいイベントハンドラの生成01992

参照	例

オブジェクトインスペクタを使ってフォームまたはフォーム上の任意のコンポーネントのためのイベントハンドラを生成できます。この場合 Delphi がコードの各部を生成し保持します。イベントハンドラの最初の行は手続きを命名し，それが使うパラメータを指定します。begin..end ブロック間に作成するコードはイベントが起こったときに実行されます。

オブジェクトインスペクタを使ってイベントハンドラを生成するには

1.	コンポーネント (またはフォーム) を選択します。

2.	オブジェクトインスペクタの下部にある［Events］タブをクリックします。

オブジェクトインスペクタの［Events］ページにはコンポーネントと関連付けられたすべてのイベントが表示され，デフォルトイベントが強調表示されます。

3.	求めるイベントを選択し，値列をダブルクリックするか，または Ctrl+Enter を押します。

コードエディタにイベントハンドラが生成され，カーソルが begin..end ブロックの内側に移動します。

4.	begin..end ブロックの内側にイベントが起こったときに実行したいコードを入力します。


参照01993

デフォルトイベントのハンドラの生成

イベントハンドラの再利用

共有コンポーネントイベントの表示とコーディング

既存のイベントハンドラの検索

共有イベントハンドラの変更

イベントハンドラの削除


例01994

次のコードは Form1 上の Button1 に関する (デフォルトの) OnClick イベントのために生成される初期イベントハンドラコードです。

procedure TForm1.Button1Click(Sender: TObject);

begin

end;


デフォルトイベントのハンドラの生成
デフォルトイベントのハンドラの生成01995

参照	例

ほとんどのコンポーネントのイベントハンドラはフォーム内のコンポーネントをダブルクリックするだけで生成できます。そのコンポーネントのデフォルトイベントのためのハンドラがある場合，それが生成されます。デフォルトイベントはコンポーネントが実行時に最もよく処理する必要のあるイベントです。たとえばボタンのデフォルトイベントは OnClick イベントです。

デフォルトイベントハンドラを生成するには

フォーム内のコンポーネントをダブルクリックする

メモ:	Timer または Notebook などユーザーイベントを処理する必要がないコンポーネントがあります。これらのコンポーネントをフォーム内でダブルクリックしても何も起こりません。Image コンポーネントまたは MainMenu コンポーネントなどのように，ダブルクリックすると設計時プロパティ編集をするためのダイアログボックスが開くコンポーネントもあります。


参照01996

新しいイベントハンドラの生成

イベントハンドラの再利用

共有コンポーネントイベントの表示とコーディング

既存のイベントハンドラの検索

共有イベントハンドラの変更

イベントハンドラの削除


コードエディタでのページの表示
コードエディタでのページの表示01997

参照

コードエディタのページが表示されている場合，スクロールによってコードの特定部分だけではなくすべてのデータを表示できます。

コードエディタでページを表示するには次のいずれかの方法を選択します。

表示したいページのタブをクリックする

エディタのページを前に進めるには Ctrl+Tab を押し，後ろに戻るには Shift+Ctrl+Tab を押す

［表示ユニットの選択］ダイアログボックスでユニットを選択する。［表示ユニットの選択］ダイアログボックスを開くには［表示(V)｜ユニット(U)］を選択する

コードエディタが表示されたら次のいずれかの方法を使っていつでもフォームに戻れます。

フォームに戻るには

コードエディタの下に見えるフォームの任意の部分をクリックする

［表示フォームの選択］ダイアログボックスを開くために［表示(V)｜フォーム(F)］を選択し，表示したいフォームを選択する

スピードバーのボタンを使ってカレントフォームを表示するか［表示フォームの選択］ダイアログボックスを開く


参照01998

コードエディタ

既存のイベントハンドラの検索

イベントハンドラの削除


既存のイベントハンドラの検索
既存のイベントハンドラの検索01999

参照

前に作成したイベントハンドラのコードを表示したい場合，コードエディタ内でオブジェクトインスペクタを使ってすばやく検索できます。

コードエディタ内で既存のイベントハンドラを検索するには

1.	フォーム内で，イベントハンドラを検索したいコンポーネントを選択します。

2.	オブジェクトインスペクタ内で［Events］ページを表示します。

3.	イベント列でコードを表示したいイベントをダブルクリックします。

コードエディタが表示され，イベントハンドラの begin..end ブロックの内側にカーソルが移動します。このイベントハンドラを変更できます。

検索メニューを使ってコードエディタ内で特定のテキストを検索することもできます。

メモ:	フォーム内でイベントハンドラをダブルクリックすることによってコンポーネントに関するデフォルトイベントハンドラを生成した場合，そのイベントハンドラは同じ方法で検索できます。

既存のデフォルトハンドラを検索するには

フォーム内でコンポーネントをダブルクリックする


参照02000

新しいイベントハンドラの生成

デフォルトイベントのハンドラの生成

イベントハンドラの再利用

共有コンポーネントイベントの表示とコーディング


共有イベントハンドラの変更
共有イベントハンドラの変更02001

参照

複数のコンポーネントによって共有されているイベントハンドラの変更は既存のイベントハンドラの変更とほとんど同じです。ただし共有イベントハンドラを変更すると，それを呼び出すすべてのコンポーネントイベントについて変更することになります。

共有イベントハンドラを変更するには

1.	変更したいハンドラをイベントが呼び出すコンポーネントを選択します。

2.	オブジェクトインスペクタの［Events］ページでイベントハンドラ名をダブルクリックします。

3.	コードエディタでハンドラを変更します。

このハンドラを共有する任意のコンポーネントが共有イベントを受け取ると，変更したコードが呼び出されます。


参照02002

新しいイベントハンドラの生成

デフォルトイベントのハンドラの生成

既存のイベントハンドラの検索

共有コンポーネントイベントの表示とコーディング

イベントハンドラの削除


イベントハンドラの削除
イベントハンドラの削除02003

参照

コンポーネントを削除すると，その参照がフォームの型宣言内で削除されます。しかしコンポーネントを削除しても，関連付けられたメソッドはフォーム内の他のコンポーネントによって呼び出されることがあるのでユニットファイルから削除されません。メソッド宣言とメソッド自身の両方がユニットファイルに残っている限りアプリケーションを引き続き実行できます。宣言を削除せずにメソッドを削除した場合，(メソッドを使う場合は) メソッド自身を置換するか，または (メソッドを使うつもりがない場合は) メソッド宣言をメソッドコードとともに削除する必要があることを示す「未定義の FORWARD です」のエラーメッセージが生成されます。

イベントハンドラは必要に応じて明示的に削除するか，または Delphi によって削除できます。

イベントハンドラを手動で削除するには

すべてのイベントハンドラコードとハンドラの宣言を削除する

イベントハンドラを Delphi によって削除するには

イベントハンドラ内の (コンポーネントを含む) すべてのコードを削除する。ハンドラはプロジェクトをコンパイルまたは保存すると削除される。


参照02004

新しいイベントハンドラの生成

デフォルトイベントのハンドラの生成

既存のイベントハンドラの検索

共有コンポーネントイベントの表示とコーディング

共有イベントハンドラの変更


イベントハンドラの再利用
イベントハンドラの再利用02005

参照

アプリケーションを構築するとき複数の異なるイベントから同じ結果を得たい場合がよくあります。たとえばアプリケーションに［切り取り(T)］［コピー(C)］［貼り付け(P)］コマンドのためのボタンを持つスピードバーがある場合，各ボタンが対応する編集メニューコマンドと同じイベントハンドラを実行するようにプログラムしたい場合があります。

このようなイベントハンドラを作っておくと，他のイベントが元のイベントハンドラと簡単に関連付けられます。

複数の異なるコンポーネントがどのコンポーネントが呼び出されたかによって異なることをするハンドラを共有することもできます。どのコンポーネントがイベントを受け取ったかを判断するには，Sender パラメータをチェックします。詳細は Sender パラメータの使い方を参照してください。

コンポーネントのイベントを既存のイベントハンドラと関連付けるには

1.	フォーム内で，イベントをコーディングしたいコンポーネントを選択します。

2.	オブジェクトインスペクタの［Events］ページを表示し，ハンドラコードをアタッチしたいイベントを選択します。

3.	前に作成したイベントハンドラのリストを開くためにイベントの隣の下向き矢印をクリックします。

選択したイベントに割り当てできるこのフォーム内のイベントハンドラだけがリストに表示されます。

4.	イベントハンドラ名をクリックすることによってリストから選択します。

このイベントハンドラのために作成されたコードが選択したコンポーネントイベントと関連付けられます。

メモ:	イベントハンドラは共有ハンドラと関連付けられたすべてのコンポーネントイベントについては重複しません。関連付けられたコンポーネントイベントが起こったときに同じコードが呼び出される場合も，共有ハンドラに関するコードはコードエディタ内で一度だけ表示されます。


参照02006

新しいイベントハンドラの生成

デフォルトイベントのハンドラの生成

既存のイベントハンドラの検索

共有コンポーネントイベントの表示とコーディング

共有イベントハンドラの変更

イベントハンドラの削除


Sender パラメータの使い方
Sender パラメータの使い方02007

参照	例

イベントハンドラ内の Sender パラメータはどのコンポーネントがイベントを受け取ったか，つまりハンドラを呼び出したかを Delphi に知らせます。if..then..else 文の中で Sender パラメータを使って複数のコンポーネントイベントに応答する 1 つのイベントハンドラを作成できます。


参照02008

新しいイベントハンドラの生成

イベントハンドラの再利用

共有コンポーネントイベントの表示とコーディング


例02009

次のコードは OnClick イベントを Button1 が受け取ったか，または同じイベントハンドラを使う別のボタンが受け取ったかによってモード付きダイアログボックスのキャプション内にアプリケーションのタイトルを表示するか，または何も表示しません。

procedure TMain1.Button1Click(Sender: TObject);

begin

if Sender = Button1 then

  AboutBox.Caption := 'About ' + Application.Title

else AboutBox.Caption := 挿';

AboutBox.ShowModal;

end;


共有イベントの表示
共有イベントの表示とコーディング02010

参照

OnClick イベントのように複数のコンポーネントで使用可能なイベントはたくさんあります。複数のコンポーネントがイベントを共有している場合，共有イベントを (既存または新規の) イベントハンドラと関連付けることができ，各コンポーネントについて別々に関連付ける必要はありません。

これには共有イベントを表示してから，そのためのイベントハンドラを作成します。

共有イベントを表示するには

1.	フォーム内で，共有イベントを表示したいすべてのコンポーネントを選択します。

2.	オブジェクトインスペクタの［Events］ページを表示します。

オブジェクトインスペクタに選択したすべてのコンポーネントに属するイベントだけが表示されます (カレントフォーム内のイベントだけが表示されることにも注意してください)。

共有イベントハンドラを作成する場合 (または既存の共有イベントハンドラを再利用する場合)，イベントハンドラコードは共有イベントハンドラと関連付けられたすべてのコンポーネントイベントごとには重複しません。コードはコードエディタ内で一度だけ表示されますが，任意のコンポーネントイベントが起こったときに同じコードが呼び出されます。

共有コンポーネントイベントを既存のイベントハンドラと関連付けるには

1.	共有イベントハンドラを関連付けたいコンポーネントを選択します。

2.	オブジェクトインスペクタの［Events］ページを表示し，イベントを選択します。

オブジェクトインスペクタに選択したコンポーネントが共有しているイベントだけが表示されます。

3.	イベントの隣のドロップダウンリストで既存のイベントハンドラを選択し，Enter を押します。

選択したコンポーネントが指定されたイベントを受け取ると，選択したイベントハンドラが呼び出されます。

共有イベントのイベントハンドラを作成するには

1.	共有イベントハンドラを作成したいコンポーネントを選択します。

2.	オブジェクトインスペクタの［Events］ページを表示し，イベントを選択します。

3.	新しいハンドラの名前を入力し Enter を押すか，または Delphi によって名前を生成したい場合はハンドラ列をダブルクリックします。

コードエディタ内にイベントハンドラが生成され，カーソルが begin..end ブロックに移動します。

イベントハンドラを命名しないように選択した場合，選択したコンポーネントの順序に従って Delphi が命名します。

4.	コンポーネントについて選択したイベントが起こったときに実行したいコードを入力します。


参照02011

新しいイベントハンドラの生成

デフォルトイベントのハンドラの生成

イベントハンドラの再利用

既存のイベントハンドラの検索

共有イベントハンドラの変更

イベントハンドラの削除


フォームの型宣言の変更
フォームの型宣言の変更02012

参照

コンポーネントをフォームへ追加すると，そのコンポーネントのインスタンス変数つまりフィールドが生成され，それがフォームの型宣言へ追加されます。次のコードはボタンを追加するとどのようにフォームの型宣言が変化するかを示しています。

type

   TForm1 = class(TForm)

     Button1: TButton;	{Delphi が追加するコードです}

   end;

同様にコンポーネントを削除すると，対応する型宣言が削除されます。コードが追加または削除されるのはコードエディタで見て確かめることができます。

コードが追加されるのをコードエディタで見るには

1.	フォームのタイトルバーをクリックし，コードエディタ全体が見えるようにマウスボタンを押したままフォームを新しい位置にドラッグします。

2.	型宣言セクションが見えるまでコードエディタ内をスクロールします。

3.	コードエディタ内で何が起こるかを見ながらフォームにコンポーネントを追加します。

4.	やはりコードエディタを見ながらコンポーネントを削除します。

メモ:	削除したコンポーネントに関連付けられたイベントハンドラ (またはメソッド) はフォーム内の他のコンポーネントによって呼び出されることがあるので削除されません。メソッド宣言とメソッド自身の両方がユニットファイルに残っている限りアプリケーションを引き続き実行できます。宣言を削除せずにメソッドを削除した場合，「未定義の FORWARD です」のエラーが生成されます。


参照02013

Name プロパティ

フォームへのコンポーネントの追加


コンポーネントの処理
コンポーネントの処理02014

参照

コンポーネントはアプリケーションのユーザーインターフェースを作成し，記述したコードをアプリケーションのイベントと関連付けるために使います。

次の各トピックでは，設計時のフォーム内のコンポーネント処理の基本操作について説明しています。

フォームへのコンポーネントの追加

コンポーネントの選択

コンポーネントのサイズ変更，移動，削除

コンポーネントの切り取り，コピー，貼り付け

コンポーネントの位置合わせ

コンポーネントのグループ化


参照02015

コンポーネントパレットの概要

ユーザーインターフェースの設計

プロパティの設定

コードに対する操作

フォームの型宣言の変更


フォームへのコンポーネントの追加
フォームへのコンポーネントの追加02016

参照

フォームにコンポーネントを追加するにはコンポーネントパレットを使います。フォームに追加したコンポーネントは，アプリケーションに合わせて移動，サイズ変更，編集ができます。

フォームにコンポーネントを追加するには

1.	コンポーネントパレットでコンポーネントを選択します。

2.	次のいずれかを実行します。

フォームの中央にコンポーネントを追加するには，コンポーネントパレット内のコンポーネントをダブルクリックする。その位置にすでに別のコンポーネントがある場合，新しいコンポーネントは既存のコンポーネントの上に追加される

フォーム上の指定した位置にコンポーネントを追加するには，フォーム上でコンポーネントの左上隅にしたい位置にカーソルを合わせ，フォームをクリックする。コンポーネントはフォーム上のクリックした位置にデフォルトサイズで表示される

コンポーネントを追加するときにサイズを変更するには，コンポーネントを表示したい位置にカーソルを合わせ，マウスポインタをドラッグしてマウスボタンから指を離す。ドラッグするときにコントロールのサイズと位置を示すアウトラインが表示される。アウトラインが求めるサイズと位置になったらマウスボタンから指を離す

フォームに同じ型のコンポーネントを複数追加するには

1.	Shift キーを押したままにします。

2.	パレット上のコンポーネントをクリックしてから，必要なコンポーネントの数だけフォーム上でクリックします (コンポーネントを選択した後は Shift キーから指を離してかまいません)。

3.	選択したコンポーネントをクリアするためにポインタアイコンをクリックします。

メモ:	コードを見直すときにコンポーネントが簡単に見分けられるようにするために，コンポーネントとコードを関連付ける前にコンポーネントの Name プロパティを変更してください。


参照02017

フォームのキーボードショートカット

フォームの型宣言の変更

コンポーネントの処理

Name プロパティ


Name プロパティ
Name プロパティ02018

参照

与えられたフォーム内のすべてのコンポーネントとプロジェクト内のすべてのフォームはユニークな名前を持っていなくてはなりません。Name プロパティはコンポーネントを基礎となるプログラムに対して識別するとともに，ユーザーコード内で反映される名前で，ユーザーコードによって使われます。

一方 Caption プロパティはユーザーに (たとえばフォームのタイトルバー上のタイトルまたは押しボタン上のラベルなどの) 情報を表示するだけで，基礎となるプログラムに対しては何も意味しません。Caption プロパティを変更してもフォームの内部名は変わりませんが，ユーザーにとって親しみやすいアプリケーションにするという効果は期待できます。

Delphi ではプロジェクト内のフォームとコンポーネントにデフォルト名が割り当てられ，追加した順序に番号が振られます。たとえばフォームに 3 つの押しボタンを追加した場合，それぞれ Button1, Button2, Button3 という名前が付きます。これらの名前はコンパイラに対してコンポーネントを識別するのには有効ですが，これらによってコードが特に読みやすくなるわけではありません。

Name プロパティを変更してコンポーネントの機能を示すような名前にするといいでしょう。

コンポーネントの名前を変更するには

1.	コンポーネントを選択します。

2.	オブジェクトインスペクタで Name プロパティを選択し，新しい名前を入力します。
コンポーネント名は Pascal 識別子の標準命名規則に従わなくてはなりません。

メモ:	オブジェクトインスペクタを使って Name プロパティを変更すると，ソースコード内のコンポーネントの名前が Delphi の生成行だけで変更されます。コンポーネント名をコードエディタで直接編集した場合，これは当てはまらないことに注意してください。

Name プロパティを変更すると Caption プロパティをすでに変更した場合を除いて， Caption プロパティも変化します。Caption プロパティの値は Name プロパティより優先します。


参照02019

Caption プロパティ

プロパティの設定


コンポーネントの選択
コンポーネントの選択02020

参照

フォーム内のコンポーネントを選択する方法はいくつかありますが，ほとんどの方法は Panel または GroupBox コンポーネントなどの他のコンポーネントに入っているコンポーネントでも使えます。

1 つのコンポーネントを選択するには

次のいずれかの操作をします。

フォーム内のコンポーネントをクリックする

オブジェクトインスペクタの上部にあるオブジェクトセレクタで選択する

フォームにフォーカスがある状態で選択したいコンポーネントにタブによって移動する

複数のコンポーネントを選択するには

次のどちらかの操作をします。

Shift キーを押したままコンポーネントを 1 つずつクリックする

いずれかのコンポーネントの外側でフォームをクリックし，選択したい他のコンポーネント上にドラッグする (コンポーネントが Panel または GroupBox コンポーネントの内側にある場合，Ctrl を押してドラッグする)

ドラッグするとコンポーネントが点線の四角形によって囲まれる。すべてのコンポーネントが四角形で囲まれたらマウスボタンから指を離す。コンポーネントの配置を変えると四角形で囲みやすくなる場合がある

フォーム上でコンポーネントを選択すると，コンポーネントの周囲にサイズ変更ハンドルと呼ばれる小さな正方形が表示されます。これを使って 1 つまたは複数のコンポーネントをサイズ変更できます。

メモ:	複数選択はコンテナコンポーネントとその中に入っているすべてのコンポーネントを含むフォーム内の全コンポーネントに適用されますが，フォーム自身を選択した場合，それと一緒に他のコンポーネントを選択することはできません。

フォーム内のすべてのコンポーネントを選択するには

［編集(E)｜すべてを選択(L)］を選択する


参照02021

コンポーネントの処理

フォームへのコンポーネントの追加

コンポーネントの選択

コンポーネントのサイズ変更，移動，削除

コンポーネントの切り取り，コピー，貼り付け

コンポーネントの位置合わせ

コンポーネントのグループ化


コンポーネントのサイズ変更，移動，削除
コンポーネントのサイズ変更，移動，削除02022

参照

フォーム上でコンポーネントを選択すると，コンポーネントの周囲にサイズ変更ハンドルと呼ばれる小さな正方形が表示されます。これを使って 1 つまたは複数のコンポーネントをサイズ変更できます。

アプリケーションのユーザーインターフェースの細部を調整するために，設計時にフォーム上の任意のコンポーネントを移動，サイズ変更，削除できます。

1 つのコンポーネントをサイズ変更するには

1.	コンポーネントを選択します。コンポーネントの周囲にサイズ変更ハンドルが表示されます。

2.	サイズ変更ハンドルをドラッグしてコンポーネントのサイズを調整します。

3.	マウスボタンから指を離します。コンポーネントが新しいサイズで再描画されます。

複数のコンポーネントをサイズ変更するには

1.	サイズ変更したいコンポーネントをすべて選択します。

2.	［編集(E)｜サイズ(S)］を選択して［コンポーネントのサイズ］ダイアログボックスを表示します。

3.	適切なサイズ変更オプションを選択し，［OK］を選択します。

コンポーネントを移動するには

1.	コンポーネントを選択します。

2.	コンポーネントを新しい場所にドラッグします。サイズ変更ハンドルをドラッグしないように注意してください。サイズ変更ハンドルをドラッグすると，コンポーネントの移動ではなくサイズの変更になってしまいます。

コンポーネントを削除するには

1.	コンポーネントを選択します。

2.	Del キーを押すか，［編集(E)｜削除(D)］を選択します。

削除したばかりのコンポーネントを復元するには

［編集(E)｜元に戻す(U)］を選択する

コンポーネントの復元では，プロパティの設定やコードの作成などのコンポーネントに対するカスタマイズも元の状態に復元されます。

メモ:	他の操作をする前に［編集(E)｜元に戻す(U)］を選択しなくてはなりません。そうしないとコンポーネントは復元されません。


参照02023

フォームへのコンポーネントの追加

コンポーネントの位置合わせ

コンポーネントのグループ化

コンポーネントの処理

コンポーネントの切り取り，コピー，貼り付け

コンポーネントの選択


コンポーネントの切り取り，コピー，貼り付け
コンポーネントの切り取り，コピー，貼り付け02024

参照

フォームとフォームの間またはフォームとパネルまたはグループボックスなどのコンテナコンポーネントの間でコンポーネントの切り取り，コピー，貼り付けができます。

メモ:	コンポーネントをコピーする場合，そのプロパティ設定とイベントハンドラの関連付けもコピーされます。たとえば Button1 という Caption プロパティと TForm1.Button1Click というイベントハンドラを持つボタンをコピーすると，同じ Caption プロパティと TForm1.Button1Click にあるコードを呼び出す OnClick イベントハンドラを持つ別のボタンが作成されます。しかし，それぞれのボタンがユニークな識別子を持ち続けるようにコピーされたボタンの名前は変更されます。

切り取り，コピー，貼り付けの操作には次の 4 つの一般規則が適用されます。

複数のコンポーネントを切り取りまたはコピーのために選択できるが，選択に含まれるのは 1 つの親の中にあるコンポーネントだけである。その親はフォームまたはフォーム内のコンテナコンポーネントのいずれかであるが，両方は不可能である

異なる親を持つ複数のコンポーネントを別々に選択し，それらを切り取りまたはコピーしようとすると，最初に選択したコンポーネントの親にあるコンポーネントだけが切り取りまたはコピーされる。たとえばフォーム内のボタンを選択してから，フォーム上のパネル内のチェックボックスを選択し，選択した 2 つのコンポーネントを切り取りまたはコピーしようとすると，ボタンだけが切り取りまたはコピーされる

1 つまたは複数のコンポーネントを貼り付ける場合，それらはコンポーネントの受け取りにふさわしいフォーカスを持ついずれかに表示される

コンポーネントの切り取り，コピー，貼り付けをする場合，関連付けられたイベントハンドラコードは重複しないが，コピーされたコンポーネントは元のイベントハンドラとの関係を引き続き持っている

1 つまたは複数のコンポーネントを切り取るには

1.	1 つまたは複数のコンポーネントを選択します。

2.	［編集(E)｜切り取り(T)］を選択します。

1 つまたは複数のコンポーネントをコピーするには

1.	1 つまたは複数のコンポーネントを選択します。

2.	［編集(E)｜コピー(C)］を選択します。

1 つまたは複数のコンポーネントを貼り付けるには

1.	貼り付けるコンポーネントを表示したいフォームまたは別のコンテナコンポーネントを選択します。

2.	［編集(E)｜貼り付け(P)］を選択します。

 (この手順では，あらかじめ切り取りまたはコピーによってコンポーネントがクリップボードに入っているものとします。)


参照02025

フォームへのコンポーネントの追加

コンポーネントの位置合わせ

コンポーネントのグループ化

コンポーネントの処理

コンポーネントのサイズ変更，移動，削除

コンポーネントの選択


コンポーネントのグループ化
コンポーネントのグループ化02026

参照

フォーム自身を除き Delphi には他のコンポーネントが入る (GroupBox, Panel, Notebook, TabbedNotebook, Scrollbox などの) コンポーネントがいくつかあります。これらはコンテナコンポーネントと呼ばれます。コンテナコンポーネントを使うと，他の複数のコンポーネントが設計時に 1 つのまとまりとして動作するようにグループ化できます。たとえばユーザーに関連オプションを提供するスピードボタンとチェックボックスなどのコンポーネントをグループ化できます。

コンテナコンポーネント内にコンポーネントを配置すると，コンテナとそこに入っているコンポーネントの間に新しい親子関係が作成されます。コンテナ (親) コンポーネントに対して実行する移動，コピー，削除などの設計時操作はそれらの中にグループ化されたすべてのコンポーネントにも影響を与えます。

メモ:	他のコンポーネントが親になっているかどうかに関係なくすべてのコンポーネントのオーナーはフォームのままです。コンポーネントの親とオーナーのプロパティの違いについての詳細は Owner プロパティと Parent プロパティを参照してください。

Panel コンポーネントには背景，ステータスライン，カスタマイズされたツールバーなどの作成を容易にする位置合わせ，ベベル，ヒントのプロパティが含まれています。

グループ化したいコンポーネントをコンポーネントパレットからコンテナコンポーネントに追加するのが一番簡単なので，グループ化するコンポーネントを追加する前にフォームにコンテナコンポーネントを追加するといいでしょう。

フォームに入れたコンポーネントは切り取りまたは貼り付けによってコンテナコンポーネントに追加できます。

コンポーネントをグループ化するには

1.	GroupBox または Panel コンポーネントをフォームに追加します。

2.	コンポーネントを通常の方法で追加し，コンテナコンポーネントが必ず選択されるようにします。

パレット内のコンポーネントをダブルクリックすると，コンポーネントの受け取りにふさわしいフォーカスを持ついずれか (つまりフォームまたはフォーム内のコンテナコンポーネント) の中央に表示されます。

コンポーネントを選択してから配置する場合，コンポーネントを配置するときにその中をクリックする限りコンテナコンポーネントを選択する必要はありません。

コンポーネントの複数のコピーをコンテナに追加するには

1.	フォーム内でコンテナコンポーネントを選択します。

2.	Shift を押し，パレットでコンポーネントを選択します。

3.	コンテナコンポーネント内の任意の場所をクリックします。

以後クリックするたびに (フォームを含む) コンポーネントの受け取りにふさわしいクリックされたものの中にコンポーネントが配置されます。

4.	コンポーネントの追加が終わったらポインタアイコンを選択します。


参照02027

フォームへのコンポーネントの追加

コンポーネントの位置合わせ

コンポーネントの処理

コンポーネントのサイズ変更，移動，削除

コンポーネントの切り取り，コピー，貼り付け

コンポーネントの選択

TGroupBox

TPanel


コンポーネントの位置合わせのためのグリッドの使い方
コンポーネントの位置合わせのためのグリッドの使い方02028

参照

フォームのグリッドは視覚的な手引きの指針を与えることによってコンポーネントを希望の場所に簡単に配置できるようにします。

デフォルトではグリッドは設計モードで表示されますが，隠すこともできます。グリッドを有効にした場合，選択によりコンポーネントをグリッドにスナップさせることができ，それによってコンポーネントの左側と上側が最も近くのグリッドマークに合います。グリッドの細かさ (つまりグリッドドットの間隔) も変更できます。

グリッドを表示するには

1.	［オプション(O)｜環境(E)］を選択して［環境の設定］ダイアログボックスを表示します。

2.	［Preferences］ページが表示されていない場合，［Preferences］タブをクリックして表示します。

3.	グリッドを表示するには［フォームデザイナ］オプションで［グリッドを表示(G)］にチェックマークを付け，グリッドを隠すにはチェックマークをはずします。

［グリッドに合わせる(P)］オプションを有効にするには

1	［オプション(O)｜環境(E)］を選択して［環境の設定］ダイアログボックスを表示します。

2.	オプションを有効にするには［フォームデザイナ］オプションで［グリッドに合わせる(P)］にチェックマークを付け，無効にするにはチェックマークをはずします。

グリッドの単位を変更するには

1.	［オプション(O)｜環境(E)］を選択して［環境の設定］ダイアログボックスを表示します。

2.	［フォームデザイナ］オプションで［グリッドの幅(X)］と［グリッドの高さ(Y)］のボックスに新しい値を入力します。

［グリッドの幅(X)］は横の間隔を制御し，［グリッドの高さ(Y)］は縦の間隔を制御します。デフォルト値は 8 と 8 です。ドット間隔を離すには大きい値を選択します。グリッドを細かくするには小さい値を選択します。


参照02029

位置合わせパレット

コンポーネントの位置合わせ

フォームへのコンポーネントの追加

コンポーネントのサイズ変更，移動，削除

コンポーネントの切り取り，コピー，貼り付け


コンポーネントの位置合わせ
コンポーネントの位置合わせ02030

参照

コンポーネント同士の位置を合わせるか，またはコンポーネントをフォームに合わせるには位置合わせパレットまたは［位置合わせ］ダイアログボックスを使います。コンポーネントグループの位置を合わせる場合，最初に選択したコンポーネントを基準に他のコンポーネントの位置が合います。

コンポーネントの位置合わせではフォームグリッドも使えます。

位置合わせパレットを使ってコンポーネントの位置を合わせるには

1.	位置合わせするコンポーネントを選択します。

2.	［表示(V)｜位置合わせパレット(A)］を選択して位置合わせパレットを開きます。

3.	パレットで位置合わせアイコンを選択します。

［位置合わせ］ダイアログボックスを使ってコンポーネントの位置を合わせるには

1.	位置合わせするコンポーネントを選択します。

2.	［編集(E)｜位置合わせ(A)］を選択して［位置合わせ］ダイアログボックスを開きます。

3.	ダイアログボックスで位置合わせオプションを選択します。

4.	［OK］を選択して位置合わせオプションを受け付けます。

コンポーネントが選択されている限り，位置合わせオプションの選択または変更を続けられます。


参照02031

フォームへのコンポーネントの追加

コンポーネントのグループ化

コンポーネントの処理

コンポーネントのサイズ変更，移動，削除

コンポーネントの切り取り，コピー，貼り付け

コンポーネントの選択

コンポーネントの位置合わせのためのグリッドの使い方


プロパティの設定
プロパティの設定02032

参照

プロパティはコンポーネントの表示と応答の方法を定義する属性です。Delphi ではコンポーネントの初期プロパティを設計時に設定し，実行時にコードによってそれらのプロパティを変更できます。

設計時にコンポーネントプロパティを設定するにはオブジェクトインスペクタを使います。実行時のみのプロパティはオブジェクトインスペクタには表示されません。

詳細は次の各トピックを参照してください。

設計時のプロパティの設定

実行時のプロパティの設定

Name プロパティ


参照02033

コンポーネントの処理

コードに対する操作

Name プロパティ

プロパティエディタについて

オブジェクトインスペクタでのプロパティの表示方法

共有プロパティの設定

ネストしたプロパティの表示


設計時のプロパティの設定
設計時のプロパティの設定02034

参照

設計時にオブジェクトインスペクタを使ってコンポーネントプロパティを設定すると，ほとんどの場合プログラムを実行せずに結果を表示できます。

設計時にコンポーネントプロパティを設定するには

1.	プロパティを変更したいコンポーネントを選択します。

選択したコンポーネントの名前がオブジェクトセレクタに表示されます。

2.	オブジェクトインスペクタの［Properties］タブをクリックします。

3.	変更したいプロパティを選択します。

4.	使用可能なプロパティエディタを使うか，またはプロパティの新しい値を入力することによってプロパティを変更します。

次の各トピックでは，設計時のプロパティ編集の詳細について説明しています。

オブジェクトインスペクタでのプロパティの表示方法

プロパティエディタについて

ネストしたプロパティの表示

共有プロパティの設定


参照02035

コンポーネントの処理

実行時のプロパティの設定

コードに対する操作


実行時のプロパティの設定
実行時のプロパティの設定02036

参照

設計時に設定できるすべてのプロパティはコードを使って実行時にも設定できます。設計時にオブジェクトインスペクタを使ってコンポーネントプロパティを設定する場合，(フォーム内でか，またはオブジェクトセレクタにより選択することによって) コンポーネントの名前を指定し，(［Properties］ページから選択することによって) プロパティの名前を指定し，プロパティの新しい値を指定します。

実行時のプロパティ設定も基本的に同じことをします。ソースコード内でコンポーネント，プロパティ，新しい値をこの順序で指定します。たとえば次のようにします。

Form1.Color := clAqua

Form1 はコンポーネント，Color はプロパティ，clAqua は新しい値です。':=' は Pascal の代入文です。Object Pascal 言語の使い方についての詳細は言語参照または言語定義を参照してください。

このコードは新しいプロパティ値を割り当てますが，コードをいつ実行するかもアプリケーションに知らせる必要があります。これにはコードをイベントと関連付けます。イベントとイベントハンドラについての詳細はイベントの処理を参照してください。


参照02037

コンポーネントの処理

設計時のプロパティの設定

コードに対する操作


オブジェクトインスペクタでのプロパティの表示方法
オブジェクトインスペクタでのプロパティの表示方法02038

参照

オブジェクトインスペクタはそれが表示するプロパティのセットを選択されたコンポーネントに基づいて動的に変更します。オブジェクトインスペクタはほかにも設計時のコンポーネントプロパティの設定を容易にする動作があります。

オブジェクトインスペクタを使ってプロパティを選択する場合，フォーム内の他のコンポーネントにフォーカスを追加または切り替えている間，それらのコンポーネントも同じプロパティを共有しているならば，プロパティはオブジェクトインスペクタ内で選択されたままである。これによって，プロパティを再選択しなくてもプロパティの新しい値を入力できる

選択されたプロパティをコンポーネントが共有しない場合，Delphi は自身の Caption プロパティを選択する。コンポーネントに Caption プロパティがない場合，Delphi は自身の Name プロパティを選択する

フォーム内で複数のコンポーネントを選択した場合，オブジェクトインスペクタには選択したコンポーネントの間で共有されるすべてのプロパティが表示される。共有されたプロパティの値が選択したコンポーネントの間で異なっている場合も同様である。この場合，デフォルトまたは最初に選択したコンポーネントのプロパティ値が表示される。オブジェクトインスペクタ内の任意の共有されたプロパティを変更すると，すべての選択したコンポーネント内のプロパティ値が新しい値に変わる

メモ:	フォーム内で複数のコンポーネントを選択した場合，それらの Name プロパティはたとえすべてが Name プロパティを持っていてもオブジェクトインスペクタには表示されません。これはフォーム内の複数のコンポーネントに対して Name プロパティに同じ値を割り当てられないからです。


参照02039

プロパティの設定

コンポーネントの処理

コードに対する操作

Name プロパティ

プロパティエディタについて

オブジェクトインスペクタでのプロパティの表示方法

共有プロパティの設定

ネストしたプロパティの表示


共有プロパティの設定
共有プロパティの設定02040

参照

ほとんどのコンポーネントは高さ (つまり Height プロパティ) または可視性 (つまり Visible プロパティ) などの共通プロパティを共有します。フォーム上の複数のコンポーネントの共通プロパティはコンポーネントを 1 つずつ選択してそれぞれを変更しなくても設定できます。

複数のコンポーネントのプロパティを設定するには

1.	共有プロパティを設定したいコンポーネントを選択します。

オブジェクトインスペクタの［Properties］ページには選択したコンポーネントが共通に持っているプロパティだけが表示されます (同様にこれらの共通プロパティの値はすべての選択したコンポーネントについて同じ場合だけ表示されます)。

2.	コンポーネントを選択したままでオブジェクトインスペクタを使ってプロパティを設定します。

設計時に表示される変更は選択した各コンポーネントに反映されますが，プログラムを実行するまではフォームに反映されない変更があります。

メモ:	オブジェクトインスペクタ内で選択したコンポーネントプロパティは，他のコンポーネントをフォームに追加している間，それらのコンポーネントもそのプロパティを共有しているならば選択されたままになります。これによって，毎回プロパティを選択せずにプロパティの値を入力できます (追加するコンポーネントが選択されたプロパティを共有しない場合，デフォルトプロパティが選択されます)。


参照02041

コンポーネントの処理

コンポーネントの選択

プロパティの設定

オブジェクトインスペクタでのプロパティの表示方法

Name プロパティ

プロパティエディタについて

ネストしたプロパティの表示

コードに対する操作


ネストしたプロパティの表示
ネストしたプロパティの表示02042

参照

プロパティはネストしたプロパティと呼ばれるそれ自身のプロパティを持てます。たとえば Label コンポーネントの Font プロパティはネストしたプロパティをいくつか持っており，その 1 つに Style があります。Style プロパティも自身のネストしたプロパティを持っています。

プロパティがネストしたプロパティを持っている場合，オブジェクトインスペクタで左端に正符号 (+) が表示されます。ネストしたプロパティを設定するにはそれらを表示する必要があります。

ネストしたプロパティを表示するには

隣に正符号 (+) が表示されたプロパティをダブルクリックする。上位プロパティの隣の正符号 (+) が負符号 (-) に変わり，ネストしたプロパティが表示される

ネストしたプロパティを隠すには

隣に負符号 (-) が表示されたプロパティをダブルクリックする


参照02043

コンポーネントの処理

オブジェクトインスペクタの概要

プロパティの設定

共有プロパティの設定

オブジェクトインスペクタでのプロパティの表示方法

Name プロパティ

プロパティエディタについて

コードに対する操作


ダイアログボックスの作成
ダイアログボックスの作成02044

参照

ダイアログボックスはユーザーが Windows ベースアプリケーションと対話するために最もよく使う方法の 1 つです。ダイアログボックスはユーザーから詳しい入力を取得したり，ユーザーに対して情報を表示するのに使います。ダイアログボックスはモード付きにもモードなしにもできます。

Password Dialog テンプレートのように簡単な設計済みダイアログボックスとフォームテンプレートダイアログボックスを表示するルーチンに加え，Delphi には既成の豊富なダイアログボックスがコンポーネントとして用意されています。これらはコンポーネントパレットの［Dialogs］ページに表示され，多くの Windows コモンダイアログボックスや標準の［検索］ダイアログボックスと［置換］ダイアログボックスのためのコンポーネントを含んでいます。これらのダイアログボックスには［ヘルプ(H)］ボタンをダイアログボックスに表示するかどうかなどさまざまなオプションを指定できますが，全体的なデザインはほとんど変更できません。

したがって独自のダイアログボックスを設計したい場合，ダイアログボックスを「最初から作る」方法を知っていると便利です。

ダイアログボックスを設計する場合の主要事項について学習するには次の各トピックを参照してください。

モード付きまたはモードなしのダイアログボックスの作成

ダイアログボックス用のフォームプロパティの設定

コマンドボタンの提供

タブ順の設定

コンポーネントの有効化と無効化

ダイアログボックスへのフォーカスの設定


参照02045

コンポーネントの基本

［Dialogs］ページのコンポーネント


モード付きまたはモードなしのダイアログボックスの作成
モード付きまたはモードなしのダイアログボックスの作成02046

参照

ダイアログボックスは単にカスタマイズされたフォームなので，フォームと同様にモード付きまたはモードなしが可能です。ほとんどのダイアログボックスはモード付きです。フォームがモード付きの場合，ユーザーは別のフォームで作業する前に明示的に閉じなくてはなりません。モードなしのフォームは画面に表示したままで，ユーザーは別のフォームで作業できます。

作成したすべてのフォームはアプリケーション内でモード付きまたはモードなしで使えます。

フォームをモードなし状態で表示するには

Show メソッドを呼び出す

メモ:	実行時にモードなしダイアログボックスを他のウィンドウの上に残しておきたい場合，FormStyle プロパティを fsStayOnTop に設定します。

フォームをモード付きで表示するには

ShowModal メソッドを呼び出す


参照02047

プロパティの設定

ダイアログボックスの構築

Esc でのボタンコードの実行

Enter でのボタンコードの実行


タブ順の設定
タブ順の設定02048

参照

タブ順は実行中のアプリケーションでユーザーが Tab キーを押したときにフォーカスがコンポーネント間を移動する順序です。

Tab キーによってフォーカスがフォーム上のコンポーネントへ移るようにするには

コンポーネントの TabStop プロパティを True に設定する

タブ順はフォームにコンポーネントを追加した順に従ってあらかじめ設定されます。この設定は各コンポーネントの TabOrder プロパティを変更するか，または［タブ順序の編集］ダイアログボックスを使うことによって変更できます。

［タブ順序の編集］ダイアログボックスを使うには

1.	タブ順を設定したいコンポーネントが入ったフォームまたはフォーム内のコンテナコンポーネントを選択します。

2.	［編集(E)｜タブ順序(R)］を選択します。

コンポーネントを現在のタブ順 (始めから終わりに向かって) で示した［タブ順序の編集］ダイアログボックスが表示されます。

3.	［Controls］リストでコンポーネントを選択し，上下の矢印を押すか，またはコンポーネントをタブ順リスト内の新しい位置にドラッグします。

4.	コンポーネントが求める順序になったら［OK］を選択します。

［タブ順序の編集］ダイアログボックスを使うとコンポーネントの TabOrder プロパティの値が変化します。これは手動でもできます。

タブ順からコンポーネントを削除するには

コンポーネントの TabStop プロパティを False に設定する

実行中のアプリケーションでユーザーが Tab キーを押すと，フォーカスはこのコンポーネントをスキップし，タブ順の次のコンポーネントに移動します。これはコンポーネントが有効な TabOrder 値を持っている場合にも当てはまります。

メモ:	タブ順からコンポーネントを削除してもそのコンポーネントは使えません。

コンポーネントの TabOrder プロパティを手動で変更するには

1.	タブ順での位置を変更したいコンポーネントを選択します。

2.	オブジェクトインスペクタで TabOrder プロパティを選択します。

3.	タブ順の中でコンポーネントに持たせたい位置を反映するように TabOrder プロパティの値を変更します。

メモ:	タブ順で最初のコンポーネントの TabOrder 値は 0 です。

タブ順を手動で設定する場合，次の点に注意してください (［タブ順序の編集］ダイアログボックスを使う場合，これらの注意は必要ありません)。

各 TabOrder プロパティの値はユニークでなくてはならない。このフォーム上の別のコンポーネントにすでに割り当てられている TabOrder 値をコンポーネントに与えた場合，それに従って他のすべてのコンポーネントの TabOrder 値が振り直される

番号付けは 0 から始めるので，コンポーネントにフォーム上のコンポーネントの数以上の TabOrder 値を与えようとしても，新しい値は受け入れられず，かわりにそのコンポーネントがタブ順で最後になるような値が入力される

非可視または使用不可のコンポーネントは有効な TabOrder 値を持っていてもタブ順内で認識されない。ユーザーが Tab を押すと，フォーカスはそのようなコンポーネントをスキップし，タブ順で次のコンポーネントに移動する。詳細はコンポーネントの有効化と無効化を参照

タブ順のテスト

タブ順はアプリケーションを実行することによってテストできます。設計時にはフォーカスは常にコンポーネントがフォーム上に配置された順序でコンポーネント間を移動します。設計時のタブ順の変更は実行時にだけ反映されます。


参照02049

ダイアログボックスへのフォーカスの設定

コンポーネントの有効化と無効化

ダイアログボックスの構築


コンポーネントの有効化と無効化
コンポーネントの有効化と無効化02050

参照	例

実行時にダイアログボックスが初めて開いたとき，またはダイアログボックスに関する条件の変化に応じて，ユーザーがダイアログボックスまたはフォーム内の特定のコンポーネントにアクセスできないようにしたい場合がよくあります。

設計時にコンポーネントを無効 (使用不可) にするには

オブジェクトインスペクタを使って Enabled プロパティの値を False にする

使用不可になったコンポーネントは淡色表示になり，TabStop プロパティが True に設定されていてもユーザーはそのコンポーネントにタブで移動できません。

メモ:	実行時にコンポーネントの内容に対してユーザーが持つアクセスの種類を制限するための ReadOnly プロパティを含んだコンポーネントもあります。

設計時にコンポーネントを無効にすると，ダイアログボックスが初めて開いたときにそのコンポーネントをユーザーが使えなくなります。コンポーネントを実行時に使用可能にするかどうかは動的に変更できます。

コンポーネントを実行時に無効 (使用不可) にするには

コンポーネントのイベントハンドラ内で次のコードを入力する

<componentn>.Enabled := False;

<componentn> は Button1 などのコンポーネントの名前


例02051

次のイベントハンドラはユーザーが Button1 をクリックしたときに Button2 が無効になるように指定します。

procedure TForm1.Button1Click(Sender: TObject);

begin

   Button2.Enabled := False

end;


参照02052

タブ順の設定

ダイアログボックスの作成


フォームへのコンポーネントフォーカスの設定
フォームへのコンポーネントフォーカスの設定02053

参照

実行中のアプリケーションで任意のときにアクティブになれる，つまりフォーカスを持てるコンポーネントは各フォームごとに 1 つだけです。フォーム内でフォーカスを持つボタンは Enter キーが押されたときに OnClick イベントを受け取ります。

実行時にフォーム内で初期フォーカスを持っているコンポーネントはフォームの ActiveControl プロパティに対応します。

アクティブコントロールとして指定されたコンポーネントがない場合，Default プロパティが True に設定されたコンポーネントに初期フォーカスが与えられます。

フォームについてデフォルトとして指定されたコンポーネントがない場合，次を除くタブ順で最初のコンポーネントに初期フォーカスが与えられます。

無効化されたコンポーネント

実行時に非可視なコンポーネント

TabStop プロパティが False に設定されたコンポーネント

設計時にアクティブコンポーネントを指定するには

フォームの ActiveControl プロパティを選択し，ドロップダウンリストを使ってフォームが初めて開いたときにフォーカスを持たせたいコンポーネントを選択する

実行中にアクティブコンポーネントを変更するには

たとえば，次のようにイベントハンドラから SetFocus メソッドを呼び出す

<componentn>.SetFocus;

<componentn> は Button1 などのコンポーネントの名前

メモ:	設計時にボタンをフォームに関するアクティブコンポーネントとして設定した場合，実行時にその設定はすでに指定されたデフォルトボタンより優先します。


参照02054

タブ順の設定

ダイアログボックスの作成


コマンドボタンの提供
コマンドボタンの提供02055

参照

ダイアログボックスをモード付きまたはモードなしのどちらの状態で使うかによって，ダイアログボックス内に特定のコマンドボタンを用意したい場合があります。モード付きダイアログボックスではユーザーがダイアログボックスを終了する方法を提供する必要があります。この目的のために 1 つまたは複数のコマンドボタンを提供するのはごく標準的な設計です。メッセージボックスのような単純なモード付きダイアログボックスでは，1 つのボタンで十分な場合がよくあります。このようなボタンには OK または Close などのラベルを付けます (次に説明するようにダイアログボックスに No というラベルの別のボタンがある場合，このボタンには Yes というラベルを付けます)。

ダイアログボックスがユーザーからの入力を受け付けるように設計した場合，ユーザーがダイアログボックスの終了時に入力を処理するかどうかを選択できると便利です。これはたとえば Cancel または No というラベルを付けたボタンを追加することによってできます (ダイアログボックスがユーザーに対して明示的に質問する場合，このボタンには No というラベルを付け，そうでない場合は Cancel とするのが一般的でしょう)。

ユーザーがコマンドボタンを選択したときに何が起こるか，たとえば変更を処理するかどうかはコードによって制御します。

Button コンポーネントのプロパティを設定することによって，追加のコードを作成しなくてもユーザーが Enter または Esc を押したときにボタンのイベントハンドラコードを呼び出せ，ユーザーがコマンドボタンを選択したときにダイアログボックスを閉じるように指定できます。詳細は次の各トピックを参照してください。

Esc でのボタンコードの実行

Enter でのボタンコードの実行

メモ:	フォームに BitBtn コンポーネントを追加し，Kind プロパティを設定することによって，多くの標準コマンドボタンをすばやく作成できます。


参照02056

タブ順の設定

ダイアログボックスへのフォーカスの設定

ダイアログボックスの構築


Esc でのボタンコードの実行
Esc でのボタンコードの実行02057

参照

Delphi には Button コンポーネントのための Cancel プロパティがあります。Cancel プロパティが True に設定されたボタンがフォーム内にある場合，実行時に Esc キーを押すとボタンの OnClick イベントハンドラに入っている任意のコードが実行されます。

ボタンを［キャンセル］ボタンとして割り当てるには

Cancel プロパティを True に設定する

ユーザーが［キャンセル］ボタンを選択したときにモード付きダイアログボックスが閉じるように設定するには，ボタンの ModalResult プロパティを mrCancel に設定する

ボタンの ModalResult プロパティを非ゼロ値に設定すると，ユーザーがそのボタンを選択したときにモード付きダイアログボックスが自動的に閉じます。

BitBtn コンポーネントを使って［キャンセル］ボタンを作成することもできます。

ビットマップボタンを使って［キャンセル］ボタンを作成するには

フォームに BitBtn コンポーネントを追加し，その Kind プロパティを bkCancel に設定する。これによってボタンの Cancel プロパティが True, ModalResult プロパティが mrCancel に設定される


参照02058

Enter でのボタンコードの実行


Enter でのボタンコードの実行
Enter でのボタンコードの実行02059

参照

Default プロパティが True に設定されたボタンがフォーム内にある場合，実行時に Enter を押すと (Enter キーを押したときにフォーカスを持っているボタンが別にない限り) ボタンの OnClick イベントハンドラに入っている任意のコードが実行されます。

フォームにデフォルトボタンがある場合も，実行時に他のボタンがフォーカスを奪えます。Enter キーを押すとフォーカスを持ったボタンの OnClick イベントハンドラコードが呼び出され，他のボタンの Default プロパティ設定は無視されます (フォーカスを持ったボタンはダイアログボックス内の他のボタンより濃く太い枠によって示されます)。

メモ:	フォーム内の他のコンポーネントもフォーカスを持てますが，ユーザーが Enter を押したときに応答するのはボタンコンポーネントだけです。フォーム内の他の非ボタンコンポーネントがフォーカスを持っている場合，デフォルトボタンは OnClick イベントを受け取ります。

ボタンをデフォルトボタンとして指定するには

Default プロパティを True に設定する

ユーザーがデフォルトボタンを選択したときにモード付きダイアログボックスが閉じるように指定するには，そのボタンの ModalResult プロパティを mrOK に設定する

ボタンの ModalResult プロパティを非ゼロ値に設定すると，ユーザーがそのボタンを選択したときにモード付きダイアログボックスが自動的に閉じます。

BitBtn コンポーネントを使ってデフォルトボタンを作成することもできます。

ビットマップボタンを使ってデフォルトボタンを作成するには

フォームに BitBtn コンポーネントを追加し，その Kind プロパティを bkOK に設定する。これによってボタンの Default プロパティが True, ModalResult プロパティが mrOK に設定される

実行時にフォーカスを変更するには

ボタンの SetFocus メソッドを呼び出す


参照02060

Esc でのボタンコードの実行


ダイアログボックス用のフォームプロパティの設定
ダイアログボックス用のフォームプロパティの設定02061

参照

Delphi のフォームにはデフォルトでは最大表示ボタンとアイコン化ボタン，サイズ変更可能な枠，フォームをサイズ変更するための追加コマンドを提供するコントロールメニューがあります。これらの機能は実行時にモードなしフォームにとって便利ですが，モード付きダイアログボックスでこれらを使うことはほとんどありません。

Delphi には便利な値をいくつか含むフォーム用の BorderStyle プロパティがあります。フォームの BorderStyle を bsDialog に設定するとダイアログボックスに関して最もよく使われる次のような設定が実現します。

アイコン化ボタンと最大表示ボタンを削除する

［移動(M)］オプションと［閉じる(C)］オプションだけを持つコントロールメニューを提供する

フォーム枠をサイズ変更できないようにし，「ベベル」に見えるようにする

各種のフォームスタイルを作成するために個別または一緒に使える他のフォームプロパティ設定を次の表に示します。

プロパティ	設定	効果

BorderIcons

    biSystemMenu	False	コントロール (システム) メニューを削除する

    biMinimize	False	アイコン化ボタンを削除する

    biMazimize	False	最大表示ボタンを削除する

BorderStyle	bsSizeable	ユーザーがフォーム枠をサイズ変更できるようにする

bsSingle	一重のサイズ変更できない枠を提供する

bsNone	区別できる枠なし。サイズ変更できない

メモ:	これらの設定を変更してもフォームの設計時の表示は変化せず，これらのプロパティ設定は実行時に可視になります。

フォームのコントロール (またはシステム) メニューを取り除いた場合，ユーザーがダイアログボックスを終了する方法を提供する必要があります。これはフォームにボタンを含めることによってできます。

ダイアログボックスのためのキャプションの指定

ほとんどの Windows ベースアプリケーションでは，各ダイアログボックスのタイトルバーにその主要な機能を説明したキャプションがあります。

デフォルトでは各フォームのタイトルバーにそのフォームの Name プロパティの値が表示されます。フォームの Caption プロパティを変更する前に Name プロパティを変更した場合，タイトルバーのキャプションが新しい名前になります。Caption プロパティを変更すると，フォームのタイトルバーは常に Caption の現在値を反映します。


参照02062

ダイアログボックスの作成


ユーザーインターフェースのテスト
ユーザーインターフェースのテスト02063

参照

フォームの設計やイベントハンドラのコーディングが終わった後，ユーザーインターフェースが思ったとおりに応答するかをテストしたい場合があります。たとえばアプリケーションが実行を開始したときに正しいコンポーネントがフォーカスを持っているか，タブ順は間違っていないかなどをチェックできます。作業をテストするために完全に動作可能なアプリケーションは必要ありません。

アプリケーションを実行するには

次のどちらかの操作をします。

［実行(R)｜実行(R)］を選択する

スピードバーの［Run］ボタンをクリックする

プログラムがコンパイルされ実行されます。

アプリケーションを終了するには

次のどちらかの操作をします。

フォームのコントロールメニューボックスをダブルクリックする

［実行(R)｜プログラムの終了(E)］を選択する


02064


参照02065

コンポーネントの基本

プロジェクトのコンパイル，構築，実行


マルチドキュメントインターフェース (MDI) アプリケーション
マルチドキュメントインターフェース (MDI) アプリケーション02066

参照

MDI は 1 つのアプリケーションで同時に 2 つ以上のファイルを開き表示するためのものです。たとえばワードプロセッサアプリケーションに MDI を使えば，複数の文書を同時に開いて表示できます。MDI を使って作成したスプレッドシートアプリケーションでは，ユーザーは一度に複数のスプレッドシートを開くことができます。テキストエディタサンプルアプリケーションは MDI アプリケーションです。

MDI アプリケーションは共通作業領域を共有する複数の文書間でデータを表示したり交換したりするのに便利です。共通作業領域は一般に親またはフレームと呼ばれます。Delphi MDI アプリケーションではフレームは常にアプリケーションのメインフォームです。

フレームウィンドウの中に子ウィンドウと呼ばれる別のウィンドウを開くことができます。子ウィンドウの外観と動作はどれも同じです。子ウィンドウ内ではアプリケーション文書つまり他のデータを開きます。これらの文書をすべて同じ形式にしたり，その MDI アプリケーションがサポートする複数のファイル形式を混用したりできます。

設計時には MDI フレームフォームをメインアプリケーションフォームとして作成し，子フォームをそのアプリケーションの子ウィンドウ用のテンプレートとして作成します。子フォームは数種類作成できますが，MDI アプリケーションがサポートするフレームフォームは 1 つだけです。

MDI アプリケーションを作成する手順については次の各トピックを参照してください。

MDI フレームフォームの作成

MDI 子フォームの作成

MDI アプリケーションメニューのマージ

開いた子ウィンドウの配列とアクセス


参照02067

MDI と SDI のフォーム

テキストに対する操作

データベースアプリケーション

DDE クライアントアプリケーション

DDE サーバーアプリケーション

OLE コンテナアプリケーション


MDI フレームフォームの作成
MDI フレームフォームの作成02068

参照

MDI アプリケーションではフレームウィンドウがアプリケーション文書用の作業領域になり，それらの文書は 1 つ以上の子ウィンドウの中で開きます。

フォームがフレームフォームと子フォーム (または非 MDI アプリケーションフォーム) のどちらであるかは FormStyle プロパティによって決まります。FormStyle プロパティは設計時にだけ設定できます。

MDI フレームフォームを作成するには

1.	メインフォームを選択します。

2.	オブジェクトインスペクタを使ってメインフォームの FormStyle プロパティを fsMDIForm に設定します。

MDI フレームフォームは 1 つのアプリケーションに 1 つだけ設定できます。

注意:	任意のフォームの FormStyle プロパティを fsMDIForm に設定できますが，アプリケーションのメインフォームとして指定していないフォームでそのように設定した場合，アプリケーションが正しくコンパイルされません。アプリケーションのメインフォームを確認または変更したい場合は，［オプション(O)｜プロジェクト(P)］を選択して表示される［プロジェクトの設定］ダイアログボックスで［Forms］ページを選択します。

規則

MDI の親フォームと子フォームには次の規則があります。

MDI 親フォームは常にアプリケーションのメインフォームでなくてはならない

MDI 親フォームをアプリケーションのメインフォームとして指定しなかった場合，アプリケーションは正しくコンパイルされない

fsMDIForm スタイルのフォームは 1 つのアプリケーションに 1 つだけ設定できる

アプリケーションのメインフォームは MDIChild 型であってはならない。MDIChild 型であると，アプリケーションは正しくコンパイルされない

一般に，［プロジェクトの設定］ダイアログボックスの［Forms］ページで［自動作成の対象(A)］フォームリストから MDI 子フォームを取り除かなくてはならない

この理由は正規の MDI アプリケーションの場合，実行時に単一の子フォームから複数のインスタンスが作成されるからである。しかし，データベースアプリケーションなどのようにさまざまな種類の子フォームから 1 種類につき 1 つしかインスタンスを使わないアプリケーションでは，多くの場合，ユーザーが実行時に個々の子フォームを作成する必要はない。そのような場合は［自動作成の対象(A)］リストからフォームを取り除く必要がない


参照02069

Creating an MDI child form

Multiple Document Interface (MDI) applications


MDI 子フォームの作成
MDI 子フォームの作成02070

参照

子フォームはユーザーが実行時に開く子ウィンドウインスタンスの表示用テンプレートとして設計時に作成されます。子ウィンドウはデフォルトでは可視のため，アプリケーションが最初に実行されたときに自動的に Delphi に子ウィンドウを作成させるのでなく，子ウィンドウを実行時に明示的に作成するようコーディングする必要があります。

MDI 子フォームを作成するには

1.	［ファイル(F)｜新規作成(F) ｜Forms］を選択します。

2.	新しいフォームの FormStyle プロパティを fsMDIChild に設定します。

3.	［ 自動作成の対象(A)］フォームリストへアクセスするため［オプション(O)｜プロジェクト(P)］を選択します。

4.	［自動作成の対象(A)］フォームリストで MDI 子フォームを選択します。

5.	MDI 子フォームを［選択可能なフォーム(F)］リストに移動し，［OK］をクリックします。

ほとんどの MDI アプリケーションは 1 種類の子フォームだけを使いますが，1 つの MDI アプリケーションで異なる種類の子ウィンドウをいくつ使ってもかまいません。複数の種類の子ウィンドウを使うアプリケーションでは，前に説明したように［自動作成の対象(A)］フォームリストから子ウィンドウを取り除き，子ウィンドウを実行時に特に作成するコードを書くのが普通です。しかし 1 種類の子フォームから 1 つずつしかインスタンスを使わないアプリケーションでは，Delphi に子フォームを自動作成させるほうがいいでしょう。

注意:	任意のフォームの FormStyle プロパティを fsMDIChild に設定できますが，アプリケーションのメインフォームでそのように設定した場合，プログラムが正しくコンパイルされません。アプリケーションのメインフォームを照合するか変更したい場合は，［オプション(O)｜プロジェクト(P)］を選択して表示される［プロジェクトの設定］ダイアログボックスで［Forms］ページを選択します。


参照02071

MDI フレームフォームの作成

マルチドキュメントインターフェース (MDI) アプリケーション

実行時のフォームのインスタンス化


開いた子ウィンドウの配列とアクセス
開いた子ウィンドウの配列とアクセス02072

参照

MDI アプリケーションでは 1 つの共通作業領域 (フレームウィンドウ) の中に複数の子ウィンドウを開くことができます。このため，MDI アプリケーションには次の項目が入ったウィンドウ (またはその他の) メニュー項目を必ず組み込まなくてはなりません。

［並べて表示(T)］

［重ねて表示(C)］

［アイコンの整列(A)］

開いた文書リスト

開いた子ウィンドウでの作業方法については次の各トピックを参照してください。

ウィンドウメニューコマンドのコーディング

開いた文書リストのメニューへのインクルード


参照02073

マルチドキュメントインターフェース (MDI) アプリケーション

テキスト処理用の領域の提供


ウィンドウメニューコマンドのコーディング
ウィンドウメニューコマンドのコーディング02074

参照

MDI アプリケーションには開いた文書をユーザーがフレームウィンドウのクライアント領域に簡単に配置できるように［並べて表示(T)］［重ねて表示(C)］［アイコンの整列(A)］の各コマンドが入ったウィンドウ (またはその他の) メニュー項目が必ず組み込まれていなくてはなりません。

［並べて表示(T)vclTileMethod］［重ねて表示(C)vclCascadeMethod］［アイコンの整列(A)vclArrangeIconsMethod］の各メニューコマンドのクリックを処理するには，各メニュー項目用の OnClick イベントハンドラを生成し，Tile, Cascade, ArrangeIcons のいずれかのメソッドを適切に呼び出します。1 つのイベントハンドラに対して 1 行だけコード (メソッド呼び出し) を書けば，後は Delphi がかわりに処理してくれます。

次に例を示します。

procedure TFrameForm.Tile1Click(Sender: TObject);

begin

  Tile;

end;

procedure TFrameForm.Cascade1Click(Sender: TObject);

begin

  Cascade;

end;

procedure TFrameForm.ArrangeIcons1Click(Sender: TObject);

begin

  ArrangeIcons;

end;


参照02075

開いた文書リストのメニューへのインクルード

開いた子ウィンドウの配列とアクセス

マルチドキュメントインターフェース (MDI) アプリケーション


開いた文書のメニューでの一覧表示
開いた文書リストのメニューへのインクルード02076

参照

MDI アプリケーションには開いた文書ウィンドウをユーザーがすばやく切り替えられるウィンドウリストが入ったメニュー項目が必ず組み込まれていなくてはなりません (現在フォーカスがあるウィンドウにはリスト内でチェックマークが付きます)。

開いた文書のリストは MDI フォームのメニューバーに表示される任意のメニュー項目に追加できます。このリストはウィンドウメニューに組み込めますが，必ずそのメニューに組み込まなくてはならないわけではありません。たとえば，ファイルメニューまたは表示メニューに組み込んでもかまいません。ただし，そのようなリストは 1 つのメニューバーに 1 つだけしか設定できません。開いた文書のリストはメニュー内の最後の項目の下に表示されます。

開いた文書のリストをメニューの一部として組み込むには，リストを入れるメニューの (キャプションでなく）名前をフレームフォームの WindowMenu プロパティに設定します。

開いた文書のリストをメニューに組み込むには

1.	フォームスタイルを fsMDIForm に設定します。

これによってフォームが MDI フレームになります。

2.	開いた文書のリストをメニュー項目として入れる MDI フォーム用メニューを作成します。

3.	フレームフォームを選択した後，オブジェクトインスペクタの［Properties］ページを選択します。

4.	WindowMenu プロパティの隣にあるドロップダウンリストで，開いた文書のリストを組み込みたいメニュー項目の名前 (たとえばウィンドウメニューまたは表示メニュー) を選択します。

この名前はメニューバー上に表示される項目を表していなくてはならず，サブメニュー項目であってはなりません。文書リストはネストしたメニューの中では使えないからです。


参照02077

ウィンドウメニューコマンドのコーディング

開いた子ウィンドウの配列とアクセス

マルチドキュメントインターフェース (MDI) アプリケーション

メニューの設計


プロジェクトに対する操作
プロジェクトに対する操作02078

参照

Delphi のプロジェクトは Delphi のアプリケーションや配布可能ライブラリを構成するファイルの集まりです。Delphi を初めて起動すると，デフォルトの新しいプロジェクトが開き，このプロジェクトに対して操作ができます。既存のほかのプロジェクトを開いたり，Delphi の定義済みプロジェクトテンプレートを使って別のプロジェクトを起動したりもできます。

最初はデフォルトの新しいプロジェクトとして，空白のプロジェクトテンプレートが使われます。［New Items］ダイアログボックスを使うと，デフォルトの新しいプロジェクトを変更できます。ここで指定したプロジェクトが以降は新しいデフォルトプロジェクトとして開くようになります。

詳細は次の各トピックを参照してください。

アプリケーションプロジェクトについて

プロジェクトの基本操作

プロジェクトとディレクトリの管理


参照02079

ユニットとフォームに対する操作

プロジェクトマネージャの基本

プロジェクトとファイルの保存

プロジェクトファイル


アプリケーションプロジェクトについて
アプリケーションプロジェクトについて02080

参照

Delphi のアプリケーションプロジェクトは次のファイルで構成されます。

プロジェクトファイル

.DPR という拡張子が付いて保存されるファイル。プロジェクトごとに 1 つだけ .DPR ファイルがある

フォームファイル

.DFM という拡張子が付いて保存されるファイル。フォームのグラフィックイメージを格納するバイナリファイルである。どの .DFM ファイルにも，拡張子が .PAS のユニットファイルが対応している

ユニット (ソースコードファイル)

.PAS という拡張子が付いて保存されるファイル。すべてのユニットファイルが Object Pascal のソースコードファイルである。ただし，フォームに関連付けられているユニットファイルはグラフィックフォーム (.DFM) ファイルから切り離すことができないため，ほかの種類のユニットファイルとは区別される

アプリケーションの開発時にフォームとその関連ユニットファイルを追加します。次のファイルも追加できます。

Borland Pascal の旧バージョンや他のプログラミング言語で作成したファイル。このようなファイルを Delphi のプロジェクトに追加するには，追加するファイルの種類をコンパイラ指令で Delphi に指示する

Delphi では作成していないが，ライブラリやその他の外部ソースから呼び出して使うファイル (非 Delphi のリソースファイル)

プロジェクトファイルがすべてのファイルを管理しています。したがって，ターゲットの実行可能 (.EXE) ファイルやダイナミックリンクライブラリ (.DLL) を作成するのに，どのファイルをコンパイルしてリンクすればいいかを Delphi は認識できるようになっています。


参照02081

設計時に生成されるファイル

コンパイラが生成するファイル

非 Delphi のリソースファイル


設計時に生成されるファイル
設計時に生成されるファイル02082

参照

プロジェクトのファイルには，プロジェクト開発時に生成されるものがあります。主なものとしては，ソースコード，環境設定，バックアップの各ファイルがあります。このようなファイルは Delphi でファイルやプロジェクトを保存するとディスクに生成されます。次の表は，こうしたファイルの拡張子と概略です。各ファイルがいつディスクに生成されるかについて説明します。

拡張子	説明

.DPR	プロジェクトファイル
プロジェクトのメインプログラムファイルの Object Pascal ソースコード。プロジェクト内のすべてのフォームファイルとユニットファイルを一覧表示し，アプリケーション初期化コードを格納する。プロジェクトの最初の保存時に生成される

.PAS	ユニットソース
Object Pascal ユニットソースコード。プロジェクトの最初の保存時に，プロジェクト内の各フォームについて .PAS ファイルが 1 つ生成される (どのフォームにも関連していない .PAS ファイルがプロジェクトに含まれる場合もある)。フォームのすべての宣言と手続き (イベントハンドラなど) を格納する

.DFM	グラフィックフォームファイル
プロジェクト内の 1 つのフォームの設計プロパティを格納するバイナリファイル。プロジェクトの最初の保存時に，プロジェクト内の各フォームについて，対応する .PAS ファイルとともに .DFM ファイルが 1 つ生成される

.OPT	プロジェクトオプションファイル
プロジェクトオプションの現在の設定を格納するテキストファイル。最初の保存時に生成され，その後はプロジェクトオプション変更後の保存のたびに更新される

.RES	コンパイラリソースファイル
プロジェクトで使われるアプリケーションアイコンやその他の外部のリソースを格納するバイナリファイル

.~DP	プロジェクトバックアップファイル
プロジェクトの 2 回目の保存時に生成され，その後は保存のたびに更新される。.DPR ファイルのコピーを前回の保存状態で格納する

.~PA	ユニットバックアップファイル
.PAS ファイルのコピーを前回の保存状態で格納する。.PAS ファイルの変更後，プロジェクトの 2 回目の保存時か .PAS ファイルの保存時に生成される。その後は .PAS ファイル変更後の保存のたびに更新される

.~DF	グラフィックフォームバックアップ
コードエディタで .DFM ファイルをテキストファイルとして開いて変更を加えた後，.DFM ファイルの保存時に生成される。.DFM ファイルのバイナリ形式のコピーを前回の保存状態で格納する

.DSK	デスクトップ設定
［環境の設定］ダイアログボックスでプロジェクトに対して指定したデスクトップ設定についての情報を格納する


参照02083

コンパイラが生成するファイル

非 Delphi のリソースファイル


コンパイラで生成されるファイル
コンパイラで生成されるファイル02084

参照

プロジェクトのファイルには，コンパイル時にディスクに生成されるものがあります。たとえば，プロジェクトの完成時にアプリケーション化や配布ができるアプリケーション用実行可能ファイルや，プロジェクトユニットファイルのオブジェクトコードファイルなどです (それぞれ別々にコンパイルされるため，コンパイル所要時間は最小限に抑えられます)。次の表は，コンパイル時に生成されるプロジェクトのファイルについての概略です。

拡張子	説明

.EXE	コンパイル済み実行可能ファイル
配布可能なアプリケーション用実行可能ファイル。アプリケーションのコンパイル時に必要なすべての .DCU ファイルが入っている。アプリケーションとともに .DCU ファイルを配布する必要はない

.DCU	ユニットオブジェクトコード
コンパイル時に，プロジェクトの各 .PAS ファイルに対応した .DCU ファイルが生成される

.DLL	コンパイル済みダイナミックリンクライブラリ
DLL の生成についての詳細は『Delphi コンポーネント開発者ガイド』を参照


参照02085

設計時に生成されるファイル

非 Delphi のリソースファイル


非 Delphi のリソースファイル
非 Delphi のリソースファイル02086

参照

Delphi のプロジェクトでは，Delphi 以外のアプリケーションで作成したファイルも使えます。このファイルはプロジェクトディレクトリになくてもかまいません。Delphi 以外のファイルをプロジェクトで正しく指定すると，プロジェクトを保存またはコンパイルしたときにそのファイルが追加されます。Delphi で使う Delphi 以外のファイルには，複数のプロジェクトに共通するものがあります。そのようなファイルの例を次に示します。

イメージファイル	TImage 型のコンポーネントで使ったり，TBitBtn コンポーネントでグリフとして使うビットマップ (.BMP ファイルと .WMF ファイル)。システム上のどのディレクトリにでも入れることができます。グラフィックコンポーネントのプロパティとしてビットマップを指定すると，ディスクファイルの「スナップショット」がとられてバイナリフォーム (.DFM) ファイル に格納されます。最終的には，プロジェクト用実行可能ファイルにコンパイルされます。

アイコンファイル	フォームの Icon プロパティや，［プロジェクトの設定］ダイアログボックスで指定するアイコン (.ICO ファイル)。システム上のどのディレクトリにでも入れることができます。アイコンファイルはビットマップイメージファイルの場合と同じようにプロジェクトに追加されます。.BMP ファイルと .ICO ファイルは Delphi のイメージエディタで作成したり，Delphi のイメージライブラリにあるビットマップファイルやアイコンファイルから選択することもできます。

Windows ヘルプファイル	［プロジェクトの設定］ダイアログボックスでプロジェクトに対して指定するオンラインヘルプ (.HLP ファイル)。システム上のどのディレクトリにでも入れることができます。.HLP ファイルは Delphi に付属しているマイクロソフトのヘルプコンパイラか，別のサードパーティのヘルプコンパイルシステムを使ってコンパイルできます。ファイル名とそのパス (指定した場合) だけがプロジェクトに追加され，ヘルプファイルそのものは追加されません。これは，アプリケーション化またはアプリケーションの配布をする場合にヘルプのアクセスに影響することがあります。詳細はプロジェクトオプションの設定を参照してください。


参照02087

設計時に生成されるファイル

コンパイラが生成するファイル


プロジェクトの基本操作
プロジェクトの基本操作02088

参照

Delphi のプロジェクトを開発するときに使う基本機能について説明します。

新しいプロジェクトを起動するには

1.	［ファイル(F)｜新規作成(N)］を選択して［Select New Object Type］ダイアログボックスを開く

2.	［Application］または［Library］を選択する

既存のプロジェクトを開くには

［ファイル(F)｜開く(O)］を選択する

プロジェクトを保存するには

［ファイル(F)｜上書き保存(S)］を選択する

プロジェクトのコピーを保存するには

［ファイル(F)｜名前を付けて保存(A)］を選択する

メモ:	［名前を付けて保存(A)］を使うと，プロジェクトファイルをが別の名前またはパスに保存できます。また［名前を付けて保存(A)］では，プロジェクト内のすべてのファイルが更新されます。プロジェクト内のファイルは別のプロジェクトと共有できます。共有した場合，以降のファイルへの変更は，そのファイルを参照しているすべてのプロジェクトに反映されます。プロジェクト内のファイルが共有されないようにしたい場合は，各ファイルを別々のプロジェクトディレクトリに保存します。

ファイルを個別に保存するには

［ファイル(F)｜名前を付けて保存(A)］を選択し，プロジェクトのファイルを入れるディレクトリを指定する

プロジェクトを実行するには

次のどちらかの操作をします。

［実行(R)｜実行(R)］を選択する

スピードバーで［実行］ボタンをクリックする

プロジェクトの実行を停止するには

アプリケーションのメインフォームのコントロールメニューボックスをダブルクリックする

プロジェクトを閉じるには

［ファイル(F)｜すべてを閉じる(L)］を選択する


参照02089

プロジェクトとファイルの保存

プロジェクトの概要

プロジェクトとディレクトリの管理

ユニットとフォームに対する操作

プロジェクトマネージャの基本

プロジェクトファイル


ユニットとフォームに対する操作
ユニットとフォームに対する操作02090

Delphi でのアプリケーション開発にはフォームとユニットソースコードに対する操作が必要になります。ユニットとフォームに対してプロジェクトファイルとは関係なくできる基本操作についての詳細は次の各トピックを参照してください。

プロジェクトへのユニットとフォームの追加

プロジェクトでのユニットとフォームの表示

プロジェクトからのユニットとフォームの削除

ユニットとフォームの保存


フォームファイル
フォームファイル02091

参照

フォームは Delphi のアプリケーションの中心になります。フォームへのコンポーネントの追加，プロパティの編集，コーディングのいずれの場合も，フォームを編集します。

フォームは次の 2 種類のファイルに格納されます。

フォームのバイナリイメージを格納する .DFM ファイル。フォームのビジュアルプロパティの編集 (高さ，色，境界の変更など) の結果が .DFM ファイルに格納される

.DFM ファイルのソースコードを格納するユニット (.PAS) ファイル。.PAS ファイルでは，実行アプリケーションでのフォームとそのコンポーネントの動作を指定するイベントハンドラを作成する

バイナリファイルとソースコードファイルにはフォームの作成や変更の結果が常に反映されます。アプリケーションに新しいフォームを追加するたびに，関連するユニットファイルが作成され，それがプロジェクトファイルの uses 節に追加されます。


参照02092

プロジェクトとディレクトリの管理

ユニット

フォームユニットファイル

設計時に生成されるファイル


プロジェクトとディレクトリの管理
プロジェクトとディレクトリの管理02093

参照

プロジェクトとディレクトリの管理についての詳細は次の各トピックを参照してください。

プロジェクトマネージャの基本

プロジェクトのヘルプとアイコンのファイルの指定

プロジェクトのメインフォームの指定

プロジェクトテンプレートの使い方

プロジェクトのコンパイル，構築，実行

プロジェクトオプションの設定


参照02094

プロジェクトとディレクトリの管理

プロジェクトの概要

プロジェクトとファイルの保存

プロジェクトファイル

ユニットとフォームに対する操作


プロジェクトファイル
プロジェクトファイル (.DPR)02095

参照

新しいプロジェクトを起動すると，プロジェクトファイルが生成され，プロジェクト開発の間管理されます。

プロジェクトファイルは Delphi のアプリケーションを制御するファイルで，.DPR という拡張子が付いて保存されます。プロジェクトごとに 1 つだけ .DPR ファイルがあります。

プロジェクトファイルには，次のソースコードが生成されます。

program Project1;

uses

  Forms,

  Unit1 in 'UNIT1.PAS' {Form1};

{$R *.RES}

begin

Application.CreateForm(TForm, Form1);

Application.Run(Form1);

end.

新しいフォームやユニットをプロジェクトに追加するたびに，プロジェクトソースコードファイルの uses 節にそのフォームやユニットが追加されます。

注意:	.DPR ファイルは手動で変更しないでください。プロジェクトファイルを直接変更すると，Delphi の自動プロジェクト管理メカニズムの働きを妨げ，プロジェクト構成について誤った情報が使われる危険が生じます。コンパイルの失敗などの問題が発生しかねません。


参照02096

プロジェクトとディレクトリの管理

プロジェクトの保存

ユニット (.PAS) ファイル

プロジェクトに対する操作

プロジェクトへのユニットとフォームの追加


ユニットソースコード (.PAS) ファイル
ユニットソースコード (.PAS) ファイル02097

参照

ユニットは Delphi アプリケーションの主要なビルディングブロックになります。ユニットファイル (拡張子が .PAS のファイル) は Delphi で構築するアプリケーションの構成要素の Object Pascal ソースコードを格納します。たとえば，どのフォームにも専用のユニットソースコードファイルがあります。ユニットソースコードファイルはプロジェクトに所属させることができますが (つまり，プロジェクトの .DPR ファイルの uses 節に登録しますが)，これは必須ではありません。どのプロジェクトでも使える独立したファイルとして作成して保存することもできます。

デフォルトの新しいプロジェクトを開いて保存する場合，プロジェクトディレクトリには，初めはユニットソースコード (.PAS) ファイルと関連するグラフィックフォーム (.DFM) ファイルが 1 つずつあります。.PAS ファイルはフォームとそのイベントハンドラのソースコードを格納し，.DFM ファイルはフォームのビジュアルイメージデータのバイナリコードを格納します。

すべてのユニットファイルをフォームに関連付けなくてはならないわけではありません。専用の手続き，関数，DLL，コンポーネントを作成する場合，そのソースコードを .PAS ファイル (このファイルは作成する必要があります) に格納しても，このユニットソースコードファイルとフォームは関連付けられません。目的別にデフォルトのユニット (.PAS) ファイルを生成する方法についての詳細は各トピックを参照してください。


フォーム関連ユニットファイル
フォーム関連ユニットファイル02098

操作することが最も多いユニットソースコードファイルはフォーム関連ユニットファイルです。IDE で新しいフォームを開くたびに，フォーム関連ユニットファイルが作成されます。次の例では，デフォルトの空白プロジェクトの Unit1 について生成されるコードと，プロジェクトに追加した空白フォームに関連するユニットごとに生成されるコードを示します。デフォルトのユニット識別子の数値は，新しいフォームの追加に応じて当然 Unit2, Unit3，などのように大きくなります。

unit Unit1;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs;

type

  TForm1 = class(TForm)

  private

    { プライベート宣言 }

  public

    { パブリック宣言 }

  end;

var

  Form1: TForm1;

implementation

{$R *.DFM}

end.

アプリケーションのメインフォームに指定するフォームは変更できます。詳細は［ツール(T))｜Repository(R)］を参照してください。


フォームユニット型宣言
フォームユニット型宣言02099

フォームをクラスとして宣言します。クラスとは単にオブジェクトにすぎません。Delphi のアプリケーションのすべての構成要素 (ボタン，ラベル，フォントなど) がオブジェクトです。 Delphi のオブジェクトには Windows での動作がカプセル化されているため，Windows との直接的な対話処理のかわりにオブジェクトとの対話処理ができます。


フォームユニット var 宣言02100

フォームを TForm のインスタンスとして宣言します。したがって，フォームには TForm オブジェクトのすべての動作と特性が含まれます。


フォームユニットコンパイラ指令02101

$R コンパイラ指令は TForm のバイナリファイル (.DFM) をリンクします。これによって，プロジェクトの .DFM ファイルがコンパイル済み実行可能ファイルに追加されます。

警告:	フォームのユニットファイルから $R *.DFM 指令を削除しないでください。この指令を削除すると，コードが正しく動作しなくなります。


コンポーネントのユニットファイル
コンポーネントのユニットファイル02102

Delphi で新しいコンポーネントを作成する場合，ソースコードのユニットファイルを作成しなくてはなりません。新しいコンポーネントはコンポーネントパレットに追加しなくてはならないため，コンポーネントのユニットソースコードでは，フォームに関連するユニットの場合とはデフォルトの構造がやや異なります。

新しいコンポーネントのユニットファイルを作成するには

1.	［ファイル(F)｜新規作成(N)］を選択する。

2.	［Component］を選択する


手続きと関数のユニットファイル
手続きと関数のユニットファイル02103

ソースコードユニット内で専用の手続きや関数を作成できます。ただし，この関数やプログラムをほかのコードから呼び出せるようにするには，その関数やプログラムがあるユニットを，手続きを使う必要があるプロジェクト内に含めなければなりません。そうするわけにいかない場合は，プロジェクトへ追加して任意のユニットからの呼び出しが可能な独立したユニットとして，手続きや関数を作成できます。その場合は，関連フォームのない新しいユニットソースコードファイルを作成しなくてはなりません。

フォームに関連しないユニットファイルを作成するには

1.	［ファイル(F)｜新規作成(U)］を選択する

2.	［Unit］を選択する

新しいユニットをプロジェクト内に含めるとき以外は，IDE でプロジェクトを開いておかなくもかまいません。

次のコード例では，フォームに関連しないユニットのデフォルトのソースコードを示します。

unit Unit1;

interface

implementation

end.


参照02104

フォーム関連ユニットファイル

コンポーネントのユニットファイル

手続きと関数のユニットファイル

コードエディタ

プロジェクトとディレクトリの管理

プロジェクトファイル


プロジェクトへのユニットとフォームの追加
プロジェクトへのユニットとフォームの追加02105

参照

プロジェクトマネージャまたはメニューコマンドを使うと，新しいフォームやユニットのファイルをプロジェクトに作成したり，プロジェクトディレクトリ以外のディレクトリにある既存のファイルをプロジェクトに追加したりできます。フォームやユニットをプロジェクトに「所属」させるには，新しいユニットファイルや共有ユニットファイルの追加に応じてプロジェクトのソースコード (.DPR) ファイルが更新されるように，IDE でプロジェクトを開いておかなくてはなりません。

既存のユニットやフォームをプロジェクトに追加してから変更すると，そのフォームやユニットを使うほかのすべてのプロジェクトに変更結果が反映されます。

メモ:	プロジェクトにフォームを追加することで，そのフォームやフォームのユニットで宣言されているルーチンに対し，自動的にプロジェクト内のほかのユニットがアクセスできるようになるわけではありません。ルーチンやフォームにアクセスするユニットの適切な uses 節に，そのルーチンやフォームがあるユニットの識別子を追加しなくてはなりません。

プロジェクトに新しいフォームを追加するには

次のいずれかの操作を実行します。

プロジェクトを開き，［ファイル(F)｜新規作成(N)］を選択する

スピードバーで［フォームの作成］ボタンをクリックする

プロジェクトマネージャのスピードメニューで［フォームの新規作成(W)］を選択する

新しい空白フォームが表示され，コードエディタにユニットソースコードファイルのページが表示されます。

フォームを追加せずに新しいユニットを追加するには

次のいずれかの操作を実行します。

プロジェクトを開き，［ファイル(F)｜新規作成(N)］を選択する

スピードバーで［New Unit］ボタンをクリックする

プロジェクトマネージャのスピードメニューで［ユニットの新規作成(N)］を選択する

新しいページがコードエディタに追加され，デフォルトのユニットソースコードが表示されます。

既存のフォームやユニットをプロジェクトに追加するには

次のいずれかの操作をします。

［ファイル(F)｜Add to Project(D)］を選択する

プロジェクトマネージャのスピードバーで［追加(A)］ボタンをクリックする

プロジェクトマネージャのスピードメニューで［ファイルの追加(A)］を選択する

［プロジェクトに追加］ダイアログボックスが表示されます。このダイアログボックスでは，現在のプロジェクトに追加するユニットやフォームのファイルを選択できます。

メモ:	このダイアログボックスを使ってほかのファイルを開くことができますが，プロジェクトに実際に追加されるのはユニットとフォームのファイルだけです。テキストファイルなどのほかのファイルはコードエディタで開き，表示や編集はできますが，プロジェクトの構成ファイルとはみなされません。


参照02106

プロジェクトへの既存のユニットの呼び出し

プロジェクトマネージャの基本

プロジェクトからのユニットとフォームの削除

プロジェクトテンプレートの使い方

プロジェクトでのユニットとフォームの表示

プロジェクトに対する操作


プロジェクトへの既存のユニットの呼び出し
プロジェクトへの既存のユニットの呼び出し02107

参照

プロジェクトでは，そのプロジェクトで作成されておらず，現在のプロジェクトディレクトリにもそのサブディレクトリにもない既存のフォームやユニットのファイルを使うことができます。このようなファイルは共有ファイルといいます。これはプロジェクトでのファイルの使い方を絶えず把握しておけるようにするための概念的な区別にすぎません。プロジェクトを構成するファイルがプロジェクトディレクトリやそのサブディレクトリにあっても，それ以外のディレクトリにあっても，Delphi そのものには特に関係はありません。

共有ファイルをプロジェクトに追加する場合，そのファイルは現在のプロジェクトディレクトリにコピーされるわけではなく，元のディレクトリにそのまま残るという点に注意してください。共有ファイルを現在のプロジェクトへ追加した場合，プロジェクトの .DPR ファイルの uses 節へファイル名とパスが登録されるだけです。これはユニットをプロジェクトに追加すると自動的に登録されます。コンパイラはプロジェクトそのもので作成されたファイルと同じように共有ファイルを処理します。

共有ファイルを現在のプロジェクトの構成ファイルとして追加するには

次のいずれかの操作をします。

［ファイル(F)｜Add to Project(D)］を選択する

Delphi のスピードバーで［プロジェクトに追加］をクリックする

プロジェクトマネージャのスピードバーで［追加(A)］をクリックする

プロジェクトマネージャのスピードメニューで［ファイルの追加(A)］を選択する

この操作によって［プロジェクトに追加］ダイアログボックスが表示されます。このダイアログボックスでは，現在のプロジェクトで使いたいファイルを選択できます。プロジェクトマネージャのファイルリストのパス列には，共有ファイルのパスが表示されます。


参照02108

プロジェクトへのユニットとフォームの追加

プロジェクトからのユニットとフォームの削除

プロジェクトマネージャの基本

プロジェクトに対する操作


プロジェクトでのユニットとフォームの表示
プロジェクトでのユニットとフォームの表示02109

参照

表示メニューのコマンドを使うと，現在のユニットと現在のフォームの表示を簡単に切り替えることができます。表示メニューのコマンド，プロジェクトマネージャのスピードバーのボタン，プロジェクトマネージャのスピードメニューのコマンドを使うと，プロジェクト内のどのユニットやフォームでも表示できます。

プロジェクトマネージャを使ってユニットを表示するには

1.	プロジェクトマネージャウィンドウで表示したいユニットを選択します。

2.	次のいずれかを実行します。

スピードバーで［ユニット表示(U)］をクリックする

スピードメニューで［ユニットの表示(U)］を選択する

ユニット列でユニットをダブルクリックする

ユニットのソースコードがコードエディタのアクティブページになります。この時点でユニットがオープンしていない場合は，Delphi によってオープンされます。

表示メニューを使ってユニットを表示するには

［ユニット(U)］を選択する

プロジェクトマネージャを使ってフォームを表示するには

1.	プロジェクトマネージャウィンドウで表示したいフォームを選択します。

2.	次のいずれかを実行します。

スピードバーで［フォーム表示(W)］ボタンをクリックする

スピードメニューで［フォームの表示(F)］コマンドを選択する

フォーム列でフォーム名をダブルクリックする

フォームが設計時モードで表示されます。この時点でフォームが開いていない場合は，Delphi によって開かれます。

表示メニューを使ってフォームを表示するには

［フォーム(F)］を選択する


参照02110

プロジェクトへのユニットとフォームの追加

プロジェクトマネージャの基本

プロジェクトからのユニットとフォームの削除

プロジェクトファイルの表示

プロジェクトに対する操作


プロジェクトファイルの表示
プロジェクトファイルの表示02111

参照

プロジェクト (.DPR) ファイルを表示すると，プロジェクトに含まれているユニットとファイルを調べたり，アプリケーションのメインフォームとして指定されているフォームを確認したりできます。

重要:	.DPR ファイルを手動で編集すると，Delphi でプロジェクトが自動更新されなくなります。したがって，.DPR ファイルは手動で編集しないようにしてください。

.DPR ファイルを表示するには

［表示(V)｜プロジェクトソース(J)］を選択する

プロジェクトマネージャのスピードメニューで［プロジェクトソースの表示(P)］コマンドを選択する

プロジェクトファイルが開いていない場合は，Delphi によって開かれます。

.DPR ファイルを閉じるには

[ファイル(F)｜閉じる(C)］を選択する

コードエディタのスピードメニューで［このページを閉じる(P)］を選択する

メモ:	プロジェクトファイルを閉じるときには，コードエディタ内でプロジェクトファイルのページがアクティブになっていなければなりません。


参照02112

プロジェクトマネージャの基本

プロジェクトでのユニットとフォームの表示

プロジェクトに対する操作


プロジェクトからのユニットとフォームの削除
プロジェクトからのユニットとフォームの削除02113

参照

プロジェクト開発中は，いつでもプロジェクトからユニットやフォームのファイルを削除できます。この削除によって，.DPR ファイルの uses 節に示されているファイルへの参照も削除されます。

重要:	プロジェクトからファイルを削除すると，ファイルとプロジェクトとの関係が解除されますが，ファイルがディスクから削除されることはありません。不要なファイルをディスクから削除するには，Windows のファイルマネージャやその他のユーティリティを使います。先にこのトピックの「警告」を参照してください。

プロジェクトからユニットを削除するには，プロジェクトを開いてから次のいずれかを実行します。

プロジェクトマネージャウィンドウの場合

削除したいユニットを選択し，スピードバーで［削除(M)］ボタンを選択する

削除したいユニットを選択し，スピードメニューで［ファイルの削除(R)］を選択する

コードエディタの場合

 削除したいユニットのタブを選択し，Delphi のメニューバーで［ファイル(F)｜ファイルの削除(M)］を選択する

削除したいユニットのタブを選択し，Delphi のスピードバーで［プロジェクトから削除］ボタンを選択する

警告:	Windows のファイル管理プログラムや DOS のコマンドを使って Delphi のプロジェクトのファイルをディスクから削除する場合，そのファイルを使うプロジェクトごとに，事前にプロジェクトからファイルを削除しておかなくてはなりません。これをせずにディスクからファイルを削除すると，そのファイルを使っていた各プロジェクトでは，プロジェクト (.DPR) ファイルの uses 節にファイルへの参照が残ります。プロジェクトを再び開くと，削除したファイルが検索され，見つからないファイルごとにエラーメッセージが表示されます。プロジェクトを開いたときに，プロジェクトマネージャに示される構成ファイルについての情報が不正確になります。

グラフィックフォームファイルの削除

グラフィックフォーム (.DFM) ファイルは常にソースコードユニット (.PAS) ファイルに関連付けられているため，一方を削除するともう一方も削除されます。ただし，関連フォームがないユニットファイルは，ほかのユニットファイルとプロジェクトとの関係に影響を及ぼさずに削除できます。削除したユニットファイルへの uses 節での参照が残りのユニットファイルで存在する場合は，必ず削除してください。


参照02114

プロジェクトへのユニットとフォームの追加

プロジェクトマネージャの基本

プロジェクトでのユニットとフォームの表示

プロジェクトに対する操作


プロジェクトのヘルプとアイコンのファイルの指定
プロジェクトのヘルプとアイコンのファイルの指定02115

参照

アプリケーション用にヘルプファイルを作成している場合，ユーザーがヘルプを要求したときにアプリケーションでヘルプファイルを開くことができるように，ヘルプファイルのパスを指定しておかなくてはなりません。

同様に，アプリケーションが Windows デスクトップでアイコン化されるときに表示されるアイコンを選択できます。このアイコンのファイルはコンパイル時に .DPR ファイルにリンクされます。

ヘルプファイルもアイコンファイルも，パスは［プロジェクトの設定］ダイアログボックスの［Application Options］ページを使って指定します。

プロジェクトのアイコンファイルやヘルプファイルを指定するには

1.	［オプション(O)｜プロジェクト(P)］を選択します。

［プロジェクトの設定］ダイアログボックスが表示されます。

2.	［Application Options］ページを選択します。

3.	使いたいアプリケーションアイコン (.ICO) ファイルやヘルプファイルの名前を選択します。ファイルのパスがわからないときは［参照(B)］ボタンを使います。

アプリケーションアイコンはアプリケーションがユーザーのデスクトップでアイコン化されるときに表示されます。このアイコンのファイルはコンパイル時に .DPR ファイルにリンクされます。

4.	［OK］を選択して指定内容を有効にし，ダイアログボックスを閉じます。


参照02116

非 Delphi のリソースファイル

［Application Options］ページ (［プロジェクトの設定］ダイアログボックス)

プロジェクトに対する操作


プロジェクトのメインフォームの指定
プロジェクトのメインフォームの指定02117

参照

プロジェクトのメインフォームはユーザーが Delphi アプリケーションを起動したときに最初に表示されるフォームです。ユーザーまたはプログラムがメインフォームを閉じると，アプリケーションは終了します。

プロジェクトに追加した各フォームの名前は自動的に Application.CreateForm 文に挿入されます。.DPR ファイルの最初の Application.CreateForm 文で指定されたフォームがアプリケーションのメインフォームになります。.DPR ファイルでは，プロジェクトに追加した順序のとおりにフォームが並びます。したがって，最初に作成または追加したフォームが常にアプリケーションのメインフォームになります。

ただし，プロジェクトの別のフォームをアプリケーションのメインフォームとして指定すれば，メインフォームの指定を変更できます。この変更は，フォームの実行テストを別のフォームからそのフォームにアクセスせずにしたいときなどに特に役立ちます。

アプリケーションのメインフォームを変更するには

1.	［プロジェクトの設定］ダイアログボックスの［Forms］ページを選択します。

2.	［メインフォーム(M)］コンボボックスを使って，目的のフォームを選択します。

このリストボックスには，現在のプロジェクトにあるすべてのフォームが示されます。

3.	［OK］を選択して指定内容を有効にし，ダイアログボックスを閉じます。


参照02118

［Application］ページ (［オプション(O)｜プロジェクト(P)］)

プロジェクトに対する操作


プロジェクトとファイルの保存
プロジェクトとファイルの保存02119

参照

現在開いているプロジェクトファイルはそのまま保存することも，別の名前やパスで保存することもできます。プロジェクトテンプレートとして保存して，再利用することもできます。プロジェクトをテンプレートとして保存すると，そのプロジェクトの操作を継続してから，先に保存したテンプレートに影響を及ぼさずにもう一度プロジェクトを保存できます。

プロジェクトのすべてのファイルに名前を付けると，［ファイル(F)｜上書き保存(S)］と［ファイル(F)｜名前を付けて保存(A)］のどちらの場合でも，新しい (変更のない) ユニットだけに名前を付けるよう要求され，すでに名前を付けてあるプロジェクトのファイルへの変更が保存されます。

［ファイル(F)｜名前を付けて保存(A)］コマンドを選択すると .DPR ファイルを新しいパスで保存することが要求されます。.DPR ファイルの新しい名前もパスも指定しなければ，既存の .DPR ファイルを上書きするかどうかが尋ねられます。


参照02120

プロジェクトテンプレートの使い方

プロジェクトに対する操作


ファイルの保存
ファイルの保存02121

参照

コードエディタで開いたプロジェクト内の個々のファイルやプロジェクト以外のファイル (テキストファイルなど) は保存できます。ファイルを保存するには，ファイルが開いていなくてはなりません。

個々のファイルを保存するには

1.	［ファイル(F)｜上書き保存(S)］を選択します。

初めてファイルを保存するときは，ファイルに名前を付けるよう要求されます。

2.	必要であればファイルに名前を付けます。

3.	［OK］をクリックします。

ファイルが保存されます。

ファイルを別の名前やパスで保存するには

1.	［ファイル(F)｜名前を付けて保存(A)］を選択します。

［名前を付けて保存］ダイアログボックスが表示されます。

2.	新しいファイル名とパスのどちらかまたは両方を指定し，［OK］を選択します。

指定した名前やパスでファイルのコピーが保存されます。

メモ:	これによってファイルの名前が変更されます。ファイルがすでにプロジェクト内にある場合，新しい名前のファイルがプロジェクトに挿入されます。元のユニットはファイルとして残りますが，プロジェクトからは除外されます。


参照02122

プロジェクトの保存

プロジェクトに対する操作


プロジェクトの別バージョンの保存
プロジェクトの保存02123

参照

プロジェクトで開いているすべてのファイルを保存するには，次のいずれかを実行します。

［ファイル(F)｜上書き保存(S)］を選択する

Delphi のスピードバーで［プロジェクトの保存］ボタンをクリックする

プロジェクトマネージャのスピードメニューで［プロジェクトの上書き保存(S)］コマンドを選択する

プロジェクトを前に保存していない場合は，［名前を付けて保存］ダイアログボックスが表示され，プロジェクトの最初のユニットの名前が示されます。プロジェクトを前に保存している場合は，新しいファイルだけを保存するよう要求されます。

新しく作成または追加したファイルを保存するには

上のいずれかの操作をしてから次の操作を実行します。

1.	ユニットのファイル名を指定し，［OK］を選択します。

プロジェクト内の名前のないすべてのユニットを保存するまで，保存の要求が続きます (グラフィックフォーム (.DFM) ファイルを個別に保存するよう要求されることはありません)。次に，プロジェクトファイルそのものを前に保存していなければ，保存するように要求されます。これによって，指定したユニット名やフォーム名が .DPR ファイルに正確に反映されます。

2.	プロジェクトの名前を指定し，［OK］を選択します。

プロジェクトにはユニークな名前，つまりプロジェクト内のどのユニットにも使われていない名前を付けなくてはならないことに注意してください。ユニットと同じ名前をプロジェクトに付けようとすると，エラーメッセージが表示されます。.DPR ファイルの名前だけを変更して，［OK］を選択します。


参照02124

ファイルの保存

プロジェクトマネージャの基本

プロジェクトの別バージョンの保存

.DPR ファイルの更新

プロジェクトに対する操作


Saving a separate version of the project
プロジェクトの別バージョンの保存02125

参照

プロジェクトのすべてのコンポーネントファイルをいったん保存すると，［ファイル(F)｜名前を付けて保存(A)］を選択したときに，前回ファイルを保存した後の変更が自動的に反映されます。［ファイル(F)｜上書き保存(S)］の場合と同じようにプロジェクト内のファイルへの変更が保存されますが，.DPR ファイルだけは新しく指定した名前やパスで保存されます。

たとえばプロジェクト内のフォームやユニットへの変更を，そのフォームやユニットを使うほかのプロジェクトに影響を及ぼさずに保存したい場合は，［ファイル(F)｜名前を付けて保存(A)］を選択してファイルを個別に保存しなくてはなりません。

現在のプロジェクトを別の名前で保存するには

1.	［ファイル(F)｜名前を付けて保存(A)］を選択します。

2.	［名前を付けて保存］ダイアログボックスでプロジェクトの新しい名前とパスのどちらかまたは両方を指定します。

指定したディレクトリに同じ名前の .DPR ファイルがある場合，既存のファイルを上書きするかどうかが尋ねられます。

3.	［OK］を選択して指定内容を有効にし，ダイアログボックスを閉じます。

新しく指定したファイル名やパスで .DPR ファイル，.OPT (プロジェクトオプション) ファイル，.RES (プロジェクトリソース) ファイルが保存されます。プロジェクトで開いているファイルへの変更も保存されるため，プロジェクトを閉じるときにこの変更を改めて保存するよう要求されることはありません。あるプロジェクトについて［プロジェクトに名前を付けて保存(E)］を使って保存された各ファイルへの変更は，そのファイルを使うすべてのプロジェクトに反映されます。

［ファイル(F)｜プロジェクトに名前を付けて保存(E)］を使った操作の終わりには，プロジェクトの新しいコピーが，その時点で IDE で開いているプロジェクトになります。プロジェクトマネージャで構成ファイルリストを調べると，プロジェクトのこの新しいバージョンのすべてのファイルが現在のプロジェクトディレクトリ以外のディレクトリにあることがわかります。

プロジェクトの新しいバージョンをそのままにしておくと，このバージョンでは，その時点の (つまり元の) ディレクトリにあるファイルが共有ファイルとして使われます。共有ファイルには必要なものも不要なものもあります。新しいプロジェクトでの構成ファイルの使い方を理解していない場合，後で問題が生じることがあります。

警告:	プロジェクトのコピーを新しいディレクトリに保存する場合，Delphi にあるもの以外のファイル管理ツールは使わないでください。


参照02126

プロジェクト全体のバックアップの作成

プロジェクトマネージャの基本

プロジェクトの保存

プロジェクトへの既存のユニットの呼び出し

他のプロジェクトとのフォームの共有

.DPR ファイルの更新


プロジェクト全体のバックアップの作成
プロジェクト全体のバックアップの作成02127

参照

プロジェクトのバックアップの作成はディレクトリのコピーだけで済むこともあれば，さらに処理が必要になることもあります。どちらになるかはプロジェクトディレクトリの構造と，プロジェクトで専用のディレクトリツリーのファイル以外のファイルを使うかどうかによって決まります。

プロジェクトディレクトリはプロジェクトの .DPR ファイルにコード化されません。ただし，このプロジェクトファイルはプロジェクトのすべての構成ファイルのパスを記録します。構成ファイルがメインプロジェクトディレクトリのサブディレクトリにある場合，すべてのパス情報が相対的になり，次の図に示すようにバックアップが作成しやすくなります。

ディレクトリツリーを別のディレクトリにコピーするだけで，プロジェクト全体のバックアップを作成できます。バックアップのディレクトリにあるプロジェクトを開いた場合，そのディレクトリ構造内にプロジェクトのすべてのファイルが存在し，プロジェクトがコンパイルされます。

ディレクトリ構造外にあるファイルをプロジェクトで使う場合，バックアップのディレクトリのプロジェクトがコンパイルされることもされないこともあります。プロジェクトマネージャのファイルリストを調べ，外部ファイルにバックアップのディレクトリからアクセスできるかどうか確認してください。アクセスできる場合は，プロジェクトはコンパイルされます。ほかのバックアップ処理でこの外部ファイルがすでに確保されている場合，外部ファイルの別のバックアップコピーをバックアッププロジェクトのディレクトリに作成する必要はありません。


参照02128

プロジェクトマネージャの基本

プロジェクトの保存

プロジェクトへの既存のユニットの呼び出し

他のプロジェクトとのフォームの共有

.DPR ファイルの更新


.DPR ファイルの更新
.DPR ファイルの更新02129

参照

プロジェクトマネージャまたはファイルメニューのコマンドを使ってプロジェクトのファイルの追加や削除をする場合，Delphi で .DPR ファイルが管理され，ユニットやフォームの名前が適切に追加されたり削除されたりします。

ただし，.DPR ファイルを手動で編集すると，変更結果は Delphi で管理できなくなるため，自動的には反映されなくなります。その場合，.DPR ファイルの内容とプロジェクトマネージャウィンドウの表示内容に矛盾があれば，［更新(P)］ボタンを選択して解消します。

.DPR ファイルを更新するには

プロジェクトマネージャのスピードバーで［更新(P)］ボタンをクリックする

［更新(P)］ボタンは必要なとき以外は使えません。したがって，一般にこのボタンが使える場合は，使うようにしてください。


参照02130

プロジェクトマネージャの基本

プロジェクトの保存

プロジェクトの別バージョンの保存


プロジェクトマネージャでのファイル処理
プロジェクトマネージャでのファイル処理02131

参照

プロジェクトマネージャウィンドウに示されるファイルには，プロジェクト内のどのファイルも含まれています。このウィンドウに示されていないファイルがコンパイル時に Delphi によってコンパイルされることもありますが，プロジェクトの構成ファイルとはみなされません。

たとえば，プロジェクトマネージャウィンドウには，プロジェクトの .DPR ファイルの uses 節に登録されているすべてのユニットが示されますが，ほかのユニットの uses 節に登録されているユニットは示されません。同様に，プロジェクトマネージャウィンドウには，アイコンファイルなどのプリコンパイルが必要なリソースファイルは示されません。

次の表では，プロジェクトディレクトリにあるファイルの種類を示し，プロジェクトマネージャでのそのファイルの処理について説明します。

ソースファイル

コンパイル済みのファイル

リンクされるファイル

ほかのファイル


.EXE ファイル02132

Delphi アプリケーション用のコンパイル済み実行可能ファイル。アプリケーション化や配布ができます。


.DLL ファイル02133

コンパイル済みダイナミックリンクライブラリファイル。アプリケーション化や配布ができます。


.DCU ファイル02134

コンパイル済み .PAS (ユニットソースコード) ファイル。


.OPT ファイル02135

変更されたプロジェクトオプションの設定を格納するファイル。


.DSK ファイル02136

保存されたデスクトップ設定を格納するファイル。


.ICO ファイル02137

Windows アイコンファイル。アプリケーションアイコンファイルは .DPR ファイルに追加されます。


.RES ファイル02138

リソースファイル。$R コンパイラ指令を使ってプロジェクトに追加できます。


.OBJ ファイル02139

オブジェクトコードファイル。$L 指令を使ってプロジェクトに追加できます。


.HLP ファイル02140

コンパイル済み Windows ヘルプファイル。［プロジェクトの設定］ダイアログボックスの［Application］ページでプロジェクト用にヘルプファイルを指定します。

ヘルプの作成についての詳細は Windows ヘルプの作成を参照してください。


.DPR ファイル02141

メインプロジェクトファイルのソースコード。プロジェクトで使われるほかのユニットとそのパスを示します。


.PAS ファイル02142

ユニットソースコードファイル。フォームユニットの .PAS ファイルはイベントハンドラのコードとローカル手続きを格納します。このファイルには対応する .DFM ファイルがあります。


.DFM ファイル02143

フォームのグラフィックイメージを格納するバイナリファイル。対応する .PAS ファイルがあります。


参照02144

プロジェクトマネージャの基本

プロジェクトに対する操作


プロジェクトテンプレートの使い方
プロジェクトテンプレートの使い方 02145

Delphi のプロジェクトテンプレートは，アプリケーション設計の起点として使うことができる設計済みのプロジェクトです。 プロジェクトテンプレートは (OBJREPOS サブディレクトリに配置されている) オブジェクトリポジトリの一部であり，フォームオブジェクトとエキスパートも用意されています。

プロジェクトテンプレートからプロジェクトを開始すると，(空白のプロジェクトテンプレートでなければ) 新しいプロジェクトのファイルを格納するプロジェクトディレクトリを指定するよう求められます。存在しないディレクトリを指定した場合は自動的に作成されます。テンプレートファイルはプロジェクトディレクトリにコピーされます。コピーされたファイルを変更して新しいフォームやユニットを追加したり，あるいはテンプレートファイルは変更せずにイベントハンドラコードだけを追加したりできます。どんな場合でも，行った変更は開いているプロジェクトだけに反映されます。元のプロジェクトテンプレートには影響はなく，後でまた使うことができます。

詳細は次のトピックを参照してください。

プロジェクトテンプレートからの新しいプロジェクトの開始

オブジェクトリポジトリへのプロジェクトの追加


参照02146

プロジェクトとディレクトリの管理


プロジェクトテンプレートからの新しいプロジェクトの起動
プロジェクトテンプレートからの新しいプロジェクトの開始02147

参照

Delphi のプロジェクトテンプレートは，アプリケーション設計の起点として使うことができる設計済みのプロジェクトです。 プロジェクトテンプレートは (OBJREPOS サブディレクトリに配置されている) オブジェクトリポジトリの一部であり，フォームオブジェクトとエキスパートも用意されています。

プロジェクトテンプレートからプロジェクトを開始すると，(空白のプロジェクトテンプレートでなければ) 新しいプロジェクトのファイルを格納するプロジェクトディレクトリを指定するよう求められます。存在しないディレクトリを指定した場合は自動的に作成されます。テンプレートファイルはプロジェクトディレクトリにコピーされます。コピーされたファイルを変更して新しいフォームやユニットを追加したり，あるいはテンプレートファイルは変更せずにイベントハンドラコードだけを追加したりできます。どんな場合でも，行った変更は開いているプロジェクトだけに反映されます。元のプロジェクトテンプレートには影響はなく，後でまた使うことができます。

プロジェクトテンプレートから新しいプロジェクトを開始するには

1	［ファイル(F)｜新規作成(N) ］を選択して［新規作成］ダイアログボックスを開きます。

2	［プロジェクト］タブを選択します。

3	新しいプロジェクトで使いたいプロジェクトテンプレートを選択します。

4	［OK］を選択します。

5	［ディレクトリの選択］ダイアログボックスで新しいプロジェクトのファイルを入れるディレクトリを指定します。

指定したディレクトリにプロジェクトテンプレートのコピーが開きます。


参照02148

オブジェクトリポジトリへのプロジェクトの追加

プロジェクトテンプレートの使い方


オブジェクトリポジトリへのプロジェクトの追加
オブジェクトリポジトリへのプロジェクトの追加02149

参照

オブジェクトリポジトリで利用できるプロジェクトとフォームに，ユーザー独自のプロジェクトやフォームを追加することができます。これは，組織全体にわたる開発プロジェクトで標準のフレームワークを使いたい場合などに便利です。

オブジェクトリポジトリにプロジェクトを追加するには

1	オブジェクトリポジトリに追加したいプロジェクトを開きます。

2	［プロジェクト(P)｜リポジトリに追加(T)］を選択します。

3	［タイトル(T)］テキストボックスにプロジェクトのタイトルを入力します。

テンプレートのタイトルがオブジェクトリポジトリウィンドウに表示されます。

4	［コメント(C)］フィールドにテンプレートの説明のテキストを入力します。

このテキストはオブジェクトリポジトリウィンドウのステータスバーに表示されます。

5	［ページ(P)］フィールドで，テンプレートを表示する［新規作成］ダイアログボックスのページ名を入力します (たいていは［プロジェクト］になるでしょう)。

6	［作者(A)］フィールドにアプリケーションの作者を示すテキストを入力します。

作者の情報は，スピードメニューで［詳細表示］を選択したときにだけ表示されます。

7	［参照(B)］ボタンをクリックしてオブジェクトリポジトリ内でこのテンプレートを表すアイコンを選択します。

8	［OK］を選択して現在のプロジェクトをプロジェクトテンプレートとして保存します。

メモ:	プロジェクトテンプレートに対して変更を加えた場合，そのテンプレートから新しく作成したプロジェクトに自動的に反映されます。この変更は，変更を加える前のテンプレートから作成されたプロジェクトには影響はありません。


参照02150

プロジェクトテンプレートからの新しいプロジェクトの起動

プロジェクトテンプレートの使い方


プロジェクトのコンパイル，構築，実行
プロジェクトのコンパイル，構築，実行02151

参照

Delphi のすべてのプロジェクトには，配布可能な実行可能ファイル (.EXE または .DLL) がターゲットとして 1 つあります。これにより，開発の各段階でアプリケーションの表示やテストができます。詳細は次の各トピックを参照してください。

ソースコードの構文チェック

プロジェクトのコンパイル

プロジェクトの構築

プロジェクトの実行


参照02152

コンパイラ指令

プロジェクトとディレクトリの管理


ソースコードの構文チェック
ソースコードの構文チェック02153

参照

Delphi のメニューバーのコンパイルメニューには，プロジェクトのソースコードに対して構文チェックを実行するオプションがあります。この構文チェックはコンパイル時の構文チェックと同じで，コードにエラーがある場合は同様のエラーメッセージが表示されます。ただし，オブジェクトコードが生成されず，チェックが正常に終了しても実行可能ファイルが生成されないため，ソースコードの構文チェックはコンパイル時の構文チェックより短時間で済みます。

ソースコードモジュールの構文チェックを行うには

1.	プロジェクトのソースコードを保存します (保存はしておいたほうがいいのですが必須ではありません)。

2.	Delphi のメニューバーで［プロジェクト(P)｜構文チェック(S)］を選択します。

エラーがあれば次のようになります。

コードエディタウィンドウが表示される

エラーの発生したユニットソースファイルのページがコードエディタで 1 番前に表示される

エラーの発生した行がコードエディタで強調表示される

コードエディタのメッセージウィンドウにエラーメッセージが表示される

F1 を押すと，エラーメッセージに関するヘルプを表示できます。


参照02154

プロジェクトのコンパイル

プロジェクトの構築

プロジェクトの実行

プロジェクトのコンパイル，構築，実行


プロジェクトのコンパイル
プロジェクトのコンパイル02155

参照

プロジェクトをコンパイルすると，前回のソースコードファイルのコンパイル後に変更されたすべてのソースコードファイルがコンパイルされます。

プロジェクトをコンパイルするには

［プロジェクト(P)｜コンパイル(C)］を選択する

［プロジェクト(P)｜コンパイル(C)］を選択すると，次のようになります。

前回のユニットのコンパイル後にソースコードが変更されていれば，コンパイラによってユニットごとにソースコードがコンパイルされる。これにより，各ユニットについて拡張子が .DCU のファイルが作成される

コンパイラでユニットを見つけることができなければ，ユニットは再コンパイルされない

ユニットのソースコードの interface 部が変更されていれば，その interface 部に依存するほかのすべてのユニットが再コンパイルされる

ユニットが .OBJ ファイル (アセンブリ言語コードが格納されているファイル) にリンクしており，その .OBJ ファイルがユニットの .DCU ファイルより新しければ，ユニットが再コンパイルされる

ユニットにインクルードファイルがあり，そのインクルードファイルがユニットの .DCU ファイルより新しければ，ユニットが再コンパイルされる

プロジェクトを構成するすべてのユニットがコンパイルされると，プロジェクトファイルがコンパイルされ，プロジェクトの名前の付いた .EXE ファイルが作成されます。この .EXE ファイルには個々のユニットとフォームが格納されており，プログラムはこのまま実行可能です。

コードにコンパイラ指令と定義済みシンボルを使う場合，コードの一部分だけをコンパイルすることもできます。

コンパイル状況情報の取得

［情報］ダイアログボックスを表示 (プロジェクトメニューで［情報(I)］を選択) すると，プロジェクトのコンパイル状況に関する情報を取得できます。このダイアログボックスには，コンパイルされたソースコードの行数，コードとデータのバイトサイズ，スタックとヒープのサイズ，プロジェクトのコンパイル状況などの情報が表示されます。

［環境の設定］ダイアログボックスの［Preference］ページで［コンパイル状況の表示(C)］チェックボックスにチェックマークを付けると，プロジェクトのコンパイル時にコンパイラの状況情報を取得できます。


参照02156

ソースコードの構文チェック

プロジェクトの構築

プロジェクトの実行

プロジェクトのコンパイル，構築，実行


プロジェクトの構築
プロジェクトの構築02157

参照

プロジェクトを構築すると，プロジェクト内のすべてのソースコードファイルが，前回コンパイルされたのがいつかに関係なくコンパイルされます。

プロジェクトを構築するには

［プロジェクト(P)｜再構築(B)］を選択する

［プロジェクト(P)｜再構築(B)］コマンドは，変更されているかどうかにかかわらずすべてのファイルがコンパイルされる点を除き，［プロジェクト(P)｜コンパイル(C)］コマンドと同じです。


参照02158

ソースコードの構文チェック

プロジェクトのコンパイル

プロジェクトの実行

プロジェクトのコンパイル，構築，実行


プロジェクトの実行
プロジェクトの実行02159

参照

プロジェクトを実行すると，まずそのプロジェクトがコンパイルされ (前回のコンパイルの後にプロジェクトが変更されている場合)，次にアプリケーションを実行する .EXE ファイルが起動されます。

アプリケーションを実行するには

次のどちらかの操作をします。

［実行(R)｜実行(R)］を選択する

スピードバーで［実行］ボタンをクリックする

［実行(R)｜実行(R)］コマンドは，コンパイルが完了するとアプリケーションが実行される点を除き，［プロジェクト(P)｜コンパイル(C)］コマンドと同じです。

コンパイラではコンパイル済み実行可能 (.EXE) ファイルが必ず作成されます。したがって，プロジェクトのコンパイルまたは構築の後では，ほかの Windows アプリケーションの場合と同じように Windows のプログラムマネージャでアプリケーションを実行することもできます。


参照02160

ソースコードの構文チェック

プロジェクトのコンパイル

プロジェクトの構築

プロジェクトのコンパイル，構築，実行


プロジェクトオプションの設定
プロジェクトオプションの設定02161

参照

コードのコンパイル方法は次のどちらかで変更できます。

［プロジェクトの設定］ダイアログボックスを使って必要なオプションを選択する

ソースコードにコンパイラ指令を挿入する

［プロジェクトの設定］ダイアログボックスを使ったオプションの設定

［プロジェクトの設定］ダイアログボックスを使うと，コンパイラ，リンカ，ディレクトリの各デフォルトオプションの変更や条件シンボルの定義ができます。

［プロジェクトの設定］ダイアログボックスを表示するには

［オプション(O)｜プロジェクト(P)］を選択する

特定のオプションの機能がわからないときは，F1 を押すか［ヘルプ(H)］をクリックするとそのオプションに関する情報が表示されます。

コードへのコンパイラ指令の挿入

［プロジェクトの設定］ダイアログボックスを使ってコンパイラオプションを設定するかわりに，コードにコンパイラ指令を挿入できます。

たとえば，アプリケーションで範囲チェックを有効にするには，［プロジェクトの設定］ダイアログボックスの［Compiler］ページで［範囲チェック(R)］オプションを選択する方法と，コードに {$R} コンパイラ指令を挿入する方法があります。


参照02162

コンパイラ指令

プロジェクトとディレクトリの管理


メニュー項目の追加
メニュー項目の追加02163

参照

1.	メニューデザイナを開きます。

2.	メニュー項目を作成したい場所を選択します。

3.	キャプションの入力を始めます。キャプションの入力に伴ってメニュー項目の名前は自動的に変更されます。

4.	Enter を押します。

メニュー項目の次のプレースホルダが選択されます。

5.	新しく作成したい各項目について Name プロパティと Caption プロパティの値を入力するか，メニューバーに戻るために Esc を押します。

メニューバーからメニューへの移動や，リスト内の項目間の移動には矢印キーを使います。操作を完了するには Enter を押します。


メニューへの分割線の追加
メニューへの分割線の追加02164

メニュー項目のキャプションとしてハイフンを入力します。


参照02165

メニュー項目の動的追加

メニュー項目の挿入

メニュー項目の削除

アクセラレータキーとキーボードショートカットの指定


メニュー項目の挿入
メニュー項目の挿入02166

参照

メニュー項目にカーソルを合わせ，Ins キーを押す

メニューバーの選択した項目の左，メニューリストの選択した項目の上にメニュー項目が挿入されます。


メニュー項目の削除
メニュー項目の削除02167

参照

1.	削除したいメニュー項目にカーソルを合わせる

2.	Del キーを押す

メモ:	メニューリストの最後に入力された項目の下，またはメニューバーの最後の項目の横にあるデフォルトのプレースホルダは削除できません。このプレースホルダは実行時にはメニューに表示されません。


参照02168

メニュー項目の追加

メニュー項目の挿入

メニュー項目の削除


アクセラレータキーの指定
アクセラレータキーの指定02169

参照

キャプション内の適切な文字の前に & を追加する。& の直後の文字はメニュー内では下線付きで表示される

アクセラレータキーを使うと，Alt キーとコード内で & の直後の文字のキーを同時に押すことによってキーボードからメニューコマンドにアクセスできます。& の直後の文字はメニューでは下線付きで表示されます。

注意:	アクセラレータの重複はチェックされないので，アプリケーションのメニューに入力した値は記録しておくようにしてください。


キーボードショートカットの指定
キーボードショートカットの指定02170

参照

ShortCut プロパティの値を入力するか，ドロップダウンリストでキーの組み合わせを選択する。しかし，このリストは入力できる有効な組み合わせの一部にすぎない

キーボードショートカットを使うと，ショートカットキーの組み合わせを押すことによってメニューに直接アクセスせずに操作ができます。

注意:	ショートカットキーの重複はチェックされないので，アプリケーションのメニューに入力した値は記録しておくようにしてください。


参照02171

メニュー項目の追加

アクセラレータキー，キーボードショートカットの指定


ネストしたメニューの作成
ネストしたメニューの作成02172

1.	下にネストしたメニューを作成したいメニュー項目を選択します。

2.	最初のプレースホルダを作成するために Ctrl と→を押すか，スピードメニューで［サブメニューの作成(C)］を選択します。

3.	ネストしたメニュー項目の名前を入力します。

4.	次のプレースホルダを作成するために Enter を押します。

5.	ネストしたメニュー内に作成したい各項目について手順 3 と 4 を繰り返します。

6.	前のメニューレベルに戻るために Esc を押します。

このようにしてメニュー構造を整理すると縦の画面スペースを節約できます。しかし，最適な設計のためにはインターフェース設計のメニューレベルが 2 または 3 を超えないようにするのがいいでしょう (ポップアップメニューではネストレベルが 1 を超えないようにするのがいいでしょう)。

ショートカット:	メニューバー (またはメニューテンプレート) のメニュー項目をリスト内のメニュー項目の間に挿入することによってネストしたメニューを作成することもできます。メニューを既存のメニュー構造内に移動する場合，関連するすべての項目が一緒に移動し，元と同じネストしたメニューが作成されます。これはネストしたメニューでも同じです。メニュー項目を既存のネストしたメニュー内に移動すると，ネストのレベルが 1 つ深くなります。


メニュー項目の移動
メニュー項目の移動02173

設計時にドラッグアンドドロップするだけでメニュー項目を移動できます。メニュー項目はメニューバーに沿って，またはメニューリスト内の別の場所へ，あるいはまったく別のメニューに移動できます。

唯一の例外は階層です。メニューバーからそれ自身のメニューにメニュー項目を降ろせません。メニュー項目をそれ自身のネストするメニューに移動することもできません。しかし，どのメニュー項目も元の位置には関係なく別のメニューには移動できます。

メニュー項目をドラッグするとき，項目を新しい場所でドロップできるかどうかに従ってカーソル形状が変わります。メニュー項目を移動すると，その下にある項目もすべて移動します。

メニュー項目をメニューバーに沿って移動するには

1.	ドラッグカーソルの矢じりが新しい場所を指すまでメニュー項目をメニューバーに沿ってドラッグします。

2.	メニュー項目を新しい場所にドロップするためにマウスボタンを離します。

メモ:	メニュー項目をメニューバー上の別の場所に移動すると，その下にある項目もすべて移動します。

メニュー項目をメニューリストへ移動するには

1.	ドラッグカーソルの矢じりが新しいメニューを指すまでメニュー項目をメニューバーに沿って移動します。

メニューが開き，新しい場所に項目をドラッグできます。

メモ:	メニュー項目をそれ自身のメニューの中で 1 つ下のレベルに移動することはできません。

2.	メニュー項目をリスト内へドラッグし，メニュー項目を新しい場所にドロップするためにマウスボタンを離します。

メニュー項目のサブメニュー内への移動

メニュー項目をメニューバーの外に移動すると，その下の項目はサブメニューになります。同様にメニュー項目を既存のサブメニュー内に移動すると，元のメニュー項目のサブメニューは移動先のサブメニューの下のネストしたメニューになります。

メニュー項目を既存のサブメニュー内に移動したり，または既存の項目の次のネストしたレベルにプレースホルダを作成し，ネストするためにそのプレースホルダ内に項目をドロップしたりできます。


メニューデザイナを開かないでメニュー項目を編集する方法
メニューデザイナを開かないでメニュー項目を編集する方法02174

参照

メニューデザイナを使ってメニュー項目を編集する場合，プロパティはオブジェクトインスペクタに表示されたままです。フォーカスをオブジェクトインスペクタに切り替え，そこでメニュー項目プロパティの編集を続けられます。コンポーネントリストでメニュー項目を選択し，メニューデザイナを開かずにプロパティを編集することもできます。

メニューデザイナを開かないでメニュー項目を編集するには

コンポーネントリストで項目を選択する

メニューデザイナウィンドウを閉じて，メニュー項目の編集を続けるには

1.	オブジェクトインスペクタの［Properties］ページをクリックしてメニューデザイナウィンドウからオブジェクトインスペクタへフォーカスを切り替えます。

2.	通常の方法でメニューデザイナを閉じます。

フォーカスは引き続きオブジェクトインスペクタにあります。オブジェクトインスペクタでは選択したメニュー項目のプロパティの編集を続けられます。

別のメニュー項目を編集するには，コンポーネントリストからそのメニュー項目を選択します。


参照02175

メニューの設計

メニューデザイナスピードメニュー


メニューデザイナスピードメニュー
メニューデザイナスピードメニュー02176

参照	スピードメニュー

メニューデザイナのスピードメニューは，最もよく使うメニューデザイナコマンドとメニューテンプレートオプションへすばやいアクセスするためのものです。

メニューデザイナのスピードメニューを表示するには

次のどちらかを実行します。

メニューデザイナ上の任意の場所を右クリックする

カーソルがメニューデザイナウィンドウ内にあるときに Alt+F10 を押す

メニューデザイナのスピードメニュー上の最初の 3 つのコマンドは直接操作を実行します。

コマンド	動作

挿入(I)	カーソルの上または左にプレースホルダを挿入する

削除(D)	選択されたメニュー項目を削除する (下位項目がある場合，それらもすべて削除する)

サブメニューの作成(C)	ネストしたレベルにプレースホルダを作成し，選択されたメニュー項目の右に矢印を追加する

メニューデザイナのスピードメニュー上の残りのコマンドはダイアログボックスを開きます。詳細は次の各コマンドを参照してください。

メニューの選択(L)

テンプレートとして保存(S)

テンプレートを挿入(N)

テンプレートを削除(D)

リソースから挿入(R)


参照02177

メニューの設計

オブジェクトインスペクタによるメニュー項目プロパティの設定

設計時のメニュー切り替え


挿入(I) (メニューデザイナスピードメニュー)
挿入(I) (メニューデザイナスピードメニュー)02178

選択したメニュー項目の前にメニュー項目プレースホルダを追加するには，メニューデザイナのスピードメニューで［挿入(I)］を選択します。


削除(D) (メニューデザイナスピードメニュー)
削除(D) (メニューデザイナスピードメニュー)02179

選択したメニュー項目を削除するには，メニューデザイナのスピードメニューで［削除(D)］を選択します。


サブメニューの作成(C) (メニューデザイナスピードメニュー)
サブメニューの作成(C) (メニューデザイナスピードメニュー)02180

選択したメニュー項目の右にメニュー項目プレースホルダを挿入し，選択した項目にネストレベルを示す矢印を追加するには，メニューデザイナのスピードメニューで［サブメニューの作成(C)］を選択します。


メニューの選択(L) (メニューデザイナスピードメニュー)
メニューの選択(L) (メニューデザイナスピードメニュー)02181

参照

メニューデザイナのスピードメニューで［メニューの選択(L)］を選択すると，［メニューの選択］ダイアログボックスが開きます。

［メニューの選択］ダイアログボックス

このダイアログボックスは既存のフォームメニューをすばやく選択するために使います。


参照02182

設計時のメニュー切り替え


テンプレートとして保存(S) (メニューデザイナスピードメニュー)
テンプレートとして保存(S) (メニューデザイナスピードメニュー)02183

参照

メニューデザイナのスピードメニューで［テンプレートとして保存(S)］を選択すると，後で再利用できるようにメニューを保存するための［テンプレートの保存］ダイアログボックスが開きます。

［テンプレートの保存］ダイアログボックス

このダイアログボックスはメニューを再利用できるように保存するために使います。


参照02184

テンプレートとしてのメニューの保存


テンプレートを挿入(N) (メニューデザイナスピードメニュー)
テンプレートを挿入(N) (メニューデザイナスピードメニュー)02185

参照

メニューデザイナのスピードメニューで［テンプレートを挿入(S)］を選択すると，［テンプレートの挿入］ダイアログボックスが開きます。

［テンプレートの挿入］ダイアログボックス

このダイアログボックスは設計済みメニューをアクティブなメニューコンポーネントに追加するために使います。


参照02186

メニューテンプレートの使い方


テンプレートを削除(E) (メニューデザイナスピードメニュー)
テンプレートを削除(E) (メニューデザイナスピードメニュー)02187

参照

メニューデザイナのスピードメニューで［テンプレートを削除(D)］を選択すると，［テンプレートの削除］ダイアログボックスが開きます。

［テンプレートの削除］ダイアログボックス

このダイアログボックスは設計済みメニューを選択して削除するために使います。

メモ:	一度削除したテンプレートの復元はできません。


参照02188

メニューテンプレートの使い方


リソースから挿入(R) (メニューデザイナスピードメニュー)
リソースから挿入(R) (メニューデザイナスピードメニュー)02189

参照

メニューデザイナのスピードメニューで［リソースから挿入(R)］を選択すると，［リソースの追加］ダイアログボックスが開きます。

［リソースの追加］ダイアログボックス

このダイアログボックスは Windows のリソース (.RC) ファイルからメニューをインポートするために使います。最初に各メニューを別々のリソースファイルに保存する必要があります。

ダイアログボックスオプション

［ファイル名(N)］

使いたいファイルの名前またはファイルリストボックスでフィルタとして使うワイルドカードを入力します。

ファイルリストボックス

カレントディレクトリにあるファイルのうち，［ファイル名(N)］編集ボックスのワイルドカードまたは［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルを表示します。

［ファイルの種類(T)］

開きたいファイルの種類を選択します。デフォルトのファイルの種類はメニューファイル (.MNU) です。カレントディレクトリにある選択した種類のすべてのファイルがファイルリストボックスに表示されます。

［ディレクトリ(D)］

内容を表示したいディレクトリを選択します。カレントディレクトリにあって［ファイル名(N)］入力ボックスのワイルドカードに一致するか［ファイルの種類(T)］コンボボックスのファイルの種類に一致するファイルがファイルリストボックスに表示されます。

［ドライブ(V)］

カレントドライブを選択します。［ディレクトリ(D)］リストボックスにカレントドライブのディレクトリ構造が表示されます。


参照02190

リソースファイルからのメニューのインポート


設計時のメニュー切り替え
設計時のメニュー切り替え02191

参照

フォームに複数のメニューを設計する場合，メニューデザイナのスピードメニューまたはオブジェクトインスペクタを使って簡単にメニューを選択し，それらの間を移動できます。

スピードメニューを使ってフォーム内のメニューを切り替えるには

1.	スピードメニューを表示するためにメニューデザイナ内でダブルクリックします。

2.	スピードメニューで［メニューの選択(L)］を選択します。

［メニューの選択(L)］ダイアログボックスが表示されます。このダイアログボックスにはメニューデザイナ内でメニューが現在開いているフォームに関連付けられたすべてのメニューが一覧表示されます。

3.	［メニューの選択(L)］ダイアログボックスのリストで表示または編集したいメニューを選択します。

オブジェクトインスペクタを使ってフォーム内のメニューを切り替えるには

1.	メニューを選択したいフォームにフォーカスを与えます。

2.	コンポーネントリストで編集したいメニューを選択します。

3.	オブジェクトインスペクタの［Properties］ページでこのメニューに Items プロパティを選択し，省略記号ボタン (...) をクリックするか［Menu］をダブルクリックします。


参照02192

メニューデザイナスピードメニュー


メニューテンプレートの使い方
メニューテンプレートの使い方02193

参照

Delphi には，よく使うコマンドが入った設計済みメニューすなわちメニューテンプレートが用意されています。これらのメニューはアプリケーション内で (コード作成を除き) そのまま使うことも，カスタマイズして独自のメニューを作成することもできます。メニューテンプレートにはイベントハンドラコードは入っていません。

メニューテンプレートはファイル DELPHI.DMT に格納されています。Delphi に付属のメニューテンプレートはこのファイルに入っています。デフォルトのインストールでは，このファイルは \DELPHI\BIN ディレクトリに入ります。DELPHI.DMT ファイルを別のディレクトリに格納したい場合は，WINDOWS\DELPHI.INI ファイルに次の行を追加し，directory を選択したディレクトリに置き換えます。

[Globals]

PrivateDir=directory

メニューデザイナを使って設計したメニューはどれでもテンプレートとして保存できます。テンプレートとして保存したメニューは設計済みメニューとして使えます。必要なくなったメニューテンプレートはリストから削除できます。

メニューテンプレートをアプリケーションに追加するには

1.	メニューデザイナウィンドウを右クリックします。

メニューデザイナのスピードメニューが表示されます。

2.	スピードメニューで［テンプレートを挿入(N)］を選択します。

テンプレートがない場合，スピードメニューの［テンプレートを挿入(N)］オプションが淡色表示になります。

［テンプレートの挿入］ダイアログボックスが開き，使用可能なメニューテンプレートのリストが表示されます。

3.	挿入したいメニューテンプレートを選択し，Enter を押すか［OK］を選択します。

フォームのカーソル位置にメニューが挿入されます。たとえばカーソルがリスト内のメニュー項目上にある場合，メニューテンプレートは選択した項目の上に挿入されます。カーソルがメニューバー上にある場合，テンプレートはカーソルの左に挿入されます。

メニューテンプレートを削除するには

1.	メニューデザイナウィンドウを右クリックします。

メニューデザイナのスピードメニューが表示されます。

2.	スピードメニューで［テンプレートを削除(D)］を選択します。

テンプレートがない場合，スピードメニュー内の［テンプレートを削除(D)］オプションは淡色表示になります。

［テンプレートの削除］ダイアログボックスが開き，使用可能なテンプレートのリストが表示されます。

3.	削除したいメニューテンプレートを選択し，Del を押します。

テンプレートリストとハードディスクからテンプレートが削除されます。


参照02194

メニューの設計

テンプレートとしてのメニューの保存


テンプレートとしてのメニューの保存
テンプレートとしてのメニューの保存02195

参照

設計したメニューはどれでもテンプレートとして保存し，後で再利用できます。メニューテンプレートを使ってアプリケーションの外観を統一したり，カスタマイズして新しいメニューを作成できます。

保存したメニューテンプレートは \DELPHI\BIN ディレクトリの DELPHI.DMT ファイルに格納されます。

テンプレートファイルを編集するにはメニューデザイナスピードメニューのテンプレートコマンドを使います。

メニューをテンプレートとして保存するには

1.	メニューデザイナのスピードメニューで［テンプレートとして保存(S)］を選択して［テンプレートの保存］ダイアログボックスが表示します。

2.	［テンプレートの説明(T)］編集ボックスにこのメニューの簡単な説明を入力します。

3.	［OK］をクリックします。

［テンプレートの保存］ダイアログボックスが閉じ，メニュー設計が保存され，メニューデザイナウィンドウに戻ります。

メモ:	入力した説明は［テンプレートの保存］［テンプレートの挿入］［テンプレートの削除］の各ダイアログボックスにだけ表示されます。メニューの Name プロパティや Caption プロパティとは無関係です。

すべてのメニューはそのオーナー (すなわちフォーム) のスコープ内でユニークな名前を持っていなくてはならないため，メニューをテンプレートとして保存する場合，Name プロパティは保存されません。しかし，メニューデザイナを使ってメニューをテンプレートとして新しいフォームに挿入する場合，そのメニューとすべてのメニュー項目のために新しい名前が生成されます。

コードが新しいフォームで適用可能かどうかをテストする手段がないため，テンプレートとして保存されたメニューに関連付けられたイベントハンドラは保存されません。テンプレート内のメニュー項目をフォーム内の既存のイベントハンドラと関連付けることができます。


参照02196

コードへのメニューイベントの関連付け

メニューテンプレートの使い方


リソースファイルからのメニューのインポート
リソースファイルからのメニューのインポート02197

参照

Delphi は他のアプリケーションで構築されたメニューも標準 Windows リソース (.RC) ファイル形式である限りサポートします。このようなメニューは Delphi プロジェクトに直接インポートし，ほかで作成したメニューを再構築するための時間と労力を節約できます。

既存の .RC メニューファイルをロードするには

1.	メニューデザイナ内でメニューを表示したい場所にカーソルを合わせます。

インポートしたメニューは設計中のメニューの一部にすることも，またそれ自身をメニューにすることもできます。

2.	メニューデザイナのスピードメニューで［リソースから挿入(R)］を選択します。

［リソースの追加］ダイアログボックスが表示されます。

3.	ダイアログボックスでロードしたいリソースファイルを選択します。

4.	［OK］を選択します。

メニューデザイナウィンドウにメニューが表示されます。

メモ:	リソースファイルに複数のメニューが入っている場合，各メニューを別々のリソースファイルとして保存してからインポートする必要があります。


参照02198

メニューの設計


Delphi 2.0 の新しい機能
Delphi 2.0 の新しい機能02219

Delphi 2.0 では次のような以前のバージョンとは異なる機能が導入されています。

コンパイラと実行時ライブラリの変更点

新しいデータ型

新しいコンパイラ指令

コンパイラの最適化

呼び出し規約

ユニットの終了処理部

削除された 16 ビット機能

VCL の変更点

OLE コントロール

OLE オートメーション

新しいコンポーネント

TDBGrid の変更

データベースに関する変更点

Delphi 2.0 のデータベースアーキテクチャ

データモジュール

スケーラブルデータディクショナリ

TField での参照フィールドのサポート

テーブルのローカルフィルタ

開発環境の変更点

ビジュアルフォームの継承

ビジュアルフォームのリンク

新しいコンパイラメッセージ

項目エディタの再設計

項目エディタのドラッグアンドドロップ

メニューの変更点

ギャラリーの変更点

Delphi 1.0 から Delphi 2.0 への移行


新しいデータ型
新しいデータ型02220

Delphi 2.0 では，Windows 3.1 で設定されていた制限を緩和する新しいデータ型がいくつか定義されています。

新しいデータ型は次のとおりです。

文字型

文字列型

バリアント型

金額型

処理系依存の型である Integer と Cardinal は Delphi 2.0 では 32 ビット値となります。Delphi 1.0 ではこれらは 16 ビット値でした。16 ビットの整数データ型を明示的に宣言するには SmallInt 型または Word 型を使います。


文字型
文字型02221

参照	新しいデータ型

Delphi 2.0 では Unicode などのワイド文字セットをサポートするために新しくワイド文字型が導入されています。Delphi 1.0 では文字を Char 型の 8 ビット ANSI 値として扱っていました。

このバージョンの Delphi でもデフォルトの文字サイズは 8 ビットのままです。

両方のサイズを扱う可能性があるコードを書くときには SizeOf 関数を使うようにして，文字サイズを直接書き込んだり文字サイズを 1 バイトと仮定しないようにしてください。


参照
参照02222

文字型


文字列型
文字列型02223

参照	新しいデータ型

Delphi 2.0 では，以前からサポートしていた 255 文字までの文字列に加えて，長さにほぼ制限のない文字列をサポートします。新しいコンパイラ指令 $H を使って，予約語 string が短い文字列と長い文字列のどちらを表すかを制御します。$H のデフォルト状態は $H+ で，デフォルトで長い文字列が使われます。

メモ:	Delphi 2.0 のすべてのコンポーネントは新しい長い文字列型を使います。文字列型のプロパティを持つ既存のコンポーネントを使う場合は，互換性を保つために $H+ 状態で再コンパイルする必要があります。

$H+ コンパイラ指令がどちらに設定されていても，特定の最大長を持つ短い文字列はいつでも指定できることに注意してください。次の宣言のように大カッコに入れて文字列長を指定すると常に短い文字列のサブ型が作成されます。

{$H+}	{ 長い文字列をデフォルトにします }

var
  S1: string;	{ S1 は ANSIString 型になる }

  S2: string[80];	{ S2 は最大長が 80 バイトの短い文字列になる }

標準手続き

Delphi には長い文字列を扱う 2 つの新しい標準手続きがあります。

SetLength

SetString

また SysUtils ユニットには文字列からホワイトスペースを取り除く新しい 3 つの関数 (Trim，TrimLeft，TrimRight) もあります。ホワイトスペースの除去を行うと，文字列の前後のすべてのホワイトスペース (スペース文字と制御文字) が取り除かれます。


参照
参照02224

文字列型

長い文字列

短い文字列


バリアント型
バリアント型02225

参照	新しいデータ型

Delphi 2.0 ではバリアント型が導入され，変数の型を動的に変更する柔軟性が得られるようになっています。これはOLE オートメーションを使うときや，データベースサーバー上の具体的なデータ型が事前に決定できないようなクライアントアプリケーションを作るときに有効な機能です。

バリアント型は，値とともに型情報が埋め込まれた 16 バイトの構造体で，文字列，整数，あるいは浮動小数点数の値を保持できます。コンパイラは標準型識別子 Variant をバリアント型の宣言として認識します。

ほとんどの場合は他の型の変数とまったく同じようにバリアント型を使うことができます。OLE オートメーションを実行するときに，バリアント型は OLE サーバーからのメソッド呼び出しに応答できます。


参照
参照02226

バリアント型

バリアント型と OLE オートメーション


金額型
金額型02227

参照	新しいデータ型

Delphi 2.0 では Currency という新しい型が定義されています。これは高い精度の大きな値を扱うために特別に設計された浮動小数点型です。Currency は他のすべての浮動小数点型 (およびバリアント型) と代入互換ですが，実際には Comp 型と同じように 64 ビット整数形式で格納されます。

Currency 型値は小数点以下が 4 桁です。つまり最下位の 4 桁が小数点以下を表すものとした整数形式で浮動小数点値が格納されているわけです。


参照
参照02228

実数型


新しいコンパイラ指令
新しいコンパイラ指令02229

Delphi 2.0 では新しいコンパイラ指令が 2 つ導入されています。

ローカルスイッチ指令 $H。長い文字列の使用を制御する

ローカルスイッチ指令 $J。型付き定数を書き込み可能とするかどうかを制御する

また，ほとんどの 1 文字指令に対応する長いコンパイラ指令があります。たとえば新しい $H 指令に対応するのは $LONGSTRINGS 指令です。

すべてのコンパイラ指令については (長い指令と 1 文字指令ともに) Object Pascal 言語ヘルプのコンパイラ指令一覧を参照してください。


コンパイラの最適化
コンパイラの最適化02230

Delphi の 32 ビットコンパイラではオブジェクトコードを生成するときに数種類の最適化が行われます。

ベンチマークテストの結果は，最適化を使用すると集中的に計算を行うコードの実行速度が 3～4 倍になることを示しています。

次の表に利用できる最適化機能の要約を示します。

最適化の種類	意味

レジスタの最適化	頻繁に使用される変数を CPU レジスタに配置して変数へののアクセスに要するクロックサイクルを削減する。変数の「寿命の解析」が行われ，コード中の別の場所で使用される複数の変数が同じレジスタを共有できるようにする

呼び出しスタックの負荷の除去	可能であれば Delphi はパラメータをスタックにプッシュせずに CPU レジスタ上で受け渡す。これによってスタックフレームを設定する必要がなくなり，手続き，関数，およびメソッドの呼び出しが高速化される。詳細は呼び出し規約を参照

共通部分式の除去	コンパイラは複雑な式の中で繰り返し行われる計算を見つけ出し，それらを 1 回だけ計算するようにまとめる。そのためプログラマは明快で読みやすいスタイルでコードを記述でき，コンパイラはそのコードから効率のよいコードを生成する

ループ誘導変数	ループの中に表われる文字列や配列をアクセスするためのインデックス変数をポインタに置き換える。また，アクセスされる要素のサイズが 2 バイト，4 バイト，または 8 バイトの場合，コンパイラはスケールインデックスを使用してさらに効率を高める

［プロジェクト(P)｜オプション(O)］を選択して［コンパイラ］ページの［最適化をおこなう(O)］項目のチェックをはずせば最適化をオフにすることができます。ただし，この設定を変更しないことを強くお勧めします。


呼び出し規約
呼び出し規約02231

参照

Delphi 2.0 コンパイラではパラメータ受け渡し規約についてオプションが追加されています。Delphi 1.0 での pascal，cdecl，stdcall に加えて，Delphi 2.0 では Pascal と C の呼び出し規約を組み合わせた高速な規約である register が追加されました。Delphi はデフォルトでは register を使います。

register 規約では可能であればパラメータの受け渡しにレジスタを使用します。32 ビットレジスタに収まる最初の 3 つのパラメータは EAX，EDX，ECX の各レジスタで (この順序で) 受け渡されます。残りのパラメータはすべて Pascal の呼び出し規約に従います。また register 規約では EBX，ESI，EDI の各レジスタは保持されることが保証されます。


参照
参照02232

呼び出し規約


OLE コントロール
OLE コントロール02233

Delphi 2.0 では，Delphi 1.0 の VBX コントロールの場合と同じように OLE コントロール (あるいは OCX コントロール) をインポートして Delphi コンポーネントのように扱うことができます。

OLE コントロールをインポートするには

1	［コンポーネント(C)｜インストール(I)］を選択して［コンポーネントのインストール］ダイアログボックスを開きます。

2	［OCX］を選択して［OLE コントロールのインポート］ダイアログボックスを開きます。

3	OLE コントロールは使用する前に Delphi で登録しておかなければなりません。

使いたい OLE コントロールが［登録されているコントロール(N)］リストボックスに表示されている場合はそれを選択してステップ 6 に進みます。表示されていない場合は［登録(R)］を選択して［OLE コントロールの登録］ダイアログボックスを開きます。

4	［OLE コントロールの登録］ダイアログボックスを使って OLE コントロールを見つけて開きます。コントロールを開くには［開く(O)］をクリックします。

［OLE コントロールのインポート］ダイアログボックスに戻り，［OLE コントロールの登録］ダイアログボックスで新しく登録した OLE コントロールが表示されます。

5	［登録されているコントロール(N)］リストから OLE コントロールを選択します。

OLE コントロールをインポートするときには，Delphi はそのコントロール用のコンポーネントラッパーを生成しなければなりません。［ユニットファイル］編集ボックスと［クラス名(C)］編集ボックスを使うと OLE コントロールのファイル名とクラス名を指定できます。ただしコントロールを選択すると，これらの編集ボックスには自動的に名前が入ります。

6	［OK］をクリックします。

［OLE コントロールのインポート］ダイアログボックスが閉じて［コンポーネントのインストール］ダイアログボックスに戻ります。新しい OCX コントロールが［インストールされたユニット(I)］リストに表示されます。

7	［コンポーネントのインストール］ダイアログボックスで［OK］をクリックします。ダイアログボックスが閉じてコンポーネントライブラリが再構築され，コンポーネントパレットに OCX コンポーネントがインストールされます。


ユニットの終了処理部
ユニットの終了処理部02234

参照

ユニットにオプションとして (省略可能な) 終了処理部を入れることができます。終了処理は初期化に対応するもので，アプリケーションがシャットダウンするときに実行されます。終了処理部はユニットの「終了コード」と考えることができます。終了処理部は Delphi 1.0 での ExitProc と AddExitProc の呼び出しに対応します。

終了処理部は予約語 finalization で始まります。終了処理部は initialization 部と最後の end. の間になければなりません。


参照
参照02235

ユニット


OLE オートメーション
OLE オートメーション02236

参照

OLE オートメーションは Windows アプリケーション間で相互に操作を行うメカニズムです。自動化されるアプリケーションをオートメーションオブジェクトまたはオートメーションサーバーと呼びます。他のアプリケーションを自動化するアプリケーションがオートメーションコントローラまたはオートメーションクライアントです。OLE オートメーションは実質的にはアプリケーションが他のアプリケーションの動作を制御するためのプロトコルです。

Delphi はアプリケーションの OLE 2.0 オートメーションを完全にサポートしています。Delphi で書いたアプリケーションを使って他のアプリケーションを自動化すことができ，また Delphi アプリケーションを OLE オートメーションサーバーとしてセットアップすることもできます。

OLE オートメーションのクライアントとサーバーの完全な例が Delphi をインストールしたディレクトリの DEMOS\OLEAUTO ディレクトリにあります。

ここでは Windows での OLE オートメーションシステムの技術的な情報について深くは触れてはいません。ここで説明しているのは，以下の Delphi で OLE オートメーションを扱う際に知っておく必要がある一般的な事柄です。

他のアプリケーションの自動化

OLE オートメーションサーバーについて

OLE オートメーションオブジェクトについて

OLE オートメーションサーバーの作成


参照
参照02237

バリアント型と OLE オートメーションオブジェクト

OLEAuto ユニット


他のアプリケーションの自動化
他のアプリケーションの自動化02238

参照	例	OLE オートメーション

Delphi アプリケーションは，OLE オートメーションサーバーである他のアプリケーションを自動化できます。そのためには，自動化されるアプリケーションは OLE オブジェクトを通して実行時インターフェースを提供しなければなりません。Delphi アプリケーションはバリアント型を使ってこのような OLE オブジェクトにアクセスします。

次の 3 つの作業によって OLE アプリケーションを自動化します。

OLE オブジェクトのインスタンスを作成する

OLE オブジェクトのプロパティを設定する

OLE オブジェクトのメソッドを呼び出す

OLE オブジェクトのインスタンスの作成

各 OLE オートメーションサーバーはシステムレジストリに ProgID というキーを持っています。このキーでクライアントに対するサーバーを特定します。そのオブジェクトを制御するためには，オートメーションクライアントは ProgID に基づいてオートメーションオブジェクトのインスタンスを作成しなければなりません。

OLE オブジェクトのインスタンスを作成するには CreateOleObject 関数を呼び出し，その結果をバリアントに代入します。

CreateOleObject は，オートメーションオブジェクトのレジストリ内の ProgID を文字列パラメータとして 1 つとります。その ProgID で登録されているオートメーションオブジェクトがない場合，CreateOleObject は例外を生成します。

たとえば Microsoft Word を制御する OLE オブジェクトを作成するには，次のようにバリアント型変数を宣言し，それに対する OLE オブジェクトを作成します。

var
  MSWord: Variant;	{ OLE オブジェクトを入れる場所を宣言する }

begin

  MSWord := CreateOleObject('Word.Basic');	{ ProgID からインスタンスを作成する }

  ...	{ そのオブジェクトを使う }

end;

OLE オブジェクトは，Object Pascal におけるオブジェクトとクラスの概念からみると真のオブジェクトではありませんが，Delphi では同様な構文で OLE オブジェクトを操作できます。つまり，OLE オブジェクトが入るバリアントがあれば，「真の」オブジェクトの場合と同じようにプロパティを設定してメソッドを呼び出すことができます。

OLE オブジェクトのプロパティの設定

多数のオートメーションオブジェクトに，そのインターフェースとしてプロパティがあります。プロパティはオートメーションサーバーの内容の状態を表します。

OLE オートメーションインターフェースにおけるプロパティの実装は Delphi クラスのプロパティインターフェースと同じではありませんが，Delphi コンパイラでは他のプロパティを使うのと同じ構文でオートメーションオブジェクトのプロパティを扱うことができます。

OLE オブジェクトのメソッドの呼び出し

ほぼすべてのオートメーションオブジェクトのインターフェースにメソッドが含まれています。Delphi オブジェクトと同じように，メソッドはサーバーに関連付けられた動作を表します。

OLE オートメーションインターフェースへのメソッドの実装は Delphi クラスのメソッドインターフェースと同じではありませんが，Delphi コンパイラでは他のプロパティに対する場合と同じ構文でオートメーションオブジェクトのメソッドを呼び出すことができます。

OLE オブジェクトに対して実際に呼び出しを行うための，特定のメソッド名またはそのパラメータが有効であるかどうかをコンパイル中には判断できません。そのためコンパイラは，実行時にディスパッチされるパケットの中にメソッド名とパラメータをそのままパッケージ化します。

パラメータはすべてバリアントとして OLE オブジェクトメソッドに渡され，返される結果もすべてバリアントとして解釈されます。


例
例02239

次の例は，問い合わせから取り込んだデータを Microsoft Word に挿入し，そのテキストを表の形式に設定します。作業を自動化するために，Microsoft Word を起動して文書を開いておかなければなりません。

1	ブランクフォームを持つ新しいアプリケーションを作成します。

2	ブランクフォームの implementation 部に uses 節を追加し，OleAuto ユニットを追加します。

uses OleAuto;	{ これは implementation 部に入れます }

3	フォームに Query コンポーネントを配置します。

4	問い合わせの DatabaseName プロパティを DBDEMOS エリアスに設定します。

5	フォームに Button コンポーネントを配置します。

6	次のハンドラをボタンの OnClick イベントに結び付けます。

procedure TForm1.Button1Click(Sender: TObject);

var
  MSWord: Variant;

  I: Integer;

  S: string;

begin

  Query1.SQL.Text := 'select company, contact, phone from customer ' +

    'where lastinvoicedate >= ''1/1/95''';	{ 問い合わせを行う SQL 文 }

  with Query1 do

  begin

    Open;	{ open the query }

    try

      while not EOF do

      begin

        for I := 0 to Query1.FieldCount - 1 do

          S := S + Query1.Fields[I].AsString + #9;	{ 文字列にタブ区切りのフィールドを追加する }

        Next;	{ repeat for each record }

      end;

      MSWord := CreateOleObject('word.basic');	{ サーバーのオブジェクトを作成する }

      MSWord.Insert(Copy(S, 1, Length(S) - 1));	{ テキストを挿入する }

      MSWord.ParaUp(1, 1);	{ 段落の先頭に移動する }

      MSWord.TextToTable(ConvertFrom := 1, NumColumns := FieldCount,

        Format := 16);	{ 表に変換する }

    finally

      Close;	 { 必ず問い合わせを閉じる }

    end;

  end;

end;


参照
参照02240

OLE オートメーションサーバーの作成


OLE オートメーションサーバーについて
OLE オートメーションサーバーについて02241

参照	OLE automation

OLE オートメーションサーバーは，OLE オブジェクトを OLE オートメーションクライアントにエクスポートするアプリケーションまたはダイナミックリンクライブラリ (DLL) です。

OLE オートメーションサーバーを作成するために理解しておく必要がある重要な点は次の 3 つです。

プロセス内サーバーとプロセス外サーバー

オートメーションオブジェクトのインスタンシング

Automation オブジェクト

OLE オートメーションサーバーとそれを自動化するクライアントの完全な例が DEMOS\OLEAUTO\AUTOSERV ディレクトリにあります。


参照
参照02242

OLE オートメーションサーバーの作成

OLE オートメーションオブジェクトについて


プロセス内サーバーとプロセス外サーバー
プロセス内サーバーとプロセス外サーバー02243

参照	OLE オートメーションサーバーについて

Windows では OLE オートメーションサーバーには，プロセス内サーバーとプロセス外サーバー (ローカルサーバーとも呼ばれる) の 2 種類があります。Delphi ではどちらの種類のサーバーも作成できます。

プロセス内サーバーはオートメーションオブジェクトをエクスポートするダイナミックリンクライブラリ (DLL) です。オートメーションオブジェクトが DLL から来るため，このオブジェクトはクライアントアプリケーションと同じ Windows プロセスの一部になります。

プロセス内サーバーは，異なる言語を使う多数のアプリケーション間で共有されるプログラムモジュールを作成する場合に便利です。プロセス内サーバーは呼び出し側アプリケーションと同じアドレス空間内で実行されるという利点があるので，サーバーへの呼び出しを整理する必要がなく，呼び出しごとにメッセージ処理の大きな負荷が生じることはありません。

プロセス外サーバーはオートメーションオブジェクトをエクスポートするスタンドアロンのアプリケーションです。


参照
参照02244

オートメーションオブジェクトのインスタンシング

Automation オブジェクト


オートメーションオブジェクトのインスタンス生成
オートメーションオブジェクトのインスタンス生成02245

参照	OLE オートメーションサーバーについて

OLE オートメーションサーバーには，1 つの OLE オブジェクトの作成とエクスポートしかできないものと複数の OLE オブジェクトを処理できるものがあります。また OLE オブジェクトをエクスポートできず，内部で使用するだけのサーバーもあります。

OLE オートメーションオブジェクトを作成するときにはそのインスタンス生成の種類を指定します。これによって Windows は特定のオートメーションオブジェクトのインスタンスが要求されたときにサーバーの新しいインスタンスを作成する必要があるかどうかを判断します。

次の表は 3 種類のインスタンス生成の種類を説明しています。

インスタンス生成の種類	意味

Internal	OLE オブジェクトはアプリケーションの内部にある。OLE オブジェクトは登録されず，したがって外部プロセスからはオブジェクトを作成できない

Single	各サーバーインスタンスは OLE オブジェクトのインスタンスを 1 つだけエクスポートできる。クライアントが OLE オブジェクトのインスタンスを複数要求した場合は，それぞれに対して Windows がサーバーの新しいインスタンスを起動する

Multiple	各サーバーインスタンスは OLE オブジェクトのインスタンスを複数エクスポートできる。プロセス内サーバー (DLL) は常に複数のインスタンスである


参照
参照02246

プロセス内サーバーとプロセス外サーバー

Automation オブジェクト


Automation オブジェクト
Automation オブジェクト02247

参照	OLE オートメーションサーバーについて

OLEAuto ユニットを使うプロジェクトにはすべて自動的に Automation というオブジェクトが組み入れられます。Automation は非ビジュアルオブジェクトです。Application コンポーネントと Screen コンポーネントが環境の一部をカプセル化するためにアプリケーションの一部として自動的に生成されるのと同じように，Automation はサーバーオブジェクトの OLE オートメーションに関する部分をカプセル化しています。

Automation オブジェクトの最も重要な 2 つの部分は StartMode プロパティと OnLastRelease イベントです。

StartMode は OLE サーバーが起動された方法と理由を示します。StartMode に設定される値は次の表のとおりです。

値	意味

smStandAlone	ユーザーがアプリケーションを起動した

smAutomation	Windows が OLE オブジェクトを作成する目的でアプリケーションを起動した

smRegServer	アプリケーションは 1 つ以上の OLE オブジェクトを登録するために単独で起動された

smUnregServer	アプリケーションは 1 つ以上の OLE オブジェクトの登録を解除するために単独で起動された

OnLastRelease は，オートメーションのために (StartMode が smAutomation) 起動されたサーバーが，すべてのクライアントがサーバーの作成したすべての OLE オブジェクトを解放したので，サーバーとして必要なくなったことを示すイベントです。この場合デフォルトではサーバーはシャットダウンしますが，実際にサーバーをシャットダウンするかどうか判断する別のチェックを提供するために OnLastRelease イベントを処理することもできます。OnLastRelease は Boolean 型の var パラメータ ShutDown をとります。ShutDown のデフォルトは True で，False に設定すると最後の OLE オブジェクトが解放されたときにサーバーはシャットダウンされなくなります。

Automation コンポーネントについての詳細は OLEAuto ユニットのソースコードを参照してください。


参照
参照02248

プロセス内サーバーとプロセス外サーバー

オートメーションオブジェクトのインスタンシング


OLE オートメーションオブジェクトについて
OLE オートメーションオブジェクトについて02249

参照	OLE オートメーション

Delphi のオートメーションサーバーからエクスポートされるすべての OLE オブジェクトは TAutoObject. クラスから派生します。このような OLE オブジェクトについて重要な点がいくつかあります。

オートメーションオブジェクトの Free メソッドと Destroy メソッドを呼び出してはなりません。

OLE オブジェクトは複数のクライアントで使用される可能性があるので参照回数をカウントしています。OLE オブジェクトを使い終わったらその Release メソッドを呼び出します。Release メソッドは参照回数をデクリメントし，参照回数がゼロになった場合は Free を呼び出してオブジェクトを破棄します。

OLE オブジェクトは一般的には外部で作成されます。しかし，他のクラスのために Create コンストラクタを呼び出してサーバー内で作成することもできます。ここで注意しなければならないのは，上の項でも警告したように，必要がなくなったときに Free ではなく Release を呼び出すということです。

OLE オブジェクトのコンストラクタは仮想です。OLE クラス型のコンストラクタをオーバーライドする場合は宣言に override を追加するのを忘れないでください。

OLE オブジェクトは必ずバリアントとしてエクスポートします。OLE オブジェクトを返すメソッドとプロパティは，OLE オブジェクトの入ったバリアントを返さなければなりません。TAutoObject には，この目的のために OLEObject というプロパティがあります。サーバーの外にクラスまたはクラスへのポインタをエクスポートしないということが重要です。そのかわりに常に OLE オブジェクトの OLEObject プロパティを参照し，それをバリアントとしてエクスポートします。

サンプル AutoDemo の中の MemoAuto ユニットのメソッドはこの点をはっきりと示しています。


参照
参照02250

OLE オートメーションサーバーについて

他のアプリケーションの自動化

OLE オートメーションサーバーの作成


OLE オートメーションサーバーの作成
OLE オートメーションサーバーの作成02251

参照	OLE automation

どのような種類のオートメーションサーバーを作成する場合でもクライアントとのインターフェースを定義しなければなりません。このインターフェースは，OLE オブジェクトを定義して登録し，プロパティとメソッドを自動化してクライアントから参照できるようにします。

既存のオートメーションサーバーのインターフェースを変更するときには，インターフェースが下位互換性を維持するようにする必要があります。つまり，すでにあるプロパティやメソッドを削除しないようにします (削除すると既存のクライアントでエラーが発生する可能性があります)。既存のインターフェースには追加するだけにします。

メモ:	下位互換性のない方法で既存のインターフェースを変更する場合はオブジェクトの名前も変更した方がよいでしょう。

オートメーションサーバーの作成には次の 3 つのステップがあります。

オートメーションサーバーの作成

オートメーションオブジェクトの追加

自動化のためのプロパティとメソッド


参照
参照02252

OLE オートメーションサーバーについて

OLE オートメーションオブジェクトについて

他のアプリケーションの自動化


オートメーションサーバーの作成
オートメーションサーバーの作成02253

参照	OLE オートメーションサーバーの作成

OLE オートメーションサーバーを作成する最初のステップはサーバーそれ自体を作成することです。これは OLE オブジェクトをエクスポートするアプリケーションまたはダイナミックリンクライブラリ (DLL) を作成するということです。DLL にするかアプリケーションにするかの選択はプロセス内サーバーとプロセス外サーバーのどちらを作成するかによります。

最初のステップは他のアプリケーションや DLL を作成するのと変わりませんが，以降はそれぞれ独自の手順が必要になります。

プロセス内オートメーションサーバー (DLL) を作成するには

1	DLL を作成します。

通常どおりにユニットとフォームを追加します。OLE オブジェクトも追加できます。

2	プロジェクトのソースファイルの uses 節に OLEAuto ユニットを追加します。

3	DLL の OLEAuto ユニットから 4 つの標準エントリポイントをエクスポートします。

DLL からエクスポートする項目がすでにある場合は，OLE オートメーションの 4 つのエントリポイントを既存の exports 節に追加できます。そうでない場合は次のコードを DLL に追加します。

exports
  DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer;

メモ:	これらのエントリポイントは，大文字小文字の違いも含めて正確にこのとおりに記述しなければなりません。Object Pascal の他の項目とは異なり，これらについては大文字と小文字が区別されます。

プロセス外オートメーションサーバーを作成するには特別な作業は必要ありません。

サーバーの作成が終われば，OLE オートメーションオブジェクトを追加する準備ができたことになります。


参照
参照02254

オートメーションオブジェクトの追加

自動化のためのプロパティとメソッド


オートメーションオブジェクトの追加
オートメーションオブジェクトの追加02255

参照	OLE オートメーションサーバーの作成

アプリケーションでもダイナミックリンクライブラリでもサーバーの作成が終わったら OLE オートメーションオブジェクトを追加できます。このプロセスは大部分自動化されていますが，オートメーションオブジェクトエキスパートに情報をいくつか与える必要があります。

サーバーにオートメーションオブジェクトを追加するには

1	［ファイル(F)｜新規作成(N)］を選択し，新規作成ページで［オートメーションオブジェクト］を選択します。

オートメーションオブジェクトエキスパートが開きます。

2	オートメーションオブジェクトに名前を付けます。

これはサーバーアプリケーションが内部的に OLE オブジェクトを識別するための名前です。Object Pascal での

有効な識別子が必要です。慣例として T から始まる名前にしてください。

3	OLE クラスに名前を付けます。

これはオブジェクトを作成するために外部から参照される名前です。サーバーが Windows に OLE オブジェクトを登録するときにシステムレジストリにこの名前が配置されます。クライアントアプリケーションは CreateOLEObject (Visual Basic での CreateObject) を呼び出すときにこの名前を使います。

4	エクスポートするオブジェクトの説明を記述します。この文字列はレジストリに登録されます。

5	オブジェクトのインスタンシングを指定します。

プロセス内サーバー (DLL) ではこれは常に Multiple Instance で，アプリケーションの場合はより一般的な Single Instance です。

6	［OK］を選択してオートメーションオブジェクトを生成します。

オートメーションオブジェクトエキスパートは次のものを生成します。

TAutoObject から派生する空のオートメーションオブジェクトの宣言

Delphi の OLE オートメーションマネージャを呼び出す登録コード。OLE オートメーションマネージャがオブジェクトを Windows に登録し，オブジェクトとサーバーをシステムレジストリに配置する

メモ:	オートメーションオブジェクトの登録コードを生成するプロセスの一部に GUID の作成があります。通常は生成された GUID は変更してはいけません。OLE クラス名と GUID のペアはユニークであり，どちらか一方を変更するとそのオートメーションオブジェクトを使っているアプリケーションでエラーが発生します。ただし登録情報のうち説明とインスタンシングの部分は変更しても安全です。


参照
参照02256

オートメーションサーバーの作成

自動化のためのプロパティとメソッド


自動化のためのプロパティとメソッド
自動化のためのプロパティとメソッド02257

参照	OLE オートメーションサーバーの作成

OLE オートメーションクライアントは通常 OLE オブジェクトのメソッドを呼び出したりプロパティを設定したり読み出したりして OLE オブジェクトを操作します。サーバーは，エクスポートするプロパティとメソッドを OLE オブジェクトに追加することでどのプロパティとメソッドが使用可能かを定義します。

オートメーションオブジェクトのプロパティとメソッドは，他の Object Pascal クラスのものとよく似ています。ただし下に示したように制限がいくつかあります。

OLE オブジェクトのインターフェースにプロパティまたはメソッドを追加するには，クラス宣言の automated 部でそのプロパティまたはメソッドを宣言します。

クラス宣言の automated 部は public 部とよく似ていますが，コンパイラはそのクラスのオートメーションテーブルにエントリを作成します。

クラス宣言の automated 部のコードには以下の制限が適用されます。

プロパティとメソッドだけを宣言できる。フィールド宣言は行えない

プロパティとメソッドの宣言で使われるすべてのプロパティ型，パラメータ型，および関数の戻り値型は次の型のいずれかでなければならない

SmallInt，Integer，Single，Double，Currency，TDateTime，String，WordBool，Variant

プロパティ宣言にはアクセス指定子 (read と write) だけを指定できる。他の指定子 (index，stored，default，nodefault) は指定できない

アクセス指定子はメソッド識別子を指定しなければならない。フィールドを参照することはできない

プロパティアクセスメソッドはレジスタ呼び出し規約を使わなければならない

配列プロパティがサポートされる

プロパティオーバーライド (プロパティ型を含まないプロパティ宣言) はサポートされない

メソッド宣言はレジスタ呼び出し規約を使わなければならない。メソッドは仮想にはできるが動的にはできない。メソッドオーバーライドは可能

プロパティ宣言またはメソッド宣言には dispid 指令を指定できる (省略可)。dispid 指令にはプロパティまたはメソッドのディスパッチ ID を表す整数定数式が続く。

dispid 節が存在しない場合，コンパイラは自動的にそのクラスまたはその上位クラスのプロパティまたはメソッドが使っている最大のディスパッチ ID より大きな数を設定する。

すでに使用されているディスパッチ ID を指定するとエラーが発生する


参照
参照02258

オートメーションサーバーの作成

オートメーションオブジェクトの追加


メニューの変更点
メニューの変更点02259

できつつある開発ツールメニューの標準をより満たすように，Delphi 2.0 の IDE のメニュー構造は Delphi 1.0 とは異なっています。Delphi 2.0 での主な違いは，ファイルメニューの設計が見直されたこと，コンパイルメニューとオプションメニューがなくなったこと，プロジェクトメニュー，コンポーネントメニュー，およびデータベースメニューが新設されたことです。

次の表は Delphi 1.0 と Delphi 2.0 の主なメニューの変更点をまとめたものです。

Delphi 1.0	Delphi 2.0

［ファイル(F)｜プロジェクトの新規作成(N)］
［ファイル(F)｜新規作成(N)...］ダイアログボックスで［アプリケーション］を選択します。

［ファイル(F)｜プロジェクトを開く(R)］
［ファイル(F)｜開く(O)...］［開く］ダイアログボックスを使って既存のプロジェクトを開きます。

［ファイル(F)｜プロジェクトの上書き保存(V)］
［ファイル(F)｜すべて保存(V)］現在のプロジェクトファイルも含めて開いているすべてのファイルを保存します。

［ファイル(F)｜プロジェクトを閉じる(L)］
［ファイル(F)｜すべて閉じる(L)］

［ファイル(F)｜フォームの新規作成(F)］
［ファイル(F)｜新規作成(N)...］ダイアログボックスで［フォーム］を選択します。

［ファイル(F)｜ユニットの新規作成(U)］
［ファイル(F)｜新規作成(N)...］ダイアログボックスで［ユニット］を選択します。

［ファイル(F)｜ファイルの上書き保存(S)］
［ファイル(F)｜上書き保存(S)］

［ファイル(F)｜名前を付けて保存］	［ファイル(F)｜名前を付けて保存(A)］

［ファイル(F)｜ファイルを閉じる(C)］
［ファイル(F)｜閉じる(C)］

［ファイル(F)｜ファイルの追加(D)］	［ファイル(F)｜プロジェクトに追加(D)］または［プロジェクト(P)｜プロジェクトに追加(A)］

［ファイル(F)｜ファイルの削除(M)］
［ファイル(F)｜プロジェクトから削除(J)］または［プロジェクト(P)｜プロジェクトから削除(R)］

［コンパイル(C)｜コンパイル(C)］	［プロジェクト(P)｜コンパイル(C)］

［コンパイル(C)｜再構築(B)］	［プロジェクト(P)｜再構築(B)］

［コンパイル(C)｜構文チェック(S)］
［プロジェクト(P)｜構文チェック(S)］

［オプション(O)｜プロジェクト(P)］
［プロジェクト(P)｜オプション(O)］

［ファイル(F)｜コンポーネントの新規作成(T)］
［コンポーネント(C)｜新規作成(N)］または［ファイル(F)｜新規作成(N)...］ダイアログボックスで［コンポーネント］を選択します。

［オプション(O)｜コンポーネントのインストール(I)］
［コンポーネント(C)｜インストール(I)

［オプション(O)｜ライブラリを開く(O)］
［コンポーネント(C)｜ライブラリを開く(L)］

［オプション(O)｜ライブラリの再構築(R)］
［コンポーネント(C)｜ライブラリの再構築(R)］

［オプション(O)｜環境(E)］	［ツール(T)｜オプション(O)］

［オプション(O)｜ギャラリー(G)］	［ツール(T)｜リポジトリ(R)］Delphi 2.0 ではギャラリーはオブジェクトリポジトリに置き換わりました。

［オプション(O)｜ツール(T)］	［ツール(T)｜ツール(T)］

［ヘルプ(H)｜データベースフォームエキスパート(D)］
［データベース(D)｜データベースフォームエキスパート(D)］

次の表は Delphi 2.0 の新しいメニューコマンドの一覧です。

新しいメニューコマンド	意味

［ファイル(F)｜新規作成(N)］ 	ダイアログボックスで新しいオブジェクトを選択します。

［ファイル(F)｜開く(O)...］	ダイアログボックスで既存のオブジェクトを選択します。

［ファイル(F)｜名前を付けて保存(A)...］	ダイアログボックスでオブジェクトの種類を選択します。

［ファイル(F)｜ユニットを使う(U)］	フォームユニットの uses 節にユニットを追加します。

［プロジェクト(P)｜プロジェクトに追加(A)］	［ファイル(F)｜プロジェクトに追加(D)］と同じです。

［プロジェクト(P)｜プロジェクトから削除(R)］
［ファイル(F)｜プロジェクトから削除(J)］と同じです。

［コンポーネント(C)｜パレットの設定(D)］	［環境オプション］ダイアログボックスを開いてコンポーネントパレットをカスタマイズします。

［データベース(D)｜SQL モニター(S)］	SQL モニターを起動します。

［データベース(D)｜エクスプローラ(E)］	データベースエクスプローラを起動します。

［表示(V)｜スレッド(H)］	デバッグ中にスレッド情報を表示します。

またファイルメニューの［開き直す(R)］のメニューには以前に開いた 0 ～ 10 個のファイルのリストも追加されています。0 ～ 4 の項目は最近開いたプロジェクト，5 ～ 9 の項目はファイルの種類は問わずに最近開いた 5 つのファイルです。

次の表は今回のバージョンの Delphi ではサポートされない Delphi 1.0 のメニューコマンドの一覧です。

［ツール(T)｜Image Editor］

［ツール(T)｜Database Desktop］

［ツール(T)｜BDE Config］

［ヘルプ(H)｜コーチ(I)］

メモ:	Delphi のプロジェクトファイルを (プロジェクトとしてではなく) コードエディタで開くには，［ファイル(F)｜開く(O)］を選択して［ファイルの種類(T)］で［テキストファイル (*.TXT)］を選択してから，［ファイル名(N)］ボックスにプロジェクトの名前 (たとえば PROJECT1.DPR) を入力します。


新しいコンパイラメッセージ
新しいコンパイラメッセージ02260

Delphi コンパイラは，新しい明快なエラーメッセージ，警告，およびヒントをコードエディタウィンドウのメッセージペインに生成します。警告とヒントの生成は，プロジェクトオプションとローカルコンパイラ指令を使って制御できます。

また最初のエラーで必ず停止するのではなく，複数のエラーを生成できるようになっています。

コンパイラがメッセージを表示したら，メッセージペインでメッセージをクリックして〔F1〕を押せばそのエラーメッセージの説明が表示され，エラーの原因の例と問題の解決方法が示されます。


新しいコンポーネント
新しいコンポーネント02261

Delphi 2.0 には Windows 95 の新しいコモンコントロールと新しいマルチレコードデータベースグリッドを表すコンポーネントがあります。新しい Windows 95 コンポーネントのソースコードは SOURCE\VCL\COMCTRLS.PAS にあります。VCL リファレンスのヘルプにはすべての新しいコンポーネントとそのプロパティ，メソッド，およびイベントの説明があります。

新しいコンポーネントは次のとおりです。

TTabControl	TPageControl	TTreeView	TTrackBar

THeaderControl	TProgressBar	TRichEdit	TUpDown

TListView	TStatusBar	TDBCtrlGrid


Delphi 1.0 から Delphi 2.0 への移行
Delphi 1.0 から Delphi 2.0 への移行02262

Delphi 2.0 は Delphi 1.0 と完全互換です。Delphi 1.0 の 16 ビットアプリケーションをフル 32 ビットアプリケーションにするのは Delphi 2.0 で再コンパイルするだけです。ただし，Delphi の新しいデータ型や Windows の新しい機能を活用するにはコードの変更が必要です。

Delphi 1.0 に入っていた次の VBX コントロールは Delphi の今回のバージョンには入っていません。これらのコンポーネントを使っている Delphi 1.0 のプロジェクトは Delphi 2.0 ではコンパイルできません。

TBiSwitch

TBiGauge

TBiPict

TChart

ソースコードファイルとフォームは，上記のコンポーネントを使っていなければ 16 ビット Delphi 1.0 と 32 ビット Delphi のそれぞれのプロジェクトで共有できます。

メモ:	Delphi 1.0 用と Delphi 2.0 用のユニットを条件コンパイルすることはできません。たとえば，1 つのソースコードで Delphi 1.0 では TTabbedNotebook，Delphi 2.0 では TPageControl を使うというようには $IFDEF などのコンパイラ指令の使い方はできません。

.DPR プロジェクトファイルは Delphi 1.0 は Delphi 2.0 で共有できません。これは，関連付けられるリソースファイルがそれぞれ Windows 3.1 では 16 ビット，Windows 95 では 32 ビットでなければならないためです。Delphi 2.0 で新しいプロジェクトファイルを作成し，必要に応じてフォームとユニットを追加しなければなりません。Delphi 1.0 のプロジェクトファイルとは別個に管理することになります。

Delphi 2.0 では WinTypes ユニットと WinProcs ユニットが Windows ユニットに統合されました。Delphi 1.0 からの移行を容易にするために，Delphi では新しいユニットのエリアス (別名) として 2 つの古いユニットを使ってスムースな移植を図っています。これによってユーザーの 16 ビットのコンポーネントをコンポーネントライブラリ CMPLIB32.DCL にインストールすることも可能になります。

警告:	Delphi 1.0 のプロジェクトファイルを Delphi 2.0 で開くことはできますが，それを再コンパイルしたり変更を保存したりすると Delphi 1.0 のプロジェクトで使っていたリソースファイル (*.RES) は使えなくなります。リソースについては下位互換性は維持されていません。

32 ビットの戻り値を処理するために BlockRead 手続きと BlockWrite 手続きのオプションの最後のパラメータは Integer 型になっています。Delphi 1.0 では最後のパラメータは Word 型でした。また Count パラメータも Integer 型になっています。


削除された 16 ビット機能
削除された 16 ビット機能02263

Delphi の 16 ビットバージョンにあった多くの機能が Delphi 2.0 では削除されています。その中にはセグメント化されたメモリアーキテクチャを対象にしたランタイムライブラリルーチンが含まれています。下の表は Delphi 2.0 ではサポートされない機能の一覧です。

CSeg	DSeg	SSeg

PrefixSeg	PtrRec	SPtr

Seg	Ofs	Ptr

EBreakpoint	EFault	EGPFault

EInavlidOpCode	EPageFault	EProcessorException

ESingleStep	EStackFault


ビジュアルフォームの継承
ビジュアルフォームの継承02264

例

Delphi 1.0 ではフォームデザイナで設計されるすべてのフォームは同じ上位型 TFrom から直接派生していました。Delphi 2.0 では他のフォームからフォームを派生させることが可能になり，上位型のコンポーネント，プロパティ，およびコードを新しいフォームの開始点として継承することができます。上位フォームは，プロジェクトまたはオブジェクトリポジトリにすでに入っているものなら何でもかまいません。

フォームの継承によって，1 つのアプリケーション内でもアプリケーションのグループ全体に渡る場合でも，標準フォームテンプレートのライブラリの作成が可能になります。上位フォームに加えた変更は即座に下位のフォームに反映されます。ライブラリから派生させた各フォーム型をカスタマイズでき，またライブラリ内の標準フォームもいつでも変更が可能であり，その変更は派生フォームに反映されます。

ビジュアルフォームの継承を使うためには次の点を理解しておいてください。

継承フォームの作成

継承イベントハンドラの呼び出し


例
例02265

Delphi のサンプルコードをインストールしていれば，DEMO\DB\GDSDEMO ディレクトリにフォームの継承の完全な例があります。このアプリケーションには，StdDataForm を共通の上位型とする GridViewForm と RecViewForm の 2 つのフォームがあります。StdDataForm に変更を加えると 2 つの下位フォームに即座に反映されます。


継承フォームの作成
継承フォームの作成02266

参照	ビジュアルフォームの継承

Delphi で新しいフォームを作成するときには，ブランクフォームから始めるか設計済みのフォーム型から始めるかを選択できます。設計済みの型から始める場合には，そのフォームをコピーするか，継承するか，あるいはそのまま使うかします。

オブジェクトリポジトリで項目をブラウズすると，ダイアログボックスの下側にコピーと継承のオプションがあるのがわかります。

テンプレートフォームをコピーすると，フォームとそのコンポーネントとコードすべての複製が作られます。同じプロジェクトで複数のコピーを作ると，各コピーごとにコードの複製が生成されることになります。

テンプレートフォームを継承すると，上位フォームへの参照が作成され，新たに追加したコンポーネントとイベントハンドラのコードだけが生成されることになります。同じプロジェクトで 1 つの上位フォームから複数のフォームを継承すると，継承したコードを共有することになります。選択されたフォームのすべての上位型もプロジェクトに追加されます。

フォームの継承は，同じようなフォームをたくさん使うプロジェクトのサイズを小さくする優れた方法と言えます。また，それぞれ独自のカスタマイズを必要とする多数のプロジェクトで使う一連の標準フォームテンプレートを作成し管理する方法にもなります。

メモ:	フォームエキスパートを選択したときには継承は使えません。フォームエキスパートは上位フォームにはなれないからです。非継承フォームで［Copy］を選択すると，新しいフォームとして選択されたフォームのコピーが作成されるので，前と同じように動作します。


参照
参照02267

継承イベントハンドラの呼び出し


継承イベントハンドラの呼び出し
継承イベントハンドラの呼び出し02268

参照	例	ビジュアルフォームの継承

継承したビジュアルフォームのイベントにイベントハンドラを結び付けると，新しいハンドラの中から継承したハンドラを起動することができます。これを利用すると，複製を作らずに継承した動作を変更することができます。

継承したイベントハンドラを起動するには予約語 inherited を使います。


例
例02269

DoItButton というボタンのある TStandardForm というフォームから継承して新しいフォームを作成する場合， DoItButton ボタンの OnClick イベントにハンドラを結び付け，そのハンドラ内で継承したハンドラを呼び出すことで，ユーザーが DoItButton ボタンをクリックしたときの動作を変更できます。

procedure TForm1.DoItButtonClick(Sender: TObject);

begin

  { 独自の処理を行う }

  inherited;	{ TStandardForm の処理を行う }

end;

上位フォームに対応するイベントハンドラがない場合には inherited を呼び出しても何も行われません。後で上位フォームにハンドラを追加すれば inherited はそのハンドラを呼び出します。


参照
参照02270

継承フォームの作成


ビジュアルフォームのリンク
ビジュアルフォームのリンク02271

自分のプロパティで他のコンポーネントを参照するコンポーネントから，別のフォームに属するコンポーネントを参照できるようになりました。このようなリンクを使うコンポーネントの典型的なものがデータアクセスコンポーネントです。

たとえば 1 つのアプリケーションで，あるフォームにテーブルコンポーネントがあり，さらに同じデータセットに対してグリッドビューやフォームビューなどの異なるビューを持つフォームを複数作成することができます。

Delphi は関連付けられているユニットをリンクすることでフォームをリンクします。たとえば Form1 と Form2 の 2 つのフォームとそれぞれに関連付けられたユニット Unit1 と Unit2 がある場合，Unit1 の uses 節のどれかに Unit2 が指定されていれば Form1 のコンポーネントは Form2 のコンポーネントを参照できます。

メモ:	［ファイル(F)｜Use Unit］メニューコマンドを使うと，他のユニットの uses 節にプロジェクト内のユニットを追加できます。


項目エディタの変更点
項目エディタの変更点02272

Delphi 2.0 の項目エディタはまったく新しくなっています。以前と同様に，新しい項目エディタも選択しているデータセットのすべてのフィールドを表示するモードなしのダイアログボックスです。

項目エディタの変更点は次のとおりです。

項目エディタにはボタンはなくなりました。すべての操作はマウスボタンの右クリックで表示されるポップアップメニューから行います。これによって項目エディタのドラッグアンドドロップ機能がより使いやすくなります。

計算フィールドおよびデータフィールドとともに参照フィールドをサポートします。

スケーラブルデータディクショナリ.を通じて拡張フィールド属性にアクセスできます。


項目エディタのドラッグアンドドロップ
項目エディタのドラッグアンドドロップ02273

データセット (テーブルまたは問い合わせ) コンポーネントに対して項目エディタを使ってフォーム上にデータ編集コントロールを作成できます。データセットのフィールドが定義されていれば，データセットが入っているフォームにフィールド名をドラッグアンドドロップできます。フォームにデータソースコンポーネントをまだ追加していない場合は，フォームに最初のフィールドをドロップしたときに自動的に追加されます。

そのフィールド型に対して適切なコントロールが作成されます。たとえば TStringField 型のフィールドをドロップすると DBEdit コンポーネントが作成され，TGraphicField 型のフィールドドロップすると DBImage コンポーネントが作成されます。


ギャラリーの変更点
ギャラリーの変更点02274

参照

Delphi 1.0 のギャラリーはオブジェクトリポジトリに置き換わりました。

ギャラリーとは異なり，オブジェクトリポジトリはプロジェクトにコピーできるフォームやプロジェクトを格納する静的なディレクトリではありません。オブジェクトリポジトリは，その中にある各フォームと各プロジェクトの位置を指す参照ファイルです。

オブジェクトリポジトリを使う場合は次のトピックを参照してください。

オブジェクトリポジトリへの項目の追加

オブジェクトリポジトリからのフォームの作成


参照
参照02275

オブジェクトリポジトリについて

オブジェクトリポジトリのファイル形式


オブジェクトリポジトリのファイル形式
オブジェクトリポジトリのファイル形式02276

オブジェクトリポジトリはフォームとプロジェクトのリストが入っている編集可能なテキストファイル (.INI 形式) です。このファイルには各オブジェクトリポジトリ項目についての重要な情報が入っています。オブジェクトリポジトリファイルを直接編集することもできますが，［オブジェクトリポジトリ］ダイアログボックスを使って管理することを強くお勧めします。

DELPHI32.DRO ファイルのセクションには，プロジェクトまたはフォームのパスとファイル名，あるいはエキスパートの IDString が記述されています。

オブジェクトリポジトリ項目は次の 4 種類があり，その情報セットもそれぞれ異なります。

FormTemplate

ProjectTemplate

FormExpert

ProjectExpert

テンプレートタイプには次の情報があり，そのほとんどは［New Items］ダイアログボックスでの表示に関係するものです。

セクションタイプ	項目	値

FormTemplate	Name	テンプレートのタイトル

Icon	32×32 のアイコン (.ICO) ファイルのフルパス名

Description	オブジェクトリポジトリ項目の簡単な説明

DefaultMainForm	デフォルトのメインフォームとして使うかどうかを示す論理値

DefaultNewForm	デフォルトの新規フォームとして使うかどうかを示す論理値

Ancestor	このフォームが継承したフォームのパス名とファイル名 (オブジェクトリポジトリ内になければならない)

ProjectTemplate	Name	テンプレートのタイトル

Icon	32×32 のアイコン (.ICO) ファイルのフルパス名

Description	オブジェクトリポジトリ項目の簡単な説明

DefaultProject	デフォルトの新規プロジェクトとして使うかどうかを示す論理値

FormExpert	DefaultMainForm	デフォルトのメインフォームとして使うかどうかを示す論理値

DefaultNewForm	デフォルトの新規フォームとして使うかどうかを示す論理値

ProjectExpert	DefaultProject	デフォルトの新規プロジェクトとして使うかどうかを示す論理値


オブジェクトリポジトリへの項目の追加
オブジェクトリポジトリへの項目の追加02277

参照

オブジェクトリポジトリにプロジェクトまたはフォームを追加するのは Delphi 1.0 のギャラリーの場合と同じです。ただしオブジェクトリポジトリ内のプロジェクトやフォームはテンプレートの場所への参照なので，オブジェクトリポジトリに追加する前にテンプレートが (変更されていない状態で) 保存されていなければなりません。

継承フォームをオブジェクトリポジトリに追加するためには，その前に継承フォームのすべての上位フォームをオブジェクトリポジトリに追加しておかなければなりません。


参照
参照02278

オブジェクトリポジトリへのフォームの追加

プロジェクトテンプレートの使い方


TDBGrid の変更点
TDBGrid の変更点02279

データベースグリッドコンポーネント TDBGrid では，基になるフィールドのプロパティとは関係なく，列ごとに表示プロパティを指定できるようになっています。TDBGrid はデータセルの色，幅，フィールド名，およびタイトル (列見出し) のテキスト列属性をサポートしています。

DBGrid の新しい機能を理解するには，まず次の点を理解しておいてください。

DBGrid 操作モード

列プロパティの定義


DBGrid 操作モード
DBGrid 操作モード02280

参照	TDBGrid の変更点

TDBGrid は，列定義なしか列定義ありのどちらかのモードで動作します。

列の属性がなにも定義されていない場合，DBGrid は 16 ビットの TDBGrid と同じように動作します。タイトルテキストなどの「列」情報はデータベースフィールドから直接取り込まれ，列の幅または順序を変更すると関連付けられているフィールドの DisplayWidth プロパティまたは Index プロパティが変更されます。あるグリッドでフィールドの幅または順序を変更すると，同じデータセットを使っているすべてのグリッドに影響が及びます。

列定義が行われている場合，それは DBGrid の見かけを完全に定義します。基になっているテーブルのフィールド順序とは無関係に，任意の順序，任意の組み合わせでフィールド名が列に割り当てられます。列にフィールド名が割り当てられていない場合，あるいは割り当てられたフィールド名が DBGrid の現在のデータセットにない場合，その列はブランクで読み出し専用になります。1 つのフィールドを同じ DBGrid の複数の列で使うことができ (たとえば大きなグリッドの左端と右端に伝票番号を配置でき)，データセットで使用可能なフィールドの一部だけを表示するようにグリッドを設定することができます。


参照
参照02281

列プロパティの定義


列プロパティの定義
列プロパティの定義02282

参照	TDBGrid の変更点

すべての列属性プロパティについて，DBGrid または列に関連付けられているフィールドからデフォルト値が与えられます。列プロパティに別の値を入れると，このデフォルト値をオーバーライドすることになります。オーバーライドした新しい値は永続性を持ちます (グリッドとともに格納され読み込まれます)。

たとえば列の幅は，次のソースのどれかから優先順に従って選択されます。

Column.Width プロパティに代入されている値

列のフィールドの DisplayWidth プロパティから計算されたピクセル幅

グリッドの DefaultWidth プロパティ (列にフィールドが関連付けられていない場合)

列のデータセルの色は，列の Color プロパティに代入されていた色か，列の色に何も代入されていない場合はグリッドの Color プロパティから得られた色です。

DBGrid で列が定義されている場合，列の表示についての変更は列に格納され，基になっているデータベースフィールドには影響しません。グリッド内の列の順序を変更してもデータベーステーブルのフィールドの順序は変更されません。同様に，列の幅を変更しても関連付けられているフィールドの DisplayWidth プロパティは何も影響を受けません。したがって，列定義を持つ 2 つの DBGrid で同じデータセットからまったく異なるビューを表現でき，データセットのフィールドの組み合わせも，列の順序や幅，色やタイトルまで独自に設定できます。


参照
参照02283

DBGrid 操作モード

列プロパティ

DBGrid は列プロパティ情報を TDBColumn 型の列オブジェクトに格納します。この列定義には TDGrid の新しい Columns 配列プロパティを通してアクセスします。DBGrid が列定義を行っていない場合，Columns.Count はゼロになり，Columns プロパティにインデックスを使ってアクセスすると例外が生成されます。

TDBColumn.Field プロパティは (もしあれば) 列に関連付けられたデータベースフィールドを返します。DBGrid のデータソース/データセットのリンクが確立していない場合，あるいは列の FieldName プロパティがブランクの場合，また現在のデータセットでは FieldName が無効の場合には，TDBColumn.Field は nil を返します。

列インデックスは，インジケータ列も含めて実際の列の順序に一致します。したがって最初のデータ列は，DBGrid のインジケータが有効であれば Column[1] になり，インジケータが無効であれば Column[0] になります。

メモ:	これは製品の小売りリリースの前に変更されるかもしれません。

列エディタ

DBGrid の列は設計時に DBGrid 列エディタを使って設定することができます。フォーム内で DBGrid を選択してからオブジェクトインスペクタの Columns プロパティをダブルクリックすると［DBGrid のカラム設定］ダイアログボックスが表示されます。このダイアログボックスでグリッドの列に対して，追加や削除，(リストボックス内の項目をドラッグして) 順序の変更，および列のプロパティの設定が行えます。すべての列を削除すると DBGrid は 16 ビット互換モードに切り換わります。

TDBGrid.Columns プロパティと個々の列オブジェクトすべては代入互換です。たとえば次の代入を行うと，

DBGrid1.Columns := DBGrid2.Columns

DBGrid1 のすべての列属性が消去され，DBGrid2 からすべての列情報がコピーされます。列フィールド名はコピーされますがグリッドのデータセットは変更されません。同様に次の代入を行うと，

DBGrid1.Columns[5] := DBGrid1.Columns[2]

Columns[5] の列情報が消去されて Columns[2] からコピーされます。


TField の参照フィールドのサポート
TField の参照フィールドのサポート02284

例

Delphi 2.0 ではサポートするフィールドの種類が増えています。データフィールドと計算フィールドに加えて参照フィールドを扱えるようになっています。参照フィールドは計算フィールドによく似ていますが，「計算」ではなく別のテーブルを「参照」します。参照フィールドは常に読み出し専用です。

参照フィールドを定義するには，項目エディタでフィールドを定義してから，オブジェクトインスペクタでフィールドの Lookup プロパティを True に設定します。

メモ:	1 つのフィールドコンポーネントの Calculated プロパティ Lookup プロパティは排他的関係にあります。一方を True に設定するともう一方は自動的に False に設定されます。

参照フィールドを作成したら，次の表に示すように 4 つのプロパティに値を指定してどこをどのように参照するかを指定する必要があります。各プロパティの名前からわかるように，参照フィールドと参照テーブルの関係はマスターリンクの関係によく似ています。

プロパティ	意味

LookupDataSet	値を参照するデータセットを指定します。

KeyFields	参照のキーに使うデータセット内のフィールドを指定します。

LookupKeyFields	このデータセットのマスターフィールドに対応する参照テーブルのフィールドを指定します。参照テーブルがローカルテーブル (Paradox または dBASE のテーブル) の場合，そのテーブルにはここで指定したフィールドにマップされるインデックスが付いていなければなりません。

LookupResultField	返される参照テーブルのフィールド名を指定します。結果フィールドの値が参照フィールドの値になるので，結果フィールドと参照フィールドの型は同一でなければなりません。参照フィールドが文字列フィールドの場合は，その Size プロパティが結果フィールドの Size フィールドと一致するようにしてください。一致しない場合はブランクしか表示されません。

テーブルの最後の 3 つのプロパティはすべて文字列です。マスターフィールド文字列とリンクフィールド文字列には，セミコロンで区切ってフィールドのリストを指定できます。

メモ:	フィールドの参照はフィールドの計算の前に行われます。したがって参照フィールドに基づく計算フィールドは作成できますが，計算フィールドに基づく参照フィールドは作成できません。


例
例02285

参照フィールドを使った単純で明快な例は，2 つのテーブルの一方が顧客，もう一方が注文というデータベースです。注文テーブルには注文番号や顧客番号などのフィールドがあり，注文テーブルに顧客名を表示する参照フィールドを定義できます。このような参照フィールドを使うと，注文テーブルの顧客番号を顧客テーブルの顧客番号に一致させて顧客テーブルから会社名を返すというようなこともできます。

Delphi に含まれている DBDEMOS データベース内の注文テーブルと顧客テーブルを使えば，顧客テーブル (CUSTOMER.DB) から会社名を表示する参照フィールドを注文テーブル (ORDERS.DB) に定義できます。

1	新しいアプリケーションを作成します。

2	テーブルコンポーネントを 2 つ，データソース 1 つ，データグリッド 1 つをフォームに配置します。

3	Table1 を ORDERS.DB に，DataSource1 を Table1 に，Table2 を CUSTOMER.DB にそれぞれ接続します。

4	Table1 に CustName という新しい文字列フィールドを作成して Lookup プロパティを True に設定します。

デフォルトでは定義したフィールドは計算フィールドになります。Lookup を True に設定すると Calculated は False に設定されます。

5	次の表のように他の参照プロパティを設定します。

プロパティ	値

LookupDataSet	Table2

KeyFields	CustNo

LookupKeyFields	CustNo

LookupResultField	Company


テーブルに対するローカルフィルタ
テーブルに対するローカルフィルタ02286

Delphi では，問い合わせを使ってデータベースサーバーからローカルデータセットに取り込むレコードにフィルタをかけるように，データセットから表示するレコードにローカルにフィルタをかけることができます。フィルタを使うと，どんなテーブルや問い合わせからでも一定のレコードをローカルに隠したり表示したりできます。

メモ:	Delphi の出荷バージョンではすべての問い合わせに対してフィルタをかけられるようになります。

Delphi のデータセットフィルタは Object Pascal コードとして書かれています。したがって，Object Pascal のコードで実現できることならどんな計算や操作でも行えます。

データセットフィルタには使い方が 2 つあります。

データセットのレコードに対するフィルタ

フィルタに一致するレコードの検索

どちらの方法を使う場合でも，データフィルタの作成について理解しておく必要があります。


データセットのレコードに対するフィルタ
データセットのレコードに対するフィルタ02287

参照	例	テーブルに対するローカルフィルタ

フィルタの使い方で最も単純で最も一般的なのはデータセット全体に対してフィルタを有効にすることです。フィルタを有効にすると，データセットはデータセット内の各レコードごとにイベントを生成します。このイベントを処理することで，個々のレコードを受け入れるか「はじく」かを判断できます。

データセットのフィルタを有効にするには Filtered プロパティを True に設定します。

Filtered プロパティが True の場合，データセットは取り出したレコードごとに OnFilterRecord イベントを生成します。OnFilterRecord 用のイベントハンドラはレコードを調べてフィルタを通過させるかどうかを決定し，通過したレコードだけがデータセット内で見えるようになります。

OnFilterRecord イベントに異なるハンドラを割り当てることで実行時にレコードのフィルタを変更できます。ただし，新しいフィルタの効果を実際に見るには Refresh を呼び出さなければなりません。

メモ:	フィルタを変更するが現在のレコードを切り替えると，現在のレコードがフィルタを通過しない場合には現在のレコードが見えなくなりことがあります。これが発生すると，フィルタを通過した次のレコードが現在のレコードになります。


参照
参照02288

フィルタに一致するレコードの検索

データフィルタの作成


フィルタに一致するレコードの検索
フィルタに一致するレコードの検索02289

参照	例	テーブルに対するローカルフィルタ

フィルタを使うとデータセットから一定のレコードを見つけることができます。データセットに対する繰り返し処理で「検索(find)」メソッドと総称されるメソッドを呼び出すことで，フィルタに一致するレコードを見つけられます。

フィルタに一致するレコードを見つけるには FindFirst，FindNext，FindPrior，FindLast の各メソッドを使います。

検索メソッドはすべて Boolean 関数で，一致するレコードが見つかれば True を返します。たとえば FindFirst を呼び出した場合，FindFirst はフィルタ (データフィルタの作成 を参照) を通過するレコードに達するまで OnFilterRecord イベントを生成しながらデータセット全体を繰り返し処理していきます。フィルタを通過するレコードが見つかったら，それを現在のレコードにして True を返します。見つからなければ現在のレコードは変化せず，FindFirst は False を返します。

どの検索メソッドについても，Found プロパティの値を調べることでいつでも最も最近の呼び出しの結果をチェックできます。


参照
参照02290

データセットのレコードに対するフィルタ

データフィルタの作成


データフィルタの作成
データフィルタの作成02291

参照	例	Local filtering on tables

Delphi のデータセットのフィルタは OnFilterRecord 用のハンドラです。データセットは，ローカルデータセットの全レコードにフィルタをかけるとき，および検索メソッドで個々のレコードを検索するときに OnFilterRecord イベントを生成します。どちらの場合もフィルタの書き方は同じです。

どんなイベントハンドラの場合でも，データフィルタは特定のイベントへの応答の中で呼び出される Object Pascal コードです。必要に応じてどんなに単純なフィルタもどんなに複雑なフィルタも作成できます。重要なことは，フィルタはデータセットのすべてのレコードに適用しなければならず，そのために場合によってはパフォーマンスが低下する可能性があるという点です。大規模なデータにフィルタをかける必要がある場合には，ローカルフィルタよりもインデックスを使った方がよいことがあります。

データにフィルタをかけるには，OnFilterRecord イベント用のハンドラを作成して，どのレコードをはじくかを示すために Accepst パラメータを設定します。

Accept はデフォルトでは True で，すべてのレコードがフィルタを通過します。特定のレコードだけを通過させるには Accept を False に設定しなければなりません。

メモ:	フィルタをかけるときには計算フィールドと参照フィールドは使用できません。計算フィールドを使う必要がある場合は，フィルタ自身で計算を行わなければなりません。


例
例02292

次の例は，顧客データベースに対して State というフィールドの値をチェックして California 州の顧客のレコードを非表示にする単純なフィルタです。

procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

begin

  Accept := DataSet['State'] <> 'CA';	{ CA でなければ True }

end;


参照
参照02293

データセットのレコードに対するフィルタ

フィルタに一致するレコードの検索


Delphi 2.0 documentation team
Delphi 2.0 documentation team02294

The printed and online documentation for Delphi 2.0 was produced by the Borland Technical Publications department.

The Delphi Tech Pubs group is managed by Jim Regan. The team includes:

Richard Nelson, Lead Writer

James Von Hendy, Senior Technical Writer

Bob Simpson, Senior Technical Writer

Chloe Redon, Technical Writer

Susanne Edgerton, Technical Writer

Jason Gervich, Help Specialist

Bob Arnson, Technical Writer

Frances Buran, Indexer

Geta Carlsen, Editor

Kimberly Haeger, Intern

with production assistance from Merry Bilgere, Bette Huntalas, and David Yeater.

Special thanks to Mike "F1 Boy" Satenberg.


About data modules
About data modules02295

A data module is a specialized Delphi class for centralized handling of any nonvisual component in an application. Typically these are data access components (TSession, TDatabase, TTable, TQuery, TStoredProc, TBatchMove, and TReport), but they can also be other nonvisual components (TTimer, TOpenDialog, TSaveDialog, TImageList, and TDdeClientConv, for example). A data module enables you to:

•	Place all your data access components in a single visual container at design time instead of duplicating them on each application form.

•	Design tables and queries once for use with many forms instead of recreating them separately for each form.

•	Create business rules抑using component events, and additional methods you add to the unit code for a data module抑that can be shared across an entire application.

•	Separate business logic and data access from user interface code for easier maintenance.

•	Standardize common dialogs, timers, DDE client, DDE client items, DDE server, DDE server items, and image lists across an application.

•	Store well-designed data access modules in the Object Repository to share with other projects and developers.

To use a component from a data module in a form, you add the data module to the form筑s uses clause, then use a component筑s methods or properties in the form. For data access components, set the DataSource property of each data-aware control in the form to point to the data source in the module.

Note:	Delphi still supports putting nonvisual components directly on individual forms for simple applications and for compatibility with older applications. If you have older applications, consider converting them to use data modules. Using data modules produces simpler applications that are easier to maintain.

At run time a data module is not visible. Your application code can still change or read the properties of the components in the data module, and it can call the methods belonging to those components.


Creating a new data module
Creating a new data module02296

To create a new, empty data module for a project, choose File|New Data Module. Delphi opens a data module container on the Integrated Development Environment (IDE) desktop and adds the data module to the project file.

At design time a data module looks like a standard Delphi form with a white background and no alignment grid. As with forms, you can place nonvisual components on a module from the Components palette, and you can resize a data module to accommodate the components you add to it. You can also right-click a module to display a SpeedMenu for it. The following table summarizes the SpeedMenu options for a module.

Menu item	Purpose
Align To Grid	Aligns data access components to the module筑s invisible grid.
Align	Aligns data access components according to criteria you supply in the Alignment dialog box.
Revert to inherited	Discards changes made to a module inherited from another module in the Object Repository, and reverts to the originally inherited module.
Creation Order	Enables you to change the order in which data access components are created at start-up.
Add to Repository	Stores a link to the data module in the Object Repository.
View as Text	Displays the text representation of the data module筑s properties.
Behind the data module container you see in the IDE, there is a corresponding unit file containing source code for the data module.


Naming a data module and its unit file
Naming a data module and its unit file02297

The title bar of a data module displays the module筑s name. The default name for a data module is DataModuleN where N is a number corresponding to the number of forms and modules in an application plus one. For example, if you start a new project, and add a module to it before doing any other application building, the name of the module defaults to DataModule2. The corresponding unit file for DataModule2 default to Unit2.

You should rename your data modules and their corresponding unit files at design time to make them more descriptive. You should especially rename data modules you add to the Object Repository to avoid name conflicts with other data modules in the Repository or in applications that use your modules.

To rename a data module,

1	Select the module.

2	Edit the Name property for the module in the Object Inspector.

The new name for the module appears in the title bar when the Name property in the Object Inspector no longer has focus.

When you change the name of a data module at design time, Delphi changes references to the module throughout your source code. References are not automatically changed in event handlers you write without using the Object Inspector.

To rename a unit file for a data module,

1	Select the unit file.

2	Choose File | SaveAs.

In the Save As dialog box, enter a file name that clearly identifies the unit with the renamed data module.


Placing and naming components
Placing and naming components02298

You place non-visual components, such as TTable and TQuery, in a data module just as you place visual components on a form. Click the desired component on the appropriate page of the Component palette, then click in the data module to place the component. You cannot place visible controls, such as grids, on a data module. If you attempt it, you receive an error message.

For ease of use, components are displayed with their names in a data module. When you first place a component, Delphi assigns it a generic name that identifies what kind of component it is, such as DataSource1 and Table1. This makes it easy to select specific components whose properties and methods you want to work with. To make it even easier, you should give your components more descriptive names (e.g., CustSource and CustTable).

To change the name of a component in a data module,

1	Select the component.

2	Edit the component筑s Name property in the Object Inspector.

The new name for the component appears under its icon in the data module as soon as the Name property in the Object Inspector no longer has focus.

When you name a component, the name you give it should reflect the type of component and what it is used for. For example, for database components, the name should reflect the type of component, and the database it accesses. For example, suppose your application uses the CUSTOMER table. To access CUSTOMER you need a minimum of two data access components: a data source component, and a table component. When you place these components in your data module, Delphi assigns them the names DataSource1 and Table1. To reflect that these components use CUSTOMER, and to relate the components to one another, you could change these names to CustSource and CustTable.


Using component properties and methods in a data module
Using component properties and methods in a data module02299

Placing components in a data module centralizes their behavior for your entire application. For example, you can use the properties of dataset components, such as TTable and TQuery, to control the data available to the data source components that use those datasets. Setting the ReadOnly property to True for a dataset prevents users from editing the data they see in a data-aware visual control on a form. You can also invoke the Fields editor for a dataset to restrict the fields within a table or query that are available to a data source and therefore to the data-aware controls on forms.

In any case, the properties you set for components in a data module apply consistently to all forms in your application.

In addition to properties, you can write event handlers for components. For example, a TDataSource component has three possible events, OnDataChange, OnStateChange, and OnUpdateData. A TTable component has over twenty potential events. You can use these events to create a consistent set of business rules that govern data manipulation throughout your application.

For a complete list of the properties and events available for components, see the individual component entries in the online VCL Reference.


Creating business rules in a data module
Creating business rules in a data module02300

Besides writing event handlers for the components in a data module, you can code methods directly in the unit file for a data module. These methods can be applied to the forms that use the data module as business rules. For example, you might write a procedure to perform month-, quarter-, or year-end bookkeeping. You might call the procedure from an event handler for a component in the data module.

The prototypes for the procedures and functions you write for a data module should appear in the module筑s type declaration:

type

  TCustomerData = class(TDataModule)

    Customers: TTable;

    Orders: TTable;

    .

    .

    .

    procedure LineItemsCalcFields(DataSet: TDataSet); { A procedure you add }

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  CustomerData: TCustomerData;

The procedures and functions you write should follow in the implementation section of the code for the module.


Reusing data modules in the Object Repository
Reusing data modules in the Object Repository02301

Instead of creating a data module from scratch, you may be able to reuse an existing data module from the Object Repository. Data modules in the Object Repository are modules that you or other developers created that are generic enough to be of use in different projects.

You can reuse an existing data module from the Object Repository at any time. To see the data modules available in the Object Repository:

1	Choose File|New.

2	Click the Data Modules page in the New Items dialog box.

The Data Modules page displays the data modules you can use. Radio buttons at the bottom of the page enable you to specify the method of reuse.You can borrow a module in one of three ways: Copy, Inherit, and Use. Sometimes one or more of these options may be unavailable. Unavailable options are dimmed.


Copying a data module
Copying a data module02302

Copying a data module from the Object Repository puts an exact duplicate of the data module and its code in your project. Your copy of a data module is like a snapshot of the data module in the repository at the time of the copy operation. The data module copied into your project exists independently of its ancestor data module in the repository.

Copy a data module from the repository when

•	The module already provides a fundamental level of access to data your application needs,

•	The demands of your application require substantial changes and additions to the components in the module, and

•	You do not want changes made to the ancestor data module in the repository to affect the module in your application.

Note:	If you want future changes made to ancestor data modules in the repository to ripple into your project, you should inherit the data module instead of copying it.


Inheriting a data module
Inheriting a data module02303

Inheriting a data module from the Object Repository creates a duplicate of the data module in your project, and creates a link to the ancestor module in the repository. Your copy of the module inherits any subsequent changes made to the components, properties, and methods of the repository筑s data module. Changes made to the data module in the repository are applied to the inherited data module in your project the next time you recompile. These changes apply in addition to any changes or additions you make to the data module in your project.

If you add components and event handlers to your copy of an inherited data module, you only generate new code in your application for the added components and event handlers.

Inherit a data module from the repository when

•	The module provides a fundamental level of access to data your application needs, and

•	You want to propagate changes made to the ancestor data module in the repository to the module in your application (for example, because you want to maintain a consistent corporate view of data in all your applications).

Note:	Do not inherit data modules that contain TSession or TDatabase components. You should copy these modules instead of inheriting them. A second option is to put TSession and TDatabase components in a separate data module that you can copy, and to put all other components in another data module that you can inherit.


Inheriting event handlers
Inheriting event handlers02304

If you override an event handler for a component inherited from a data module (for example, to provide functionality specific to your application), you can still invoke the inherited handler from your new handler. When you override the handler, the new handler is created with a single statement: inherited. This call invokes the event handler from the ancestor data module if it exists. If it does not exist, the inherited statement is ignored. If you do not want to call an inherited handler from your new handler, delete the inherited statement. For more information about using inherited handlers, see the User筑s Guide.


"Using" a data module
Using a data module02305

You can both copy a data module from the Object Repository into your application and propagate any changes you make to it back into the original module in the repository by selecting the Use radio button in the New Items dialog box. Using a data module is like reverse inheritance. Instead of inheriting changes others make to a data module, they inherit your changes when they use the data module in the repository.

Use a data module in the repository when

•	The module already provides a fundamental level of access to data your application needs,

•	The demands of your application require substantial changes and additions to the components in the module, and

•	The changes you need to make in your application are also fundamentally applicable to other applications.

Note:	Be careful with the Use radio button option. Make sure the changes you make to a data module are robust and thoroughly tested before letting others copy it into their applications from the repository.


Accessing a data module from a form
Accessing a data module from a form02306

To associate visual controls on a form with a a data module, you must first add the data module to the form筑s uses clause. To add a module to a form筑s uses clause, you can:

•	Choose File | Use Unit and enter the name of the module or pick it from the list box in the Use Unit dialog box,

or

•	Drag selected field from the Fields editor of a TTable or TQuery component in the data module to a form. In this case Delphi prompts you to confirm that you want to add the module to the form筑s uses clause, then creates database edit boxes for each field you dragged into the form.

Note:	If you employ this last method, Delphi also adds a new data source component to the form and sets the DataSource properties of the edit controls it creates to point to this data source. The data source itself is associated with a table or query component in the data module. You can keep this arrangement, or, to keep your data access model cleaner, can change it. Delete the data source component on the form, and set the DataSource properties of the control on the form to point directly to the appropriate data source in the data module.


Adding a data module to the Object Repository
Adding a data module to the Object Repository02307

You can save your data modules and add them to those already available in the Object Repository. This is helpful when you want to develop standard data access models throughout an organization.

Before adding a data module to the Object Repository, you should develop and test it as fully as possible to minimize additional work for future users of the module.

To store a data module in the Object Repository,

1	Save the data module.

2	Right-click the module to bring up the SpeedMenu.

3	Choose Add to Repository.

4	Enter a title and description for the data module in the Add to Repository dialog box.

5	Select Data Modules from the Pages combo box, and click OK.


Using the Object Repository
Using the Object Repository02308

See also

Delphi's Object Repository provides a versatile mechanism for sharing forms, dialog boxes, and data modules across projects. It can also help with reusing similar forms in a single project, and provides project templates as starting points for new projects.

The following topics focuse on how to use the Object Repository in general as a project management tools and discusses some of the mechanics of using project templates.

About the Object Repository

Changing defaults for new projects

Customizing the Object Repository

Object Repository usage options

Using project templates

Using the Object Repository in a shared environment


Object RepositorySA
参照02309

 Object Repository dialog box


About the Object Repository
About the Object Repository02310

See also

Delphi provides the Object Repository as a means for sharing and reusing forms and projects. The repository itself is really just a text file that contains references to forms, projects, and experts. Details of the file format are in online Help. The Object Repository has replaced the Gallery in this version of Delphi.

Sharing across projects

By adding forms, dialog boxes, and data modules to the Object Repository, you make them available to other projects. For example, in a simple case, you could have all your projects use the same About box, copied from the Object Repository. A more advanced use of the Object Repository would be to have a standard empty dialog box with the company or product logo and standard button placement, from which all your projects derive standard-looking dialog boxes.

These sharing options are described in detail in Object Repository usage options.

Sharing within projects

The Object Repository can also help you to share items within a project, by allowing you to inherit from forms already in the project. When you open the New Items dialog box (by choosing File|New), you'll see a page tab with the name of your project. If you click that page tab, you'll see all the forms, dialog boxes, and data modules in your project. You can then derive a new item from the existing item, and customize it as needed.

For example, in a database application you might need several forms that display the same data, but which provide different command buttons. Instead of creating and maintaining several nearly-identical forms, you could lay out a generic form that contains all the data-display controls, then create separate forms that inherit the data-display layout, but have different command buttons.

By carefully planning your project forms, you can save tremendous amounts of time and effort by sharing forms within projects.

Sharing entire projects

You can also add an entire project to the Object Repository as a template for future projects. If you have a number of similar applications, for example, you can base them all on a single, standardized model.

Using experts

The Object Repository also contains references to experts, which are small applications that lead the user through a series of dialog boxes to create a form or project. Delphi provides a number of experts, and you can also add your own.


Object Repository usage options
Object Repository usage options02311

See also

When you use an item from the Object Repository in a project you have as many as three options on how to include that item. Keep in mind that items in the Object Repository are there to be shared, and that you want to use them in ways that help, rather than hinder, reuse.

In general, you these are the three options for using Object Repository items:

Copy the item

Inherit from the item

Use the item directly

Copying items from the Object Repository

The simplest sharing option is to copy an item from the Object Repository into your project. Copying makes an exact duplicate of the item as it stands and adds the copy to your project. Future changes to the item in the Object Repository will not be reflected in your copy, and alterations made to your copy will not affect the original Object Repository item.

Note:	Copying is the only option available for using project templates.

Inherit from Object Repository items

The most flexible and powerful sharing option is to inherit from an item in the Object Repository. Inheriting derives a new class from the item and adds the new class to your project. When you recompile your project, any changes made to the item in the Object Repository will be reflected in your derived class, unless you have changed a particular aspect. Changes made to your derived class do not affect the shared item in the Object Repository.

Note:	Inheriting is available as an option for forms, dialog boxes, and data modules, but not for project templates. It is the only option available for reusing items from within the same project.

Using Object Repository items directly

The least flexible sharing option is using an item from the Object Repository directly in your project. Using the item adds it the item itself to your project, just as if you had created it as part of that project. Design-time changes made to the item therefore appear in all projects that directly use the item, as well as affecting any projects that inherit from the item.

Note:	Using items directly is an available option for forms, dialog boxes, and data modules.

Items shared this way should generally be modified only at run time, to avoid making changes that affect other projects.

The Use option is the only option available for experts, whether form experts or project experts. Using an expert doesn't actually add shared code, but rather runs a process that generates its own code.


Using project templates
Using project templates02312

See also

Delphi provides project templates, pre-designed projects you can use as starting points for your own projects. Project templates are part of the Object Repository (located in the OBJREPOS subdirectory), which also provides form objects and experts.

When you start a project from a project template (other than the blank project template), Delphi prompts you for a project directory, a subdirectory in which to store the new project's files. If you specify a directory that doesn't currently exist, Delphi creates it for you. Delphi copies the template files to the project directory. You can then modify it, adding new forms and units, or use it unmodified, adding only your event-handler code. In any case, your changes affect only the open project. The original project template is unaffected and can be used again.

To start a new project from a project template,

1	Choose File|New to display the New Items dialog box.

2	Choose the Projects tab.

3	Select the project template you want and choose OK.

4	In the Select Directory dialog box, specify a directory for the new project's files.

A copy of the project template opens in the specified directory.

Adding projects to the Object Repository

You can add your own projects and forms to those already available in the Object Repository. This is helpful in situations where you want to enforce a standard framework for programming projects throughout an organization.

For example, suppose you develop custom billing applications. You might have a generic billing application project that contains the forms and features common to all billing systems. Your business centers around adding and modifying features in this application to meet specific client requirements. In such a case, you might want to save the project containing your Generic Billing application as a project template and perhaps specify it as the default new project on your Delphi development system. Likewise, you'll probably have a particular form within this project that you want to appear as the default main or new form.

To add a project to the Object Repository,

1	If necessary, open the project you want added to the Object Repository.

2	Choose Tools|Repository.

3	On the Project Templates page, choose Add to display the Save Project Template dialog box.

4	In the Title edit box, enter a project title.

 The title for the template will appear in the Object Repository window.

5	In the Description field, enter text that describes the template.

 This text will appear in the Object Repository window's status bar.

6	In the Page field, choose the name of the page in the New Items dialog box (probably Projects) you want the template to appear on.

7	In the Author field, enter text identifying the author of the application.

 Author information appears only when the user views the repository items with full details.

8	Choose Browse to select an icon to represent this template in the Object Repository.

9	Choose OK to save the current project as a project template.

Note:	If you later make changes to a project template, those changes automatically appear in new projects created from that template. They will not, however, affect projects already created from that template.

You can also save your own forms as form templates and add them to those already available in the Object Repository. This is helpful in situations where you want to develop standard forms for an organization's software, as in the earlier example.

To add a form to the Object Repository as a template, follow the preceding steps for adding projects as templates, using the Form Templates page of the Object Repository Options dialog box instead of the Project Templates page.


Customizing the Object Repository
Customizing the Object Repository02313

See also

The settings in the Object Repository Options dialog box affect the behavior of Delphi when you begin a new project or create a new form in an open project. This is where you specify

Default project

Default new form

Default main form

You always have to option to override these defaults by choosing File|New and selecting from the New Items dialog box.

By default, opening a new project displays a blank form. You can change this default behavior by changing Object Repository options.

Specifying the default new project

The default new project opens whenever you choose New Application from the File menu on the Delphi menu bar. If you haven't specified a default project, Delphi creates a blank project with an empty form. You can specify a project template (including a project you have created and saved as a template) as the default new project.

You can also designate a project expert to run by default when you start a new project. A project expert is a program that enables you to build a project based on your responses to a series of dialog boxes.

To specify the default new project,

1	Choose Tools|Repository to display the Object Repository dialog box.

2	Choose Projects in the Pages list.

3	Select the project object you want as the default new project from the Objects list.

4	With the object you want selected, check New Project.

5	Choose OK to register the new default setting.

Specifying the default new form

The default new form opens whenever you choose File|New Form or use the Project Manager to add a new form to an open project. If you haven't specified a default form, Delphi uses a blank form. You can specify any form template, including a form you have created and saved as a template, as the default new form. Or you can designate a form expert to run by default when a new form is added to a project.

To specify the default new form for new projects,

1	Choose Tools|Repository to display the Object Repository dialog box.

2	Choose Forms in the Pages list.

3	Select the form object you want as the default new form.

4	With the object you want selected, check New Form.

5	Choose OK to register the new default setting.

Specifying the default main form

Just as you can specify a form template or expert to be used whenever a new form is added to a project, you can also specify a form template or expert that should be used as the default main form whenever you begin a new project.

To specify the default main form for open projects,

1	Choose Tools|Repository to display the Object Repository dialog box.

2	Choose Forms in the Pages list.

3	Select the form object you want as the default main form.

4	With the object you want selected, check Main Form.

5	Choose OK to register the new default setting.


Changing defaults for new projects
Changing defaults for new projects02314

See also

The Project Options dialog box contains a check box labeled Default. This control enables you to modify some of Delphi's default project configuration properties. Checking this control writes the current settings from the Compiler, Linker, and Directories/Conditionals pages of the Project Options dialog to a file called DEFPROJ.DOF. Delphi creates this file when you check the Default box and choose OK in the Project Options dialog box. Delphi then uses the project options settings stored in this file as the default for any new projects you create.

If you create a project from a template in the Object Repository that has its own options file, those settings will override the default settings in DEFPROJ.DOF.

To restore Delphi's original default settings, delete or rename the DEFPROJ.DOF file.

Note:	Project options you set for an open project override the current Delphi defaults, whether those defaults are as originally shipped or as modified by you or another user.


Using the Object Repository in a shared environment
Using the Object Repository in a shared environment02315

In order to change the location where Delphi looks for the Object Repository File, DELPHI32.DRO, you must create a new String Value called "BaseDir" in the "Repository" key, and set it's Value data to the directory where this file is located.

Since this file cannot be read from at the same time that it is being written to, the Object Repository File, DELPHI32.DRO, must be write protected when it is being shared.

It is suggested that Forms and Projects be saved using UNC names when they will be added to a shared Repository.


おそらくプログラムが異常終了したために <ライブラリ名> がメモリ上に残っています。システムが不安定になるかもしれません。Windows を終了し再起動することをおすすめします02316

Delphi のコンポーネントライブラリを初期化しようとしているときにエラーが発生しました。メモリにはいくつかの DLL がすでに存在しています。おそらく，Delphi または BDE の以前のセッションでプログラムが誤って終了したことが原因です。

Windows を終了して再起動します。


<ID 名> は適切な識別子名ではありません02317

識別子名が無効です。最初の文字が英字または下線記号 (_) であることを確認します。2 文字目以降は英字，数字，下線記号のいずれかでなくてはならず，識別子にはスペースは入れられません。


フィールドまたはメソッド名 <名前> はすでに定義されています02318

指定した名前はすでに既存のメソッドまたはフィールドによって使われています。

定義したすべてのフィールドとメソッドの一覧は，ユニットソースファイルの一番上にあるフォーム宣言で確認します。


<名前> というコンポーネントクラス名はすでに存在します02319

コンポーネントライブラリには，指定したクラス名と同じ名前を持つコンポーネントがすでに存在しています。


コードやデバッグ情報を含まない行にブレークポイントが指定されています。実行してもよいですか？02320

コードを生成しない行またはプロジェクトの一部になっていないモジュールにブレークポイントが設定されています。それでも実行するように選択すると，無効なブレークポイントは使用不可になります (無視されます)。


ハードモードで停止できませんでした。02321

Windows がモード付き状態であり，統合デバッガでアプリケーションを停止できないことが検出されました。Windows はタスク間 SendMessage を処理しているとき，タスクキューがないとき，またはメニューシステムがアクティブになっているときに「ハードモード」になります。Delphi 内で DDE または OLE のプロセスをデバッグしているとき以外は，通常ハードモードになりません。

Windows がハードモードになっているときでも，Turbo Debugger for Windows などのスタンドアロンデバッガを使ってアプリケーションをデバッグできます。


検索パス中に名前が <ファイル名> の別のファイルが見つかりました02322

ここで指定した名前と同じ名前を持つファイルがすでに検索パス上の他のディレクトリに存在しています。


<ファイル名.PAS> または <ファイル名.DCU> のどちらも検索パス中から見つけられません02323

指定した .PAS ファイルまたは .DCU ファイルが検索パス上に見つかりません。

検索パスを変更するか，パスに沿ったディレクトリへファイルをコピーするか，インストールしたユニットのリストからファイルを削除することができます。


メソッド <メソッド名> の実現部が見つかりません02324

指示されているメソッドはフォームのクラス宣言に宣言されていますが，ユニットの実現部に見つかりません。おそらく，削除されているか，コメントアウトされたか，名前を変更されたか，または間違って変更されたものと思われます。

［編集(E)｜元に戻す(U)］を使って変更を取り消すか，手動で手続き宣言を修正します。クラスにある宣言が実現部にある宣言とまったく同じになるようにします (オブジェクトインスペクタを使ってイベントハンドラを作成して名前を変更した場合，自動的に同じになります)。

手続き宣言の構文についての詳細はイベントの処理を参照してください。


デバッグ中です。終了してよいですか？02325

アプリケーションが実行中であり，このまま続けると終了します。可能ならば，ダイアログボックスで［キャンセル］を選択して取り消し，アプリケーションを正常に終了します (たとえば，システムメニューで［閉じる(C)］を選択するなどです)。


<クラス名> クラスの宣言が無いか間違っています02326

Delphi はユニットのインターフェース部でフォームのクラス宣言を見つけられません。これはおそらくそのクラスが含まれている型宣言が削除されたか，コメントアウトされたか，または間違って変更されたためと思われます。このエラーは Delphi が次のようなクラス宣言を見つけられない場合に発生します。

type

...

TForm1 = class(TForm)

...

［編集(E)｜元に戻す(U)］を使って編集結果を取り消すか，手動で宣言を修正します。クラス宣言の構文についての詳細はオブジェクト型を参照してください。


エラーアドレスは見つかりません。02327

指定したアドレスはソースコード位置にマッピングできません。このエラーは通常，次のいずれかの理由で発生します。

入力したアドレスが無効であるか，アプリケーションのアドレスでない

指定したアドレスが含まれているモジュールがデバッグ情報付きでコンパイルされていない

指定したアドレスがプログラム文に対応していない

ランタイムライブラリとビジュアルコンポーネントライブラリはデバッグ情報なしでコンパイルされていることに注意してください。


プロセスが作成できません: <プロセス> (<エラーコード>)02328

Delphi は指定された理由のためアプリケーションを起動できませんでした。

｢実行するためのメモリが足りません」のエラーについての詳細は README.TXT を参照してください。


<フィールド名> に対応するコンポーネントがありません。宣言を削除してよいですか？02329

フォームのクラス宣言の最初のセクションでは，対応するコンポーネントがそのフォーム上にないフィールドを定義しています。このセクションはフォームデザイナ用に予約されていることに注意してください。

固有のフィールドとメソッドを宣言するには，別のパブリック，プライベート，プロテクトのいずれかのセクションにそれらを入れます。

バイナリフォームファイル (.DFM) をコードエディタにロードして，いくつかのコンポーネントを削除するか名前を変更した場合も，このエラーは発生します。


<フィールド名> は <型 1> 型ですが <型 2> 型と宣言されています。宣言を訂正してよいですか？02330

指定したフィールドの型がフォーム上の対応するコンポーネントに一致していません。コードエディタでフィールド宣言を変更するか，またはバイナリフォームファイル (.DFM) をコードエディタにロードしてコンポーネントの型を変更した場合に，このエラーは発生します。

［いいえ(N)］を選択し，アプリケーションを実行する場合，フォームをロードするとエラーが発生します。


IMPLEMENTATION 部が無いか間違っています02331

フォームとソースコードを同期させるには，Delphi がユニットの実現部を見つけられなくてはなりません。この予約語は削除されているか，コメントアウトされているか，またはスペルが間違っています。

［編集(E)｜元に戻す(U)］を使って変更を取り消すか，手動で予約語を修正します。ユニットの構文についての詳細は予約語 Unit を参照してください。


<クラス名> クラスに間違ったフィールド定義があります02332

フォームとソースコードを同期させるには，Delphi がフォームのクラス定義の最初のセクションで各フィールドの宣言を見つけて保持できなくてはなりません。コンパイラではもっと複雑な構文も使えるようにしていますが，このセクションで宣言されている各フィールドが次のようになっている場合を除き，フォームデザイナはエラーを通知します。

type

  ...

  TForm1 = class(TForm)

  Field1:FieldType;

  Field2:FieldType;

  ...

このセクションにあるいくつかの宣言が削除されたか，コメントアウトされたか，または誤って変更されたため，このエラーが発生しました。［編集(E)｜元に戻す(U)］を使って変更を取り消すか，手動で宣言を修正します。

フォームのクラス宣言の最初のセクションはフォームデザイナ用に予約されていることに注意してください。固有のフィールドとメソッドを宣言するには，別のパブリック，プライベート，プロテクトのいずれかのセクションにそれらを入れます。


<クラス名> クラスに間違ったメソッド定義があります02333

フォームとソースコードを同期させるには，Delphi がフォームのクラス定義の最初のセクションで各メソッドの宣言を見つけて保持できなくてはなりません。このセクションにあるフィールドとメソッドの宣言が次のようになっている場合を除き，フォームデザイナはエラーを通知します。

type

  ...

  TForm1 = class(TForm)

  Field1:FieldType;

  Field2:FieldType;

  ...

  <Method1 Declaration>;

  <Method2 Declaration>;

  ...

...

このセクションにあるいくつかのメソッド宣言が削除されたか，コメントアウトされたか，または誤って変更されたため，このエラーが発生しました。［編集(E)｜元に戻す(U)］を使って変更を取り消すか，手動で宣言を修正します。

フォームのクラス宣言の最初のセクションはフォームデザイナ用に予約されていることに注意してください。固有のフィールドとメソッドを宣言するには，別のパブリック，プライベート，プロテクトのいずれかのセクションにそれらを入れます。


実行するためのメモリが足りません02334

Delphi はメモリまたは Windows リソースの不足が原因でアプリケーションを実行できませんでした。他の Windows アプリケーションを終了して再試行します。

このエラーはロー (コンベンショナル) メモリの不足が原因で発生することもあります。詳細は README.TXT を参照してください。


不正なイベントプロフィール <名前> です02335

インストールしている VBX コントロールが無効です。


モジュールヘッダーが無いか間違っています02336

モジュールヘッダーが削除されたか，コメントアウトされたか，または誤って変更されました。［編集(E)｜元に戻す(U)］を使って変更を取り消すか，手動で宣言を修正します。

フォームとソースコードを同期させるには，Delphi がソースファイルの先頭で有効なモジュールヘッダーを探せなくてはなりません。有効なモジュールヘッダーは予約語 unit, program, library のいずれか，その後ろの識別子 (Unit1 や Project1 など)，最後がセミコロンで構成されます。ファイル名は識別子と一致しなくてはなりません。

たとえば，Delphi は UNIT1.PAS で Unit1 という名前のユニットを，PROJECT1.DPR で Project1 という名前のプロジェクトを，MYDLL.DPR で MyDLL という名前のライブラリ (.DLL) を探します。

モジュール識別子の長さは 8 文字以内でなくてはならないことに注意してください。


指定された行にはコードがありません02337

カーソル位置まで実行しようとしましたが，コードを生成しなかった行またはプロジェクトの一部になっていないモジュール内の行を指定しています。

他の行を指定して，再試行します。

宣言されているがプログラムによって呼び出されない手続きは (それらが，リンクされているオブジェクトの仮想メソッドになっている場合を除き) スマートリンカで削除されることに注意してください。


プロパティとメソッド <メソッド名> とは互換性がありません02338

メソッドをイベントプロパティに代入していますが，その 2 つは互換性のないパラメータリストを持っています。パラメータの型の数が同じでないパラメータリスト同士は互換性がありません。このフォームでの互換性のあるメソッドのリストはオブジェクトインスペクタの［Events］ページでドロップダウンリストを参照してください。


ソースが変更されました。再構築しますか？02339

アプリケーションの実行中にいくつかのソースモジュールまたはフォームモジュールに変更を加えました。可能ならば，アプリケーションを正常に終了し (［いいえ(N)］を選択し，実行中のアプリケーションに切り替え，システムメニューで［閉じる(C)］を選択する)，再度実行するかコンパイルし直します。

［はい(Y)］を選択すると，アプリケーションは終了した後，再コンパイルされます。


<シンボル> は見つかりませんでした。 02340

ブラウザが指定されたシンボルを見つけられません。このエラーは，無効なシンボル名を入力するか，指定されたシンボルを含むモジュールについてデバッグ情報が利用できない場合に発生します。


<フォーム名> が参照しているメソッド <メソッド名> が存在しません。メソッドへの参照を削除してもよいですか？02341

指示されたメソッドはフォームのクラス宣言にもう存在していません。このエラーは，イベントプロパティに割り当てられたフォームのクラス宣言でメソッドを手動で削除するか，名前を変更すると発生します。

［いいえ(N)］を選択し，このアプリケーションを実行する場合，フォームをロードするとエラーが発生します。


<フォーム名>.<イベント名> が参照しているメソッド <メソッド名> の引数リストが一致しません。メソッドへの参照を削除してもよいですか？02342

互換性のないパラメータリストを持つメソッドにマッピングされたイベントプロパティを含むフォームがロードされました。パラメータの数または型が同じでないパラメータリストは互換性がありません。

このイベントプロパティに対して互換性のある，このフォームで宣言されているメソッドのリストについてはオブジェクトインスペクタの［Events］ページでドロップダウンリストを使ってください。

イベントプロパティによって参照されるメソッド宣言を手動で変更すると，このエラーが発生します。

参照の削除またはエラーの修正をせずにこのプログラムを実行することは安全でないことに注意してください。


フォームまたはモジュール <Name> はすでにプロジェクトに登録されています02343

プロジェクトのモジュール名 (プログラムまたはライブラリ，フォームとユニット) はすべてユニークでなくてはなりません。


実行中の Windows ではコーチは使用できません。バージョン 3.1 以降の Windows で使用してください02344

コーチは 3.1 より前のバージョンの Windows や Windows NT では実行されません。


Features chart
Features chart02345

The following table summarizes the tools and features in Delphi 2.0. Available tools and features differ depending on Delphi 2.0 version. All features are available in the Delphi Client/Server Suite.

CS=Client/Server Suite   DB=Developer    DT=Desktop

Tool/Feature	Description	C/S	DB	DT
SQL Explorer	SQL-enabled integrated tool for browsing databases, managing BDE aliases, and creating data dictionaries.
Database Explorer	Integrated tool for browsing databases, managing BDE aliases, and creating data dictionaries.
SQL Monitor	Integrated tool for tracing and examining SQL query performance.
Visual Query Builder	Integrated tool for visual building of SQL queries.
Data Pump Expert	Standalone tool for moving metadata and data between databases
Data Dictionary	Stores extended field attributes apart from application code; shares attributes across fields, datasets, and applications.
Object Repository	Stores data modules and forms for sharing among applications.
Data modules	Non-visual component containers for centralized data-access across forms and applications.
Data-access components	Non-visual components for encapsulating database connections.
Data-aware controls	Visual components for providing a user interface to data.
Database Desktop (DBD)	Tool for browsing, creating, and changing desktop databases.
Borland Database Engine (BDE)	Borlands core database engine and connectivity software.
SQL Links	BDE SQL drivers for Sybase, Microsoft SQL-Server, Oracle, and InterBase
ODBC socket	BDE support socket for third-party ODBC drivers.
BDE API	BDE application programming interface and online help files.
ReportSmith SQL Edition	Borlands SQL-enabled, live-link database report-writing application.
ReportSmith	Borlands standard desktop database report-writing application.
Quick Reports	Delphi components for creating pre-defined reports in an application.
InterBase NT	Borland InterBase Workgroup Server for NT, two-user license.
Local InterBase Server	32-bit Local InterBase Server.


Using the object repository with data modules
Using the object repository with data modules02346

The new Object Repository stores links to data modules, forms, and projects for reuse and reference. When you create a new application, you can:

Copy an existing data module, form, or project, ensuring that your copy is completely independent of the repository.

Inherit an existing data module, form, or project, ensuring that changes to the linked module, form, or project in the repository are replicated to your application when you recompile.

Use an existing data module, form, or project, ensuring that changes you make to the module, form, or project are available for use in other applications.

The Object Repository supports team development practices. It uses a referencing mechanism to data modules, forms, and projects where they exist on a network server or shared machine. Every developer in your organization can save objects to a shared location, and then set Delphis Object Repository reference to point to that location.

The Object Repository is also customizable through the Tools|Repository menu in the IDE.


Using the data dictionary
Using the data dictionary02347

The new Data Dictionary provides a customizable storage area, independent of your applications, where you can create extended field attribute sets that describe the content and appearance of data.

For example, if you frequently develop financial applications, you may create a number of specialized field attribute sets describing different display formats for currency. When you create datasets for your application at design time, rather than using the Object Inspector to set the currency fields in each dataset by hand, you can associate those fields with extended fields attribute set in the Data Dictionary. Using the Data Dictionary also ensures a consistent data appearance within and across the applications you create.

In a client/server environment the Data Dictionary can reside on a remote server for additional sharing of information.

To learn how to create extended field attribute sets from the Fields editor at design time, and how to associate them with fields throughout the datasets in your application, see Using the Fields Editor. To learn more about creating a Data Dictionary and extended field attributes with the SQL and Database Explorers, see their respective online help files.


Using the SQL/Database Explorer
Using the SQL/Database Explorer02348

In Delphi Client/Server Suite you browse databases and populate tables with data using the new SQL Explorer from the IDE. In Delphi Developer you use the new Database Explorer. Both versions of the Explorer enable you to:

Examine existing database tables and structures. The SQL Explorer enables you to examine remote SQL databases, and to query them.

Populate tables with data.

Create extended field attribute sets in a Data Dictionary for later retrieval and reuse. Extended field attributes describe how values in a field are formatted and displayed.

Associate extended field attributes with fields in your application.

Create and manage BDE aliases, used by your application to connect to databases.

To learn more about the SQL Explorer, and the Database Explorer see their respective online help files.


Using the SQL Monitor
Using the SQL Monitor02349

In Delphi Client/Server Suite you can use the SQL Monitor to trace and time calls between your client application and a remote SQL database server. Timing information is useful for optimizing SQL statements and transactions. A series of options enables you to trace:

Prepared query statements

Executed query statements

Statement operations

Connect/Disconnect

Transactions

Blob I/O

Vendor errors

Vendor API calls

You can use the SQL Monitor to examine how optimally SQL statements in an application are performed, to see the SQL statements generated by the Borland Database Engine (BDE), to see if the database client libraries are functioning properly, and to see if the database server is executing a run-away query. The SQL Monitor also enables you to save and print session logs for further reference and comparison.


Using the Visual Query Builder
Using the Visual Query Builder02350

In Delphi Client/Server Suite you can enter SQL statements directly in SQL and Update SQL property editors, or you can invoke the Visual Query Builder to construct a query based on a visible representation of tables and fields in a database.

To use the Visual Query Builder, select a query component, right-click it to invoke the SpeedMenu, and choose Query Builder.


Data access component summary
Data access component summary02351

Delphi provides non-visual data-access components that encapsulate your clients communication with a database. Data-access components only deal with database connectivity, which enables you to focus your attention on your applications data needs without worrying about user interface. Typically these components are placed in a data module container in an application.

The following table summarizes the components that appear on the Data Access page of the Component palette, and where in the Database Application Developers Guide you can get more information about them:

Component	Purpose
TDataSource	Acts as a conduit between other data access components and data-aware visual controls. For more information about TDataSource, see Chapter 6, "Working with data sources."
TTable	Represents a dataset that retrieves all columns and records from a database table. For more information about TTable, see Chapter 8, "Working with tables."
TQuery	Represents a dataset that retrieves a subset of columns and records from one or more local or remote database tables based on an SQL query. For more information about TQuery, see Chapter 9, "Working with queries."
TStoredProc	Represents a dataset that retrieves one or more records from a database table based on a stored procedure defined for a database server. For more information about TStoredProc, see Chapter 10, "Working with stored procedures."
TDatabase	Encapsulates a client/server connection to a single database in one session. For more information about TDatabase, see Chapter 3, "Connecting to databases."
TSession	Represents a single session in a multi-threaded database application. Each session can have multiple database connections as long as each thread associated with a particular database has its own session. For more information about TSession, see Chapter 3, "Connecting to databases."
TBatchMove	Encapsulates a dataset used to move data from one table to another en masse. For more information about TBatchMove, see Chapter 16, "Working with TBatchMove."
TReport	Encapsulates a ReportSmith report in an application. For more information about TReport, see Chapter 14, "Using reports."
TUpdateSQL	Represents SQL INSERT, UPDATE, and DELETE statements that can be used to update the read-only result sets of some queries. For more information about TUpdateSQL, see Chapter 15, "Working with cached updates."


Data controls summary
Data controls summary02352

Delphi provides data-aware visual components, called visual controls, that encapsulate user interaction with your applications data sources. You design a user interface with these controls. You place these controls on the forms in your application. Each control is linked to one or more fields or records, and controls how a user sees a field or record in your application.

You link visual controls to data-access components through a data source component. A data-source component acts as a conduit between an applications low-level data-access interactions and the high-level view of data its users are provided.

The following table summarizes the data-aware visual controls that appear on the Data Controls page:

Component	Purpose
TDBGrid	Display and edit dataset records in tabular format.
TDBNavigator	Cursor through dataset records; enable Edit and Insert states; post new or modified records; cancel edit mode; refresh data display.
TDBText	Display a field as a label.
TDBEdit	Display and edit a field in an edit box.
TDBMemo	Display and edit multi-line or blob text in a scrollable, multi-line edit box.
TDBImage	Display and edit a graphics image or binary blob data.
TDBListBox	Display a list of choices for entry in a field.
TDBComboBox	Display an edit box and drop-down list of choices for edit and entry in a field.
TDBCheckBox	Display and set a Boolean field condition in a check box.
TDBRadioGroup	Display and set exclusive choices for a field in a radio button group.
TDBLookupListBox	Display a list of choices derived from a field in another dataset for entry into a field.
TDBLookupComboBox	Display an edit box and drop-down list of choices derived from a field in another dataset for edit and entry in a field.
TDBCtrlGrid	(Client/Server Suite and Developer only). Display and edit records in a tabular grid, where each cell in the grid contains a repeating set of data-aware components and one record.


Using TTable
Using TTable02353

A table component is the most fundamental and flexible dataset component class in Delphi. It gives you access to every row and column in an underlying database table, whether it is from Paradox, dBASE, an ODBC-compliant database such as Microsoft Access, or an SQL database on a remote server, such as InterBase, Sybase, or SQL Server.

You can view and edit data in every column and row of a table, you can work with a range of rows in a table, and you can filter records to retrieve a subset of all records in a table based on filter criteria you specify.

Creating a table component

To create a table component:

1	Place a table component from the Data Access page of the Component palette in a data module or on a form, and set its Name property to a unique value appropriate to your application.

2	Set the DatabaseName of the component to the name of the database to access.

3	Set the TableName property to the name of the table in the database. You can select tables from the drop-down list if the DatabaseName property is already specified.

4	Place a data source component in the data module or on the form, and set its DataSet property to the name of the table component. The data source component is used to pass a result set from the table to data-aware components for display.

Note:	These are general steps for creating a table component. There are additional properties you may need to set because of application requirements.


Searching on a table
Searching on a table02354

You can search a table for specific records using the generic search methods Locate and Lookup. These methods enable you to search on any type of columns in any table, whether or not they are indexed or keyed.

Table components also continue to support Goto and Find methods for compatibility with previous versions of Delphi. While these methods are documented here to allow you to work with legacy applications, you should always use Lookup and Locate in your new applications. Moreover, you may see performance gains in existing applications if you convert them to use the new method.

Using Locate

Locate moves the cursor to the first row matching a specified set of search criteria. In its simplest form, you pass Locate the name of a column to search, a field value to match, and an options flag specifying whether the search is case-insensitive or if it can use partial-key matching. For example, the following code moves the cursor to the first row in the CustTable where the value in the Company column is "Professional Divers, Ltd.":

var

  LocateSuccess: Boolean;

  SearchOptions: TLocateOptions;

begin

  SearchOptions := [loPartialKey];

  LocateSuccess := CustTable.Locate(Company, Professional Divers, Ltd.,
    SearchOptions);

end;

If Locate finds a match, the first record containing the match becomes the current record. Locate returns True if it finds a matching record, False if it does not. If a search fails, the current record does not change.

The real power of Locate comes into play when you want to search on multiple columns and specify multiple values to search for. Search values are variants, which enables you to specify different data types in your search criteria. To specify multiple columns in a search string, separate individual items in the string with semi-colons.

Because search values are variants, if you pass multiple values, you must either pass a variant array type as an argument (for example, the return values from the Lookup method), or you must construct the variant array on the fly using the VarArrayOf function. The following code illustrates a search on multiple columns using multiple search values and partial-key matching:

with CustTable do

  Locate(Company;Contact;Phone, VarArrayOf([Sight Diver,P]), loPartialKey);

Locate uses the fastest possible method to locate matching records. If the columns to search are indexed and the index is compatible with the search options you specify, Locate uses the index. Otherwise, Locate creates a BDE filter for the search.

Using Lookup

Lookup searches for the first row that matches specified search criteria. If it finds a matching row, it forces the recalculation of any calculated fields and lookup fields associated with the dataset, then returns one or more fields from the matching row. Lookup does not move the cursor to the matching row; it only returns values from it.

In its simplest form, you pass Lookup the name of column to search, the field value to match, and the field or fields to return. For example, the following code looks for the first row in the CustTable where the value in the Company column is "Professional Divers, Ltd.", and returns the company name, a contact person, and a phone number for the company:

var

  LookupResults: Variant;

begin

with CustTable do

  LookupResults := Lookup(Company, Professional Divers, Ltd., Company;
    Contact; Phone);

end;

Lookup returns values for the specified fields from the first matching record it finds. Values are returned as variants. If more than one return value is requested, Lookup returns a variant array. If there are no matching records, Lookup returns a Null variant. For more information about variant arrays, see the Object Pascal Language Guide.

The real power of Lookup comes into play when you want to search on multiple columns and specify multiple values to search for. To specify strings containing multiple columns or result fields, separate individual in the string items with semi-colons.

Because search values are variants, if you pass multiple values, you must either pass a variant array type as an argument (for example, the return values from the Lookup method), or you must construct the variant array on the fly using the VarArrayOf function. The following code illustrates a lookup search on multiple columns:

var

  LookupResults: Variant;

begin

with CustTable do

  LookupResults := Lookup(Company; City, VarArrayOf([Sight Diver, Christiansted]),
    Company; Addr1; Addr2; State; Zip);

end;

Lookup uses the fastest possible method to locate matching records. If the columns to search are indexed Lookup uses the index. Otherwise, Lookup creates a BDE filter for the search.


Using TQuery
Using TQuery02355

A query component encapsulates an SQL statement that returns a set of related rows and columns from one or more database tables. SQL (pronounced "ess-cue-ell") is an industry-standard relational database language that is used by most remote server-based database vendors, such as Sybase, Oracle, InterBase, and SQL Server.

Delphi query components can be used with remote database servers (Delphi Client/ Server Suite only), with Paradox and dBASE, and with OBDC-compliant databases such as Microsoft Access and FoxPro.

A query component differs from a table component in two significant ways. It can:

Access more than one table at a time (called a "join" in SQL).

Automatically access a subset of rows and columns in its underlying table(s), rather than always returning all rows and columns and requiring you to set ranges and filters to restrict row access.

The data returned by a query component depends on the selection criteria you specify in the components SQL property at design time or at run time. The selection criteria is in the form of an SQL statement, and can be

Static, where all parameters in the statement are specified at design time, or

Dynamic, where some or all of a statements parameters are set at run time.

In addition to encapsulating standard SQL features, query components also offer a powerful ability not found on most remote database servers: the ability to create "heterogeneous joins," queries against more than one server or table type.

Choosing between query and table components

Table components are full-featured, flexible, and easily used data access components that are sufficient for many database applications.

If you are a desktop client/server developer, you are familiar with the table component paradigm, and know its strengths. Query components offer different capabilities from table components, and are useful when you need to:

Query data in multiple tables.

Restrict data access to a subset of rows and columns across tables.

Write applications that require SQL syntax for compatibility with other SQL applications.

If you are a client/server developer used to working with remote databases, you are familiar with SQL, and know the strength in query-based data access. On the other hand, table components may occasionally offer you data access alternatives, such as ranges, that make them attractive.

Creating a query component

To create a query component:

1	Place a query component from the Data Access page of the Component palette in a data module, and set its Name property appropriately for your application.

2	Set the DatabaseName property of the component to the name of the database to query. DatabaseName can be a Borland Database Engine (BDE) alias, or an explicit directory path and database name. If your application uses database components, DatabaseName can be set to a local alias defined for the database component instead.

3	Specify an SQL statement in the SQL property of the component, and optionally specify any parameters for the statement in the Params property. For more information, see "Setting the SQL property at design time" on page 111.

4	Place a data source component in the data module, and set its DataSet property to the name of the query component. The data source module is used to return a result set from the query to data-aware components for display.

Note:	These are the general steps for creating a query component. Depending on the type of query you create (static or dynamic), there may be additional properties you need to set before executing a query.


Using TStoredProc
Using TStoredProc02356

A stored procedure component encapsulates a stored procedure in a database on a remote server. A stored procedure is a set of statements, stored as part of a remote servers database metadata (like tables, indexes, and domains). A stored procedure performs a frequently-repeated database-related task on the server and passes results to a client application, such as a Delphi database application. The stored procedure component enables Delphi applications to execute server stored procedures.

Often, operations that act upon large numbers of rows in database tables抑or that use aggregate or mathematical functions抑are candidates for stored procedures. By moving these repetitive and calculation-intensive tasks to the server, you improve the performance of your database application by:

Taking advantage of the servers usually greater processing power and speed.

Reducing the amount of network traffic since the processing takes place on the server where the data resides.

For example, consider an application that needs to compute a single value: the standard deviation of values over a large number of records. To perform this function in your Delphi application, all the values used in the computation must be fetched from the server, resulting in increased network traffic. Then your application must perform the computation. Because all you want in your application is the end result抑a single value representing the standard deviation抑it would be far more efficient for a stored procedure on the server to read the data stored there, perform the calculation, and pass your application the single value it requires.

See your servers database documentation for more information about its support for stored procedures.

Creating a stored procedure component

To create a stored procedure component for a stored procedure on a database server:

1	Place a stored procedure component from the Data Access page of the Component palette in a data module.

2	Set the DatabaseName property of the stored procedure component to the name of the database in which the stored procedure is defined. DatabaseName must be a BDE alias.

3	Set the StoredProcName property to the name of the stored procedure to use, or select its name from the drop-down list for the property.

4	Specify input parameters, if any, in the Params property. You can use the Parameters editor to set input parameters.

Note:	The Parameters editor also lets you see the output parameters used by the procedure to return results to your application.

Setting input parameters and viewing output and result parameters

Many stored procedures require you to pass them a series of input arguments, or parameters, to specify what and how to process. You specify input parameters in the Params property. The order in which you specify input parameters is significant, and is determined by the stored procedure definition on the server.

At design time, the easiest and safest way to enter input parameters is to invoke the StoredProc Parameters editor. The StoreProc Parameters editor lists input parameters in the correct order, and lets you assign values to them.

To invoke the StoredProc Parameters editor:

1	Select the stored procedure component.

2	Right-click the component to invoke the SpeedMenu.

3	Choose Define Parameters.

The Parameter name list box displays all input, output, and result parameters for the procedure. Information on input and output parameters is retrieved from the server. For some servers (such as Sybase), parameter information may not be accessible. In this case, the Parameter name list box is empty, and you must add the names and order of input and output parameters in order to use the procedure.

The Parameter type combo box describes whether a parameter selected in the list box is an input, output, or results parameter. If a servers stored procedure allows it, a single parameter may be both an input and output. If you add a parameter to the list, you must set the parameter type for it.

The Data type combo box lists the data type for a parameter selected in the list box. If you add a parameter to the list, you must set its data type.

The Value edit box enables you to enter a value for a selected input parameter, and the Null Value check box enables you set a Null value for the selected input parameter if its data type supports Null values.

The Add button enables you to add parameters to a stored procedure definition when your server does not pass the information to Delphi. The Delete button enables you to remove parameters you have added, and the Clear button removes all parameters from the list. Do not add, delete, or clear parameters for servers that pass parameter information to Delphi except if you are working with Oracle overloaded stored procedures.

Note:	Defining parameters at design time also prepares the stored procedure for execution. A stored procedure must be prepared before it can be executed at run time.

To signal the end of parameter definition, choose OK.

Creating parameters and parameter values at run time

To create parameters at run time, access the Params property directly. Params is an array of parameter strings. For example, the following code assigns the text of an edit box to the first string in the array:

StoredProc1.Params[0].AsString:= Edit1.Text;

You can also access parameters by name using the ParamsByName method:

StoredProc1.ParamsByName(Company).AsString := Edit1.Text;

Preparing and executing a stored procedure

To use a stored procedure, you must prepare it and execute it. You can prepare a stored procedure at:

Design time, by choosing OK in the Parameters editor.

Run time, by calling the Prepare method of the stored procedure component.

For example, the following code prepares a stored procedure for execution:

StoredProc1.Prepare;

Note:	You can prepare a stored procedure both at run time and at design time. In fact, if your application changes parameter information at run time, such as when using Oracle overloaded procedures, you should prepare the procedure again.

To execute a prepared stored procedure, call the ExecProc method for the stored procedure component. The following code illustrates code that prepares and executes a stored procedure:

StoredProc1.Params[0].AsString := Edit1.Text;

StoredProc1.Prepare;

StoredProc1.ExecProc;

When you execute a stored procedure, it returns either output parameters or a result set. There are two possible return types: singleton returns, which return a single value or set of values, and result sets, which return many values, much like a query.

Understanding output parameters and result sets

A stored procedure returns values in an array of output parameters. Return values can be either asingleton result or a result set with a cursor, if the server supports it.

To access a stored procedures output parameters at run time, you can index into the Params string list, or you can use the ParamByName method to access the values. The following statement both set the value of a edit box based on output parameters:

Edit1.Text := StoredProc1.Params[6].AsString;

Edit1.Text : = StoredProc1.ParamByName(Contact).AsString;

Note:	If a stored procedure returns a result set, you may find it more useful to access and display return values in standard data-aware controls.

Working with result sets

On some servers, such as Sybase, stored procedures can return a result set similar to a query. Applications can use data aware controls to display the output of such stored procedures.

To display the results from a stored procedure in data-aware controls:

4	Place a datasource component on the data module.

5	Set the DataSet property of the datasource to the name of the stored procedure component from which to receive data.

6	Set the DataSource properties of the data-aware controls to the name of the datasource component.

The data-aware controls can now display the results from a stored procedure when the Active property for the stored procedure component is True.


Using TBatchMove
Using TBatchMove02357

The TBatchMove component enables you to copy, append, delete, and update tables and data, and is most often used to:

Download data from a server to a local data source for analysis or other operations.

Move a desktop database into tables on a remote server as part of an upsizing operation.

A batch move component can create tables on the destination that correspond to the source tables, automatically mapping the column names and data types as appropriate. It inherits many of its fundamental properties and methods from TDataSet.

Creating a batch move component

To create a batch move component:

1	Place a TBatchMove component from the Data Access page of the Component palette in a data module or on a form, and set its Name property to a unique value appropriate to your application.

2	Set the Source property of the component to the name of the table to copy, append, or update from. You can select tables from the drop-down list of available table components.

3	Set the Destination property to the name of the table to create, append to, or update. If you are appending, updating, or deleting, Destination must be the name of an existing table. You can select tables from the drop-down list of available table components in these cases.

4	Set the Mode property to indicate the type of operation to perform. Valid operations are batAppend (the default), batUpdate, batAppendUpdate, batCopy, and batDelete. For more information about these modes, see "Specifying a batch move mode" on page 178.

5	Optionally set column mappings using the Mappings property. You need not set this property if you want batch move to match column based on their position in the source and destination tables.

6	Optionally specify the ChangedTableName, KeyViolTableName, and ProblemTableName properties. Batch move stores problem records it encounters during the batch move operation in the table specified by ProblemTableName. If you are updating a Paradox table through a batch move, key violations can be reported in the table you specify in KeyViolTableName. ChangedTableName lists all records that changed in the destination table as a result of the batch move operation. If you do not specify these properties, these error tables are not created or used.


Using Filters
Using Filters02358

An application is frequently interested in only a subset of records within a dataset. For example, you may be interested in retrieving or viewing only those records for companies based in California in your customer database, or you may want to find a record that contains a particular set of field values. Delphi supports filtering of a table or query to handle both of these requirements. Using filters you can temporarily restrict an applications view of data.

There are two ways to filter a dataset:

Restricting record visibility at the time of record retrieval using an OnFilterRecord event handler.

Finding a record in a dataset that matches search values using the Locate method for the dataset. If you use Locate, Delphi automatically generates a filter for you at run time if it needs to.

Note:	Filters are applied to every record retrieved in a dataset. When you want to filter large volumes of data, it may be more efficient to use a query to restrict record retrieval, or to set a range on an indexed table rather than using filters.

Using the OnFilterRecord event handler

To restrict visible records in a dataset to a subset of those that match a certain set of criteria, follow these steps:

1	Write an OnFilterRecord event handler for the dataset.

2	Set the Filtered property for the dataset to True.

When Filtered is True, a dataset generates an OnFilterRecord event for each record it fetches. The event handler for the OnFilterRecord tests each record, and only those that meet the Filters conditions are visible in the application.

Note:	When filtering is on, user edits to a record may mean that the record no longer meets a filters test conditions. The next time the record is retrieved from the dataset, it may therefore 党disappear.媒 If that happens, the next record that passes the filter condition becomes the current record.

Turning filters on and off at run time

At run time you can turn filtering off by setting Filtered to False, and you can turn it on by setting Filtered to True again. If you turn off filtering, all records in a dataset are available to your application, but in order for the application to see all records, you must also call the datasets Refresh method. For example:

with Table1 do

begin

  Filtered := False;

  Refresh;

end;

If you turn on filtering at run time, you must also call Refresh again to make the filter take effect. The current record may no longer pass the filter condition, and may disappear. If that happens, the next record that passes the filter condition becomes the current record.

Switching filter event handlers at run time

You can change how records are filtered at run time by assigning a different handler to the OnFilterRecord event for a dataset. To apply the new filter to the dataset after changing it, call the datasets Refresh method:

Table1.OnFilterRecord := Query2FilterRecord;

Refresh;


Writing an OnFilterRecord event handler
Writing an OnFilterRecord event handler02359

A filter for a dataset is an event handler that responds to OnFilterRecord events generated by the dataset for each record it retrieves. At the heart of every filter handler is a test that determines if a record should be included in those that are visible to the application.

To indicate whether a record passes the filter condition, your filter handler must set an Accept parameter to True to include a record, or False to exclude it. For example, the following filter displays only those records with the State field set to 党CA媒:

procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

begin

  Accept := DataSet[State] = CA;

end;


Using TDatabase
Using TDatabase02360

A database component encapsulates the connection to a single database within an application. If you do not need to control database connections (such as specifying a transaction isolation level), do not create database components. Temporary database components are created automatically at run time when an application attempts to open a table for which there is not already a database component. But if you want to control the persistence of database connections, logins to a database server, property values of database aliases, or transactions, then you must create a database component for each desired connection.

Creating a database component

The Data Access page of the Component palette contains a database component you can place in a data module or form. The main advantages to creating a database component at design time are that you can set its initial properties and write OnLogin events for it. OnLogin offers you a chance to customize the handling of security on a database server when a database component first attaches the server.


Logging into a server
Logging into a server02361

You can control server login with a database components LoginPrompt property and the its OnLogin method. Controlling login is essential to server security, and may be required by your remote server.

LoginPrompt specifies whether your users are prompted to log in to a database server the first time your application attempts to connect to a database requiring a login. If True (the default), your application displays a standard Login dialog box. The Login dialog box prompts for a user name and password. A mask symbol (an asterisk by default) displays for each character entered in the Password edit box.

If you set LoginPrompt to False, the standard Login dialog box is not displayed at run time when an application attempts to connect to a database server that requires a login. Instead, your application must provide the user name and password, either through the Params property or the OnLogin event for the database component. At design time, the standard Login dialog box appears when you first connect to a remote database server if LoginPrompt is False and the Params property does not contain user name and password entries.

Note:	Storing hard-coded user name and password entries in the Params property or in code for an OnLogin event can compromise server security.

The Params property is a string list containing the database connection parameters for the BDE alias associated with a database component. Some typical connection parameters include path statement, server name, schema caching size, language driver, and SQL query mode.

At design time you can create or edit connection parameters in three ways:

Use the Database Explorer or BDE Configuration utility to create or modify BDE aliases, including parameters. For more information about these utilities, see their online Help files.

Double-click the Params property in the Object Inspector to invoke the String List editor. To learn more about the String List editor, see the Delphi User s Guide.

Double-click a database component in a data module or form to invoke the Database Properties editor.

When you first invoke the Database Properties editor, the parameters for the BDE alias are not visible. To see the current settings, click Defaults. The current parameters are displayed in the Parameter overrides memo box. You can edit existing entries or add new ones. To clear existing parameters, click Clear. Changes you make take effect only when you click OK.


Handling transactions
Handling transactions02362

There are two ways to manage transactions in a Delphi database application using implicit and explicit control. It especially focuses on:

Using the methods and properties of the TDatabase component that enable explicit transaction control.

Using passthrough SQL with TQuery components to control transactions.

Delphi also supports local transactions, transactions made against local Paradox and dBASE tables.

Understanding transactions

When you create a database application using Delphi, Delphi provides transaction control for all database access, even against local Paradox and dBASE tables. A transaction is a group of actions that must all be carried out successfully on one or more tables in a database before they are committed (made permanent). If one of the actions in the group fails, then all the actions fail.

Transactions ensure database consistency even if there are hardware failures. It also maintains the integrity of data while permitting concurrent multiuser access.

For example, an application might update the ORDERS table to indicate that an order for a certain item was taken, and then update the INVENTORY table to reflect the reduction in inventory available. If there were a hardware failure after the first update but before the second, the database would be in an inconsistent state because the inventory would not reflect the order entered. Under transaction control, both statements would be committed at the same time. If one statement failed, then both would be undone (rolled back).

Using implicit transactions

By default, Delphi provides implicit transaction control for your applications through the Borland Database Engine (BDE). When an application is under implicit transaction control, Delphi uses a separate transaction for each record in a dataset that is written to the underlying database. It commits each individual write operation, such as Post and AppendRecord.

Using implicit transaction control is easy. It guarantees both a minimum of record update conflicts and a consistent view of the database. On the other hand, because each row of data written to a database takes place in its own transaction, implicit transaction control can lead to excessive network traffic and slower application performance.

If you explicitly control transactions, you can choose the most effective times to start, commit, and roll back your transactions. When you develop client applications in a multi-user environment, particularly when your applications run against a remote SQL server, such as Sybase, Oracle, Microsoft SQL, or InterBase,ｮ or remote ODBC-compliant databases such as Access and FoxPro, you should control transactions explicitly.

Note:	If you used cached updating, you may be able to minimize the number of transactions you need to use in your applications. For more information about cached updates, see Chapter 15, "Working with cached updates," in the Database Application Developers Guide.

Working with explicit transaction control

There are two mutually exclusive ways to control transactions explicitly in a Delphi database application:

Use the methods and properties of the TDatabase component.

Use passthrough SQL in a TQuery component. Passthrough SQL is only meaningful in the Delphi Client/Server Suite, where you use SQL Links to pass SQL statements directly to remote SQL or ODBC servers.

The main advantage to using the methods and properties of a database component to control transactions is that it provides a clean, portable application that is not dependent on a particular database or server.

The main advantage to passthrough SQL is that you can use the advanced transaction management capabilities of a particular database server, such as schema caching. To understand the advantages of your servers transaction management model, see your database server documentation.

Using TDatabase methods and properties

The following table lists the methods and properties of TDatabase that are specific to transaction management, and describes how they are used:

Method or property	Purpose
Commit	Commits data changes and ends the transaction.
Rollback	Undoes data changes and ends the transaction.
StartTransaction	Starts a transaction.
TransIsolation	Specifies the transaction isolation level for a transaction.
StartTransaction, Commit, and Rollback are methods your application can call at run time to start transactions, control the duration of transactions, and save or discard changes made to the database.

TransIsolation is a database component property that enables you to control how a transaction interacts with other simultaneous transactions when they work with the same tables. In particular, it affects how much a transaction "sees" of other transactions changes to a table.

Starting a transaction

When you start a transaction, all subsequent statements that read from and write to the database occur in the context of that transaction. Each statement is considered part of a group. Write changes made by any statement in the group must be successfully committed to the database, or every change made by every write statement made in the group are undone.

Grouping statements is useful when statements are dependent upon one another. Consider a bank transaction at an Automated Teller Machine (ATM). When a customer decides to transfer money from a savings account to a checking account, two changes must take place in the banks database records:

The savings account must be debited.

The checking account must be credited.

If, for any reason, one of these actions cannot be completed, then neither action should take place. Because these actions are so closely related, they should take place within a single transaction.

To start a transaction in a Delphi application, call a database components StartTransaction method:

DatabaseInterBase.StartTransaction;

All subsequent database actions take place in the context of the newly started transaction until the transaction is explicitly terminated by a subsequent call to Commit or Rollback.

How long should you keep a transaction going? Ideally, only as long as necessary. The longer a transaction is active, the more simultaneous users that access the database, and the more concurrent, simultaneous transactions that start and end during the lifetime of your transaction, the greater the likelihood that your transaction will conflict with another when you attempt to commit your changes.

Committing a transaction

To make database changes permanent, a transaction must be committed using a database components Commit method. Executing a commit statement saves database changes and ends the transaction. For example, the following statement ends the transaction started in the previous code example:

DatabaseInterBase.Commit;

Note:	Commit should always be attempted in a try...except statement. If a transaction cannot commit successfully, you can attempt to handle the error, and perhaps retry the operation.

Rolling back a transaction

To discard database changes, a transaction must roll back its changes using Rollback. Rollback undoes a transactions changes and ends the transaction. For example, the following statement rolls back a transaction:

DatabaseInterBase.Rollback;

Rollback usually occurs in:

Exception handling code when you cannot recover from a database error.

Button or menu event code, such as when a user clicks a Cancel button.

Using the TransIsolation property

TransIsolation specifies the transaction isolation level for a database components transactions. Transaction isolation level determines how a transaction interacts with other simultaneous transactions when they work with the same tables. In particular, it affects how much a transaction "sees" of other transactions changes to a table. Before changing or setting TransIsolation, you should be familiar with transactions and transactions management in Delphi.

The default setting for TransIsolation is tiReadCommitted. The following table summarizes possible values for TransIsolation and describes what they mean:

Isolation level	Meaning
tiDirtyRead	Permit reading of uncommitted changes made to the database by other simultaneous transactions. Uncommitted changes are not permanent, and might be rolled back (undone) at any time. At this level your transaction is least isolated from the changes made by other transactions.
tiReadCommitted	Permit reading only of committed (permanent) changes made to the database by other simultaneous transactions. This is the default isolation level.
tiRepeatableRead	Permit a single, one time reading of the database. Your transaction cannot see any subsequent changes to data by other simultaneous transactions. This isolation level guarantees that once your transaction reads a record, its view of that record will not change. At this level your transaction is most isolated from changes made by other transactions.
Database servers may support these isolation levels differently or not at all. If the requested isolation level is not supported by the server, then Delphi will use the next highest isolation level. The actual isolation level used by each type of server is listed in the following table. For a detailed description of how each isolation level is implemented, see your server documentation.

TransIsolation setting	Oracle	Sybase and Microsoft SQL	InterBase
Dirty read	Read committed	Read committed	Read committed
Read committed (Default)	Read committed	Read committed	Read committed
Repeatable read	Repeatable read  (READ ONLY)	Not supported	Repeatable Read
If an application is using ODBC to interface with a server, the ODBC driver must also support the isolation level. For more information, see your ODBC driver documentation.

Using passthrough SQL

To be able to use passthrough SQL to control a transaction you must:

Use the Delphi Client/Server Suite.

Install the proper SQL Links drivers. If you chose the Standard installation when installing Delphi, all SQL Links drivers are already properly installed.

Configure your network protocol correctly. See your network administrator for more information.

Have access to a database on a remote server.

Use the BDE Configuration utility to set SQLPASSTHROUGHMODE to NOT SHARED.

With passthrough SQL, you use a TQuery, TStoredProc, or TUpdateSQL component to send an SQL transaction control statement directly to a remote database server. The BDE does not process the SQL statement. Using passthrough SQL enables you to take direct advantage of the transaction controls offered by your server, especially when those controls are non-standard.

Setting SQLPASSTHROUGHMODE

SQLPASSTHROUGHMODE specifies whether the BDE and passthrough SQL statements can share the same database connections. In most cases, SQLPASSTHROUGHMODE is set to SHARED AUTOCOMMIT. If however, you want to pass SQL transaction control statements to your server, you must use the BDE Configuration utility to set the BDE SQLPASSTHROUGHMODE to NOT SHARED. For more information about SQLPASSTHROUGH modes, see the online help for the BDE Configuration utility.

Note:	When SQLPASSTHROUGHMODE is NOT SHARED, you must use separate database components for TQuery components that pass SQL transaction statements to the server and those other dataset components that do not.

Using local transactions

The BDE supports local transactions against Paradox and dBASE tables. From a coding perspective, there is no difference to you between a local transaction and a transaction against a remote database server.

When a transaction is started against a local table, updates performed against the table are logged. Each log record contains the old record buffer for a record. When a transaction is active, records that are updated are locked until the transaction is committed or rolled back. On rollback, old record buffers are applied against updated records to restore them to their pre-update states.

Understanding the limitations of local transactions

The following limitations apply to local transactions

Automatic crash recovery is not provided.

Data definition statements are not supported.

For Paradox, local transactions can only be performed on tables with valid indexes. Data cannot be rolled back on Paradox tables that do not have indexes.

Transactions cannot be run against temporary tables.

Transactions cannot be run against the BDE ASCII driver.

Closing a cursor on a table during a transaction rolls back the transaction unless:

Several tables are open.

The cursor is closed on a table to which no changes were made.


Using TSession
Using TSession02363

Each time an application runs, Delphi creates a default TSession component for it. A session component provides global control over all database connections in an application. If you do not create multi-threaded database applications, you need only concern yourself with the default session in your application.

A multi-threaded database application is a single application that attempts to run two or more simultaneous operations, such as SQL queries, against the same database. If you create a multi-threaded database application, then each additional thread after the first requires its own session component.

Creating a session component

If you are creating a multi-threaded database application, then you need to create additional session components. To create a session component, place a session component from the Data Access page onto a data module used in your project.

The following table lists the properties of TSession, what they are used for, their default values if any, and whether they are available at design time:

Property	Purpose	Default	Design time  access
Active	StartEasterTrue, starts the BDE session. False, disconnects datasets and stops the session.EndEaster	False	Yes
Databases	Specifies an array of all active databases in the session.		No
DatabaseCount	Provides an integer value specifying the number of currently active databases in the session.		No
KeepConnections	True, maintain database connection(s) even if there are no open datasets. False, close database connection(s) when there are no open datasets.	True	Yes
Name	Names a session component StartEaster(for example, Session1EndEaster).		Yes
NetFileDir	Specifies the directory path of the Paradox network control file, which enables sharing of Paradox tables on network drives.		Yes
PrivateDir	Specifies the path in which to store temporary StartEasterEndEasterfiles (for example, files used to process local SQL statements).		Yes
SessionName	Specifies the name of the session that must be used by database components to link themselves to a particular session.		Yes


Using TSessionList
Using TSessionList02364

Multi-threaded applications need to manage sessions through a TSessionList component. You never need to create your own session list component, but you may certainly need to manipulate the properties and use the methods of the default session list.

A default session list component, called Sessions, is created for you whenever you start a database application.

Sessions is a component of type TSessionList. You use the properties and methods of Sessions to keep track of multiple sessions in a multi-threaded database application. The following table summarizes the properties and methods of the TSessionList component:

Property or  Method	Purpose
Count	Returns the number of sessions, both active and inactive, in the sessions list.
FindSession	Searches the session list for a session with a specified name, and returns a pointer to the session component, or nil if there is no session with the specified name. If passed a blank session name, FindSession returns a pointer to the default session, Session.
GetSessionNames	Returns a string list containing the names of all currently instantiated session components. This procedure always returns at least one string, Default for the default session (note that the default sessions name is actually a blank string).
List	Returns the session component for a specified session name. If there is no session with the specified name, an exception is raised.
OpenSession	Creates and activates a new session or reactivates an existing session for a specified session name.
Sessions	Accesses the session list by ordinal value. Sessions is the default property, so you can call it like so Sessions[0], rather than Sessions.Sessions[0].


Specfiying a data source
Specfiying a data source02365

A TDataSource component is a nonvisual database component that acts as a conduit between a dataset and data-aware components on a form that enable the display, navigation, and editing of the data underlying the dataset. All datasets must be associated with a data source component in order for their data to be displayed and manipulated in data-aware controls on a form. Similarly, each data-aware control needs to be associated with a data source component in order to have data to display and manipulate. You also use data source components to link datasets in master-detail relationships.

You place a data source component in a data module or form just as you place other nonvisual database components. You should place at least one data source component for each dataset component in a data module or form.

Using TDataSource properties

TDataSource has only a few published properties. The following sections discuss these key properties and how to set them at design time and run time.

Setting the DataSet property

The DataSet property specifies the name of the dataset from which the a data source component gets its data. At design time you can select a dataset from the drop down list in the Object Inspector. At run time you can switch the dataset for a data source component as needed. For example, the following code swaps the dataset for the CustSource data source component between Customers and Orders:

with CustSource do

begin

  if DataSet = Customers then

    DataSet := Orders

  else

    DataSet := Customers;

end;

You can also set the DataSet property to a dataset on another form to synchronize the data controls on the two forms. For example:

procedure TForm2.FormCreate (Sender : TObject);

begin

  DataSource1.Dataset := Form1.Table1;

end;

Setting the Name property

Name enables you to specify a meaningful name for a data source component that distinguishes it from all other data sources in your application. The name you supply for a data source component is displayed below the components icon in a data module.

Generally, you should provide a name for a data source component that indicates the dataset with which it is associated. For example, suppose you have a dataset called Customers, and that you link a data source component to it by setting the data source components DataSet property to "Customers." To make the connection between the dataset and data source obvious in a data module, you should set the Name property for the data source component to something like "CustomersSource".

Setting the Enabled property

The Enabled property determines if a data source component is connected to its dataset. When Enabled is True, the data source is connected to a dataset.

You can temporarily disconnect a single data source from its dataset by setting Enabled to False. When Enabled is False, all data controls attached to the data source component go blank and become inactive until Enabled is set to True. It is recommended, however, to control access to a dataset through a dataset components DisableControls and EnableControls methods because they affect all attached data sources.

Setting the AutoEdit property

The AutoEdit property of TDataSource specifies whether datasets connected to the data source automatically enter Edit state when the user starts typing in data-aware controls linked to the dataset. If AutoEdit is True (the default), Delphi automatically puts the dataset in Edit state when a user types in a linked data-aware control. Otherwise, a dataset enters Edit state only when the application explicitly calls its Edit method.

Using TDataSource methods

TDataSource has three event handlers associated with it:

OnDataChange

OnStateChange

OnUpdateData

Using the OnDataChange event

OnDataChange is called whenever the cursor moves to a new record. When an application calls Next, Previous, Insert, or any method that leads to a change in the cursor position, then an OnDataChange is triggered.

This event is useful if an application is keeping components synchronized manually.

Using the OnUpdateData event

OnUpdateData is called whenever the data in the current record is about to be updated. For instance, an OnUpdateData event occurs after Post is called, but before the data is actually posted to the database.

This event is useful if an application uses a standard (non-data aware) control and needs to keep it synchronized with a dataset.

Using the OnStateChange event

OnStateChange is called whenever the state for a data sources dataset changes. A datasets State property records its current state. OnStateChange is useful for performing actions as a TDataSources state changes.

For example, during the course of a normal database session, a datasets state changes frequently. To track these changes, you could write an OnStateChange event handler that displays the current dataset state in a label on a form. The following code illustrates one way you might code such a routine. At run time, this code displays the current setting of the datasets State property and updates it every time it changes:

procedure TForm1.DataSource1.StateChange(Sender:TObject);

var

  S:String;

begin

  case CustTable.State of

    dsInactive: S := Inactive;

    dsBrowse: S := Browse;

    dsEdit: S := Edit;

    dsInsert: S := Insert;

    dsSetKey: S := SetKey;

  end;

  CustTableStateLabel.Caption := S;

end;

Similarly, OnStateChange can be used to enable or disable buttons or menu items based on the current state:

procedure Form1.DataSource1.StateChange(Sender: TObject);

begin

  CustTableEditBtn.Enabled := (CustTable.State = dsBrowse);

  CustTableCancelBtn.Enabled := CustTable.State in [dsInsert, dsEdit, dsSetKey];

  ...

end;


Displaying data in a data control
Displaying data in a data control02366

To display data in a data control:

1	Place a data control from the Data Access page of the Component palette onto a form.

2	Set the DataSource property of the control to the name of a data source component from which to get data. A data source component acts as a conduit between the control and a dataset containing data.

3	Set the DataField property of the control to the name of a field to display, or select a field name from the drop-down list for the property.

If the Enabled property of the data controls data source is True (the default), and the Active property of the dataset attached to the data source is also True, data is now displayed in the data control.

Note:	Two data controls, TDBGrid and TDBNavigator, access all available field components within a dataset, and therefore do not have DataField properties. For these controls, omit Step 3.

Enabling mouse, keyboard, and timer events

The Enabled property of a data control determines whether it responds to mouse, keyboard, or timer events, and passes information to its data source. The default setting for this property is True.

To prevent mouse, keyboard, or timer events from accessing a data control set its Enabled property to False. When Enabled is False, a data source does not receive information from the data control. The data control continues to display data, but the text displayed in the control is dimmed.

Enabling editing in controls on user entry

A dataset must be in dsEdit state to permit editing to its data. The AutoEdit property of the data source to which a control is attached determines if the underlying dataset enters dsEdit mode when data in a control is modified in response to keyboard or mouse events. When AutoEdit is True (the default), dsEdit mode is set as soon as editing commences. If AutoEdit is False, you must provide a TDBNavigator control with an Edit button (or some other method) to permit users to set dsEdit state at run time.

Updating fields

The ReadOnly property of a data control determines if a user can edit the data displayed by the control. If False (the default), users can edit data. To prevent users from editing data in a control, set ReadOnly to True.

Properties of the data source and dataset underlying a control also determine if the user can successfully edit data with a control and can post changes to the dataset.

The Enabled property of a data source determines if controls attached to a data source are able to display fields values from the dataset, and therefore also determine if a user can edit and post values. If Enabled is True (the default), controls can display field values.

The ReadOnly property of the dataset determines if user edits can be posted to the dataset. If False (the default), changes are posted to the dataset. If False, the dataset is read-only.

Note:	Table components have an additional, read-only run-time property CanModify that determines if a dataset can be modified. CanModify is set to True if a database permits write access. If CanModify is False, a dataset is read-only. Query components that perform inserts and updates are, by definition, able to write to an underlying database, provided that your application and user have sufficient write privileges to the database itself.

The following table summarizes the factors that determine if a user can edit data in a control and post changes to the database:

Data control ReadOnly property	Data source Enabled property	Dataset ReadOnly property	Dataset CanModify property (tables only)	Database write access	Can write to database?
False	True	False	True	Read/Write	Yes
False	True	False	False	Read-only	No
False	False	抑	抑	抑	No
True	抑	抑	抑	抑	No
In all data controls except TDBGrid, when you modify a field, the modification is copied to the underlying field component in a dataset when you Tab from the control. If you press Esc before you Tab from a field, Delphi abandons the modifications, and the value of the field reverts to the value it held before any modifications were made.

In TDBGrid, modifications are copied only when you move to a different record; you can press Esc in any record of a field before moving to another record to cancel all changes to the record.

When a record is posted, Delphi checks all data-aware components associated with the dataset for a change in status. If there is a problem updating any fields that contain modified data, Delphi raises an exception, and no modifications are made to the record.

Disabling and enabling data display

When your application iterates through a dataset or performs a search, you should temporarily prevent refreshing of the values displayed in data-aware controls each time the current record changes. Preventing refreshing of values speeds the iteration or search and prevents annoying screen-flicker.

DisableControls is a dataset method that disables display for all data-aware controls linked to a dataset. As soon as the iteration or search is over, your application should immediately call the datasets EnableControls method to re-enable display for the controls.

Usually you disable controls before entering an iterative process. The iterative process itself should take place inside a try...finally statement so that you can re-enable controls even if an exception occurs during processing. The finally clause should call EnableControls. The following code illustrates how you might use DisableControls and EnableControls in this manner:

CustTable.DisableControls;

try

  CustTable.First; { Go to first record, which sets EOF False }

  while not CustTable.EOF do { Cycle until EOF is True }

  begin

    { Process each record here }

    �

    CustTable.Next; { EOF False on success; EOF True when Next fails on last record }

  end;

finally

  CustTable.EnableControls;

end;

Refreshing data

The Refresh method for a dataset flushes local buffers and refetches data for an open dataset. You can use this method to update the display in data-aware controls if you think that the underlying data has changed because other applications have simultaneous access to the data used in your application.

Important

Refreshing can sometimes lead to unexpected results. For example, if a user is viewing a record deleted by another application, then the record disappears the moment your application calls Refresh. Data can also appear to change if another user changes a record after you originally fetched the data and before you call Refresh.


Opening and closing datasets
Opening and closing datasets02367

To read or write data in a table or through a query, an application must first open a dataset. There are two ways to open a dataset:

Set the Active property of the dataset to True, either at design time in the Object Inspector, or in code at run time:

CustTable.Active := True;

Call the Open method for the dataset at run time:

CustQuery.Open;

There are also two ways to close a dataset:

Set the Active property of the dataset to False, either at design time in the Object Inspector, or in code at run time:

CustQuery.Active := False;

Call the Close method for the dataset at run time:

CustTable.Close;

You need to close a dataset when you want to change any of its properties that affect the query, such as the DataSource property. At run time you may also want to close a dataset for other reasons specific to your application.


Setting dataset states
Setting dataset states02368

The state抑or mode抑of a dataset determines what can be done to its data. For example, when a dataset is closed, its state is dsInactive, meaning that nothing can be done to its data. A dataset is always in one state or another. At run time you can examine a datasets read-only State property to determine its current state. The following table summarizes possible values for the State property and what they mean:

Value	State	Meaning
dsInactive	Inactive	Dataset closed. Its data is unavailable.
DsBrowse	Browse	Dataset open. Its data can be viewed, but not changed. This is the default state of an open dataset.
DsEdit	Edit	Dataset open. The current row can be modified.
DsInsert	Insert	Dataset open. A new row can be inserted.
DsSetKey	SetKey	TTable only. Dataset open. Enables searching for rows based on indexed fields, or indicates that a SetRange operation is under way. A restricted set of data can be viewed, and no data can be changed.
DsCalcFields	CalcFields	Dataset open. Indicates that an OnCalcFields event is under way. Prevents changes to fields that are not calculated.
DsUpdateNew	UpdateNew	Internal use only.
DsUpdateOld	UpdateOld	Internal use only.
DsFilter	Filter	Dataset open. Indicates that a filter operation in under way. A restricted set of data can be viewed, and no data can be changed.
When an application opens a dataset, Delphi automatically puts the dataset into dsBrowse mode. The state of a dataset changes as an application processes data. An open dataset changes from one state to another based on either the

Code in your application, or

Delphis built-in behavior.

To put a dataset into dsBrowse, dsEdit, dsInsert, or dsSetKey states, call the method corresponding to the name of the state. For example, the following code puts CustTable into dsInsert state, accepts user input for a new record, and writes the new record to the database:

CustTable.Insert; { Your application explicitly sets dataset state to Insert }

AddressPromptDialog.ShowModal;

if AddressPromptDialog.ModalResult := mrOK then

  CustTable.Post; { Delphi sets dataset state to Browse on successful completion }

else

  CustTable.Cancel; {Delphi sets dataset state to Browse on cancel }

This example also illustrates that Delphi automatically sets the state of a dataset to dsBrowse when

The Post method successfully writes a record to the database. (If Post fails, the dataset state remains unchanged.)

The Cancel method is called.

Some states cannot be set directly. For example, to put a dataset into dsInactive state, set its Active property to False, or call the Close method for the dataset. The following statements are equivalent:

CustTable.Active := False;

CustTable.Close;

The remaining states (dsCalcFields, dsUpdateNew, dsUpdateOld, and dsFilter) cannot be set by your application. Instead, Delphi sets them as necessary For example, dsCalcFields is set when a datasets OnCalcFields event is called. When the OnCalcFields event finishes, the dataset is restored to its previous state.

Note:	Whenever a datasets state changes, the OnStateChange event is called for any data source components associated with the dataset.

dsInactive

A dataset is inactive when it is closed. You cannot access records in a closed dataset. At design time a dataset is closed until you set its Active property to True. At run time, a dataset is closed until it is opened either by calling the Open method, or by setting the Active property to True. When you open an inactive dataset, Delphi automatically puts it into dsBrowse state.

To make a dataset inactive, call its Close method. You can write BeforeClose and AfterClose event handlers that respond to the Close method for a dataset. For example, if a dataset is in dsEdit or dsInsert modes when an application calls Close, you should prompt the user to post pending changes or cancel them before closing the dataset. The following code illustrates such a handler:

procedure CustTable.VerifyBeforeClose(DataSet: TDataSet)

begin

  if (CustTable.State = dsEdit) or (CustTable.State = dsInsert) then

  begin

    if MessageDlg(Post changes before closing?, mtConfirmation, mbYesNo, 0) = mrYes then

      CustTable.Post;

    else

      CustTable.Cancel;

  end;

end;

To associate a procedure with the BeforeClose event for a dataset at design time:

1	Select the table in the data module (or form).

2	Click the Events page in the Object Inspector.

3	Enter the name of the procedure for the BeforeClose event (or choose it from the drop-down list).

dsBrowse

When an application opens a dataset, Delphi automatically puts the dataset into dsBrowse state. Browsing enables you to view records in a dataset, but you cannot edit records or insert new records. You mainly use dsBrowse to scroll from record to record in a dataset.

From dsBrowse all other dataset states can be set. For example, calling the Insert or Append methods for a dataset changes its state from dsBrowse to dsInsert (note that other factors and dataset properties such as CanModify, may prevent this change). Calling SetKey to search for records puts a dataset in dsSetKey mode.

Two methods associated with all datasets can return a dataset to dsBrowse state. Cancel ends the current edit, insert, or search task, and always returns a dataset to dsBrowse state. Post attempts to write changes to the database, and if successful, also returns a dataset to dsBrowse state. If Post fails, the current state remains unchanged.

dsEdit

A dataset must be in dsEdit mode before an application can modify records. In your code you can use the Edit method to put a dataset into dsEdit mode if the read-only CanModify property for the dataset is True. CanModify is True if the database underlying a dataset permits read and write privileges.

On forms in your application, some data-aware controls can automatically put a dataset into dsEdit state if:

The controls ReadOnly property is False (the default),

The AutoEdit property of the data source for the control is True, and

CanModify is True for the dataset.

Important

For TTable components only, if the ReadOnly property is True, CanModify is False, preventing editing of records.

Note:	Even if a dataset is in dsEdit state, editing records may not succeed for SQL-based databases if your application user does not have proper SQL access privileges.

You can return a dataset from dsEdit state to dsBrowse state in code by calling the Cancel, Post, or Delete methods. Cancel discards edits to the current field or record. Post attempts to write a modified record to the dataset, and if it succeeds, returns the dataset to dsBrowse. If Post cannot write changes, the dataset remains in dsEdit state. Delete attempts to remove the current record from the dataset, and if it succeeds, returns the dataset to dsBrowse state. If Delete fails, the dataset remains in dsEdit state.

Data-aware controls for which editing is enabled automatically call Post when a user executes any action that changes the current record (such as moving to a different record in a grid) or that causes the control to lose focus (such as moving to a different control on the form).

dsInsert

A dataset must be in dsInsert mode before an application can add new records. In your code you can use the Insert or Append methods to put a dataset into dsInsert mode if the read-only CanModify property for the dataset is True. CanModify is True if the database underlying a dataset permits read and write privileges.

On forms in your application, the data-aware grid and navigator controls can put a dataset into dsInsert state if

The controls ReadOnly property is False (the default),

The AutoEdit property of the data source for the control is True, and

CanModify is True for the dataset.

Important

For TTable components only, if the ReadOnly property is True, CanModify is False, preventing editing of records.

Note

Even if a dataset is in dsInsert state, inserting records may not succeed for SQL-based databases if your application user does not have proper SQL access privileges.

You can return a dataset from dsInsert state to dsBrowse state in code by calling the Cancel, Post, or Delete methods. Delete and Cancel discard the new record. Post attempts to write the new record to the dataset, and if it succeeds, returns the dataset to dsBrowse. If Post cannot write the record, the dataset remains in dsInsert state.

Data-aware controls for which inserting is enabled automatically call Post when a user executes any action that changes the current record (such as moving to a different record in a grid).

dsSetKey

dsSetKey mode applies only to TTable components. To search for records in a TTable dataset, the dataset must be in dsSetKey mode. You put a dataset into dsSetKey mode with the SetKey method at run time. The GotoKey method, which carries out the actual search, returns the dataset to dsBrowse state upon completion of the search.

Note:	Other search methods, including FindKey, and FindNearest automatically put a dataset into dsSetKey state during a search, and return the dataset to dsBrowse state upon completion of the search.

dsCalcFields

Delphi puts a dataset into dsCalcFields mode whenever an application calls the datasets OnCalcFields event handler. This state prevents modifications or additions to the records in a dataset except for the calculated fields the handler modifies itself. The reason all other modifications are prevented is because OnCalcFields uses the values in other fields to derive values for calculated fields. Changes to those other fields might otherwise invalidate the values assigned to calculated fields.

When the OnCalcFields handler finishes, the dataset is returned to dsBrowse state.

dsFilter

Delphi puts a dataset into dsFilter mode whenever an application calls the datasets OnFilterRecord event handler. This state prevents modifications or additions to the records in a dataset during the filtering process so that the filter request is not invalidated.

When the OnFilterRecord handler finishes, the dataset is returned to dsBrowse state.


Using the Fields editor
Using the Fields editor02369

The Fields editor enables you to create, delete, arrange, and define persistent field components associated with a dataset. Persistent field components guarantee your application receives a consistent view of the data underlying a dataset.

To start the Fields editor:

Double-click the dataset component, or

Select the component, right-click to invoke the SpeedMenu, then choose Fields editor.

The Fields editor contains a title bar, navigator buttons, and a list box.

The title bar of the Fields editor displays both the name of the data module or form containing the dataset, and the name of the dataset itself. So, if you open the Customers dataset in the CustomerData data module, the title bar displays CustomerData.Customers, or as much of the name as fits.

Below the title bar is a set of navigation buttons that enable you to scroll one-by-one through the records in an active dataset at design time, and to jump to the first or last record. The navigation buttons are dimmed if the dataset is not active or if the dataset is empty.

The list box displays the names of persistent field components for the dataset. The first time you invoke the Fields editor for a new dataset, the list is empty because the field components for the dataset are dynamic, not persistent. If you invoke the Fields editor for a dataset that already has persistent field components, you see the field component names in the list box.

Creating persistent field components

To create a persistent field component for a dataset:

Right-click the Fields editor list box.

Choose Add fields from the SpeedMenu. The Add Fields dialog box appears.

The Available fields list box displays all fields in the dataset which do not have persistent field components. Select the fields for which to create persistent field components, and click OK.

The Add Fields dialog box closes, and the fields you selected appear in the Fields editor list box. Fields in the Fields editor list box are persistent. If the dataset is active, note, too, that the Next and Last navigation buttons above the list box are enabled.

From now on, each time you open the dataset, Delphi no longer creates dynamic field components for every column in the underlying database. Instead it only creates persistent components for the fields you specified.

Each time you open the dataset, Delphi verifies that each non-calculated persistent field exists or can be created from data in the database. If it cannot, Delphi raises an exception warning you that the field is not valid, and does not open the dataset.

Deleting persistent field components

Deleting a persistent field component is useful for accessing a subset of available columns in a table, and for defining your own persistent fields to replace a column in a table.To remove one or more persistent field components for a dataset:

1	Select the field(s) to remove in the Fields editor list box.

2	Press Del.

Note:	You can also delete selected fields by invoking the SpeedMenu and choosing Delete.

Fields you remove are no longer available to the dataset and cannot be displayed by data-aware controls. You can always re-create persistent field components that you delete by accident, but any changes previously made to its properties or events is lost.

Note:	If you remove all persistent field components for a dataset, then Delphi again generates dynamic field components for every column in the database table underlying the dataset.

Arranging the order of persistent field components

The order in which persistent field components are listed in the Fields editor list box is the default order in which the fields appear in a data-aware grid component. You can change field order by dragging and dropping fields in the list box.

To change the order of a single field:

3	Select the field.

4	Drag it to a new location.

Alternatively, you can select the field, and use Ctrl-Up and Ctrl-Dn to move the field to a new location in the list.

To change the order for a block of fields:

5	Select the fields.

6	Drag them to their new location.

If you select a non-contiguous set of fields and drag them to a new location, they are inserted as a contiguous block. Within the block the order of fields to one another does not change.

Defining new persistent field components

Besides selecting which dynamic field components to make into persistent field components for a dataset, you can also create new persistent fields as additions to or replacements of the other persistent fields in a dataset. There are three types of persistent fields you can create:

Data fields, which usually replace existing fields (for example to change the data type of a field), are based on columns in the table or query underlying a dataset.

Calculated fields, which displays values calculated at run time by a datasets OnCalcFields event handler.

Lookup fields, which retrieve values from a specified dataset at run time based on search criteria you specify.

These types of persistent fields are only for display purposes. The data they contain at run time are not retained either because they already exist elsewhere in your database, or because they are temporary. The physical structure of the table and data underlying the dataset is not changed in any way.

To create a new persistent field component:

7	Right-click the Fields editor list box.

8	Choose New field from the SpeedMenu.

The New Field dialog box appears.

Dialog box options

New Field dialog box

The New Field dialog box contains three group boxes: Field properties, Field type, and Lookup definition.

Field type radio group

The Field type radio group box enables you to specify the type of new field component to create. The default type the first time you open the New Field dialog box in a session is Data. If you choose Lookup, the Dataset and Source Fields edit boxes in the Lookup definition group box are enabled. The Lookup definition group box is only used to create lookup fields.

Field properties group box

The Field properties group box enables you to enter general field component information. Enter the components field name in the Name edit box. The name you enter here corresponds to the field components FieldName property. Delphi uses this name to build a component name in the Component edit box. The name that appears in the Component edit box corresponds to the field components Name property and is only provided for informational purposes (Name contains the identifier by which you refer to the field component in your source code). Delphi discards anything you enter directly in the Component edit box.

Type combo box

The Type combo box in the Field properties group enables you to specify the field components data type. You must supply a data type for any new field component you create. For example, to display floating point currency values in a field, select Currency from the drop-down list. The Size edit box enables you to specify the maximum number of characters that can be displayed or entered in a string-based field or the size of Bytes and VarBytes fields. For all other data types, Size is meaningless.


Defining a data field
Defining a data field02370

A data field replaces an existing field in a dataset. For example, for programmatic reasons you might want to replace a TSmallIntField with a TIntegerField. Because you cannot change a fields data type directly, you must define a new field to replace it.

Important

Even though you define a new field to replace an existing field, the field you define must derive its data values from an existing column in a table underlying a dataset.

To create a data field in theNew Field dialog box:

1	Enter the name of an existing persistent field in the Name edit box. Do not enter a new field name.

2	Choose a new data type for the field from the Type combo box. The data type you choose should be different from the data type of the field you are replacing.

3	Enter the size of the field in the Size edit box, if appropriate. Size is only relevant for fields of type TStringField, TBytesField, and TVarBytesField.

4	Select Data in the Field type radio group if it is not already selected.

5	Choose OK. The New Field dialog box closes, the newly defined data field replaces the existing field you specified in Step 1, and the component declaration in the data module or forms type declaration is updated.

To edit the properties or events associated with the field component, select the component name in the Field editor list box, then edit its properties or events with the Object Inspector.


Defining and programming a calculated field
Defining and programming a calculated field02371

A calculated field displays values calculated at run time by a datasets OnCalcFields event handler. For example, you might create a string field that displays concatenated values from other fields.

To create a calculated field in the New Field dialog box:

1	Enter a name for the calculated field in the Name edit box. Do not enter the name of an existing field.

2	Choose a data type for the field from the Type combo box.

3	Enter the size of the field in the Size edit box, if appropriate. Size is only relevant for fields of type TStringField, TBytesField, and TVarBytesField.

4	Select Calculated in the Field type radio group.

5	Choose OK. The newly defined calculated field is automatically added to end of the list of persistent fields in the Field editor list box, and the component declaration is automatically added to the forms type declaration in the source code.

6	Place code that calculates values for the field in the OnCalcFields event handler for the dataset. For more information about writing code to calculate field values, see "Programming a calculated field," below.

To edit the properties or events associated with the field component, select the component name in the Field editor list box, then edit its properties or events with the Object Inspector.

Programming a calculated field

After you define a calculated field, you must write code to calculate its value. Otherwise it always has a null value. Code for a calculated field is placed in the OnCalcFields event for its dataset.

To program a value for a calculated field:

7	Select the dataset component from the Object Inspector drop-down list.

8	Choose the Object Inspector Events page.

9	Double-click the OnCalcFields property to bring up or create a CalcFields procedure for the dataset component.

10	Write the code that sets the values and other properties of the calculated field as desired.

For example, suppose you have created a CityStateZip calculated field for the Customers table on the CustomerData data module. CityStateZip should display a companys city, state, and zip code on a single line in a data-aware control.

To add code to the CalcFields procedure for the Customers table, select the Customers table from the Object Inspector drop-down list, switch to the Events page, and double-click the OnCalcFields property.

The TCustomerData.CustomersCalcFields procedure appears in the units source code window. Add the following code to the procedure to calculate the field:

CustomersCityStateZip.Value := CustomersCity.Value + ,  + CustomersState.Value
  +   + CustomersZip.Value;


Defining a lookup field
Defining a lookup field02372

A lookup field displays values it searches for at run time based on search criteria. In its simplest form, a lookup field is passed the name of a field to search, a field value to search for, and the field in the lookup dataset whose value it should display.

For example, consider a mail-order application that enables an operator use a lookup field to determine automatically the city and state that correspond to a zip code a customer provides. In that case, the column to search on might be called ZipTable.Zip, the value to search for is the customers zip code as entered in Order.CustZip, and the values to return would be those in the ZipTable.City and ZipTable.State columns for the record where ZipTable.Zip matches the current value in the Order.CustZip field.

To create a lookup field in the New Field dialog box:

1	Enter a name for the lookup field in the Name edit box. Do not enter the name of an existing field.

2	Choose a data type for the field from the Type combo box.

3	Enter the size of the field in the Size edit box, if appropriate. Size is only relevant for fields of type TStringField, TBytesField, and TVarBytesField.

4	Select Lookup in the Field type radio group. Selecting Lookup enables the Dataset and Key Fields combo boxes.

5	Choose from the Dataset combo box drop-down list the dataset in which to look up field values. The lookup dataset must be different from the dataset for the field component itself, or a circular reference exception is raised at run time. Specifying a lookup dataset enables the Lookup Keys and Result Field combo boxes.

6	Choose from the Key Fields drop-down list a field in the current dataset for which to match values. To match more than one field, enter field names directly instead of choosing from the drop-down list. Separate multiple field names with semicolons.

7	Choose from the Lookup Keys drop-down list a field in the lookup dataset to match against the Source Fields field you specified in step 6. To specify more than one field, enter field names directly instead. Separate multiple field names with semicolons.

8	Choose from the Result Field drop-down list a field in the lookup dataset to return as the value of the lookup field you are creating. To return values from more than one field in the lookup dataset, enter field names directly instead. Separate multiple field names with semicolons.


Creating Data Dictionary attribute sets for field components
Creating Data Dictionary attribute sets for field components02373

When several fields in the datasets used by your application share common formatting properties (such as Alignment, DisplayWidth, DisplayFormat, EditFormat, MaxValue, MinValue, and so on), it is more convenient to set the properties for a single field, then store those properties as an attribute set in the Data Dictionary. Attribute sets stored in the data dictionary can be easily applied to other fields.

To create an attribute set based on a field component in a dataset:

1	Double-click the dataset to invoke the Fields editor.

2	Select the field for which to set properties.

3	Set the desired properties for the field in the Object Inspector.

4	Right-click the Fields editor list box to invoke the SpeedMenu.

5	Choose Save Attributes to save the current fields property settings as an attribute set in the Data Dictionary.

The name for the attribute set defaults to the name of the current field. You can specify a different name for the attribute set by choosing Save attributes as instead of Save attributes from the SpeedMenu.

Note:	You can also create attribute sets directly from the Database Explorer. When you create an attribute set from the data dictionary, the set is not applied to any fields, but you can specify two additional attributes in the set: a field type (such as TFloatField, TStringField, and so on) and a data-aware control (such as TDBEdit, TDBCheckBox, and so on) that is automatically placed on a form when a field based on the attribute set is dragged onto the form.


Associating Data Dictionary attribute sets with field components
Associating Data Dictionary attribute sets with field components02374

When several fields in the datasets used by your application share common formatting properties (such as Alignment, DisplayWidth, DisplayFormat, EditFormat, MaxValue, MinValue, and so on), and you have saved those property settings as attribute sets in the Data Dictionary, you can easily apply the attribute sets to fields without having to recreate the settings manually for each field. In addition, if you later change the attribute settings in the Data Dictionary, those changes are automatically applied to every field associated with the set the next time field components are added to the dataset.

To apply an attribute set to a field component:

1	Double-click the dataset to invoke the Fields editor.

2	Select the field for which to apply an attribute set.

3	Right-click the Fields editor list box to invoke the SpeedMenu.

4	Choose Associate attributes.

5	Select or enter the attribute set to apply from the Attribute set name dialog box. If there is an attribute set in the Data Dictionary that has the same name as the current field, that set name appears in the edit box.


Unassociating a Data Dictionary attribute set from a field component
Unassociating a Data Dictionary attribute set from a field component02375

If you change your mind about associating an attribute set with a field component, you can easily remove the attribute set from the field component:

1	Double-click the dataset to invoke the Fields editor.

2	Select the field for which to remove an attribute set.

3	Right-click the Fields editor list box to invoke the SpeedMenu.

4	Choose Unassociate attributes.

After you remove an attribute set from a field component, you can either use the Object Inspector to set its properties, or you can associate a different attribute set with the component.


Accessing field values with the default dataset method
Accessing field values with the default dataset method02376

The preferred method for accessing a fields value is to use variants with the default dataset method, FieldValues. For example, the following statement puts the value of an edit box into the CustNo field in the Customers table:

Customers[CustNo] := Edit2.Text;

Because FieldValues is the default method for a dataset, you do not need to specify its method name explicitly. The following statement, however, is identical to the previous one:

Customers.FieldValues[CustNo] := Edit2.Text;

For more information about variants, see the Object Pascal Language Guide.


Accessing field values with the Fields property
Accessing field values with the Fields property02377

You can access the value of a field with the Fields property of the dataset component to which the field belongs. Accessing field values with a datasets Fields property is useful when you need to iterate over a number of columns, or if your application works with tables that are not available to you at design time.

To use the Fields property you must know the order of and data types of fields in the dataset. You use an ordinal number to specify the field to access. The first field in a dataset is numbered 0. Field values must be converted as appropriate using the field components conversion routine. For more information about field component conversion functions, see "Using field component conversion functions."

For example, the following statement assigns the current value of the seventh column (Country) in the Customers table to an edit control:

Edit1.Text := CustTable.Fields[6].AsString;

Conversely, you can assign a value to a field by setting the Fields property of the dataset to the desired field. For example:

begin

  Customers.Edit;

  Customers.Fields[6].AsString := Edit1.Text;

  Customers.Post;

end;


Accessing field values with the FieldByName method
Accessing field values with the FieldByName method02378

You can also access the value of a field with a datasets FieldByName method. This method is useful when you know the name of the field you want to access, but do not have access to the underlying table at design time.

To use FieldByName, you must know the dataset and name of the field you want to access. You pass the fields name as an argument to the method. To access or change the fields value, convert the result with the appropriate field component conversion function, such as AsString or AsInteger. For example, the following statement assigns the value of the CustNo field in the Customers dataset to an edit control:

Edit2.Text := Customers.FieldByName(CustNo).AsString;

Conversely, you can assign a value to a field:

begin

  Customers.Edit;

  Customers.FieldByName(CustNo).AsString := Edit2.Text;

  Customers.Post;

end;


Using conversion functions
Using conversion functions02379

Conversion functions attempt to convert one data type to another. For example, the AsString function converts numeric and Boolean values to string representations. The following table lists field component conversion functions, and which functions are recommended for field components by field-component type:

Function	T S t r i n g F i e l d	T I n t e g e r F i e l d	T S m a l l i n t F i e l d	T W o r d F i e l d	T F l o a t F i e l d	T C u r r e n c y F i e l d	T B C D F i e l d	T D a t e T i m e F i e l d	T D a t e F i e l d	T T i m e F i e l d	T B o o l e a n Fi e l d	T B y t e s F i e l d	T V a r B y t e s F i e l d	T B l o b F i e l d	T M e m o F i e l d	T G r a p h i c F i e l d
AsVariant
AsString
AsInteger
AsFloat
AsCurrency
AsDateTime
AsBoolean
Note that the AsVariant method is recommended to translate among all data types. When in doubt, use AsVariant.

In some cases, conversions are not always possible. For example, AsDateTime can be used to convert a string to a date, time, or datetime format only if the string value is in a recognizable datetime format. A failed conversion attempt raises an exception.

In some other cases, conversion is possible, but the results of the conversion are not always intuitive. For example, what does it mean to convert a TDateTimeField value into a float format? AsFloat converts the date portion of the field to the number of days since 12/31/1899, and it converts the time portion of the field to a fraction of 24 hours. The following table lists permissible conversions that produce special results:

Conversion	Result
String to Boolean	Converts "True," "False," "Yes," and "No" to Boolean. Other values raise exceptions.
Float to Integer	Rounds float value to nearest integer value.
DateTime to Float	Converts date to number of days since 12/31/1899, time to a fraction of 24 hours.
Boolean to String	Converts any Boolean value to "True" or "False."
In other cases, conversions are not possible at all. In these cases, attempting a conversion also raises an exception.

You use a conversion function as you would use any method belonging to a component: append the function name to the end of the component name wherever it occurs in an assignment statement. Conversion always occurs before an actual assignment is made. For example, the following statement converts the value of CustomersCustNo to a string and assigns the string to the text of an edit control:

Edit1.Text := CustomersCustNo.AsString;

Conversely, the next statement assigns the text of an edit control to the CustomersCustNo field as an integer:

MyTableMyField.AsInteger := StrToInt(Edit1.Text);

An exception occurs if an unsupported conversion is performed at run time.


Deploying an application
Deploying an application02380

To make an application available to end users, you deploy it. Deployment involves preparing a package for your end users that enables them to install and run your application and access data with it. Delphi ships with InstallShield Express, a product that helps you deploy your applications.

A deployment package usually includes your application executable file, and support files, such as DLLs, and data files. Particularly when you are upsizing an application to use a remote server, there are additional files and DLLs you need to deploy. For example, to access remote database servers, your application must use the appropriate Borland SQL Links drivers and support files.

Before you deploy any application you build with Delphi, see the online text file DEPLOY.TXT for the latest information about deployment and licensing.