桐の釣魚大全のトップ > 目からウロコのデータベース桐プログラミング入門 パート2
トップページに戻る

鋭意校正中です。
念のためにブラウザでF5キーを押してリロードしてからお読みください。

目からウロコのデータベース桐プログラミング入門 パート2 ― 桐のイベント処理の入門講座の副読本
              By ONnoji Copyright (C) 2024
このテキストの内容は、[フォーム+イベント処理]の初級者向けです。
パート2で初級者の前に最初に立ちはだかる難問は、「オブジェクトって何ですか〜?」です。
なお、このテキストは拙作webページの「桐の釣魚大全」の
「桐のイベント処理の入門講座」
 新 フォームアプリケーション入門 §1
 新 フォームアプリケーション入門 §2
の副読本として執筆したものです。

目次

10     オブジェクトって何ですか〜?
10.1   オブジェクトは、パソコンの画面上の操作対象のこと
10.2   [オブジェクトのリスト]ウィンドウを使いましょう
11     属性ってなんですか〜?
11.1   [オブジェクトの属性]ウィンドウと[オブジェクトのリスト]ウィンドウの違い
11.2   属性の取得と属性の設定
11.2.1 属性の取得
11.2.2 オブジェクトの属性と変数のデータ型
11.2.3 属性の設定
12     メソッドってなんですか〜?
12.1   メソッド呼び出し
12.2   [更新モード設定]メソッドを使うか? コマンドボタンの機能を使うか?、それが問題だ
12.3   [フォーカス設定]メソッドを使うか? タブオーダーの設定を使うか?、それが問題だ
13     エラー対策のあれこれ
13.1   if ( 条件 ) ... else ... end
13.2   エラー処理コマンドはあるけれど
13.3   桐コンバータで (.wfm → .wfx)に変換したフォーム

 ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
10 オブジェクトって何ですか〜?
 変数と聞いて数学を連想してしまった人がいるように、オブジェクトと聞いてオブジェクト指向という言葉を連想した人もいることでしょう。
しかし、桐の「フォーム+イベント処理」はオブジェクト指向プログラミング (OOP; object-oriented programming 注1)でも、オブジェクト指向 (OO; object-oriented 注2)でもありませんよ。
試しに「桐 - ヘルプ」で、"オブジェクト指向"  というキーワードを検索してみてください。
"オブジェクト何々"という複数のキーワードが見つかりますが、決して "オブジェクト指向" というキーワードは見つかりません。
まず、以上のポイントを押さえた上で、改めて「オブジェクトって何ですか〜?」ということを考えてみましょう。
10.1 オブジェクトは、パソコンの画面上の操作対象のこと
 "オブジェクト"ってカタカナで書きますが、元々は英語の Object です。
英語の Object は意味の広い言葉なので代表的な例を以下に見てみましょう。
突然ですが、ここでクイズです。

《オブジェクト クイズ》

 「桐のフォームのオブジェクト」の意味として一番適しているのは次の3つのうちのどれでしょうか?

A.【英語の対象や文法の場合】  出典 精選版 日本国語大辞典 「オブジェクト」の意味・読み・例文・類語
  1《名詞》 ( [英語] object ) 対象。客観。
  2文法では、目的語をいう。⇔サブジェクト。

B.【パソコンの場合】       出典 パソコンで困ったときに開く本 「オブジェクト」の解説
  「物体」や「目的」を意味する言葉で、パソコンでは画面上の操作対象を指すことが多いです。
  例えば、ウィンドウズのアイコンやウィンドウ、ツールバー、あるいは、画面上のボタンやスライダー等はすべてオブジェクトとみなすことができます。
  また、ワープロでは文章が「テキストオブジェクト」、画像は「画像オブジェクト」になるといった具合です。

C.【オブジェクト指向関係の場合】 出典 ASCII.jpデジタル用語辞典 「オブジェクト」の解説
  ソースコードのまとまりオブジェクト指向言語において、操作する対象、あるいは、ある処理や機能について書かれたソースコードのまとまりのこと。
  Javaにおいてはクラスのインスタンス、または配列のこと。

