2014年02月22日

基本的なウィンドウ部品の配置例 その10 リストビュー+コンテキストメニュー

ここでは、リストビューとコンテキストメニューの組み合わせの例を紹介します。
合わせて、プロデルに最近追加された、設定ファイルの新しい手順についても紹介します。

※設定ファイルの新しい手順を動かすには、最新版(プロデル 1.3.587 2014年2月17日 現在)が必要です。
プロデルの最新版は、下記のページからダウンロード出来ます。
公式サイト = 日本語プログラミング言語「プロデル」
http://rdr.utopiat.net/index.html

────────────────────
■準備

以下の文字列を、「settings.ini」という設定ファイルに保存して、プログラムと同じフォルダに入れて下さい。

[青木]
氏名=青木一郎
メールアドレス=aoki@hotmail.com
[田中]
氏名=田中絵里
メールアドレス=eri@sakura.jp
[松井]
氏名=松井忠
メールアドレス=tadashi@gmail.com

※面倒くさい、という人は、下記のURLからダウンロードしたファイルを、適当な場所に解凍して下さい。

http://talk-pc.sakura.ne.jp/produire/listView-contextmenu.zip

────────────────────
■プログラムと説明

このプログラムの例では、氏名とメールアドレスを設定ファイルから読み込んで、リストビューに表示していますが、これは便宜上の例です。
実際にメールの送受信を行なうプログラムでは、送信者側のアカウントなど、他のデータを保存する必要があるため、設定ファイルにメールアドレスを設定することは、あまり現実的とは言えません。

────────────────────

「Produire.WinControl.dll」を利用する
「Produire.File.dll」を利用する
アプリ設定という設定ファイルを作る
アプリ設定のファイル名は、「[プログラムのフォルダ]settings.ini」

ウィンドウ1を表示する
待機する

ウィンドウ1とは
ウィンドウを継承する

はじめの手順
初期化する
一覧は、アプリ設定についてセッション名を列挙したもの

//これが、新しい設定ファイルの手順です。
//設定ファイルのすべてのセクション名を配列の形で取得して
//[一覧]という変数に格納します。

一覧を要素にそれぞれ繰り返す
氏名は、アプリ設定について「[要素]」から「氏名」を取得したもの
アドレスは、アプリ設定について「[要素]」から「メールアドレス」を取得したもの

//一覧の各要素は[セクション名](という文字列)なので、
//そのセクション名の中のキーの値を取得します。

リストビュー1に、氏名を追加する

//リストビュー1の項目に、上で取得した[氏名]という文字列を追加していきます。

その詳細は、アドレス

//[詳細]というのは、上で追加した項目に対応したデータです。
//この場合は、詳細のデータ項目がメールアドレス ひとつだけなので、
//[アドレス]という変数だけを単独で指定していますが、
//詳細のデータ項目が多い時は、次のように配列の形で書きます。
//その詳細は、{[アドレス]、[電話]、[生年月日]}

繰り返し終わり
リストビュー1の選択番号を1に変える

//取得したデータをリストビューに追加した後、
//リストビューの一番上の項目を選択状態にします。
//この命令は必須ではありませんが、後の操作を考えると、
//入れておいた方が良い命令です。

終わり

初期化する手順
この内部領域大きさを{444、290}に変える
この内容を「ウィンドウ1」に変える
この初期位置を「中央」に変える

ラベル1というラベルを作る
その内容を「アドレス一覧」に変える
その位置と大きさを{13、13、39、12}に変える

リストビュー1というリストビューを作る
その位置と大きさを{12、28、419、210}に変える
その表示方法を「詳細」に変える
その見出し一覧を{「氏名」、「メールアドレス」}に変える
その見出し幅を{159,260}に変える

ーーコンテキストメニュー
メニュー1というコンテキストメニューを、作る

//[メニュー1]という名前のコンテキストメニューを作ります(そのまんま)。

氏名項目というメニュー項目をメニュー1へ追加する

//作成したコンテキストメニューに、メニュー項目を追加します。

その内容を「氏名を表示(&N)」に変える

