4c

Delphi 6 Personal を使った簡単なテキストエディタの作成

Delphi 6 Personal を使って簡単なテキストエディタを作成していきます。

目次

作成開始

  1. フォルダを作成しておきます。 C\Program Files\Borland\Delphi6\Projects に TextEditor というフォルダを作成することにします。
  2. Delphi 6 を起動。
  3. 保存します。 「ファイル」メニューの「すべて保存」を選択して、「Unit1 に名前を付けて保存」ダイアログボックスが表示されたら、
    • はじめに作成した TextEditor フォルダに移動。
    • Unit1 を既定のファイル名 Unit1.pas で保存。
    • 次に「Project1 に名前を付けて保存」ダイアログボックスが表示されるので、Project1 を TextEditor.dpr というファイル名で保存することにします。 TextEditor.exe が実行ファイル名になります。

テキスト編集領域の作成

  1. コンポーネントパレットの Win32 タブにある RichEdit コンポーネントをダブルクリック。 フォーム中央に配置されます。
  2. オブジェクトインスペクタで、配置した RichEdit1 コンポーネントのプロパティを設定します。
    • Align プロパティの右側の欄のドロップダウンリストから alClient を選択。 RichEdit1 コンポーネントがフォーム全体に広がります。
    • PlainText プロパティの右側の欄をダブルクリック。 False から True に変更されます。

ステータスバーの作成

  1. コンポーネントパレットの Win32 タブにある StatusBar コンポーネントをダブルクリック。 ステータスバーがフォームの一番下に配置されます。
  2. オブジェクトインスペクタで、AutoHint プロパティを True に設定。
  3. 配置したステータスバーをダブルクリック。 「StatusBar1.Panels の編集」ダイアログボックスが表示されます。
  4. 「新規追加」ボタンをクリック。 パネル 0 - TStatusPanel が追加されます。
  5. 「StatusBar1.Panels の編集」ダイアログボックスを閉じる。

アクションの一元化

  1. コンポーネントパレットの Standard タブにある ActionList コンポーネントを選択し、フォームをクリック。 クリックした位置に配置されます。
  2. 配置した ActionList1 コンポーネントをダブルクリック。 「Form1.ActionList1 の編集」ダイアログボックス(アクションリストエディタ)が表示されます。
  3. 「新規アクション」ボタンをクリック。 Action1 が追加されます。
  4. オブジェクトインスペクタで、追加したアクションのプロパティを次のように設定。
    • Caption プロパティを「新規作成(&N)」に変更。
    • Category プロパティに「ファイル」と入力。
    • Hint プロパティに「新規作成|新しい文書を作成する」と入力。
    • ImageIndex プロパティを「0」に変更。
    • Name プロパティを「FileNew」に変更。
    • ShortCut プロパティで「Ctrl+N」を選択。
  5. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「開く(&O)」に変更。
    • Category プロパティで「ファイル」を選択。
    • Hint プロパティに「開く|既存のファイルを開く」と入力。
    • ImageIndex プロパティを「1」に変更。
    • Name プロパティを「FileOpen」に変更。
    • ShortCut プロパティで「Ctrl+O」を選択。
  6. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「上書き保存(&S)」に変更。
    • Category プロパティで「ファイル」を選択。
    • Hint プロパティに「上書き保存|現在のファイルを保存する」と入力。
    • ImageIndex プロパティを「2」に変更。
    • Name プロパティを「FileSave」に変更。
    • ShortCut プロパティで「Ctrl+S」を選択。
  7. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「名前を付けて保存(&A)」に変更。
    • Category プロパティで「ファイル」を選択。
    • Hint プロパティに「現在のファイルを新しい名前で保存する」と入力。
    • Name プロパティを「FileSaveAs」に変更。
  8. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「印刷(&P)」に変更。
    • Category プロパティで「ファイル」を選択。
    • Hint プロパティに「印刷|現在のファイルを印刷する」と入力。
    • ImageIndex プロパティを「3」に変更。
    • Name プロパティを「FilePrint」に変更。
    • ShortCut プロパティで「Ctrl+P」を選択。
  9. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「終了(&X)」に変更。
    • Category プロパティで「ファイル」を選択。
    • Hint プロパティに「アプリケーションを終了する」と入力。
    • Name プロパティを「FileExit」に変更。
  10. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「元に戻す(&U)」に変更。
    • Category プロパティに「編集」と入力。
    • Hint プロパティに「元に戻す|直前の変更を元に戻す」と入力。
    • ImageIndex プロパティを「4」に変更。
    • Name プロパティを「EditUndo」に変更。
    • ShortCut プロパティで「Ctrl+Z」を選択。
  11. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「切り取り(&T)」に変更。
    • Category プロパティで「編集」を選択。
    • Hint プロパティに「切り取り|選択部分を切り取り、クリップボードに送る」と入力。
    • ImageIndex プロパティを「5」に変更。
    • Name プロパティを「EditCut」に変更。
    • ShortCut プロパティで「Ctrl+X」を選択。
  12. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「コピー(&C)」に変更。
    • Category プロパティで「編集」を選択。
    • Hint プロパティに「コピー|選択部分をコピーし、クリップボードに送る」と入力。
    • ImageIndex プロパティを「6」に変更。
    • Name プロパティを「EditCopy」に変更。
    • ShortCut プロパティで「Ctrl+C」を選択。
  13. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「貼り付け(&P)」に変更。
    • Category プロパティで「編集」を選択。
    • Hint プロパティに「貼り付け|クリップボードの内容を貼り付ける」と入力。
    • ImageIndex プロパティを「7」に変更。
    • Name プロパティを「EditPaste」に変更。
    • ShortCut プロパティで「Ctrl+V」を選択。
  14. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「削除(&L)」に変更。
    • Category プロパティで「編集」を選択。
    • Hint プロパティに「削除|選択部分を削除する」と入力。
    • ImageIndex プロパティを「8」に変更。
    • Name プロパティを「EditDelete」に変更。
    • ShortCut プロパティで「Ctrl+Del」を選択。
  15. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「すべて選択(&A)」に変更。
    • Category プロパティで「編集」を選択。
    • Hint プロパティに「テキスト全体を選択する」と入力。
    • Name プロパティを「EditSelectAll」に変更。
    • ShortCut プロパティで「Ctrl+A」を選択。
  16. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「検索(&F)」に変更。
    • Category プロパティで「編集」を選択。
    • Hint プロパティに「検索|指定された文字列を検索する」と入力。
    • ImageIndex プロパティを「9」に変更。
    • Name プロパティを「EditFind」に変更。
    • ShortCut プロパティで「Ctrl+F」を選択。
  17. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「置換(&R)」に変更。
    • Category プロパティで「編集」を選択。
    • Hint プロパティに「指定した文字列を他の文字列で置き換える」と入力。
    • Name プロパティを「EditReplace」に変更。
    • ShortCut プロパティで「Ctrl+R」を選択。
  18. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「日付と時刻(&D)」に変更。
    • Category プロパティで「編集」を選択。
    • Hint プロパティに「現在の日付と時刻を挿入する」と入力。
    • Name プロパティを「EditDateTime」に変更。
    • ShortCut プロパティで「F5」を選択。
  19. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「ツールバー(&T)」に変更。
    • Category プロパティに「表示」と入力。
    • Hint プロパティに「ツールバーの表示/非表示を切り替える」と入力。
    • Name プロパティを「ViewToolBar」に変更。
  20. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「ステータスバー(&S)」に変更。
    • Category プロパティで「表示」を選択。
    • Hint プロパティに「ステータスバーの表示/非表示を切り替える」と入力。
    • Name プロパティを「ViewStatusBar」に変更。
  21. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「右端で折り返す(&W)」に変更。
    • Category プロパティで「表示」を選択。
    • Hint プロパティに「右端で折り返す」と入力。
    • Name プロパティを「ViewWordWrap」に変更。
  22. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「フォント(&F)」に変更。
    • Category プロパティで「表示」を選択。
    • Hint プロパティに「フォント|フォントを選択する」と入力。
    • ImageIndex プロパティを「10」に変更。
    • Name プロパティを「ViewFont」に変更。
  23. アクションを追加し、プロパティを次のように設定。
    • Caption プロパティを「バージョン情報(&A)」に変更。
    • Category プロパティに「ヘルプ」と入力。
    • Hint プロパティに「バージョン情報を表示する」と入力。
    • Name プロパティを「HelpAbout」に変更。
  24. アクションリストエディタを閉じる。