正解は、【B】です。
つまり、パソコンの画面上の操作対象のことをオブジェクトと呼ぶのでありました。(^^)ok
ということで、「フォーム+イベント処理」では、フォームのフォーム明細部・フォームヘッダ部・フォームフッタ部・ワークスペースや、
これらに表示されているボタンやスライドバーをオブジェクトと呼ぶのです。
もちろん、フォームを定義した人がフォームの上に作成したテキストボックスやコマンドボタンなどもオブジェクトと呼びますよ。
以上、「なぁ〜んだ、そんだけぇ〜!」という感想を持った人も多いのではないでしょうか。(^^♪
しかし、今まで単純にオブジェクトという言葉の響きだけで、「MS Windows や Win桐ってオブジェクト指向なんだぁ〜」と漠然と思っていませんでしたか??
ハッキリ申し上げましょう、それは大きな勘違いですゾとね。
 (注1)コンピュータの中で MS Windows やWin桐として実行されるプログラムは、C++ 等のオブジェクト指向プログラミング言語(OOPL; object-oriented programming language)で開発・作成されたものです。
     ・メッセージ指向のOOP … メッセージングによる可能な限り動的な処理・実装・設計  ※代表的なOOPL は Smalltalk
     ・クラス指向のOOP   … 抽象データ型のスーパーセットと継承によるプログラミング ※代表的なOOPL は C++
 (注2)オブジェクト指向とは、ある役割を持ったモノごとにクラス(設計図)を分割し、モノとモノとの関係性を定義していくことでシステムを作り上げようとするシステム構成の考え方のことです。
10.2 [オブジェクトのリスト]ウィンドウを使いましょう
 フォームの定義画面で、[書式]メニュー → [オブジェクトのリスト]を選ぶと、[オブジェクトのリスト]ウィンドウでフォーム内のすべてのオブジェクトを一覧できます。
[オブジェクトのリスト]ウィンドウには、[一覧]サイド(左面)と[属性]サイド(右面)があります。
片方のサイド(面)しか見えない時には、見えているサイド(面)を右クリックして右メニューの[一覧 属性 両方]で "両方" を選びます。
左面と右面の境界の上にマウスポインタを位置付けると、ポインタの形状が変わりマウスドラッグで幅を変更できます。
[オブジェクトのリスト]ウィンドウと[オブジェクトの属性]ウィンドウはリンク(連動)しています。
[オブジェクトの属性]ウィンドウで表示される内容は、[オブジェクトのリスト]ウィンドウでも表示されます。
しかし、[オブジェクトの属性]ウィンドウはよく利用する属性をまとめた要約であり、[オブジェクトのリスト]ウィンドウは全ての属性を表示する詳細です。

11.属性ってなんですか〜?
 オブジェクトの属性は、オブジェクトの情報のことです。
つまり、オブジェクトのデータです。
エクセルではプロパティと呼ばれていますからご存じの人が多いのではないでしょうか?。
実は[オブジェクトの属性]ウィンドウには、[詳細プロパティ]と[簡易プロパティ]というモードがあって、桐の場合においてもプロパティという言葉を使っていますよ。
※フォーム定義画面の[書式]メニュー → [定義画面の設定] → [詳細プロパティを使用する]チェックボックス ※桐10以降のデフォルトはオンです
11.1 [オブジェクトの属性]ウィンドウと[オブジェクトのリスト]ウィンドウの違い
 フォーム定義画面では[オブジェクトの属性]ウィンドウと[オブジェクトのリスト]ウィンドウの両方でオブジェクトの属性を確認できます。
[オブジェクトの属性]ウィンドウはよく利用する属性をまとめた要約であり、[オブジェクトのリスト]ウィンドウは全ての属性を表示する詳細です。
例えば、"始点X" "始点Y" というオブジェクトの属性は、フォームのフォーム明細部・フォームヘッダ部・フォームフッタ部・ワークスペースに作成・配置したオブジェクトの位置情報のことです。
ところで[オブジェクトの属性]ウィンドウの[表示]タブの "始点X" と "始点Y" は、[オブジェクトのリスト]ウィンドウの[書式]タブでも同じく "始点X" と "始点Y" ですが、
[オブジェクトの属性]ウィンドウの[表示]タブの "表示幅" は、[オブジェクトのリスト]ウィンドウの[書式]タブでは "幅" と異なっています。
正式なオブジェクトの属性名は[オブジェクトのリスト]ウィンドウに表示される方なのでこのことは是非覚えておいてください。
11.2 属性の取得と属性の設定
 属性の取得はすべてのオブジェクトのすべての属性で可能です。
一方、属性の設定の方はオブジェクトの種類によっては不可能な属性があります。
11.2.1 属性の取得
 属性の値を取得して変数に格納するには、[オブジェクト操作]コマンドを使います。
 〔使用例〕
 変数:&functionName1 と変数:&functionParameter1 に オブジェクト名:cmdButtonName の属性:機能名1 と属性:機能パラメータリスト1 の値を代入します。

 A.オブジェクト操作 &functionName1 = @cmdButtonName.機能名1, &functionParameter1 = @cmdButtonName.機能パラメータリスト1

 B.&objectName = "cmdButtonName"
   オブジェクト操作 &functionName1 = &objectName.機能名1, &functionParameter1 = &objectName.機能パラメータリスト1

 C.オブジェクト操作 @cmdButtonName{ &functionName1 = 機能名1, &functionParameter1 = 機能パラメータリスト1 }

 D.&objectName = "cmdButtonName"
   オブジェクト操作 &objectName{ &functionName1 = 機能名1, &functionParameter1 = 機能パラメータリスト1 }
Aの形式のコマンドの雛形は、イベント定義画面の[入力]メニュー → [オブジェクトのリスト]を選び[オブジェクトのリスト]ウィンドウを表示します。
※または、あらかじめフォーム定義画面で[オブジェクトのリスト]ウィンドウを表示した状態から、イベント定義画面へ切り替えても同じです。
例えば、[オブジェクトのリスト]ウィンドウの[属性]サイド(右面)の下の領域(ペイン)に次の例のような雛形が表示されていますので、
  (例) オブジェクト操作 ハンドル= 変数名 =@cmd表示.機能名1"表示"
[生成する書式]リストボックスで、"取得"を選択して、[挿入]ボタンを実行します。
この時にイベント処理に雛形が生成されるので "ハンドル="というパラメータを削除します。※フォーム+イベント処理ではこのパラメータを省略します
そして、変数名を任意の変数名に書き換えます
                    変数名を任意の変数名に書き換えます
                      ↓
(雛形の例) オブジェクト操作 ハンドル= 変数名 =@cmd期間指定絞込.機能名1"表示"
                 ↑                    ↑
         
この部分の "ハンドル=" は削除します     この部分の "表示" は削除します

(修正後)  オブジェクト操作 &variableName = @cmd期間指定絞込.機能名1

11.2.2 オブジェクトの属性と変数のデータ型
 イベント定義画面の[入力]メニュー → [オブジェクトのリスト]を選び[オブジェクトのリスト]ウィンドウを表示します。
※または、あらかじめフォーム定義画面で[オブジェクトのリスト]ウィンドウを表示した状態から、イベント定義画面へ切り替えても同じです。
例えば、[オブジェクトのリスト]ウィンドウの[属性]サイド(右面)の下の領域(ペイン)に次のように雛形が表示されていますので、

                   
変数を任意の変数名に書き換えます
                     ↓
  (例) オブジェクト操作 ハンドル= 変数名 =@cmd表示.幅"136.5 pt"
                ↑              ↑
         
この部分の "ハンドル=" は削除します この部分の "136.5 pt" は削除します

[生成する書式]リストボックスで、"取得"を選択して、[挿入]ボタンを実行します。
この場合の属性の "幅" は長さの属性ですので、

 オブジェクト操作 &文字列型の変数 = @cmd表示.幅 ※デフォルトではポイント( pt )単位で取得します

  または

 オブジェクト操作 &長整数型の変数 = @cmd表示.幅 ※トゥイップス( twips )単位で取得します

のように、属性の値を格納する変数のデータ型は文字列型と長整数型のどちらでもOKです。
つまり、{ 始点X,  始点Y,  幅,  高さ } の属性は座標や長さですので、数値系の変数に twips という単位で格納できます。※"1 pt" は 20( twips )です。
なお、Win桐のフォームでは、属性の値をポイント "pt" で指定しても、内部では twips に変換して動作しますので、最初から twips で指定する方が誤差がありません。
11.2.3 属性の設定
属性の値をオブジェクトに設定するにも、[オブジェクト操作]コマンドを使います。
これは、属性の取得の書式とよく似ていますが、属性名 = 値 と左辺と右辺が取得の場合の逆になります。

 〔使用例〕
 オブジェクト名:cmdButtonName の属性:機能名1 と属性:機能パラメータリスト1 に値を設定します。

 E.オブジェクト操作 @cmdButtonName.機能名1 = "表示", 機能パラメータリスト1 = "" }

 F.&objectName = "cmdButtonName"
   オブジェクト操作 @cmdButtonName.機能名1 = "表示",機能パラメータリスト1 = "" }

 G.オブジェクト操作 @cmdButtonName{ 機能名1 = "表示",機能パラメータリスト1 = "" }

 H.&objectName = "cmdButtonName"
   オブジェクト操作 &objectName{ 機能名1 = "表示",機能パラメータリスト1 = "" }