//氏名を表示 の文字列が、メニュー項目として表示されます。
//(&N) は、アクセスキーの設定です。
//画面上では 氏名を表示(N) と表示されます。

そのクリックされた時の手順は、氏名表示

//メニュー項目がクリックされた時、キーボードでは Enterキーが押された時に
//実行される手順を指定します。
//なお、この命令は、指示した手順が書かれていないとエラーになります。

アドレス項目というメニュー項目をメニュー1へ追加する
その内容を「メールアドレスをコピー(&C)」に変える
そのクリックされた時の手順は、アドレスコピー

リストビュー1のコンテキストメニューを、メニュー1に変える

//リストビュー1が右クリックされた時、
//キーボードでは、リストビュー1にフォーカスが合っている時に、
//Applicationキー またはShiftキー+F10キーが押された時に
//表示されるコンテキストメニューを、
//先ほど作成した[メニュー1]とする設定です。

ボタン2というボタンを作る
その内容を「閉じる」に変える
その位置と大きさを{357、255、75、23}に変える
この取消ボタンを、ボタン2に変える

終わり

ーー氏名表示
氏名表示の手順
もし、(リストビュー1の個数が0でない)かつ(リストビュー1の選択番号が「-1」でない)なら

//リストビュー1の個数が0でない = リストビュー1に項目が追加されていれば
//リストビュー1の選択番号が「-1」でない = いずれかの項目が選択状態であれば
//という二つの条件を満たしている時だけ、以下の手順を実行します。

氏名は、リストビュー1の選択項目の詳細(1)

//[選択項目の詳細]は、選択された項目の行に含まれるデータを
//配列の形で取得したものです。
//この例で言えば {[氏名]、[アドレス]} になります。
//したがって、[氏名]のデータを取得したい時は、配列の1番目の要素を指定します。

氏名を表示する
もし終わり
終わり

ーーアドレスコピー
アドレスコピーの手順
もし、(リストビュー1の個数が0でない)かつ(リストビュー1の選択番号が「-1」でない)なら
アドレスは、リストビュー1の選択項目の詳細(2)
アドレスを、クリップボードにコピー
「メールアドレスをクリップボードにコピーしました。」を表示する
もし終わり
終わり

ーー閉じる
ボタン2がクリックされた時の手順
自分を閉じる
終わり

終わり

────────────────────
【produireの最新記事】
posted by yanikun at 07:58| Comment(0) | TrackBack(0) | produire

2014年02月11日

基本的なウィンドウ部品の配置例 その9 簡易テキストビューワー = 説明

今回は、前回の記事で紹介した、

基本的なウィンドウ部品の配置例 その8 簡易テキストビューワー 
http://talk-pc.sblo.jp/article/87026984.html?1392080825

のプログラムの説明です。

なお、設定ファイルについては、以下の記事を参照して下さい。

設定の保存と呼び出し(設定ファイル) その4
http://talk-pc.sblo.jp/article/56420860.html?1391901061

また、ツリーの手順については、下記の記事を参照して下さい。
※ただし、今回のツリーではフォルダのアイコンは使用していません。

ツリー(ツリービュー) その3
http://talk-pc.sblo.jp/article/57087460.html

──────────────────────────────
■プログラムの説明
──────────────────────────────

プログラムのタイトルは、「簡易テキストビューワー」

//タイトルは適当に書き替えて下さい。

「Produire.WinControl.dll」を利用する
「Produire.File.dll」を利用する
アプリ設定という設定ファイルを作る
アプリ設定のファイル名は、「[プログラムのフォルダ]settings.ini」

メイン画面を表示する
待機する

メイン画面とは
ウィンドウを継承する

はじめの手順
初期化する
ルートは、アプリ設定:「ルート」から「フォルダ名」を取得したもの
もし、ルートが「」でないなら

//既に、読み込むフォルダが設定されている場合だけ、下ノ手順を実行します。

テキスト1へ、「[ルート]」を挿入する
「[ルート]」を、ツリー1にフォルダ追加する
ツリー1へフォーカスする
もし終わり
終わり

初期化する手順
この内部領域大きさを{548、349}に変える
この内容を「[プログラムのタイトル]」に変える
この初期位置を「中央」に変える