メニューとツールバーに画像を表示

  1. コンポーネントパレットの Win32 タブにある ImageList コンポーネントをフォームに配置。
  2. 配置した ImageList1 コンポーネントをダブルクリック。 「イメージリスト Form1.ImageList1」ダイアログボックス(イメージリストエディタ)が表示されます。
  3. 「追加」ボタンをクリック。 「イメージの追加」ダイアログボックスが表示されます。
  4. C\Program Files\Common Files\Borland Shared\Images\Buttons(既定の場所にインストールした場合)に移動。
  5. FILENEW.BMP を開く。 「ビットマップ FILENEW.BMP の大きさがイメージリストの大きさを超えています。 2 個に分割しますか ?」という確認のメッセージボックスが表示されます。
  6. 「はい」ボタンをクリック。 アクティブ表示(イメージ下の番号が 0)と淡色表示(イメージ下の番号が 1)の 2 種類のイメージが追加されます。
  7. 淡色表示のイメージをクリックして選択し、「削除」ボタンをクリック。 淡色表示のイメージが削除されます。(Imageindex 0)
    • FILEOPEN.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 1)
    • FILESAVE.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 2)
    • PRINT.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 3)
    • UNDO.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 4)
    • CUT.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 5)
    • COPY.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 6)
    • PASTE.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 7)
    • DELETE.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 8)
    • FIND.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 9)
    • FONT.BMP を追加し, 淡色表示のイメージを削除。(Imageindex 10)
  8. 「OK」ボタンをクリック。 イメージリストエディタが閉じます。
  9. フォーム上の ActionList1 コンポーネントを選択し、オブジェクトインスペクタで Images プロパティに ImageList1 を設定。