Eの形式のコマンドの雛形は、イベント定義画面の[入力]メニュー → [オブジェクトのリスト]を選び[オブジェクトのリスト]ウィンドウを表示します。
※または、あらかじめフォーム定義画面で[オブジェクトのリスト]ウィンドウを表示した状態から、イベント定義画面へ切り替えても同じです。
例えば、[オブジェクトのリスト]ウィンドウの[属性]サイド(右面)の下の領域(ペイン)に次のように雛形が表示されていますので、

  (例) オブジェクト操作 ハンドル= @cmd表示.機能名1 = "表示"

[生成する書式]リストボックスで、"設定"を選択して、[挿入]ボタンを実行します。
この時にイベント処理に雛形が生成されるので "ハンドル="というパラメータを削除します。※フォーム+イベント処理ではこのパラメータを省略します

(雛形の例)  オブジェクト操作 ハンドル= @cmd表示.機能名1 = "表示"
                  ↑
          
この部分の "ハンドル=" は削除します

12.メソッドってなんですか〜?
 さて、最初に「オブジェクト」、そして次に「属性」ときたので、最後に「メソッド」が登場します。
この「メソッド」という言葉も「オブジェクト」という言葉と同様に意味が広い言葉です。
突然ですが、ここでクイズです。
《メソッド クイズ》

 フリー百科事典『ウィキペディア』で「曖昧さを回避」するページを閲覧すると次のように書いてありました。
 「桐のフォームのオブジェクトのメソッド」の意味として一番適しているのは次の6つのうちのどれでしょうか?

 A.楽器の奏法
 B.教育や音楽やバレエ、演劇の分野における教授方法
 C.技術・製品開発技法
 D.プレゼンテーション技法
 E.エクササイズの方式
 F.メソッド (計算機科学) - オブジェクト指向言語において、オブジェクトに対する操作のこと