ラベル1というラベルを作る
その内容を「フォルダ(&D)」に変える
その位置と大きさを{12、16、39、12}に変える

テキスト1というテキストを作る
その位置と大きさを{73、13、382、19}に変える
その読み取り専用を○に変える

//フォルダ名を手入力する人はあまりいないと思うので、読み取り専用にしています。

参照ボタンというボタンを作る
その内容を「参照(&B)」に変える
その位置と大きさを{461、9、75、23}に変える

ラベル2というラベルを作る
その内容を「ファイル選択(&F)」に変える
その位置と大きさを{13、46、39、12}に変える

ツリー1というツリーを作る
その項目高さを14に変える
その位置と大きさを{13、62、164、237}に変える

ラベル3というラベルを作る
その内容を「内容(&E)」に変える
その位置と大きさを{192、47、39、12}に変える

テキスト領域1というテキスト領域を作る
その位置と大きさを{192、62、344、237}に変える

//テキスト領域に加えられた変更をチェックしたり、
//上書き保存する手順は、このプログラムには含まれていないため、
//ここで編集しても、結果は元のファイルに反映されません。
//ですから、読み取り専用にしてもかまいません。

コピーボタンというボタンを作る
その内容を「コピー(&C)」に変える
その位置と大きさを{13、314、75、23}に変える

コピー閉じるボタンというボタンを作る
その内容を「コピーして閉じる(&P)」に変える
その位置と大きさを{96、313、120、23}に変える

フォルダボタンというボタンを作る
その内容を「フォルダを開く(&D)」に変える
その位置と大きさを{225、313、105、23}に変える

閉じるボタンというボタンを作る
その内容を「閉じる(&X)」に変える
その位置と大きさを{461、314、75、23}に変える
この取消ボタンを、閉じるボタンに変える

終わり

ーー参照
参照ボタンがクリックされた時の手順
フォルダ選択画面の説明を、「表示するフォルダを選択してから OK のボタンを押して下さい。」に変える
フォルダ選択画面を表示する
もしフォルダ選択画面のキャンセルなら、手順から抜ける
アプリ設定:「ルート」で「フォルダ名」へ「[フォルダ選択画面のフォルダ名]」を設定する
テキスト1の内容を、「[フォルダ選択画面のフォルダ名]」に変える
もし、テキスト1の内容が「」でないなら

//フォルダ選択画面から、フォルダ名が入力されたか一応チェックします。

「[テキスト1の内容]」を、ツリー1にフォルダ追加する
もし終わり
終わり

ーーフォルダ追加
[ノード]に、[パス]を、フォルダ追加する手順
【フォルダ名たち】
フォルダ名たちは、パスのフォルダの一覧
【フォルダ名】
【子ノード】
フォルダ名たちをフォルダ名にそれぞれ繰り返す
子ノードは、ノード:フォルダ名を追加したもの
子ノードに、パス&「\」&フォルダ名をフォルダ追加する
繰り返し終わり

【ファイル名たち】
ファイル名たちは、(パス&「\*.txt;*.rdr」)のファイルの一覧

//*.txt;*.rdr の所で、読み込む対象の拡張子を指定します。
//ここでは、テキストファイルとプロデルファイルの二つを指定しています。

【ファイル名】
ファイル名たちをファイル名にそれぞれ繰り返す
ノード:ファイル名を追加する
繰り返し終わり
終わり

ーーツリー1が選択された
ツリー1が選択された時の手順
ルートは、アプリ設定:「ルート」から「フォルダ名」を取得したもの

//[ツリーの選択項目のフルパス]には、ルートのフォルダ名が含まれないため、
//読み込んだフォルダ(ルート)のパスを取得します。

ファイル名は、ツリー1の選択項目のフルパス

//[選択項目のフルパス]というのは、リファレンスには記載されていません。
//サンプルか掲示板かどこかで見かけたような気がするのですが、
//どこでだったか忘れてしまいました。

拡張子は、ファイル名の拡張子だけ

//[選択項目のフルパス]は、フォルダの場合でも \ が末尾に付きません。
//そのため、拡張子の有無でファイル/フォルダの判定を行なっています。