メニューの作成

  1. コンポーネントパレットの Standard タブにある MainMenu コンポーネントをフォームに配置。
  2. オブジェクトインスペクタで、Images プロパティに ImageList1 を設定。
  3. 配置した MainMenu1 コンポーネントをダブルクリック。 Form1.MainMenu1 メニューデザイナが表示されます。
  4. Caption プロパティに「ファイル(&F)」と入力して「Enter」キーを押す。 「ファイル(F)」が表示され、空白のメニュー項目にフォーカスが移動します。
  5. オブジェクトインスペクタの Action プロパティで、ドロップダウンリストから FileNew を選択。
    • 「新規作成(N) Ctrl+N」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで FileOpen を選択。
    • 「開く(O) Ctrl+O」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで FileSave を選択。
    • 「上書き保存(S) Ctrl+S」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで FileSaveAs を選択。
    • 「名前を付けて保存(A)」の下の空白のメニュー項目にフォーカスを移動し、Caption プロパティに「-」(ハイフン)と入力して「Enter」キーを押す。 分割線が作成されます。
    • 分割線の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで FilePrint を選択。
    • 「印刷(P)」の下の空白のメニュー項目にフォーカスを移動し、Caption プロパティに「-」(ハイフン)と入力して「Enter」キーを押す。
    • 分割線の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで FileExit を選択。
  6. 編集メニューを作成します。
    • 「ファイル(F)」の右の空白の項目を選択し、Caption プロパティに「編集(&E)」と入力。
    • メニューデザイナにフォーカスを移動して「編集(E)」の下の空白のメニュー項目を選択し、Action プロパティで EditUndo を選択。
    • 「元に戻す(U) Ctrl+Z」の下の空白のメニュー項目にフォーカスを移動し、Caption プロパティに「-」(ハイフン)と入力して「Enter」キーを押す。
    • 分割線の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditCut を選択。
    • 「切り取り(T) Ctrl+X」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditCopy を選択。
    • 「コピー(C) Ctrl+C」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditPaste を選択。
    • 「貼り付け(P) Ctrl+V」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditDelete を選択。
    • 「削除(L) Ctrl+Del」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditSelectAll を選択。
    • 「すべて選択(A) Ctrl+A」の下の空白のメニュー項目にフォーカスを移動し、Caption プロパティに「-」(ハイフン)と入力して「Enter」キーを押す。
    • 分割線の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditFind を選択。
    • 「検索(F) Ctrl+F」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditReplace を選択。
    • 「置換(R)) Ctrl+R」の下の空白のメニュー項目にフォーカスを移動し、Caption プロパティに「-」(ハイフン)と入力して「Enter」キーを押す。
    • 分割線の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditDateTime を選択。
  7. 表示メニューを作成します。
    • 「編集(E)」の右の空白の項目を選択し、Caption プロパティに「表示(&V)」と入力。
    • メニューデザイナにフォーカスを移動して「表示(V)」の下の空白のメニュー項目を選択し、Action プロパティで ViewToolBar を選択。
    • 「ツールバー(T)」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで ViewStatusBar を選択。
    • 「ステータスバー(S)」の下の空白のメニュー項目にフォーカスを移動し、Caption プロパティに「-」(ハイフン)と入力して「Enter」キーを押す。
    • 分割線の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで ViewWordWrap を選択。
    • 「右端で折り返す(W)」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで ViewFont を選択。
  8. ヘルプメニューを作成します。
    • 「表示(V)」の右の空白の項目を選択し、Caption プロパティに「ヘルプ(&H)」と入力。
    • メニューデザイナにフォーカスを移動して「ヘルプ(H)」の下の空白のメニュー項目を選択し、Action プロパティで HelpAbout を選択。
  9. メニューデザイナを閉じる。

ツールバーの作成

  1. コンポーネントパレットの Win32 タブにある ToolBar コンポーネントをダブルクリック。 メニューバーの下に配置されます。
  2. オブジェクトインスペクタで、ツールバーのプロパティを次のように設定。
    • Images プロパティに ImageList1 を設定。
    • ShowHint プロパティを True に設定。
  3. 配置したツールバー上で右クリックし、「ボタン新規作成」を選択。 ツールバー上にボタンが作成されます。
  4. オブジェクトインスペクタの Action プロパティで、ドロップダウンリストから FileNew を選択。
    • ボタンを作成し、Action プロパティで FileOpen を選択。
    • ボタンを作成し、Action プロパティで FileSave を選択。
    • 配置したツールバー上で右クリックし、「セパレータ新規作成」を選択。 ツールバー上にセパレータが作成されます。
    • ボタンを作成し、Action プロパティで FilePrint を選択。
    • セパレータを作成。
    • ボタンを作成し、Action プロパティで EditUndo を選択。
    • セパレータを作成。
    • ボタンを作成し、Action プロパティで EditCut を選択。
    • ボタンを作成し、Action プロパティで EditCopy を選択。
    • ボタンを作成し、Action プロパティで EditPaste を選択。
    • ボタンを作成し、Action プロパティで EditDelete を選択。
    • セパレータを作成。
    • ボタンを作成し、Action プロパティで EditFind を選択。
    • セパレータを作成。
    • ボタンを作成し、Action プロパティで ViewFont を選択。

ポップアップメニューの作成

  1. コンポーネントパレットの Standard タブにある PopupMenu コンポーネントをフォームに配置。
  2. オブジェクトインスペクタで、Images プロパティに ImageList1 を設定。
  3. 配置した PopupMenu1 コンポーネントをダブルクリック。 Form1.PopupMenu1 メニューデザイナが表示されます。
  4. オブジェクトインスペクタの Action プロパティで、ドロップダウンリトから EditUndo を選択。
    • 「元に戻す(U) Ctrl+Z」の下の空白のメニュー項目にフォーカスを移動し、Caption プロパティに「-」(ハイフン)と入力して「Enter」キーを押す。 分割線が作成されます。
    • 分割線の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditCut を選択。
    • 「切り取り(T) Ctrl+X」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditCopy を選択。
    • 「コピー(C) Ctrl+C」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditPaste を選択。
    • 「貼り付け(P) Ctrl+V」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditDelete を選択。
    • 「削除(L) Ctrl+Del」の下の空白のメニュー項目にフォーカスを移動し、Action プロパティで EditSelectAll を選択。
    • メニューデザイナを閉じる。
  5. フォーム上の RichEdit1 コンポーネントを選択し、オブジェクトインスペクタで PopupMenu プロパティに PopupMenu1 を設定。