正解は【F】です。
「メソッド」とは「オブジェクトに対する操作のこと」ですよ。
なお「オブジェクト指向言語において」という部分は、Win桐が C++というオブジェクト指向プログラミング言語で開発・作成されていることに関係しています。
しかし、「オブジェクト」の項で説明したように、桐の「フォーム+イベント処理」はオブジェクト指向プログラミング (OOP; object-oriented programming 注1)でも、オブジェクト指向 (OO; object-oriented 注2)でもありません。
それでも「メソッド」と呼ぶのは、コンピュータの世界では「オブジェクトに対する操作」のことを「メソッド」と呼ぶことが普通だからです。
ちなみに「オブジェクトに対する操作」と漠然と説明されても直感的にピンと来ませんよね。
それでも[操作]はまだマシな方でして、もしもオブジェクト指向(OO)風に[振る舞い]と説明されたなら更にチンプンカンプンになりますよね。
ということで「メソッド」は「フォームのそれぞれのオブジェクトの中にあらかじめ登録されている手続き」だと考えると理解し易いと思います。

 【引用】14 オブジェクトとメソッド|桐の釣魚大全のトップ > フォームアプリケーション教書 第1部より
  まとめ
  Win桐のフォームの場合
  ・[オブジェクト]           … 単に対象物のことであったり、コントロール部品やUI部品のこと
  ・[オブジェクト]のプロパティ(属性) … オブジェクトの{ 始点X 始点Y 幅 高さ etc. }の情報
  ・[オブジェクト]のメソッド      … オブジェクトに予め組み込まれているプロシージャ(手続き)