もし、拡張子が「」なら

//ファイル名 = 選択項目のフルパスに拡張子が含まれていなければ、
//フォルダが選択されていると判定します。

テキスト領域1をクリアする

//既にファイルの内容を読み込んで表示されている文字列をクリアします。

手順から抜ける
でないなら //ツリーで選択されているのがファイルなら
文字1は、「[ルート][ファイル名]」から読み込んだもの

//最初に取得したルートフォルダのパスと、その先のファイルパスを繋げて、
//そのファイルから内容(文字列)を読み込みます。

テキスト領域1の内容を、文字1に変える

//読み込んだ文字列を、テキスト領域に表示します。

テキスト領域1を0に移動する
もし終わり
終わり

ーーコピー
コピーボタンがクリックされた時の手順
テキスト領域1の内容を、クリップボードにコピーする
終わり

ーーコピーして閉じる
コピー閉じるボタンがクリックされた時の手順
テキスト領域1の内容を、クリップボードにコピーする
0.5秒 待つ

//クリップボードにコピーして、すぐにウィンドウを閉じると、
//エラーが発生することがあるため、待ち時間を設定しています。

自分を閉じる
終わり

ーーフォルダボタン
フォルダボタンがクリックされた時の手順
「[テキスト1の内容]」を起動する

//Explorerが起動して、ルートのフォルダを開きます。
//元のファイルの編集は、ここから行なうようにしています。

終わり

ーー閉じるボタン
閉じるボタンがクリックされた時の手順
自分を閉じる
終わり

終わり

──────────────────────────────
posted by yanikun at 10:26| Comment(0) | TrackBack(0) | produire

基本的なウィンドウ部品の配置例 その8 簡易テキストビューワー

今回は、指定したフォルダの中のテキストファイルやプロデルファイル・HTMLファイルの一覧を、ツリー(ビュー)に読み込み、ツリーを選択すると、そのファイルの内容がテキスト領域に表示される、というプログラムを紹介します。

プロデルやHTMLには、頻繁に使用する文字列が存在します。いわゆる「テンプレ」です。
そうした文字列をテキストファイルやプロデルファイル・HTMLファイルに保存し、一つのフォルダの中のサブフォルダに格納しておき、この「簡易テキストビューワー」で呼び出して使うと便利です( 私も実際に使用しています)。

なお、プロデルでは、文字列を他のアプリケーションにペーストする機能がうまく動作してくれません( 私がうまく出来ないだけかもしれませんが……)。そのため、クリップボードにコピーする所までの処理になっています。

──────────────────────────────
■準備

@まず、読み込む対象となるファイル/フォルダが必要です。
そういうものは無いし 面倒だ、という人はどこか適当なフォルダを指定して下さい。

A任意の場所に、適当なフォルダを作成して、プログラムのファイルと設定ファイル「settings.ini」を格納して下さい。

面倒くさいという人は、下記のファイルをダウンロードして、適当な場所に解凍して下さい。解凍すると、「easy-textviewer」というフォルダが得られます。フォルダの中には、

easy-textviewer.exe
easy-textviewer.rdr
settings.ini

という三つのファイルが入っています。

http://talk-pc.sakura.ne.jp/produire/easy-textviewer.zip

──────────────────────────────
■注意

ツリービューを、あまりにも素速く操作しようとすると、エラーになる場合があります。適度なスピードで操作して下さい。

──────────────────────────────
■プログラム
──────────────────────────────

プログラムのタイトルは、「簡易テキストビューワー」
「Produire.WinControl.dll」を利用する
「Produire.File.dll」を利用する
アプリ設定という設定ファイルを作る
アプリ設定のファイル名は、「[プログラムのフォルダ]settings.ini」

メイン画面を表示する
待機する

メイン画面とは
ウィンドウを継承する

はじめの手順
初期化する
ルートは、アプリ設定:「ルート」から「フォルダ名」を取得したもの
もし、ルートが「」でないなら
テキスト1へ、「[ルート]」を挿入する
「[ルート]」を、ツリー1にフォルダ追加する
ツリー1へフォーカスする
もし終わり
終わり