新しい文書の作成

  1. 「F12」キーを押す。タイトルバーに Unit1.pas と表示されたコードエディタがアクティブになります。
  2. private { Private 宣言 } の下に空白行を挿入し、次のように入力。
    
    FileName: String;
    
    
  3. 「F12」キーを押してフォームに戻る。
  4. フォーム上のアクションリストをダブルクリックして、アクションリストエディタを開く。
  5. アクションリストエディタで、FileNew アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  6. beginend の間に、次のように入力。
    
      if RichEdit1.Modified then
      begin
        beep;
        case MessageDlg(FileName + ' は変更されています。' +
                        #13#10 + '保存しますか?',
                        mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
          mrYes: FileSave.Execute;
          mrNo: ;
          mrCancel: Abort;
        end;
      end;
      RichEdit1.Clear;
      FileName := '無題';
      Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]);
    
    

ファイルからのテキストの読み込み

  1. フォームを表示。
  2. コンポーネントパレットの Dialogs タブにある OpenDialog コンポーネントをフォームに配置。
  3. オブジェクトインスペクタで、OpenDialog1 コンポーネントのプロパティを次のように設定。
    • DefaultExt プロパティに「txt」と入力。
    • Filter プロパティの右側の欄をダブルクリック。 「フィルタの設定」ダイアログボックス(フィルタエディタ)が表示されます。 1 行目「フィルタ名」に「テキストファイル(*.txt)」と入力。 「フィルタ」に「*.txt」と入力。 2 行目「フィルタ名」に「すべてのファイル(*.*)」と入力。 「フィルタ」に「*.*」と入力。 「OK」ボタンをクリック。 フィルタエディタが閉じます。
    • Options プロパティの ofFileMustExist を True に設定。
  4. アクションリストエディタで、FileOpen アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  5. beginend の間に、次のように入力。
    
      if RichEdit1.Modified then
      begin
        beep;
        case MessageDlg(FileName + ' は変更されています。' +
                        #13#10 + '保存しますか?',
                        mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
          mrYes: FileSave.Execute;
          mrNo: ;
          mrCancel: Abort;
        end;
      end;
      if OpenDialog1.Execute then
      begin
        RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
        RichEdit1.Modified := False;
        FileName := OpenDialog1.FileName;
        Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]);
      end;
    
    

ファイルへのテキストの保存

  1. アクションリストエディタで、FileSave アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      if FileName = '無題' then
        FileSaveAs.Execute
      else
      begin
        RichEdit1.Lines.SaveToFile(FileName);
        RichEdit1.Modified := False;
      end;
    
    

指定した名前のファイルへのテキストの保存

  1. フォームを表示。
  2. コンポーネントパレットの Dialogs タブにある SaveDialog コンポーネントをフォームに配置。
  3. オブジェクトインスペクタで、SaveDialog1 コンポーネントのプロパティを次のように設定。
    • DefaultExt プロパティに「txt」と入力。
    • Filter プロパティの右側の欄をダブルクリック。 「フィルタの設定」ダイアログボックス(フィルタエディタ)が表示されます。 1 行目「フィルタ名」に「テキストファイル(*.txt)」と入力。 「フィルタ」に「*.txt」と入力。 2 行目「フィルタ名」に「すべてのファイル(*.*)」と入力。 「フィルタ」に「*.*」と入力。 「OK」ボタンをクリックしてフィルタエディタを閉じる。
    • Options プロパティの ofOverwritePrompt を True に設定。
  4. アクションリストエディタで、FileSaveAs アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  5. beginend の間に、次のように入力。
    
      SaveDialog1.InitialDir := ExtractFilePath(FileName);
      if SaveDialog1.Execute then
      begin
        RichEdit1.Lines.SaveToFile(SaveDialog1.FileName);
        RichEdit1.Modified := False;
        FileName := SaveDialog1.FileName;
        Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]);
      end
      else
        Abort;
    
    

テキストの印刷

  1. フォームを表示。
  2. コンポーネントパレットの Dialogs タブにある PrintDialog コンポーネントをフォームに配置。
  3. アクションリストエディタで、FilePrint アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  4. beginend の間に、次のように入力。
    
      if PrintDialog1.Execute then
        RichEdit1.Print(FileName);
    
    

アプリケーションの終了

  1. アクションリストエディタで、FileExit アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      close;
    
    

テキストに加えた直前の変更の取り消し

  1. アクションリストエディタで、EditUndo アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      RichEdit1.Undo;
    
    
  3. テキストに対して加えた変更を取り消すことができるかどうかを判別し、元に戻すコマンドを使用可能または使用不可にします。
    • アクションリストエディタで、EditUndo アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Enabled := RichEdit1.CanUndo;
      
      

テキストの切り取り

  1. アクションリストエディタで、EditCut アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      RichEdit1.CutToClipboard;
    
    
  3. 編集領域でテキストを選択していないとき、切り取りコマンドを実行しても切り取るものがありません。 テキストを選択しているかどうかで、切り取りコマンドを使用可能または使用不可にします。
    • アクションリストエディタで、EditCut アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Enabled := RichEdit1.SelLength > 0;
      
      

テキストのコピー

  1. アクションリストエディタで、EditCopy アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      RichEdit1.CopyToClipboard;
    
    
  3. 編集領域でテキストを選択しているかどうかで、コピーコマンドを使用可能または使用不可にします。
    • アクションリストエディタで、EditCopy アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Enabled := RichEdit1.SelLength > 0;
      
      

