チュートリアル4


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

これは、メモ帳(c:\Windows\notepad.exe)を起動させるプログラムの例です。
Dialog5.jpg (17091 Byte)

 ここで作成するプログラムは、ボタンを押すことで、API WritePrivateProfileString を使って、プログラム・アプリケーションの経路を検索して、ファイルの中にテキスト行を書きこみます。
そして、アプリケーション(メモ帳)を実行することができます。
 私たちは Single Instance だけのコードの書き方を、学びます。


 メニューの、「ファイル」→「新規プロジェクト」で、Program と言う名前のプロジェクトを作って下さい。
 テンプレートとして DialogAsMain.tpl を選んで下さい。

Wizard4

 重要なポイントです:
 Program.rcファイルをクリックして、IDD_DIALOG ダイアログを選択します。
 ここに、上の画面のように、2つのテキスト・ボックス(editbox,EditText) と、ボタン(Button)を作成します。
Button の Caption は、&Run Notepad とします。
 Path only と Full path の文字列は、Static で設定します。

 IDD_DIALOG ダイアログのプロパティ画面を見て下さい。
 Caption を Basics of API using FbEdit に変更します。

 その下の CLASS の行に、DLGCLASS が有るので、これを MYCLASS に変えます。
 私たちがプログラムのクラスを変えるのは、これが初めてです。
 他のプログラムとの衝突を防ぐために、こうします。

 2つの editbox(EditText) のプロパティを、それぞれ選択します。
LOCKED を TRUE に、AUTOSCROLL を HORIZONTAL(xStyle で AUTOHSCROLL を選択) に設定します。
 Dialogs 境界を TOOL に、SIZEBORDER のプロパティを FALSE に設定します。

 これは、私たちのために TOOLWINDOW を作成します。
 ここでまた、適当なアイコンを追加するのを、忘れないで下さい。

 SYSMENU に FALSE を設定すると、終了ボタン「x」が、TOOLWINDOW で見えなくなるのが、分かります。
 それで、SYSMENU を TRUE に設定していることを確認して下さい。


IDD_DIALOG の設定(Caption は、Basics of API using FbEdit に変更)
設定1
設定2

editbox(EditText)の設定
設定3
設定4

 プログラムは、ALT+F4か、タスク・マネージャでも、閉じることができます。

 作業を終わると、下のような画面になるはずです。:
Dialog5.jpg (17091 Byte)


 今度は、最初に、Program.biファイルを開いて下さい。
 そこに、数行、コードを挿入します。
先ず、#define を3行追加します。
#define IDC_EDT1 1001
#define IDC_EDT2 1002
#define IDC_BTN1 1003


また、チュートリアル1で記述したように、下記も追加します。
Dim Shared hIcon As HICON

 その上で、上で設定した項目について、記述します。
まず最初に、以下の行を変更します。

Const ClassName="DLGCLASS"

を、下のように。

Const ClassName="MYCLASS" '(like we did in the dialog editor)

そして、プログラムの最後の部分に、以下を追加します。

Const Settings="Settings.ini"
Const process="c:\Windows\notepad.exe"

Dim Shared AppPath As ZString*256       ' the buffer to store our application path

'this is what we need to run other programs
Dim Shared processinfo As PROCESS_INFORMATION
Dim Shared startinfo As STARTUPINFO

注意:
 Notepad (メモ帳)のパスは、あなたのパソコンの経路に合わせて、変更して下さい。
 そうしないと、Notepad は起動しません。

 アイコン、テキスト・ボックス(EDITBOX)、ボタンの全てに、コードを付けることを、忘れないで下さい。
 今後、この説明は繰り返しませんので、ここで覚えておいて下さい。

 Program.bi ファイルはできました。これを閉じることができます。


 次は、Program.bas ファイルをダブルクリックして下さい。

 まず最初に、WinMain 関数に、Previous Instanceコードを追加します。

 コードは、以下のものを、 Dim msg As MSG の下に追加します:

' Single Instance
hWnd=FindWindow(@ClassName,NULL)
If hWnd Then
  ShowWindow(hWnd,SW_RESTORE)
  SetForegroundWindow(hWnd)
  Return 0
EndIf

 このコードは、同じ ClassName の既存のウィンドウを探して、見つけたら、そのアプリケーションを終了して、既存のものに焦点を設定します。

 これで、WinMain関数は終了です。

 今度は、WndProc関数に移ります。
 まず最初に、textbuffer と Integer値のために、2つの局所変数を加えます。
Function WndProc(ByVal hWin As HWND,ByVal uMsg As UINT,ByVal wParam As WPARAM,ByVal lParam As LPARAM) As Integer
の直下に、以下の2行を追加します。

Dim buffer As ZString*256
Dim x As Integer

 そして、WM_INITDIALOG に移ります。
 ICON のコードを追加します。
 まず、チュートリアル1で追加したものと同じ以下の2行のコードを、
hWnd=hWin の後に追加します。
hIcon= LoadIcon(hInstance,Cast(ZString Ptr,500)) ' our first Win API loading icon to our created window
SendMessage(hWin,WM_SETICON,NULL,Cast(LPARAM,hIcon)) ' our second WIN API sets the loaded icon to our dialog

その後に、以下を追加します。

' Get full path of our program
GetModuleFileName(NULL,@AppPath,260)
' Remove program name
While TRUE
  If InStr(x+1,AppPath,"\") Then
    x=InStr(x+1,AppPath,"\")
  Else
    Exit While
  EndIf
Wend
AppPath[x]=NULL
SetDlgItemText(hWin,IDC_EDT1,@AppPath)
' Combine two strings
lstrcat(@AppPath,@Settings)
SetDlgItemText(hWin,IDC_EDT2,@AppPath)
' WIN API to write a line of text to an *.ini file
WritePrivateProfileString(@AppName,@ClassName,@process,@AppPath)

notepad(メモ帳)に適用するボタンのコードは、以下です。:
これを、 Select Case LoWord(wParam) の case の一つとして追加します。

Case IDC_BTN1
  CreateProcess(@process,0,0,0,0,CREATE_NEW_CONSOLE,0,0,@startinfo,@processinfo)

これで終わりです。

Dialog6.jpg (24194 Byte)

 

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


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


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