初期化する手順
この内部領域大きさを{548、349}に変える
この内容を「[プログラムのタイトル]」に変える
この初期位置を「中央」に変える

ラベル1というラベルを作る
その内容を「フォルダ(&D)」に変える
その位置と大きさを{12、16、39、12}に変える

テキスト1というテキストを作る
その位置と大きさを{73、13、382、19}に変える
その読み取り専用を○に変える

参照ボタンというボタンを作る
その内容を「参照(&B)」に変える
その位置と大きさを{461、9、75、23}に変える

ラベル2というラベルを作る
その内容を「ファイル選択(&F)」に変える
その位置と大きさを{13、46、39、12}に変える

ツリー1というツリーを作る
その項目高さを14に変える
その位置と大きさを{13、62、164、237}に変える

ラベル3というラベルを作る
その内容を「内容(&E)」に変える
その位置と大きさを{192、47、39、12}に変える

テキスト領域1というテキスト領域を作る
その位置と大きさを{192、62、344、237}に変える

コピーボタンというボタンを作る
その内容を「コピー(&C)」に変える
その位置と大きさを{13、314、75、23}に変える

コピー閉じるボタンというボタンを作る
その内容を「コピーして閉じる(&P)」に変える
その位置と大きさを{96、313、120、23}に変える

フォルダボタンというボタンを作る
その内容を「フォルダを開く(&D)」に変える
その位置と大きさを{225、313、105、23}に変える

閉じるボタンというボタンを作る
その内容を「閉じる(&X)」に変える
その位置と大きさを{461、314、75、23}に変える
この取消ボタンを、閉じるボタンに変える

終わり

ーー参照
参照ボタンがクリックされた時の手順
フォルダ選択画面の説明を、「表示するフォルダを選択してから OK のボタンを押して下さい。」に変える
フォルダ選択画面を表示する
もしフォルダ選択画面のキャンセルなら、手順から抜ける
アプリ設定:「ルート」で「フォルダ名」へ「[フォルダ選択画面のフォルダ名]」を設定する
テキスト1の内容を、「[フォルダ選択画面のフォルダ名]」に変える
もし、テキスト1の内容が「」でないなら
「[テキスト1の内容]」を、ツリー1にフォルダ追加する
もし終わり
終わり

ーーフォルダ追加
[ノード]に、[パス]を、フォルダ追加する手順
【フォルダ名たち】
フォルダ名たちは、パスのフォルダの一覧
【フォルダ名】
【子ノード】
フォルダ名たちをフォルダ名にそれぞれ繰り返す
子ノードは、ノード:フォルダ名を追加したもの
子ノードに、パス&「\」&フォルダ名をフォルダ追加する
繰り返し終わり

【ファイル名たち】
ファイル名たちは、(パス&「\*.txt;*.rdr」)のファイルの一覧
【ファイル名】
ファイル名たちをファイル名にそれぞれ繰り返す
ノード:ファイル名を追加する
繰り返し終わり
終わり

ーーツリー1が選択された
ツリー1が選択された時の手順
ルートは、アプリ設定:「ルート」から「フォルダ名」を取得したもの
ファイル名は、ツリー1の選択項目のフルパス
拡張子は、ファイル名の拡張子だけ
もし、拡張子が「」なら
テキスト領域1をクリアする
手順から抜ける
でないなら
文字1は、「[ルート][ファイル名]」から読み込んだもの
テキスト領域1の内容を、文字1に変える
テキスト領域1を0に移動する
もし終わり
終わり

ーーコピー
コピーボタンがクリックされた時の手順
テキスト領域1の内容を、クリップボードにコピーする
終わり

ーーコピーして閉じる
コピー閉じるボタンがクリックされた時の手順
テキスト領域1の内容を、クリップボードにコピーする
0.5秒 待つ
自分を閉じる
終わり

ーーフォルダボタン
フォルダボタンがクリックされた時の手順
「[テキスト1の内容]」を起動する
終わり

ーー閉じるボタン
閉じるボタンがクリックされた時の手順
自分を閉じる
終わり

終わり

──────────────────────────────
posted by yanikun at 10:07| Comment(0) | TrackBack(0) | produire