テキストの貼り付け

  1. アクションリストエディタで、EditPaste アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      RichEdit1.PasteFromClipboard;
    
    
  3. クリップボードにテキストがないとき、貼り付けコマンドを実行しても貼り付けるものがありません。 クリックボードにテキストがあるかどうかで、貼り付けコマンドを使用可能または使用不可にします。
    • コードエディタで、Unit1.pas の uses 節に Clipbrd を追加。
    • アクションリストエディタで、EditPaste アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Enabled := Clipboard.HasFormat(CF_TEXT);
      
      

選択したテキストの削除

  1. アクションリストエディタで、EditDelete アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      RichEdit1.ClearSelection;
    
    
  3. 編集領域でテキストを選択しているかどうかで、削除コマンドを使用可能または使用不可にします。
    • アクションリストエディタで、EditDelete アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Enabled := RichEdit1.SelLength > 0;
      
      

すべてのテキストの選択

  1. アクションリストエディタで、EditSelectAll アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      RichEdit1.SelectAll;
    
    
  3. 編集領域にテキストがないとき、すべて選択コマンドを実行しても選択するものがありません。 テキストがあるかどうかで、すべて選択コマンドを使用可能または使用不可にします。
    • アクションリストエディタで、EditSelectAll アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に次のように入力。
      
        (Sender as TAction).Enabled := Length(RichEdit1.Text) > 0;
      
      

テキストの検索

  1. フォームを表示。
  2. コンポーネントパレットの Dialogs タブにある FindDialog コンポーネントをフォームに配置。
  3. アクションリストエディタで、EditFind アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  4. beginend の間に、次のように入力。
    
      FindDialog1.Execute;
    
    
  5. 編集領域にテキストがあるかどうかで、検索コマンドを使用可能または使用不可にします。
    • アクションリストエディタで、EditFind アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Enabled := Length(RichEdit1.Text) > 0;
      
      
  6. フォームを表示し、配置した FindDialog1 コンポーネントを選択。
  7. オブジェクトインスペクタで、OnFind イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  8. begin の上に空白行を挿入し、次のように入力。
    
    var
      FoundAt, FFoundAt: LongInt;
      StartPos, ToEnd: Integer;
      SearchTypes: TSearchTypes;
      Found: Boolean;
    
    
  9. beginend の間に、次のように入力。
    
      SearchTypes := [];
    
      { 単語単位で探す }
      if frWholeWord in FindDialog1.Options then
        Include(SearchTypes, stWholeWord);
    
      { 大文字と小文字を区別する }
      if frMatchCase in FindDialog1.Options then
        Include(SearchTypes, stMatchCase);
    
      with RichEdit1 do
      begin
        { 下へ検索 }
        if frDown in FindDialog1.Options then
        begin
          StartPos := SelStart + SelLength;
          ToEnd := Length(Text) - StartPos;
          FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, Searchtypes);
          if FoundAt <> -1 then
          begin
            SelStart := FoundAt;
            SelLength := Length(FindDialog1.FindText);
          end
          else
          begin
            beep;
            MessageDlg(FindDialog1.FindText + ' は見つかりません。',
                       mtInformation, [mbOk], 0);
          end;
        end
        { 上へ検索 }
        else
        begin
          { 初期化 }
          FoundAt := 0;
          FFoundAt := 0;
          Found := False;
          StartPos := 0;
          ToEnd := SelStart;
    
          while FoundAt <> -1 do
          begin
            FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd - StartPos, Searchtypes);
            if FoundAt <> -1 then
            begin
              StartPos := FoundAt + Length(FindDialog1.FindText);
              FFoundAt := FoundAt;
              Found := True;
            end;
          end;
          If Found then
          begin
            SelStart := FFoundAt;
            SelLength := Length(FindDialog1.FindText);
          end
          else
          begin
            beep;
            MessageDlg(FindDialog1.FindText + ' は見つかりません。',
                       mtInformation, [mbOk], 0);
          end;
        end;
      end;
    
    
  10. フォーム上の RichEdit1 コンポーネントを選択し、オブジェクトインスペクタで HideSelection プロパティを False に設定。

