チュートリアル5


英語版→http://members.a1.net/ranmasaotome/tut5.html

 下の画面は、チュートリアル3で作ったウィンドウです。

Start.jpg (16969 Byte)

 見た目はよさそうですが、中身は空です。
 このツールバーには、コントロールが無いのです。

 そこで、下のように作り直します。
Richedit.jpg (22492 Byte)
 このため、Richedit コントロールを追加します。
 リッチエディットコントロールとは、Windows が提供するコントロールの1つで、通常のエディットボックスに似ていますが、文字の一部のフォントの種類や大きさ、色を変えたり、段落ごとに書式を設定したりできるものです。

 RichEdit という名前のプロジェクトを、新規に作って下さい。
 そして、チュートリアル3 を復習して同じ状態まで進めて、プロジェクトを保存して下さい。

 上で作ったフォルダ「RichEdit」の「RichEdit.fbp」を開きます。
 RichEdit.rc タブを選択して、IDD_DIALOG をクリックします。するとダイアログ・エディタが表示されます。
(ダイアログ・エディタとは、アプリを動かしたときに表示されるウインドウ(対話画面)の外観をデザインして、そこに含まれるダイアログ・コントロールを選択追加して、その他のコントロール・プロパティを設定作業するものです。)

 左側の FbEdit ツールバー(アイコンボタンが並んだもの)から Richedit コントロール(右下に小さい赤いAがあるアイコン)を選択して、ダイアログ・エディタのウィンドウに置いて下さい。
 そして、Go!をクリックします。

 FbEdit / FreeBASIC は、エラー無しでビルドされて、何も表示されません。そうです。チュートリアル1で、これについて一度ふれています。

 理由は、Richeditコントロールは、それを使う前に、初期化しなければならないのです。

 まず最初に、*.bas ファイルを開いて、
#Include "RichEdit.bi" の前に、以下を加えて下さい。
#Include Once "win/richedit.bi"

 そして、*.bi ファイルに、以下を追加します。
Dim Shared hRichEdDLL As HMODULE

 今度は *.basファイルを開いて下さい。
 最後の方に、Program start として、以下があるはずです。

' Program start
hInstance=GetModuleHandle(NULL)
CommandLine=GetCommandLine
InitCommonControls
WinMain(hInstance,NULL,CommandLine,SW_SHOWDEFAULT)
ExitProcess(0)


 これを、下のように変更して下さい。:

' Program start
hInstance=GetModuleHandle(NULL)
CommandLine=GetCommandLine
InitCommonControls
' Load the RichEdit dll
hRichEdDLL=LoadLibrary("riched20.dll")
WinMain(hInstance,NULL,CommandLine,SW_SHOWDEFAULT)
' Free the dll
FreeLibrary(hRichEdDLL)
ExitProcess(0)

 再び Go! をクリックしてみて下さい。
 ほら、Richedit は準備ができているでしょう。
(ただ、本当に編集できる状態で準備ができるのではなくて、見えるようになっているだけですが。)
Richedit.jpg (22492 Byte)

 チュートリアルを続けます。

Properties3.jpg (49266 Byte)

 上は、私たちが設置した Richeditor コントロールの、プロパティです。
 私たちは、そのいくつかを、変更します。
 NAMEは、そのままでかまいません。

 ID を 2000 に変更します。理由は、付与された 1002 が、既に私たちのツールバーで使われているからです。
 更に変更は、
AUTOSCROLL を BOTH に、
MULTILINE を TRUE に
SCROLLBAR を BOTHに。
残りは、そのままで良いでしょう。

スタイル変更1
スタイル変更2
スタイル変更3

 RichEdit.bi タブを開きます。そして追加したRicheditor コントロールの定義を追加します。

#Define IDC_RED1 2000

 次に RichEdit.bas タブを開きます。
 以下は、ツールバーの、コピー、切取り、貼り付けのために Select Case LoWord(wParam) に追加するコードです。

Case IDC_CUT
  SendDlgItemMessage(hWin,IDC_RED1,WM_CUT,0,0)
  '
Case IDC_COPY
  SendDlgItemMessage(hWin,IDC_RED1,WM_COPY,0,0)
  '
Case IDC_PASTE
  SendDlgItemMessage(hWin,IDC_RED1,WM_PASTE,0,0)
  '
Case IDC_UNDO
  SendDlgItemMessage(hWin,IDC_RED1,WM_UNDO,0,0)
  '
Case IDC_REDO
  SendDlgItemMessage(hWin,IDC_RED1,EM_REDO,0,0)
  '

 今、あなたのエディタには、いくつかの基本的特徴が既にあります。
 しかし、まだまだ、長い道のりです。
 あなたのエディタに、ポップアップメニュー付きの、右クリック機能が欲しいでしょう。

 以下は、WndProc に設置するコードです。
Function WndProc(ByVal hWin As HWND,ByVal uMsg As UINT,ByVal wParam As WPARAM,ByVal lParam As LPARAM) As Integer
 の下に、下の局所変数を追加します。

Dim pt As POINT

 そして、以下を Case WM_SIZE の前に追加します。

Case WM_CONTEXTMENU
  If wParam=GetDlgItem(hWin,IDC_RED1) Then
    pt.x=LoWord(lParam)
    pt.y=HiWord(lParam)
    TrackPopupMenu(GetSubMenu(GetMenu(hWin),0),TPM_LEFTALIGN or TPM_RIGHTBUTTON,pt.x,pt.y,0,hWin,0)
  EndIf
  '

 go! をクリックして下さい。そして、エディタの中で、右クリックしてみて下さい。
 簡単ですね。

 この事例のコードを、 ここ で、ダウンロードできます。


この Top に戻る↑ この続き(チュートリアル 6)を見る↓ トップページに戻る


Copyright © 2008-2016 WATANABE Makoto. All rights reserved.