12.1 メソッド呼び出し
[メソッド呼び出し]は、「フォームのそれぞれのブジェクトの中にあらかじめ登録されている手続き」であるメソッドを実行するコマンドです。
ちなみに[桐 - ヘルプ]で、コマンドとメソッドが区別されている理由は、「コマンド」が桐言語であるのに対して、「メソッド」はオブジェクトに組み込まれている手続きであるからです。
しかし、ざっくりと「メソッド」も手続きの一種と考えて、[手続き実行]コマンドの仲間みたいなものだと思って差し支えありませんよ。
「メソッド」の一例として、コマンドボタンに登録されている[実行]メソッドを次に示します。

 変数宣言 自動,整数{ &return }
   :
   :
 メソッド呼び出し 戻り値 = &return,@cmd閉じる.実行()
 ** &return
 ** 値  意味
 ** 1   正常終了。
 ** 1以外 実行できない。またはエラーで終了した。

メソッドは、オブジェクトの種類によって呼び出せるメソッドが決まっているので、詳しくは[桐 - ヘルプ]を確認してください。
12.2 [更新モード設定]メソッドを使うか? コマンドボタンの機能を使うか?、それが問題だ
 初級者の場合、覚えたばかりのことはいろいろ試したくなりますよね。もちろんそれで良いのですが・・・(^^ok
しかし、実際の「フォーム+イベント処理」では[更新モード設定]メソッドよりもコマンドボタンの方を多く使います。
例えば、NULLフォームをダイアログボックスとしての開いた時に、表示モードでは無く訂正モードになっている方が入力オペレータに対して親切ですよね。
この場合には
a フォームの[開始時実行]コマンドボタンを利用する
 または
b フォームの[更新モード設定]メソッドを利用する
の2つの選択肢があります。
この場合には、aの方法の方が簡単で便利です。そうです、[開始時実行]コマンドボタンの[機能名1] に "訂正" を指定すれば一発でOKです。
bの場合には[フォーム開始]イベントハンドラを作成して、その中でメソッドを実行することになりますが、それには問題があります。
実は[フォーム開始]イベントハンドラが実行されている時点では、フォームは描画(ドロー)されていないのです。
だから、まだフォームの姿が現れていない時に[更新モード設定]メソッドを実行するのは変だと思いませんか?
という理由から、aの方法が基本になります。
また、コマンドボタンから、一般手続きを実行する場合、ほとんどの場合にフォームが "表示モード" でないとコマンドの実行がエラーになります。
それは、大部分のコマンドが "表示モード" でしか実行できないからです。
この場合には
c コマンドボタンの機能名1 で "表示"
  コマンドボタンの機能名2 で "手続き実行"

 または

d 呼び出した一般手続きの中で、フォームの[更新モード設定]メソッドで表示モードに遷移する

の2つの選択肢があります。
この場合には、cの方法の方が簡単で便利です。そうです、機能名1 に表示を指定すれば一発でOKですからね。
つまり、一般手続きの中に[更新モード設定]メソッドを記述する余計な手間が省けます。(^^♪
12.3 [フォーカス設定]メソッドを使うか? タブオーダーの設定を使うか?、それが問題だ
 初級者の場合、覚えたばかりのことはいろいろ試したくなりますよね。もちろんそれで良いのですが・・・(^^ok
しかし、実際の「フォーム+イベント処理」では[フォーカス設定]メソッドよりもタブオーダの方を多く使います。
フォーム定義画面の[書式]メニュー → [タブオーダーの設定]を選ぶと

 ・タブストップ … [Tab]キーでフォーカス移動できるようにするにはON、移動できなくするにはOFFにします。
 ・改行方向   … [Enter]キーを押したときの改行方向を指定します。

の設定が出来ます。

普通の場合には、タブストップと改行方向の設定だけで十分です。
しかし、[フォーカス設定]メソッドでフォーカスを強制的に移動する事も出来ます。

 変数宣言 自動,整数{ &return }
   :
   :
 メソッド呼び出し 戻り値 = &return, txt住所.フォーカス設定()
 ** &return
 ** 値 意味
 ** 1  フォーカスを移した
 ** 0  フォーカスを移せなかった
 ** -1 フォーカス設定できないハンドラ内で実行した

しかし、論理的な必然性がなく(恣意的に)アッチコッチ(彼方此方)へフォーカスが移動するようなユーザインタフェースを作ってしまう可能性がありますので十分注意してください。

13 エラー対策のあれこれ 
13.1 if ( 条件 ) ... else ... end
if ... else ... end は、

 if ( 条件 )

  ** 条件を満たす場合の処理範囲 ※通常の処理を

 else

  ** 条件を満たさない場合の処理範囲 ※エラー関連の処理を

 end

となりますが、初級者は[条件を満たす場合の処理範囲]でエラー対策を行ってしまう傾向があります。
しかし、これは[条件を満たす場合の処理範囲]で【通常の処理】を、そして[条件を満たさない場合の処理範囲]で【エラー関連の処理】を行うようにします。
なるほど!、言われてみればそうする方が確かに自然な流れですね。
それでも、プログラミングを始めたばかりの初級者はエラー関連の処理に気を奪われてしまいがちです。

【好ましくない例】

 if ( エラーの条件 )
   :
  メッセージボックス &title, "残念!エラーです", アイコン = E, ボタン指定 = 1
   :
 else
   :
   :
 end

【好ましい例】

 if ( .not エラーの条件 )
   :
   :
 else
   :
  メッセージボックス &title, "残念!エラーです", アイコン = E, ボタン指定 = 1
   :
 end

常に[条件を満たす場合の処理範囲]で通常の処理を記述している場合には、
プログラムを読み返した時に if ( 条件 ) ... else の範囲だけを見るだけで、プログラムの内容が把握できます。
そして、else ... end の範囲はプログラムの内容と関係が無いエラー処理ということになります。
これはちょっとした工夫ですが、覚えておくと便利ですよ。
なお、if ( 条件 ) の条件式が作成し難い場合には、否定演算子( .not )を使って条件式の結果を反転させてしまうのもアリです。
例えば、

 if ( .not #eof )
  :
  :
 else
  :
  :
 end

とかね。(^^ゞ
13.2 エラー処理コマンドはあるけれど
 エクセルのVBAを知っている人の場合、VBAの[ On Error ステートメント]に相当する桐のコマンドを使いたいという思う人が現れても不思議ではありません。
実は、桐には[エラー処理]というコマンドがあります。※桐9-2012 までは非公開のコマンドでした。
しかし、結論から申し上げると、桐でこの[エラー処理]コマンドを実行する必要はまずありません。
その理由は、多くのコマンドにおいて、そのコマンドが実行出来たか否かの結果を変数に格納する[終了状態 = <変数名>]パラメータが用意されているからです。
また、使用するファイルがディスクに存在しなかった場合の対処に使用するのもNGです。
その場合には、#ファイルサイズ( )という関数を使用して判定できますゾ。(^^ok
なによりも厄介なのは[エラー処理]コマンドを使うと、単純なスペルミスによる文法エラーも拾ってしまうのです。
そうなると、何が何だかサッパリ分からなくなってプログラムのテスト(デバッグ)どころではなくなってしまいます。
ということで、初級者は[エラー処理]コマンドを使わないと覚えてください。
13.3 桐コンバータで (.wfm → .wfx)に変換したフォーム
13.3.1 フォームのオブジェクト名をチェックする
桐9sまでの桐と桐10以降の桐では[オブジェクトのリスト]のルート(最上位)のフォームのオブジェクト名が異なります。
すなわち、

 桐9sまでの桐 フォーム   ← 半角のカタカナです

 桐10以降の桐 フォーム ← 全角のカタカナです

です。
しかし、桐コンバータで (.wfm → .wfx)に変換したフォームの場合には、フォームのオブジェクト名が半角のカタカナのままです。
この場合、次の

 フォーム ワークスペース フォームヘッダ部 フォーム明細部 フォームフッタ部
 フォーム操作バー グループ操作バー レコード操作バー 行セレクタ

というオブジェクトを対象にした[オブジェクト操作]コマンドと[メソッド呼び出し]コマンドを用いる際に注意が必要です。
つまり、オブジェクト名を半角のカタカナにしなければエラーになってしまうのです。
そこで[エラー処理]コマンドを使って、[オブジェクトのリスト]のルート(最上位)のフォームのオブジェクト名が半角のカタカナか全角のカタカナかを調べなければなりません。
以下の簡単なサンプルを示しますのでご参考にしてください。
■サンプル
〔考え方の解説〕
まず、局所変数:&mFrormObjectName に初期値として #全角( "フォーム" )を代入します。
そして、ポイントは[オブジェクトのリスト]のルート(最上位)の[フォーム]オブジェクトは必ず存在するということです。
ということは、[フォーム開始]イベントも必ず存在するということです。
従って、[オブジェクト操作(取得)]コマンドで[フォーム開始]イベントの属性を自動変数:&eventFormBeginStatus に取得します。

 オブジェクト操作 &formObjectName{ &eventFormBeginStatus = フォーム開始 }
                                 ↑
 ※(重要)オブジェクト名は半角と全角が区別されますが、属性名では半角と全角は区別されません。(^^ok

この時、フォームのオブジェクト名が #全角( "フォーム" )でない場合には、エラーになります。
そうすると[オブジェクト操作]コマンドの直前にセットした エラー処理 手続き名 = "prcOnErrorEventFormBeginGet" によって一般手続き:prcOnErrorEventFormBeginGet( )が呼び出されます。
一般手続き:prcOnErrorEventFormBeginGet( )では、局所変数:&mFrormObjectName に #半角( "フォーム" )を代入します。
一般手続き:prcOnErrorEventFormBeginGet( )から復帰したら、パラメータを指定しない[エラー処理]コマンドを実行して、エラー処理の割り込みを解除します。

名札 メイン

└ prcFormObjectNameCheck ※&mFrormObjectName = #全角( "フォーム" )
  │
  :
 エラー処理 手続き名 = "prcOnErrorEventFormBeginGet"
  :
  └ prcOnErrorEventFormBeginGet ※&mFrormObjectName = #半角( "フォーム" )

名札 メイン
 変数宣言 局所,文字列{ &mFrormObjectName } /* この変数に#全角( "フォーム" )または#半角( "フォーム" )のどちらかの値が代入される */

 手続き実行 prcFormObjectNameCheck( )
 トレース出力 _&mFrormObjectName


手続き定義開始 prcFormObjectNameCheck( )
 変数宣言 自動,文字列{ &icon, &title = "prcFormObjectNameCheck( )", &msg }
 変数宣言 自動,整数 { &eventFormBeginStatus }

 &mFrormObjectName = #全角( "フォーム" ) /* 初期値として #全角( "フォーム" )を代入する */

 条件 ( #バージョン番号 >= 10 ) エラー処理 手続き名 = "prcOnErrorEventFormBeginGet"
 オブジェクト操作 &formObjectName{ &eventFormBeginStatus = フォーム開始 }
 条件 ( #バージョン番号 >= 10 ) エラー処理 /* 解除を忘れずに */

 ** 桐10 では、フォームオブジェクト名が 半角 と 全角 の2種類ある
 ** 桐9 等から変換したフォームでは #半角( "フォーム" )
 ** 桐10で新規作成したフォームでは #全角( "フォーム" )

手続き定義終了

手続き定義開始 prcOnErrorEventFormBeginGet( )
 変数宣言 自動,文字列{ &icon, &title = "prcOnErrorEventFormBeginGet( )", &msg }

 &mFrormObjectName = #半角( "フォーム" ) /* [エラー処理コマンド]が実行されたので #半角( "フォーム" )を代入する */

手続き定義終了

13.3.2 フォーム以外のオブジェクト名をチェックする
 フォームのオブジェクトが分ってしまえば、後は芋ずる式に調べることが可能です。
すなわち、フォーム以外のオブジェクトである以下の

  ワークスペース フォームヘッダ部 フォーム明細部 フォームフッタ部
  フォーム操作バー グループ操作バー レコード操作バー 行セレクタ

は[オブジェクト検査]メソッドを使うことでオブジェクトが存在するか否かを調べられます。
以下の例では、"フォームヘッダ部"が存在するか否かを調べます。

 変数宣言 自動,文字列{ &objectName }
 変数宣言 自動,整数 { &return }
   :
   :
 &objectName = "フォームヘッダ部"
 メソッド呼び出し &mFrormObjectName.オブジェクト検査( &objectName, &isObject )  /* &mFrormObjectName には、#全角( "フォーム" )または#半角( "フォーム" )のどちらかの値が代入される */
 ** &isObject
 ** 値 説明
 ** 1  存在する
 ** 0  存在しない

パート2は以上です。 それでは。(@^^)/~~~

                  2024年6月 紫陽花の季節にて 著者( ONnoji )記す

トップページに戻る
桐の釣魚大全のトップ > 目からウロコのデータベース桐プログラミング入門 パート2