過去の桐井戸端BBS (桐ver.8)
13380 フォーム上の任意な場所で画面表示をしたい 桐香 2001/10/05-13:42
dosの時代から、桐は印刷レイアウトと画面レイアウトはすばらしいものでした。
外国系のdbaseやbasicでの貧弱な印刷機能(外人は余り印刷レイアウトに凝らない)を使い、
プログラムの大部分の時間を費やして画面レイアウトをlocate文で作っていた私が、
友達の桐を見て本当に驚きました。一昔前ですが。

さてその画面レイアウトでわからないことがあります。
表データの各項目を自由にレイアウトして表示する場合はフォームを作成して簡単に出来ます。
ところが同一項目内のデータの表示はどうしても連続的なものになってしまいます

例えば 項目 [都道府県] [人口]
(行1) 香川県   100
(行2) 徳島県    50
(行3) 高知県   120
(行4) 愛媛県   112
    以下続く

上の表の項目は[都道府県]と[人口]の2個でデータ行は50行弱という表を画面に任意な場所に表示したいのです。
このように画面表示したいのです。(このようなことたくさんあると思います。)

    香川県  徳島県
     100    50
    高知県  愛媛県
     120    112
   以下続く

画面表示コマンドが使えたらできそうなのですけれど、全体の処理はイベント処理です。
ですから一括処理実行、画面表示コマンドは使えません。 (桐V8sp6 win98se)

仕方がないので上記の表を書出し転置で

   [香川県][徳島県][高知県][愛媛県]・・・・・・・・・・・・・
(行1) 100 50 120 112 ・・・・・・・・・・・・・

のように書出しして、この書き出された表をカード型フォームでレイアウトして表示しています。
結果的には出来るのですが、表の行数が増えると転置項目が増えてフォームのレイアウトが大変なのです。

まだまだ未熟なのでもっと簡単に出来るような気がしますので皆様のお知恵を拝借したいと思います。


13383 Re:データの任意な場所での画面表示 masa 2001/10/05-19:26
記事番号13380へのコメント
桐香さん こんばんは

>ところが同一項目内のデータの表示はどうしても連続的なものになってしまいます
>
>例えば 項目 [都道府県] [人口]
> (行1) 香川県   100
> (行2) 徳島県    50
> (行3) 高知県   120
> (行4) 愛媛県   112
>    以下続く
>
>上の表の項目は[都道府県]と[人口]の2個でデータ行は50行弱という表を画面に任
>意な場所に表示したいのです。
>このように画面表示したいのです。(このようなことたくさんあると思います。)
>
>    香川県  徳島県
>     100    50
>    高知県  愛媛県
>     120    112
>   以下続く
>

もう1項目追加して印字させたい番号を付けたらどうでしょうか?

例えば 追加項目 [都道府県] [人口]
(1)   香川県   100
(2)   徳島県    50
(3)   高知県   120
(4)   愛媛県   112
    以下続く

それでレポート(白紙から)の中で#条件選択を使って1番の人の行は左、2番目の人はその隣りというふうにすれば、
番号を変えるだけで好きな位置に印字出来るのではないでしょうか?と思いました。

---------------------------------
| 1番目  2番目  3番目
| 4番目  5番目 ・・・・
| ・・・・・・・



|    
 

13384 Re:データの任意な場所での画面表示 masa 2001/10/05-19:31
記事番号13383へのコメント


>>このように画面表示したいのです。(このようなことたくさんあると思います。)

すみません。よく見ると画面表示となっていますね。間違えました。


13385 Re:データの任意な場所での画面表示 masa 2001/10/05-19:34
記事番号13384へのコメント
度々すみません。
印刷しないでも、レポートのプレビューを画面で見るのでしたらOKなんですかね?


13387 Re:データの任意な場所での画面表示 今村 誠 2001/10/05-21:09
記事番号13380へのコメント
桐香さんこんにちは、アイデアだけでうまくいかないかもしれませんが
こういうのはどうでしょうか。
>例えば 項目 [都道府県] [人口]
> (行1) 香川県   100
> (行2) 徳島県    50
> (行3) 高知県   120
> (行4) 愛媛県   112