テキストの置換

  1. コンポーネントパレットの Dialogs タブにある ReplaceDialog コンポーネントをフォームに配置。
  2. アクションリストエディタで、EditReplace アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  3. beginend の間に次のように入力。
    
      ReplaceDialog1.Execute;
    
    
  4. 編集領域にテキストがあるかどうかで、置換コマンドを使用可能または使用不可にします。
    • アクションリストエディタで、EditReplace アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Enabled := Length(RichEdit1.Text) > 0;
      
      
  5. フォームを表示し、配置した ReplaceDialog1 コンポーネントを選択。
  6. オブジェクトインスペクタで、OnFind イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  7. begin の上に空白行を挿入し、次のように入力。
    
    var
      FoundAt: LongInt;
      StartPos, ToEnd: Integer;
      SearchTypes: TSearchTypes;
    
    
  8. beginend の間に、次のように入力。
    
      SearchTypes := [];
    
      { 単語単位で探す }
      if frWholeWord in ReplaceDialog1.Options then
        Include(SearchTypes, stWholeWord);
    
      { 大文字と小文字を区別する }
      if frMatchCase in ReplaceDialog1.Options then
        Include(SearchTypes, stMatchCase);
    
      with RichEdit1 do
      begin
        StartPos := SelStart + SelLength;
        ToEnd := Length(Text) - StartPos;
        FoundAt := FindText(ReplaceDialog1.FindText, StartPos, ToEnd, Searchtypes);
        if FoundAt <> -1 then
        begin
          SelStart := FoundAt;
          SelLength := Length(ReplaceDialog1.FindText);
        end
        else
        begin
          beep;
          MessageDlg(ReplaceDialog1.FindText + ' は見つかりません。',
                     mtInformation, [mbOk], 0);
        end;
      end;
    
    
  9. オブジェクトインスペクタで、OnReplace イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  10. begin の上に空白行を挿入し、次のように入力。
    
    var
      FoundAt: LongInt;
      StartPos, ToEnd: Integer;
      SearchTypes: TSearchTypes;
      Found: Boolean;
    
    
  11. beginend の間に、次のように入力。
    
      SearchTypes := [];
    
      { 単語単位で探す }
      if frWholeWord in ReplaceDialog1.Options then
        Include(SearchTypes, stWholeWord);
    
      { 大文字と小文字を区別する }
      if frMatchCase in ReplaceDialog1.Options then
        Include(SearchTypes, stMatchCase);
    
      { [置換して次に] ボタンを選択 }
      if frReplace in ReplaceDialog1.Options then
      begin
        with RichEdit1 do
        begin
          if ((frMatchCase in ReplaceDialog1.Options) and
              (SelText = ReplaceDialog1.FindText)) or
              ((not (frMatchCase in ReplaceDialog1.Options)) and
                SameText(SelText, ReplaceDialog1.FindText))
          then
            { 選択されたテキストを ReplaceText に置換する }
            Perform(EM_REPLACESEL, 1, LongInt(PChar(ReplaceDialog1.ReplaceText)));
    
          StartPos := SelStart + SelLength;
          ToEnd := Length(Text) - StartPos;
          FoundAt := FindText(ReplaceDialog1.FindText, StartPos, ToEnd, Searchtypes);
          if FoundAt <> -1 then
          begin
            SelStart := FoundAt;
            SelLength := Length(ReplaceDialog1.FindText);
          end
          else
          begin
            beep;
            MessageDlg(ReplaceDialog1.FindText + ' は見つかりません。',
                       mtInformation, [mbOk], 0);
          end;
        end;
      end;
    
      { [すべて置換] ボタンを選択 }
      if frReplaceAll in ReplaceDialog1.Options then
      begin
        { 初期化 }
        FoundAt := 0;
        Found := False;
    
        while FoundAt <> -1 do
          with RichEdit1 do
          begin
            StartPos := 0;
            ToEnd := Length(Text) - StartPos;
            FoundAt := FindText(ReplaceDialog1.FindText, StartPos, ToEnd, Searchtypes);
            if FoundAt <> -1 then
            begin
              SelStart := FoundAt;
              SelLength := Length(ReplaceDialog1.FindText);
    
              { 選択されたテキストを ReplaceText に置換する }
              Perform(EM_REPLACESEL, 1, LongInt(PChar(ReplaceDialog1.ReplaceText)));
    
              Found := True;
            end;
          end;
        if not Found then
        begin
          beep;
          MessageDlg(ReplaceDialog1.FindText + ' は見つかりません。',
                     mtInformation, [mbOk], 0);
        end;
      end;
    
    

    選択されたテキストを指定した文字列に置き換えるには、SelText := ReplaceDialog1.ReplaceText; とすればできますが、これでは「元に戻す」コマンドを実行しても元に戻らないので、EM_REPLACESEL を使用しています。 1 を 0 にすると、元に戻らなくなります。

日付と時刻の挿入

  1. アクションリストエディタで、EditDateTime アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      RichEdit1.Perform(EM_REPLACESEL, 1, Integer(DateTimeToStr(Now)));
    
    

ツールバーの表示と非表示の切り替え

  1. アクションリストエディタで、ViewToolBar アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      ToolBar1.Visible := not ToolBar1.Visible;
    
    
  3. ツールバーが表示されているかどうかで、チェックまたはチェックを解除します。
    • アクションリストエディタで、ViewToolBar アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Checked := ToolBar1.Visible;
      
      

ステータスバーの表示と非表示の切り替え

  1. アクションリストエディタで、ViewStatusBar アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      StatusBar1.Visible := not StatusBar1.Visible;
    
    
  3. ステータスバーが表示されているかどうかで、チェックまたはチェックを解除します。
    • アクションリストエディタで、ViewStatusBar アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Checked := StatusBar1.Visible;
      
      

テキストの折り返しとスクロールバー

  1. アクションリストエディタで、ViewWordWrap アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  2. beginend の間に、次のように入力。
    
      with RichEdit1 do
      begin
        WordWrap := not WordWrap;
        if WordWrap then
          ScrollBars := ssVertical
        else
          ScrollBars := ssBoth;
      end;
    
    
  3. 編集領域がテキストを右端で折り返すようにしているかどうかで、右端で折り返すコマンドのチェックまたはチェックを解除します。
    • アクションリストエディタで、ViewWordWrap アクションを選択。
    • オブジェクトインスペクタで、OnUppdate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • beginend の間に、次のように入力。
      
        (Sender as TAction).Checked := RichEdit1.WordWrap;
      
      

フォントの設定

  1. フォームを表示。
  2. コンポーネントパレットの Dialogs タブにある FontDialog コンポーネントをフォームに配置。
  3. オブジェクトインスペクタで、Options プロパティの fdEffects を False に設定。
  4. アクションリストエディタで、ViewFont アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  5. beginend の間に、次のように入力。
    
      if FontDialog1.Execute then
        RichEdit1.Font := FontDialog1.Font;
    
    