>    香川県  徳島県
>     100    50
>    高知県  愛媛県
>     120    112
>   以下続く

フォームで表示させたい画面の大きさを決めて、1レコードを横に1行で表示したが見やすいのか 、
2行に表示したがいいのかを最初に決めます。
次に表示させる桁数を計算式でそろえて、すべて文字列にします。
2行の場合は改行文字も考慮してください。
元表に表示させたい順番の索引を作ります。
繰り返しを使用して、項目値を配列変数などに代入します。
変数を表示させるテキストを、縦や横に表示させたい順に配置すれば画面表示はできると思います。
 あとは、左クリックか透明コマンドボタンで、次の処理を選べばよいのではないでしょうか。
13388 Re:データの任意な場所での画面表示 natsu 2001/10/05-21:12
記事番号13387へのコメント
こんな感じでしょうか

もともとの編集対照表を以下の処理で何とかできると思います
とりあえず、テキストファイルに落としてから読み込んでください

変数宣言 固有,文字列{&都道府県,&人口}
変数宣言 固有,数値{&処理行}
印字開始 "なんとか.txt"
ジャンプ 行番号=先頭
繰り返し
&都道府県=[都道府県]
&人口=[人口]
行番号 &処理行
ケース開始
ケース (#mod(&処理行,2)=1)
印字 &都道府県,_44,&人口,_44,
ケース その他
印字 &都道府県,_44,&人口
ケース終了
ジャンプ 行番号=次行
条件 (#eof=1) 繰り返し中止
繰り返し終了
印字終了

あとは項目の表示条件で見栄えをよくするといった所でしょうか
13391 Re:データの任意な場所での画面表示 悲しげ 2001/10/05-22:29
記事番号13380へのコメント
どもっ、桐香さん

試してませんが、アイディアだけ。(^^;)
-------------------------------
   [都道府県] [人口]
(行1) 香川県   100
(行2) 徳島県    50
(行3) 高知県   120
(行4) 愛媛県   112
以下続く
     ↑ 表
     ↓ フォーム
香川県  徳島県
 100    50
高知県  愛媛県
 120    112
以下続く
----------------------------------

サブフォーム(伝票または一覧表)をふたつ作ります。
1行は縦にふたつのオブジェクト(都道府県と人口)を配置しておきます。
オブジェクトの属性/編集対象表/許可作業牡丹から「多重化」に必ずチェックを入れておきます。
サブフォーム1のkevの「フォーム開始」イベントで#mod(#行番号,2)=1のレコードを絞り込みさせる。
サブフォーム2のkevの「フォーム開始」イベントで#mod(#行番号,2)=0のレコードを絞り込みさせる。
このようなサブフォームをメインフォームに横にふたつ貼り付ければ、お望みの表示ができそうな気がします。
あ、話がアトサキになりましたが、「メイン&サブフォーム」で考えています。

もしこれがうまく行くようなら、例えば横に5段だとすれば、サブフォームを5個用意し、
使う計算式は #mod(#行番号,5)=n と云った感じで、幾つにでも応用できるとか(^^)v。
あ、でも全く試してません、ふたつを並べた時の左右連動とか。(^^;)

13395 Re:データの任意な場所での画面表示 桐香 2001/10/06-03:27
記事番号13385へのコメント

>印刷しないでも、レポートのプレビューを画面で見るのでしたらOKなんですかね?

masaさん ありがとうございます。
画面に表示されればそれでいいのですが,皆様のご意見を見ていますとこちらの意図の大事な部分が抜けていました。
ダブりますのでその件をもう一度upします。


13396 同一項目の数行のデータの任意な場所での同時画面表示 桐香 2001/10/06-04:14
記事番号13380へのコメント
>
>上の表の項目は[都道府県]と[人口]の2個でデータ行は50行弱という表を画面に任
>意な場所に表示したいのです。
>このように画面表示したいのです。(このようなことたくさんあると思います。)
>
>    香川県  徳島県
>     100    50
>    高知県  愛媛県
>     120    112
>   以下続く
>

masa様、今村様、natsu様、悲しげ様ありがとうございました。
みなさまいつも見慣れているお名前ばかりで、こちら側としては勝手に親近感を感じています。
特に悲しげ様はつい先日「テキスト」の全選択状態で同じ悩みがありましたので感謝をしています。(イカ様にも)
さて色々な工夫を教えていただいたのですが、こちらの真意が説明不足でつたわらなかったのを申し訳なく思います。
このテーマで一番大事なのは任意の場所での画面表示ということなのです。
上記の画面表示例はテキストファイルで書くため便宜上書いたので、これが誤解を生んだと思います。
もっと詳しく書けば日本地図を画面に書いててその都道府県あたりにテキストを埋め込んでいるのです。(フォームで)
つまり表示位置はドッド単位が望ましいのですが、行単位でも我慢できるにしてもその位置の法則的なものはないということです。
(例えばmodのような)
ですから当然フォームを使った方法になると思います。
「フォームで、ひとつの項目の数行のデータを一度に任意の場所にテキスト表示したい」
(項目を任意の場所にテキスト表示して、1行のデータは表示できる)
そこで書出し転置をして数行のデータを項目に変換してそれをフォームで任意の場所に設定したテキストで表示させている。
データが増えると項目数が増えフォームのテキストが増え大変なのでもっと簡単に出来ないか?ということなのです。
なかなか文章ではうまく表現出来ません
画面表示コマンドが使えたらドッド単位ではなく行単位ではありますが、それらしいものがフォームなしで表示できるのですか。

余り上手ではない説明ですが何かよい手がありましたらよろしくお願いいたします。
誠に勝手ながら上記書出し転置よりももっと複雑な手法は質問の意味がありません。

13397 Re:同一項目の数行のデータの任意な場所での同時画面表示 【多遊】 2001/10/06-06:57
記事番号13396へのコメント
桐香さん。こんにちは

>データが増えると項目数が増えフォームのテキストが増え大変なのでもっと簡単に出来な
>いか?ということなのです。
また、
>つまり表示位置はドッド単位が望ましいのですが、行単位でも我慢できるにしてもその位
>置の法則的なものはないということです。(例えばmodのような)

以上から考えてみました。
法則性のないオブジェクトを計算(イベント等)で表示はできないように思います。
また文章から、「データが増えた場合は表示するオブジェクトの数も増える」ように感じますが、
現在の桐ではオブジェクトの自動作成はできないので、この辺も意味不明です。

そこで、キーになる画面の位置を表(変数でも可)に持ち、その値を利用して項目が
1個の場合は+10、2個の場合は+20のように利用されてはいかがでしょうか

「オブジェクト操作 @obj{始点X=&xpt,始点Y=&ypt}」を利用すればいいかと思います。

参考にならないかも知れませんが
http://isweb8.infoseek.co.jp/animal/mokuchan/download/dl-list.htm の40に
任意にオブジェクトを配置する作品をおいてあります。
これは、事前に表のデータとしてオブジェクトのxyを指定して、場合により
スタート時にレイアウトを行い表示しています。

最後の
>誠に勝手ながら上記書出し転置よりももっと複雑な手法は質問の意味がありません。
が、意味が分からないままです


13399 Re:同一項目の数行のデータの任意な場所での同時画面表示 MSF 2001/10/06-09:29
記事番号13396へのコメント
桐香さん、はじめまして。

>このテーマで一番大事なのは任意の場所での画面表示ということなのです。
>上記の画面表示例はテキストファイルで書くため便宜上書いたので、これが誤解を生んだ
>と思います。もっと詳しく書けば日本地図を画面に書いててその都道府県あたりにテキス
>トを埋め込んでいるのです。(フォームで)
>つまり表示位置はドッド単位が望ましいのですが、行単位でも我慢できるにしてもその位
>置の法則的なものはないということです。(例えばmodのような)

この部分だけを解釈させていただきますと・・・
日本地図上に埋め込まれているテキストの位置についてですが、
例えば、東京の人口は、地図上の東京の位置に表示され、
例えば、福井の人口は、地図上の福井の位置に表示されるようにしたい、
でもって・・
例えば、福井のレコードが無かった場合、その表示はされないようにしたい。
ってことでしょうか。

もし私が、このような地図表示を行うのであれば、
[都道府県]:[人口]などという表を入力元にするのではなく、
下記のような表を作り、それを入力元にしてフォームを作成しますが・・・

[何のデータ?]:[北海道]:[青森]〜[鹿児島]:[沖縄]
総人口
男人口
女人口
男構成比
女構成比
労働人口
etc

こういう表を元にすると、日本地図上に各都道府県の各データが、
ページをめくる(レコードを移動する)と切り替わって表示される
ことになると思うのですが・・

このような運用の方法とは違うのでしょうか・・

ただ、都道府県のレコード数が(それも人口データだけで・・)
都度増減するっていうのも???なのですが・・・

全然、意図が違ったかな?

それでは。
13400 Re:同一項目の数行のデータの任意な場所での同時画面表示 natsu 2001/10/06-09:49
記事番号13396へのコメント
なるほど、何となくわかりました
地図を貼り付けたフォーム上に、その地域ごとの属性を示すデータを表示したいと
オブジェクトの個数が多くなるので元表を転地集計で工夫して見やすい形にしていますと
こんな感じですか

とすれば、見栄えはとりあえず無視してよければ

元の表が[都道府県]、[人口]、[知事名]、[県庁所在地]、・・・とあって
これを任意の場所に縦に並べ替えて置きたいのであれば、
[表示用項目]を元の表に追加して、さらにフォーム上での強制改行文字を"@"にしましょうか

[表示用項目]の計算式を以下の通りにしてみて下さい(データ型は適当に処理しましょう)
"都道府県名:"+[都道府県]+"@"+"人口:"+[人口]+"@"+"知事名:"+[知事名]+"@"+"県庁所在地:"+[県庁所在地]+"@"+・・・・・・
これで転地集計をかけてフォームの対照表としてやればソースは項目名を選択するだけで可能になると思います
13402 ピクセル単位で任意位置にテキストを表示 佐田 守弘 2001/10/08-16:28
記事番号13396へのコメント
桐香さん
最初の書き込みで目的が把握できなかったのですが、どうやら、フォーム上の任意の座標位置を指定して、
指定位置にテキストオブジェクトを表示したいとの事ですね。

現在の桐には基本的にはこの様な機能はないのですが、#13397で【多遊】さんも書かれている様に、
「オブジェクト操作 設定」コマンドを使って、テキストオブジェクトの
表示位置をピクセルタンで任意の位置に指定する方法が使えるかと思います。

ここでの課題は、表示するデータが表の中の複数行に渡っている点ですね。
そこで、配列変数を定義しておき、次の様なコマンドで表示対象とする値を配列変数に読み込んでおきます。

絞り込み ・・・ (必要であれば表示対象とするデータを絞り込む)
代入 &i=1
繰り返し (.not #終端行)
 代入 &x[&i]=[横座標],&y[&i]=[縦座標],&名称[&i]=[名称] 
 代入 &i=&i+1
 ジャンプ 行番号=+1
繰り返し終了

この読み込み処理は、イベントファイルのメインの部分で実行しておきましょう。
後は、フォーム開始イベントなどで、それぞれのテキストオブジェクトの位置を
オブジェクト操作コマンドで指定してやればよいかと思います。

佐田守弘(KS-00119)
13403 解決できましたし,色々なテクニックを教わりました。 桐香 2001/10/08-17:49
記事番号13380へのコメント
多遊先生、佐田先生ありがとうございます。
質問のメインはデータの一覧表示をカード型フォームで出来ないか?ということでした。
データの表示は一覧表の表示ですね。ただ一覧表示は好きな配置が出来ない。
カード型は好きな場所に配置できるが一度に表示できるデータは1行(1レコードのみ)と思い込んでいました。
またテキストオブジェクトは普通ソースは[項目]だと思い込んでいました。
変数もソースになりうることを知っていましたが、よく変数未定義のエラーが出ていましたので余り好きではなかったのです。
(いい訳)ここに失敗がありました。

@表データに縦横座標をもたして、それを各データともども各配列変数に代入する。
A「オブジェクト操作 設定」コマンドで、その座標の配列変数の位置でフォームに配置する。
これだと「書出し転置」などして余分な表など作らずに出来ますし、データが増えても何の手間もかかりません。

MSF先生ありがとうございました。
確かにご指摘のような運用方法が普通です。人口だけの表示っておかしいですよね。
この質問の失敗は例としてあげた地図という点です。

natsu先生ありがとうございました。
簡易的に数行を縦に表示するテクニックとしてパクリました。改行文字と改行文字の非表示設定がミソですね。
ただ転置集計?転置書き出しだとうまくいくのですが。
転置集計の場合は集計する項目は?

悲しげ先生
直接メールをいただいてありがとうございます。
勉強になるイベントを添付していただき連休中これ一辺倒です。
皆様本当にありがとうございました。

13404 Re:解決できましたし,色々なテクニックを教わりました。 いかすぱげてぃ 2001/10/09-12:49
記事番号13403へのコメント
桐香さん こんにちわ。

>@表データに縦横座標をもたして、それを各データともども各配列変数に代入する。
>A「オブジェクト操作 設定」コマンドで、その座標の配列変数の位置でフォームに配置す
>る。

挙手、一票です。

実は、ご質問を拝見して、桐香さんのお求めになる用件からすると、その方法がベストではないかと踏んでおりました。
先日、ごく簡単なものですが、私も画像データベースの基本サムネイル表示に同じ手法を使いました。
変数のため、フォーム定義中にデータの確認が出来ない(出来なくはないが面倒)ですが、頑張ってください。

いかすぱげてぃ

13405 Re:同一項目の数行のデータの任意な場所での同時画面表示 うにん 2001/10/09-12:54
記事番号13396へのコメント
桐香さん

>「フォームで、ひとつの項目の数行のデータを一度に任意の場所にテキスト表示したい」
>(項目を任意の場所にテキスト表示して、1行のデータは表示できる)

表示するだけなら、テキストオブジェクトのソースを項目名の代りに#表引き()を使えばできます。

#表引き("香川県",=,"表の名前",[都道府県],[人口])

(香川県の人口を表示する)

まあ、この例では都道府県の方がデータの種類より不変度が高いようですから、
MSFさんの書いてた「都道府県を項目名に取る」のがベストなんでしょうかねえ。

13440 イカ先生には御礼を言いたかったのでうれしい。 桐香 2001/10/11-17:33
記事番号13404へのコメント
イカ先生はじめまして。
レベルが全然違うにしても先生にもこのテーマの通過点があったのかとうれしく思っています。
皆様に教えていただいた方法で、現時点での画面表示の目的を達成しましたが、せっかくのフォームなので
テキストソースの訂正をしようとすると、「オブジェクト操作コマンド」でのソース定義が一時的なので
テキストにフォーカスがいかないなど、私レベルでの課題があり現在奮闘中です。
「テキストオブジェクトの選択状態」を覚えておいでですか。イカ先生の裏技は私にとって今年最大の収穫です。
これはオーバではありません。
パートの人に毎日フォームでデータを入力してもらっていますが、
選択状態にならない時は数字の入力間違いが多く、後の点検のほうが時間がかっていました。
今はほとんどありません。
だって13,456を142に訂正するとき、桐やキーボードを知っている人でもミスる人がいますが,
ましてテンキーだけはかろうじて入力できるパートの人ではミス入力はあたりまえです。
選択状態であれば単に142と再入力するだけです。
佐田先生からも直接もうひとつの裏技を教えていただき、両方ともすばらしく、使い分けて使っています。
心から感謝をしております。これからもよろしくお願いいたします。

戻る