バージョン情報ダイアログボックスの作成

  1. 「ファイル」メニューの「新規作成」−「その他」を選択し、新規作成ダイアログボックスの「フォーム」タブをクリック。
  2. 「フォーム」タブで「バージョン情報」をダブルクリック。 新しいフォーム AboutBox が作成されます。
  3. オブジェクトインスペクタで、AboutBox の Caption プロパティを「テキストエディタについて」に変更。
  4. オブジェクトインスペクタで、AboutBox に配置されているラベルの Caption プロパティを次のように変更。
    • 「プロダクト名」を「テキストエディタ」に変更。
    • 「バージョン番号」を「バージョン 1.0」に変更。
    • 「著作権表記」を「Copyright 年」に変更。 (例. Copyright 2001)
  5. 「ファイル」メニューの「名前を付けて保存」を選択し、About.pas という名前でフォームを保存することにします。
  6. コードエディタで Unit1 タブをクリックし、uses 節に About を追加。
  7. アクションリストエディタで、HelpAbout アクションをダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  8. beginend の間に、次のように入力。
    
      AboutBox.ShowModal;
    
    

終了時にファイルの保存を確認

アプリケーション終了時に開いているファイルが変更されている場合、終了前に警告音を鳴らし、ファイルを保存するかどうかを確認するメッセージボックスを表示するようにします。

  1. オブジェクトインスペクタの一番上のリストボックスで、ドロップダウンリストから Form1 を選択。
  2. オブジェクトインスペクタで、OnCloseQuery イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  3. beginend の間に、次のように入力。
    
      if RichEdit1.Modified then
      begin
        beep;
        case MessageDlg(FileName + ' は変更されています。' +
                        #13#10 + '保存しますか?',
                        mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
          mrYes:
          begin
            FileSave.Execute;
            CanClose := not RichEdit1.Modified;
          end;
          mrNo: ;
          mrCancel: CanClose := False;
        end;
      end;
    
    

ステータスバーにカーソルの位置を表示

  1. フォーム上のステータスバーをダブルクリックして、「StatusBar1.Panels の編集」ダイアログボックスを開く。
  2. 「新規追加」ボタンをクリックして、ステータスバーにパネル 1 - TStatusPanel を追加する。
  3. 0 - TStatusPanel を選択し、オブジェクトインスペクタで Width プロパティを 250 に変更。
  4. 「StatusBar1.Panels の編集」ダイアログボックスを閉じる。
  5. フォーム上の RichEdit1 コンポーネントを選択。
  6. オブジェクトインスペクタで、OnSelictionChange イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • begin の上に空白行を挿入し、次のように入力。
      
      var
        CharPosY, CharPosX: integer;
      
      
    • beginend の間に、次のように入力。
      
        CharPosY := RichEdit1.Perform(EM_LINEFROMCHAR, RichEdit1.SelStart, 0);
        CharPosX := RichEdit1.SelStart -
                    RichEdit1.Perform(EM_LINEINDEX, CharPosY, 0);
        StatusBar1.Panels[1].Text := Format('%d 行  %d 桁',
                                            [CharPosY + 1, CharPosX + 1]);
      
      
  7. オブジェクトインスペクタで、OnMouseDown イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  8. beginend の間に、次のように入力。
    
      RichEdit1SelectionChange(Sender);
    
    
  9. オブジェクトインスペクタの一番上のリストボックスで、ドロップダウンリストから Form1 を選択。
  10. OnCreate イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  11. beginend の間に、次のように入力。
    
      RichEdit1SelectionChange(Sender);
    
    

アイコンへドラッグ&ドロップしたファイルからのテキストの読み込み

  1. オブジェクトインスペクタの一番上のリストボックスに Form1 と表示されているか確認(表示されていない場合は、ドロップダウンリストから選択)。
  2. OnShow イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
  3. beginend の間に、次のように入力。
    
      if ParamCount > 0 then
      begin
        with RichEdit1 do
        begin
          Lines.LoadFromFile(ParamStr(1));
          Modified := False;
        end;
        FileName := ParamStr(1);
        Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]);
      end;
    
    

ウィンドウへドラッグ&ドロップしたファイルからのテキストの読み込み

  1. コードエディタで、Unit1.pas の uses 節に ShellAPI を追加。
  2. メインフォーム Form1 の OnCreate イベントハンドラに、次のように強調した部分を追加。
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      RichEdit1SelectionChange(Sender);
      DragAcceptFiles(Handle, True);
    end;
    
    
  3. private { Private 宣言 } に、次のように入力。
    
        procedure WMDropFiles(Var Msg: TWMDropFiles); Message WM_DROPFILES;
    
    
  4. Unit1.pas の実現部(implementation 部)に、イベントハンドラを記述。 最後(end. の上)に記述することにします。 次のように入力。
    
    procedure TForm1.WMDropFiles(Var Msg: TWMDropFiles);
    Var
      DropFileName: Array[0..MAX_PATH] of Char;
    begin
      DragQueryFile(Msg.Drop, 0, DropFileName, MAX_PATH);
      Application.BringToFront;
      if RichEdit1.Modified then
      begin
        beep;
        case MessageDlg(FileName + ' は変更されています。'
                        + #13#10 + '保存しますか?',
                        mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
          mrYes: FileSave.Execute;
          mrNo: ;
          mrCancel: Abort;
        end;
      end;
      with RichEdit1 do
      begin
        Lines.LoadFromFile(DropFileName);
        Modified := False;
      end;
      FileName := DropFileName;
      Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]);
      DragFinish(Msg.Drop);
    end;
    
    

終了時に状態と設定を保存して起動時に復元

アプリケーション終了時、実行ファイルと同じディレクトリに実行ファイルと同じ名前の INI ファイルを作成して、ウィンドウの位置と大きさ、ツールバーとステータスバーの表示/非表示の状態、右端で折り返しているかどうかおよびフォントの設定を保存します。 次回起動時に、保存した状態と設定を INI ファイルから読み込んで復元します。

  1. コードエディタで Unit1.pas の uses 節に IniFiles を追加。
  2. オブジェクトインスペクタの一番上のリストボックスに Form1 と表示されているか確認(表示されていない場合は、ドロップダウンリストから選択)。
  3. OnDestroy イベントの右側の欄をダブルクリック。 コードエディタが表示され、イベントハンドラ内の beginend の間にカーソルが配置される。
    • begin の上に空白行を挿入し、次のように入力。
      
      var
        MyIniFile: TIniFile;
      
      
    • beginend の間に、次のように入力。
      
        MyIniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
        try
          MyIniFile.WriteInteger('Window', 'Top', Top);
          MyIniFile.WriteInteger('Window', 'Left', Left);
          MyIniFile.WriteInteger('Window', 'Width', Width);
          MyIniFile.WriteInteger('Window', 'Height', Height);
          MyIniFile.WriteBool('ToolBar', 'Visible', ToolBar1.Visible);
          MyIniFile.WriteBool('StatusBar', 'Visible', StatusBar1.Visible);
          MyIniFile.WriteBool('Edit', 'WordWrap', RichEdit1.WordWrap);
          MyIniFile.WriteInteger('Font', 'Charset', RichEdit1.Font.Charset);
          MyIniFile.WriteString('Font', 'Name', RichEdit1.Font.Name);
          MyIniFile.WriteInteger('Font', 'Size', RichEdit1.Font.Size);
          MyIniFile.WriteBool('Font', 'Style.Bold', fsBold in RichEdit1.Font.Style);
          MyIniFile.WriteBool('Font', 'Style.Italic', fsItalic in RichEdit1.Font.Style);
        finally
          MyIniFile.Free;
        end;
      
      
    このコードは、INI ファイルへ書き込むためのものです。
  4. メインフォーム Form1 の OnCreate イベントハンドラに、次のように強調した部分を追加。
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
      MyIniFile: TIniFile;
      MyStyle: Boolean;
    begin
      MyIniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
      try
        Top := MyIniFile.ReadInteger('Window', 'Top', Top);
        Left := MyIniFile.ReadInteger('Window', 'Left', Left);
        Width := MyIniFile.ReadInteger('Window', 'Width', Width);
        Height := MyIniFile.ReadInteger('Window', 'Height', Height);
        ToolBar1.Visible := MyIniFile.ReadBool('ToolBar', 'Visible', True);
        StatusBar1.Visible := MyIniFile.ReadBool('StatusBar', 'Visible', True);
        RichEdit1.WordWrap := MyIniFile.ReadBool('Edit', 'WordWrap', True);
        RichEdit1.Font.Charset := MyIniFile.ReadInteger('Font', 'Charset', RichEdit1.Font.Charset);
        RichEdit1.Font.Name := MyIniFile.ReadString('Font', 'Name', RichEdit1.Font.Name);
        RichEdit1.Font.Size := MyIniFile.ReadInteger('Font', 'Size', RichEdit1.Font.Size);
        MyStyle := MyIniFile.ReadBool('Font', 'Style.Bold', False);
        if MyStyle then
          with RichEdit1.Font do
            Style := Style + [fsBold];
        MyStyle := MyIniFile.ReadBool('Font', 'Style.Italic', False);
        if MyStyle then
          with RichEdit1.Font do
            Style := Style + [fsItalic];
      finally
        MyIniFile.Free;
      end;
      RichEdit1.Modified := False;
      FontDialog1.Font := RichEdit1.Font;
      RichEdit1SelectionChange(Sender);
      DragAcceptFiles(Handle, True);
    end;
    
    
    追加したコードは、INI ファイルから読み込むためのものです。

作成終了

  1. メインフォーム Form1 の OnCreate イベントハンドラに、次のように強調した部分を追加。
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
      MyIniFile: TIniFile;
      MyStyle: Boolean;
    begin
      MyIniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
      try
        Top := MyIniFile.ReadInteger('Window', 'Top', Top);
        Left := MyIniFile.ReadInteger('Window', 'Left', Left);
        Width := MyIniFile.ReadInteger('Window', 'Width', Width);
        Height := MyIniFile.ReadInteger('Window', 'Height', Height);
        ToolBar1.Visible := MyIniFile.ReadBool('ToolBar', 'Visible', True);
        StatusBar1.Visible := MyIniFile.ReadBool('StatusBar', 'Visible', True);
        RichEdit1.WordWrap := MyIniFile.ReadBool('Edit', 'WordWrap', True);
        RichEdit1.Font.Charset := MyIniFile.ReadInteger('Font', 'Charset', RichEdit1.Font.Charset);
        RichEdit1.Font.Name := MyIniFile.ReadString('Font', 'Name', RichEdit1.Font.Name);
        RichEdit1.Font.Size := MyIniFile.ReadInteger('Font', 'Size', RichEdit1.Font.Size);
        MyStyle := MyIniFile.ReadBool('Font', 'Style.Bold', False);
        if MyStyle then
          with RichEdit1.Font do
            Style := Style + [fsBold];
        MyStyle := MyIniFile.ReadBool('Font', 'Style.Italic', False);
        if MyStyle then
          with RichEdit1.Font do
            Style := Style + [fsItalic];
      finally
        MyIniFile.Free;
      end;
      RichEdit1.Modified := False;
      FontDialog1.Font := RichEdit1.Font;
      Application.Title := 'テキストエディタ';
      FileNew.Execute;
      RichEdit1SelectionChange(Sender);
      DragAcceptFiles(Handle, True);
    end;
    
    
  2. 「F9」キーを押してアプリケーションを実行。 実行すると、実行ファイル TextEditor.exe が TextEditor フォルダに作成されます。

以上で終了です。