At 9:38 97.7.30 +0000, k-waka wrote:
>2バイト文字と1バイト文字混在の文字列の中で数字とアルファベットのみを 1バイト文字に変換したいのですが例えば 1 を 1 に Q を Q にその他の、漢字ひらがな等はそのままにしておきたいのですが
割とよいサンプル(?)かなと思って「中級編16」として解説つきで作ってみましたが、どうでしょうか。
ダウンロードページから一式でダウンロードできます(^^)
例によってFB1.0.2でも動きます。って私FB2使ってない(笑)、なぜかFB1.0.2を好んで使ってしまうという・・・起動が速いせいかも。
古籏さん
早速のご回答を有り難うございます
レスポンスの速さに感激しています。
中級講座16を参考に、アプリを作りたいと思います。
古籏一浩です。
初級講座15を追加しました。
今までゲームネタがありませんでしたが、今回はレースゲームやドライブゲームでの道路表示について説明してあります。 上下の起伏は、まだ実現していませんがポールポジション(ナムコ)とかはできそうですね。
時間があったら上下の起伏もやってみたいなあ~
古籏一浩です。
At 13:32 97.7.31 +0000, k-waka wrote:
>早速のご回答を有り難うございますレスポンスの速さに感激しています。
気分がのったときしか作らないと言う話しもあります(笑)
>中級講座16を参考に、アプリを作りたいと思います。
がんばってください(^^)
でもシフトJISコード表がないと、わけわからないかもしれません。
古籏さん,こんにちは。
> よくウィンドウを開いたりするとメニューに、そのウィンドウ名が出てくるヤツですよね。
> 簡単そうな気がするので、やってみます。
> と書いて泥沼だったら嫌ですがf(^^;
簡単にできるのですか。いろいろと試しているのですが,なんか動作がおかしかったり,エラーが出たりして苦労しています。
該当講座を楽しみにまっています。
PostScriptリファレンスマニュアルという赤本を買いました。
分厚いですね。財布はスカスカになりましたが,本棚はきゅうきゅうになりました。(^^;
以前のスクリーン線数の変更方法を未だに考えています。
どうもPicCommentは資料が少ないので,直接プリンターにコマンドを送っちゃおうかなと考えています。でも,この場合はQDとPSプリンターを事前に識別しておかなくっちゃならないのですが,これは難しいですよねぇ。
なんか良い方法はないものかなぁ。
FB2のマニュアルを読んでいると,System 7 の確認方法などは載っていますが,System 7.5以上の確認はどうするのでしょうか。
このあたりのチェック方法も講座で取り上げてもらえるとうれしいです。
yukiです。
「ワカモリ」さん、はじめまして。私も古旗さんのHPに、いつもお世話になっております一人です。
あつかましくも古旗さんに通信関連(AppleTalk,TCP/IP)や、画像変換(TIFF....、GIF等)の解説をやっていただけると有難いです。
あっ、画像といえば一つみなさんに質問があります。通常のOffscreenGWorldでは32bitで作ることが多いと思うんですが(私だけ?)、FutureBasicの関数で"LONG COLOR"というものがありますが、これのメリットってなんなのでしょうか? 32bitってことは各色8bit+8bit=32なわけで、各255色で足りると思うのですが、どこか理解が間違っているでしょうか?
どなたかお教えください。
At 9:28 PM 97.7.30, 仙台7200/90 wrote:
> しかし,クラリスやネスケにあるような「ウインドウ」メニューの配下に現在のウインドウを一覧表示する方法がわかりません。
> メニュー構築のロジックを関数にしたりして,必要に応じて呼び出さないといけないのでしょうか。自分でしてみたのですが,期待した動作はしてくれません。よろしければ,その場その場でのメニューアイテムの再編成方法を解説しては頂けないでしょうか。
これはですね、独自に配列を作って、ウインドウの作成/破棄の度に内容を変更するのが直接的でわかりやすいかと。
たとえば、アプリが最高 120 のウインドウを許すとしたら、gWindowList(120) ってのを用意しておきます。で、WINDOW ステートメントで引数に渡す参照番号 (ふつう最初は 1 を使いますね) の位置に、_zTrue をいれておきます。
こんな具合に:
WINDOW #1, "Sample", @theRect, _doc
gWindowList(1) = _zTrue
しておくわけです。こうしておけば、あとで FOR...NEXT ループで 120 回繰り返して、gWindowList配列のどこに _zTrue があるかを調べることができます。
FOR i = 1 TO 120
LONG IF gWindowList(i) <> _false
'"ウインドウ発見。処理する。
END IF
NEXT i
gWindowList(i) が _false でないとき、参照番号 i のウインドウが存在することになりますね。参照番号がわかれば、GET WINDOW関数でウインドウ・ポインタを得られますので、ここからウインドウタイトルも分かります。
まあ、仮に 120 個もウインドウがあったとしても、メニューに120個も表示できませんので、実際には「10個目をみつけた時点で処理を終了」とかするでしょうね。
> あと,システム7.5以上かどうかを調べる方法で簡単な手法はないでしょうか。
これには ToolBox のゲシュタルト・マネージャというのを使います。これはシステムやマシンの情報を取ってくる関数群で、OS のバージョンはもちろん、CPU は何かとか、Macintosh Drag&Drop は組み込まれているか、といった、個々の機能拡張の存在までチェックできます。
バージョンの得方は次のような感じです。
version = FN GESTALT(_gestaltSystemVersion)
_gestaltSystemVersion という定数が、OSのバージョンを取ってくるように指示しています。うまくいけば、version に16進で結果が入ります。たとえば System7.1 なら &0710 が帰ってきます。ですので、上記で得たバージョンを
LONG IF version > &0750
という感じで処理すればいいでしょうね。
古籏一浩です(^^)
At 13:00 97.8.1 +0000, 仙台7200/90 wrote:
> 簡単にできるのですか。いろいろと試しているのですが,なんか動作がおかしかったり,エラーが出たりして苦労しています。
>該当講座を楽しみにまっています。
早速作ってみました。
割と簡単にできました。で、早速中級編17として解説付きで用意しておきました。参考にしてください(^^)
8/1は1日に2つ講座を追加した気が・・・
>どうもPicCommentは資料が少ないので,直接プリンターにコマンドを送っちゃおうかなと考えています。でも,この場合はQDとPSプリンターを事前に識別しておかなくっちゃならないのですが,これは難しいですよねぇ。
>なんか良い方法はないものかなぁ。
QDプリンタとLWの判定は実はインサイドマックに書いてあるんですよ。
プリンタの種類を入れてある所があってQDプリンタが1でレーザーが3だったはずです。インサイドマックを見た方が早そうですねf(^^;
> FB2のマニュアルを読んでいると,System 7 の確認方法などは載っていますが,System 7.5以上の確認はどうするのでしょうか。
>このあたりのチェック方法も講座で取り上げてもらえるとうれしいです。
これは簡単で1命令でできます。
例えばSystem 7.5.3だったら
PRINT SYSTEM(_sysVers)
とすると753が返ってきます。7.6だったら760です。
ですからSystem7.5以降という場合は
v = SYSTEM(_sysVers)
if v >= 750 THEN PRINT "System7.5以降ですね"
といった具合に判定できます。
参考にしてくださいませ。
yukiです。
また不明な点が出てきてしまいました。現在TIFFのYCbCR形式のファイルを読み込んでGWorldに表示するプログラムを以下の方法で作成しています。
1.ファイルからデータを読み込む
Y1 =PEEK(adrs&)
Y2 =PEEK(adrs&+1)
Cb =PEEK(adrs&+2)
Cr =PEEK(adrs&+3)
2.YCbCRからRGBを算出する
rgbAddr&.red% =(1.4025*Cr+Y-179.523142) AND &FF
rgbAddr&.green%=(-0.34434*Cb-0.7144*Cr+Y+135.5192) AND &FF
rgbAddr&.blue% =(1.77305*(Cb+0.564*Y-128)) AND &FF
3.GWorldに書き込む
adrs& = gGRAM& + y*gRowBytes% + x*4 '古旗さん、使わせてもらってます..
POKE adrs&,0
POKE adrs&+1,rgbAddr&.red%
POKE adrs&+2,rgbAddr&.green%
POKE adrs&+3,rgbAddr&.blue%
というものなのですが、部分的に色の表現がうまくいきません。それもどうやら色の境界(8bitで255,0付近)で各コンポーネントごとに値が飛んでしまったりしています。(ほかにもおかしい色のところが若干残っている)
私が思うにこの原因は変換による桁落ちからきているのではと思い、色々試しましたがうまくいきません。このようなときにはどういった方法で対処すればよいのでしょうか。
FutureBasicとは直接関係のない内容で恐縮ですが、どなたか知恵をお貸しください。
よろしくお願いします。
古籏一浩です。
急にFB-MLの書き込みが多くなりましたねf(^^)
At 9:52 97.7.31 +0000, akiyuki wrote:
>あつかましくも古旗さんに通信関連(AppleTalk,TCP/IP)や、画像変換(TIFF....、GIF等)の解説をやっていただけると有難いです。
TIFFは昔自分のサークルにほぼ全てのタグコードを解説した覚えがありますので、なんとかなると思います。でもネットワークは駄目ですf(^^;;
>あっ、画像といえば一つみなさんに質問があります。通常のOffscreenGWorldでは32bitで作ることが多いと思うんですが(私だけ?)、FutureBasicの関数で"LONG COLOR"というものがありますが、これのメリットってなんなのでしょうか?
>32bitってことは各色8bit+8bit=32なわけで、各255色で足りると思うのですが、
まずQuckDrawの色指定は「48ビットカラー」、つまりRGB各色16ビットなんです。で、それを直接指定するのがLONG COLORというわけです。
次にメリットというか通常言われるフルカラー(24ビット)ではやはり役不足です。よく引き合いに出されるのが画像の色レベルの補正です。暗い画像を明るくしようとすると8ビットしかないため画像の色合いがうまく補間されません。
またゲームですでにあるフルカラー画像に透明度1%などの薄い画像を合成し重ねて描画する場合、はっきりとビット数が不足している事がわかります。
SGIのマシンやBeOSなどもRGB各色16ビット指定になっています。Winは知りませんが・・・
At 9:08 PM 97.8.1, KaZuhiro FuRuhata wrote: > > FB2のマニュアルを読んでいると,System 7 の確認方法などは載っていますが,System 7.5以上の確認はどうするのでしょうか。
> >このあたりのチェック方法も講座で取り上げてもらえるとうれしいです。
> これは簡単で1命令でできます。
> 例えばSystem 7.5.3だったら
>
> PRINT SYSTEM(_sysVers)
>
> とすると753が返ってきます。7.6だったら760です。
> ですからSystem7.5以降という場合は
>
> v = SYSTEM(_sysVers)
> if v >= 750 THEN PRINT "System7.5以降ですね"
>
> といった具合に判定できます。
> 参考にしてくださいませ。
ぐああ、そうか、SYSTEM() 関数があったかー。なんかバージョンを得る方法があったよな、とか思いながら、「ま、いいか」と安易にゲシュタルトに頼ってしまった(^^;)
当然 FB のステートメントの方が TOOLBOX より使いやすいので、こっちを使ってください(^^;)
よく見たら、SYSTEM()って GESTALT の基礎的な部分はほとんどサポートしてるなあ。便利だ。覚えておこう(^^)
こんにちは,中野@京都です。
# Subject 変えました
古籏さん (openspc@po.cnet.or.jp)
>> 急にFB-MLの書き込みが多くなりましたねf(^^)
メーリングリストで「書き込み」と言うと変ですねぇ。「投稿」がふさわしいでしょう。
>> SGIのマシンやBeOSなどもRGB各色16ビット指定になっています。Winは知りませんが・・・
“Win”が何を指すのかよく分かりませんが,MS-Windows のことだと仮定すれば,RGB は 8ビットずつです。
# window という単語を win と略するのは嫌なのです。FB のユーザーだったら wnd と略したいところですね。まして,MS-Windows を略して Win というのはもっと嫌ですねぇ。
yukiです。
KaZuhiro FuRuhataさん wrote:
> TIFFは昔自分のサークルにほぼ全てのタグコードを解説した覚えがありますので、なんとかなると思います。でもネットワークは駄目ですf(^^;;
期待してお待ちしています。
> 次にメリットというか通常言われるフルカラー(24ビット)ではやはり役不足です。よく引き合いに出されるのが画像の色レベルの補正です。暗い画像を明るくしようとすると8ビットしかないため画像の色合いがうまく補間されません。
う~ん、なるほど。でも結局32bitに書き込む事になるのでしょうか?
かなり複雑な使い方になるようですね。有難うございました。
古籏一浩です。
At 1:54 97.8.2 +0000, 原 幸久 wrote:
>> TIFFは昔自分のサークルにほぼ全てのタグコードを解説した覚えがありますので、なんとかなると思います。でもネットワークは駄目ですf(^^;;
>
>期待してお待ちしています。
確かTOOLSではTIFFのロード、セーブを実現しているみたいなんですが。
これは実際に使っている人でないとわからないですね。う~ん。
ところでTIFFの、どのあたりをやれば良いのでしょう?
ロード?セーブ?それとも全タグの解説?(笑)
>> 補正です。暗い画像を明るくしようとすると8ビットしかないため画像の色合いがうまく補間されません。
>
>う~ん、なるほど。でも結局32bitに書き込む事になるのでしょうか?
>かなり複雑な使い方になるようですね。有難うございました。
確か何かの方法で64bitのGWORLDも取れるような事がNiftyだったかのフォーラムで読んだ覚えがあります。
内部ではRGB16ビットで演算し下位ビットを切り捨てて32ビットGWORLDに書き込むといった方法が無難ではないでしょうか。
画像処理を行わない限り十分じゃないかなあ、と思います(^^)
古籏一浩です(^^)
At 1:33 97.8.2 +0900, NAKANO Takayuki wrote:
>>> 急にFB-MLの書き込みが多くなりましたねf(^^)
>
> メーリングリストで「書き込み」と言うと変ですねぇ。「投稿」がふさわしいでしょう。
ごもっともですf(^^;
サーバーの都合上、塩尻インターネットでは掲示板システムがまだ実現できないので、掲示板は某Future BASICフォーラムにおまかせですね。
そろそろFuture BASICで検索を書けてリンクページでも作らないといけないですね。検索すると、どのくらい出てくるんだろう。
>>> SGIのマシンやBeOSなどもRGB各色16ビット指定になっています。Winは知りませんが・・・
>
> “Win”が何を指すのかよく分かりませんが,MS-Windows のことだと仮定すれば,RGB は 8ビットずつです。
なるほど。
># window という単語を win と略するのは嫌なのです。FB のユーザーだったら wnd と略したいところですね。まして,MS-Windows を略して Win というのはもっと嫌ですねぇ。
あら、そうなんですか。
サウンドカードで、どこかが「Win少年合唱団」(笑)という名前の商品を作らないかなあと思っていたりしますが、ありえないですね。
出たら面白いのに~
ちょっと、しゃれっけがないかな、Win95/NT
古籏一浩です。
At 1:30 97.8.2 +0900, Tsutomu YANO wrote:
> ぐああ、そうか、SYSTEM() 関数があったかー。なんかバージョンを得る方法があったよな、とか思いながら、「ま、いいか」と安易にゲシュタルトに頼ってしまった(^^;)
なるほど、ゲシュタルトから取るという方法もあったなあ、と私は感心してました(^^)
マニュアルをちょこちょこ読んでいると、通常ぶちあたる疑問等はほとんど片隅(!)に書かれてます・・・
今の笑えるマニュアルもいいけど、ちゃんとしたマニュアルが欲しいなあ~
こんにちは,中野@京都です。
# またまたSubject 変えました
古籏さん (openspc@po.cnet.or.jp)
>> サーバーの都合上、塩尻インターネットでは掲示板システムがまだ実現できないので、掲示板は某Future BASICフォーラムにおまかせですね。
わたしは WWW の掲示板は好きじゃないです。重い割りに使い勝手が悪いですから。 WWW の掲示板よりもネットニュースの方が使いやすいですよ。
需要があれば Future BASIC のニュースグループの作成を提案しますけど,メーリングリストで事足りますからねぇ。
# 作るとすれば japan.comp.lang.future-basic かな。
# japan.comp.lang.basic を使えっていう意見が出そうだなあ。
古籏一浩です。
また講座を追加しました(毎日追加している気もする・・・)
今回は珍しく(笑)、予告通り簡易マルチウィンドウエディタを作成するというものです。
前半と後半に分けて解説しようと思ったのですがHTML保存機能とかよからぬものを付けようともくろんでいるので3回にわけます。
第1回目はウィンドウは1枚で、基本的な事は全てできます。(ドラッグドロップはできませんがf^^;)
こういうのはPGで作った方が、やっぱ楽みたいですね。(作った事はないけど)
古籏一浩です。
At 13:47 97.8.2 +0900, NAKANO Takayuki wrote:
> わたしは WWW の掲示板は好きじゃないです。重い割りに使い勝手が悪いですから。 WWW の掲示板よりもネットニュースの方が使いやすいですよ。
Netscapeだと画面が狭くなりすぎて、13インチではつかいずらいです。
他のソフトで取ってこないといけないし時間かかるしf(^^;
> 需要があれば Future BASIC のニュースグループの作成を提案しますけど,メーリングリストで事足りますからねぇ。
メーリングリストは閉じた世界ですからね。
basicだと、やっぱVB勢の方が元気があるんでしょうか。
こんにちは,中野@京都です。
古籏さん (openspc@po.cnet.or.jp)
>> At 13:47 97.8.2 +0900, NAKANO Takayuki wrote:
>> > わたしは WWW の掲示板は好きじゃないです。重い割りに使い勝手が悪いですから。 WWW の掲示板よりもネットニュースの方が使いやすいですよ。
>> Netscapeだと画面が狭くなりすぎて、13インチではつかいずらいです。
>> 他のソフトで取ってこないといけないし時間かかるしf(^^;
確かに Netscape News は使いにくいです。でも NewsWatcher は使いやすいですよ。
# 大学では mnews だったりする。
>> > 需要があれば Future BASIC のニュースグループの作成を提案しますけど,メーリングリストで事足りますからねぇ。
>> メーリングリストは閉じた世界ですからね。
>> basicだと、やっぱVB勢の方が元気があるんでしょうか。
fj.lang.basic には, Visual Basic を使っている人による, MS-Windows プログラミングにおける質問が多くなったので,fj.lang.visualbasicとして分離するはめになりました。
# Visual Basic 固有の問題だったら fj.lang.basic でもいいけど,MS-Windows プログラミングにおける一般的な質問が多かったのはまいった。開発環境に関する問題なのかプラットフォームにおける問題なのかを見極められないのかなあ。
japan.comp.lang.basic の場合は,japan.comp.lang.visual-basic とほぼ同時に作成されたのでうまく分離できています。というより,記事そのものが少ないんです…。
At 2:46 AM 97.8.2, KaZuhiro FuRuhata wrote:
> ># window という単語を win と略するのは嫌なのです。FB のユーザーだったら wnd と略したいところですね。 > ># まして,MS-Windows を略して Win というのはもっと嫌ですねぇ。
> あら、そうなんですか。
> サウンドカードで、どこかが「Win少年合唱団」(笑)という名前の商品を作らないかなあと思っていたりしますが、ありえないですね。
> 出たら面白いのに~
> ちょっと、しゃれっけがないかな、Win95/NT
ほら、WIN とかいうと、「おれたちは勝ってるんだぞっ」みたいでなんかヤじゃないですか(^^;) は、まさか省略形のときまで考えた MS の陰謀なのかっ(笑)
古籏一浩です。 At 22:51 97.8.2 +0900, Tsutomu YANO wrote: > ほら、WIN とかいうと、「おれたちは勝ってるんだぞっ」みたいでなんかヤじゃないですか(^^;) は、まさか省略形のときまで考えた MS の陰謀なのかっ(笑)
Winは「勝った」でMacは「負け」ですかf(^^;
時代を先読みした名前とはこの事ですね(ひゅるるる~)
最近SGIのマシンを購入しようともくろんでいます。
68030/25MHzのワークステーションを256円で購入したのですがいや~速い。powerPC604/132積んだ8500より体感速度速いです。
O2のデモも見たけど、いや~惹かれますf(^^;
古籏一浩です。
中級編19を追加しました。
エディタの作成その2です。
ちゃんとマルチウィンドウになりました。
で、今回テキストファイルを読み込んでZTXT形式にしてエディットフィールドに割り当てようとして玉砕しました(泣)。 スタイル情報も何か割り当てないといけないのでしょうか。
誰か教えて下さいm(_ _)m
古籏一浩です。
At 18:39 97.8.2 +0900, NAKANO Takayuki wrote:
>>> 他のソフトで取ってこないといけないし時間かかるしf(^^;
>
> 確かに Netscape News は使いにくいです。でも NewsWatcher は使いやすいですよ。
たまにfj.sys.macは読むのですが。
先々週は、なんかくさかべよういちという人が馬鹿云々とかでたくさん発言してましたが、はてさて、どうなってんでしょう。
># 大学では mnews だったりする。
大学は専用線接続ですよね~
貧乏人にはつらいですf(^^;
でもニュースをメールにして流してくれるものありましたね。
> fj.lang.basic には, Visual Basic を使っている人による, MS-Windows プログラミングにおける質問が多くなったので,fj.lang.visualbasicとして分離するはめになりました。
そうなんですか。
やっぱり多勢に無勢ですねぇ・・・
># Visual Basic 固有の問題だったら fj.lang.basic でもいいけど,MS-Windows プログラミングにおける一般的な質問が多かったのはまいった。開発環境に関する問題なのかプラットフォームにおける問題なのかを見極められないのかなあ。
初心者~中級者では難しいですね。
VB4持っているのですが
・Win95自体のバグ
・後から追加したソフトで環境が変わってしまった
・VB4のバグ
のどれなのかを特定するのは難しい。
VBだとWinべったりにならざるを得ないので、VBの質問よりもWinの質問になってしまうのでは。
> japan.comp.lang.basic の場合は,japan.comp.lang.visual-basic とほぼ同時に作成されたのでうまく分離できています。というより,記事そのものが少ないんです…。
そうなんですか。
QuickBASICとかは、ありそうですが・・・
FBがネタになった事はあるのかなあ?
こんにちは,中野@京都%Virtual PC に FreeBSD をインストール中 です。
古籏さん(openspc@po.cnet.or.jp)
>> > 確かに Netscape News は使いにくいです。でも NewsWatcher は使いやすいですよ。
>> たまにfj.sys.macは読むのですが。
>> 先々週は、なんかくさかべよういちという人が馬鹿云々とかでたくさん発言してましたが、はてさて、どうなってんでしょう。
日下部さん (void さんともいう) は fj.* の常連さんで,相当な量の記事を投稿されています。初心者にもかなり厳しく当たる方なのですが,言ってることは一貫性があるんですよね。
慣れないうちは,void さんの「馬鹿」がらみの記事は流して読むのがいいでしょう。(fj.* に慣れてくると,void さんの「馬鹿」記事が楽しくなるんですが…)
# でも,fj.sys.mac.* って記事数が多いから,「たまに読む」ぐらいだと消化できないのでは。わたしは毎日読んでますけど,それでやっと消化できるぐらいですよ。
> > japan.comp.lang.basic の場合は,japan.comp.lang.visual-basicとほぼ同時に作成されたのでうまく分離できています。というより,記事そのものが少ないんです…。
> そうなんですか。
> QuickBASICとかは、ありそうですが・・・
> FBがネタになった事はあるのかなあ?
fj.lang.basic が出来たときは,わたしが積極的に FutureBASIC の話題を投稿するようにしましたけど,japan.lang.basic ではやってません。まあ FutureBASIC の話題なら japan.comp.lang.* よりも japan.comp.mac の方がふさわしいでしょうし。
古籏さん,ベンさん,どうもありがとうございました。
ウインドウメニューは一人で考えているうちは,作るのは無理かなと感じていたのですが,こんなにすぐに作れるものだったのですね。いやはやおはずかしい次第です。
ゲシュタルトはなんか難しいなぁと思っていたので敬遠していましたが,SYSTEMコマンドがあったのですね。SYSTEMコマンドにしろ,QDとPSの判定にしろマニュアルは読んでいたはずなのに気がつきませんでした。一読しただけではだめですね。実際に使ってないとなかなか覚えられません。(^^;
実はちょっと相談に乗って頂きたいのですが,古籏さんのペイントソフトを参考に,いろいろ勉強をしたいと思っています。そこで簡単なツールウインドウを作りたいと思いましたが,FB2ではツールウインドウを作る方法でどのような手法が適しているのかアドバイスをもらえませんでしょうか。
私は以前,Prograph CPXというFB2よりマイナーな言語を使っておりました。CPXではツールパレットはGUIで画像をボタンとして張り付けて,ボタンのクリック時の呼び出し先となる関数を指定すると動作しました。
FB2ではフローティング・ウインドウ上にPICTリソースとした絵を並べて,クリック時のマウスのローカル座標でどのボタンが押されたのか判定しようかなと考えていますが,これが一般的とは思えません。ツールパレットに並べたボタンの構築方法と判定をどのようにされておられますか。よろしければ教えてください。
双璧のお二人にまとめて返事を書くというのはちょっと失礼ですが,同じような返信は繁雑になるので,これにてご容赦下さい。
yukiです。
仙台7200/90さん wrote:
> 実はちょっと相談に乗って頂きたいのですが,古籏さんのペイントソフトを参考に,いろいろ勉強をしたいと思っています。そこで簡単なツールウインドウを作りたいと思いましたが,FB2ではツールウインドウを作る方法でどのような手法が適しているのかアドバイスをもらえませんでしょうか。
素人的な考えかもしれませんが、以前作ったときの方法を参考までに。
まずフローティングパレット用のウィンドウを作成し、このウィンドウのattributeを_keepCtrlsActiveにして常にアクティブにします。次にこのウィンドウにPICTURE FIELDにボタン用のPICT(リソースにしておくと簡単に読み込めると思います)を書き込めます。
これだけです。あとはDIALOG fnで、_efClickを使えば簡単にいけると思います。お試し下さい。
- P.S.
- 以前教えていただいたグラフィックファイルフォーマットハンドブックを購入しました。なんと白ネコヤマトの宅急便という所にお願いすると、1週間位で自宅まで届けてくれました。便利な世の中になりましたね~。
どうも、こんにちわ
ワカモリです。
皆さんはアプリを作成後バージョンの番号をどの様に決めていらっしゃるのでしょうか?
リビジョン番号と何とかいうと思うのですがわずかの改良時にv1.0をv1.1とかしているようですが私にはどこに根拠があるのかよくわかりません
いつも稚拙な質問ばかりですが教えて下さい。
古籏一浩です。
At 23:21 97.8.3 +0000, 仙台7200/90 wrote:
>ウインドウメニューは一人で考えているうちは,作るのは無理かなと感じていたのですが,こんなにすぐに作れるものだったのですね。いやはやおはずかしい次第です。
私は、たまたまToolbox一覧を眺めていて気づいただけですのでf(^^;
ちょっと試したらうまく出来たという(^^;
>ゲシュタルトはなんか難しいなぁと思っていたので敬遠していましたが,SYSTEMコマンドがあったのですね。SYSTEMコマンドにしろ,QDとPSの判定にしろマニュアルは読んでいたはずなのに気がつきませんでした。一読しただけではだめですね。実際に使ってないとなかなか覚えられません。(^^;
本当は、命令と内容一覧というか何が出来るかというリストがあれば便利ですよね。
誰か作りません?(^^;
古籏一浩です。
At 13:44 97.8.4 +0000, k-waka wrote:
>リビジョン番号と何とかいうと思うのですがわずかの改良時にv1.0をv1.1とかしているようですが私にはどこに根拠があるのかよくわかりません
これは確実な決まりはありませんが、定石として次のようになっています。
Version ■.●.▲
■は1以上でここが変更になる場合は、ソフト上に大幅な変更が加えられた場合です。また、初期出荷バージョンは1にするのがパソコン界では普通です。
●は0~9でソフトに大幅な変更はなく、若干の変更がある場合に変わります。これは▲とも連動する事があります。
▲は0~9またはアルファベットで、多くの場合バグフィックスした事を表します。またアルファベットの場合.(ピリオド)で区切らずに●とつっつけた表記にします(Ver 1.0a)。
例えばVer 1.2bであれば初期出荷バージョンに2回程度改良しバグフィックスしたものという見方が出来ます。ただし、かなり追加した場合はいきなり数字が上がることがあります。 Ver 2.0 -> ver 2.5になったとしても5回改良が加えられたという事にはあまりならず、大幅な改良がなされたという見方でよいでしょう。
#大抵のソフトはバージョン3が一番安定してます。
#占いで3は安定を示すけど、あながちでたらめじゃないですね。
ワカモリさん,はじめまして。
>皆さんはアプリを作成後バージョンの番号をどの様に決めていらっしゃるのでしょうか?
>リビジョン番号と何とかいうと思うのですがわずかの改良時にv1.0をv1.1とかしているようですが私にはどこに根拠があるのかよくわかりません
別にJISなりISOなりできっちりとした規格があるわけではないと思います。聞いたこと無いだけですけど(^^;
そういうわけで,自分が管理しやすいように付ければ良いのです。
バージョン管理をしっかりしていないと,いつかは痛いめに遭いますのでバージョンなりリビジョンの意味合いをご自身で定めて下さい。
例えば,機能の追加はバージョンアップで,バグフィックスはリビジョンアップというようにしてはどうでしょう。
どんなに不要と思われても,開発途中の全バージョンはフロッピーなどの別媒体に保管されると助かることがあります。
バージョンのみでリビジョンを使わない人もいますし,リビジョンを2桁使う人もいます。概略仕様書を書き直すときがバージョンアップで詳細仕様書の修正程度ならリビジョンアップが一般的ではないでしょうか。
でも,仕事じゃないからこんな書類は作ってませんよね。(笑)
企業が発売なりカスタマイズなりしているソフトでは事情が異なります。バージョンアップならお金を取れますが,リビジョンアップでお金を取るのは厳しいでしょう。ですから,変更内容と数字の変更が同期しない場合があります。
また,商品イメージの問題もありますので,競合商品がバージョンアップしたらリビジョンアップで済むところをバージョンアップにしたりもします。
ちゃんとした会社なら社内規定なり社内標準化規則なりがあるんですけどねぇ。
バージョン番号も大事ですが,修正のつどコメントを入れるのがもっと大事と思います。バージョン番号にそれほど神経質にならなくても良いと思いますよ。
ワカモリです
> Version ■.●.▲
>
> ■は1以上でここが変更になる場合は、ソフト上に大幅な変更が加えられた場合です。また、初期出荷バージョンは1にするのがパソコン界では普通です。
>
> ●は0~9でソフトに大幅な変更はなく、若干の変更がある場合に変わります。これは▲とも連動する事があります。
>
> ▲は0~9またはアルファベットで、多くの場合バグフィックスした事を表します。またアルファベットの場合.(ピリオド)で区切らずに●とつっつけた表記にします(Ver 1.0a)。
>
> 例えばVer 1.2bであれば初期出荷バージョンに2回程度改良しバグフィックスしたものという見方が出来ます。ただし、かなり追加した場合はいきなり数字が上がることがあります。
> Ver 2.0 -> ver 2.5になったとしても5回改良が加えられたという事にはあまりならず、大幅な改良がなされたという見方でよいでしょう。
わかりやすいご説明を有り難うございます。
私のように、あちこちをつまみ食いするように勉強しているとつまんだところが穴だらけで連続性のない知識になってしまいます。
最近は、あまり夜遅くまでマックに向かっていることが少なくなりました。
以前は、ケリがつくまで朝まででも熱中していたのですが....(笑)
yukiさん,こんばんわ。
返事を出すのが遅くなりました。
>まずフローティングパレット用のウィンドウを作成し...中略...
>次にこのウィンドウにPICTURE FIELDにボタン用のPICTを書き込みます。
>あとはDIALOG fnで、_efClickを使えば簡単にいけると思います。
ちょっとやってみたのですが,思った動作をしてくれません。
_efClickでPICTURE FIELDを捕まえられるのでしょうか。
ひょっとしてエディット・フィールドを構築してからPICT画像を描かなくてはいけないのでしょうか。ところで,エディット・フィールドというのは画像も取り扱えるのですか? なんかよくわからなくなってきましたので,今日はもう寝ようと思います。明日もう少しがんばってみます。
根来さん、はじめまして
ワカモリです
アドバイスを有り難うございます。
> 別にJISなりISOなりできっちりとした規格があるわけではないと思います。聞いたこと無いだけですけど(^^;
> そういうわけで,自分が管理しやすいように付ければ良いのです。
> バージョン管理をしっかりしていないと,いつかは痛いめに遭いますのでバージョンなりリビジョンの意味合いをご自身で定めて下さい。
そうですね、何でも思いつきでやってしまう私には、特に大切な事だと思います。
> バージョンのみでリビジョンを使わない人もいますし,リビジョンを2桁使う人もいます。概略仕様書を書き直すときがバージョンアップで詳細仕様書の修正程度ならリビジョンアップが一般的ではないでしょうか。
> でも,仕事じゃないからこんな書類は作ってませんよね。(笑)
噂には聞いたことがあるのですが 仕様書類を一度見てみたいものです。
> バージョン番号も大事ですが,修正のつどコメントを入れるのがもっと大事と思います。バージョン番号にそれほど神経質にならなくても良いと思いますよ。
これも、私には、痛感させられるお話です(笑)
ひとつのルーチンを色々な形でテストをしてみて上手く行ったときには、何がなんだか、まあいいか こんな具合です。
またまた少しづつ学習をして行きます。
古籏一浩です。
At 9:11 97.8.5 +0000, k-waka wrote:
>> 詳細仕様書の修正程度ならリビジョンアップが一般的ではないでしょうか。
>> でも,仕事じゃないからこんな書類は作ってませんよね。(笑)
>
> 噂には聞いたことがあるのですが 仕様書類を一度見てみたいものです。
見ても厚いだけです(笑)
こんな書き方でよく作れるなあ、というものしか見たことがありませんf(^^;
>> 噂には聞いたことがあるのですが 仕様書類を一度見てみたいものです。
> 見ても厚いだけです(笑)
> こんな書き方出よく作れるなあ、というものしか見たことがありませんf(^^;
はっはっは。まったくその通りです。偉いさんから降りてくる仕様書は,何を作ってほしいのか意味不明ですし,私達平社員はプログラムが完成してから仕様書を作るという本末転倒なことをしています。個人的にはプログラムに詳細なコメントが入っているほうがメンテナンスしやすいのですが,仕様書も納品物件ですから作らざるを得ません(T_T
それにしてもWINDOWSでのシステム開発は精神衛生上最悪です。
オラクルも腹が立つことばっかりです。Infomixのほうが使いやすいのですが,偉いさんは数が売れているものが良いものだと思っています。日経コンピューターの記事を鵜呑みにしないでくれといいたいなぁ。愚痴になってしまいましたね。すいません。
どうもお久しぶりです。弘樹です。7月中は、今まで使っていたマシンが壊れて途方にくれていました。10日間くらい日本NCRに修理に出してたんですけど、「原因が分からない」って事で返されまして、もし修理するならロジックボードの交換で20万弱掛かるとも言われて、愕然としていました(T_T)
そんな訳で、新しいマシンを買いました。またMacです。7300/180です。
これでMacを買うのも5台目(^_^;)ですが、何一つとして壊れなかったものはありませんでした。
Mac以外のコンピューターでも、松下のMSXとか、エプソンの98互換機とか、それぞれ最低2回は修理に出したものです。しかし一方で、ものすごく昔のマシンを使っている人を見ると、これも当たり外れがあるのかなって思います(僕のは外ればっかりですが)。
7300/180を買ってから、FBにも復帰しました。何か作らないと腕が向上しないと思い、何か簡単に出来て便利なものを、と考えた結果、Macにはカレンダーが無い事に気づきました。システムには標準でカレンダーは無いし、アプリケーションを見ても、ToDoリストと一緒になっていたりで、純粋なカレンダーというものは案外少ないんじゃないでしょうか。過去に一度、カレンダー専用のアプリケーションを見つけましたが、PowerPCネイティブと謳ってある割には起動が遅く、あまり気に入るものではありませんでした。
そこで、FBでカレンダーを作ろうと思っています。具体的にはどうやって作ろうかなー、と考えている最中で、FBのプログラミングマニュアルを見ながら何か使えそうなソースを探しているところです。DATE$関数ではちょっと日付に関する情報が貧弱なので、ToolboxのIUDATESTRINGを使おうと思っています。(これもプログラミングマニュアルに書いてあったから使おうと思っただけです)IUDATESTRINGで日付を返し、それをLEFT$やRIGHT$を使って必要な所だけ取り出し、規則に沿ってPRINTすればいいのでしょうか?取り出した数字なり文字列なりを規則正しく並べる方法としては、プログラミングマニュアルの練習問題13.2が参考になると思っているのですが、このソースでどうして解答のようにテキストを上手く並べられるのか、仕組みが分かりません。
LOCAL FN displayASCIICharacters
PRINT %(5,12) "ASCII codes 32-122 (Monaco)";
FOR x = 32 TO 96 STEP 32
FOR y = 0 TO 31
LONG IF x + y <= 122
PRINT %((x-32)*1.8, y*9+25);
PRINT USING "###"; y+x;
PRINT " = " CHR$(x+y);
END IF
NEXT
NEXT
END FN
変数x(水平の座標)とy(垂直の座標)の数値を使い、それをPRINT %(x,y)でカーソルの位置にしている事は分かりますが、変数がどの時点でどのくらいの値を持っているかが分かりませんでした。たとえば1回目のループの時はxが32、yが0で、座標は((32-32)*1.8, 0*9+25)になります(多分(^_^;))。しかしFOR x = 32 TO 96 STEP 32なら、xの値が32、64、96と、3回しかループしないのではないでしょうか。それとも3回しかループはしないが、その間にFOR y = 0 TO 31以下の文章が32回ループしているのでしょうか。分かる方は、この文がどういう構造になっているのか教えて下さい。
yukiです。
また質問があるのですが、Image Compression ManagerをPascal ConverterでコンバートしてINCLとし、
fname$ =FILES$(_fOpen,"PICT",,refNum%)
FN MakeThumbnailFromPictureFile(refNum%,colorDepth%,thumbnail&,_nil)
の関数を実行したところ、osErr =-51(RFNUMERR)が発生してしまいました。InsideMacで確認したところ、どうやらrefNum%はFile Reference Numberであると記されていました。そこで御質問なのですが、FILES$で得られるrefNum%はFolderのリファレンス番号であって、Fileのリファレンス番号ではないのですよね?
とすると、Fileのリファレンス番号を取得するにはどのようにすればよいのでしょうか。
お教えください。
古籏一浩です。
At 2:12 97.8.7 +0000, 原 幸久 wrote:
>fname$ =FILES$(_fOpen,"PICT",,refNum%)
>FN MakeThumbnailFromPictureFile(refNum%,colorDepth%,thumbnail&,_nil)
>
>の関数を実行したところ、osErr =-51(RFNUMERR)が発生してしまいました。InsideMacで確認したところ、どうやらrefNum%はFile Reference Numberであると記されていました。そこで御質問なのですが、FILES$で得られるrefNum%はFolderのリファレンス番号であって、Fileのリファレンス番号ではないのですよね?
>
>とすると、Fileのリファレンス番号を取得するにはどのようにすればよいのでしょうか。
FB II-J付属のCD-ROMにファイル関係の情報を得る
GET FILE INFO.BAS
というのがありますので、こちらを参照してみてはどうでしょう。
あと私の上級編1でもファイル参照番号を求めるのがあります。
今試したら0が返ってきますね。
ファイル/ディレクトリ固有の番号じゃないですよね?
私はファイル関係には弱いので誰かにパス!f(^^;
古籏一浩です。
At 14:15 97.8.6 +0000, 仙台7200/90 wrote:
> はっはっは。まったくその通りです。偉いさんから降りてくる仕様書は,何を作ってほしいのか意味不明ですし,私達平社員はプログラムが完成してから仕様書を作るという本末転倒なことをしています。
でも、後から仕様書をこじつけた方が早いという(^^;
私は必要なものだけリスト書いてます。
FBだったら作らないといけない関数くらい。
(C言語)1万行までは何も書かなくても平気ですね(ゲームのシステムだけど。慣れているせいかもしれないけど)
>それにしてもWINDOWSでのシステム開発は精神衛生上最悪です。
どのくらい精神衛生上悪いのでしょう?
Winはプログラムを作成した事がないので、どうなのかわかりません。
将来の参考(?)になるかもしれないので、よかったら書いて欲しいです(^^;
私はSGI-O2の方に移行しようともくろんでいます。
あとBeOSです。
古籏一浩です。
At 20:15 97.8.6 +0900, Hiroki Kaneko wrote:
> Mac以外のコンピューターでも、松下のMSXとか、エプソンの98互換機とか、それぞれ最低2回は修理に出したものです。しかし一方で、ものすごく昔のマシンを使っている人を見ると、これも当たり外れがあるのかなって思います(僕のは外ればっかりですが)。
当たりはずれはあると思います。
私はマシンだけは、当たりばかりです(Atariマシンじゃないです^^;)
ディスプレイが火を噴きそうになった(笑)のとCD-Rドライブが完全に書き込めない不良品だった事くらいです。
>しかしFOR x = 32 TO 96 STEP 32なら、xの値が32、64、96と、3回しかループしないのではないでしょうか。それとも3回しかループはしないが、その間にFOR y = 0 TO 31以下の文章が32回ループしているのでしょうか。分かる方は、この文がどういう構造になっているのか教えて下さい。
FOR y = 0 TO 31以下の文章が32回ループします。
32回繰り返したらFOR x = 32 TO 96 STEP 32の条件不一致まで同じ事を繰り返します。
小坂です
はじめまして
質問ですがプログラムからほかのプログラムをよびだすにはどうすればいいですか、教えてください。
古籏一浩です。
At 12:15 97.8.7 +0000, Itaru Kosaka wrote:
>小坂です
>はじめまして
いらっしゃいませ、小坂さん(^-^)
>質問ですがプログラムからほかのプログラムをよびだすにはどうすればいいですか、教えてください。
簡単な方法は
RUN "アプリケーション名"
です。もし、他のフォルダ等に入っているのであれば場所(パス)を指定する必要があります。
RUN命令で手抜きラウンチャーもできます(^^;
こんにちは
ワカモリです
設定項目などのメニューにチェックマークをつけるソフトを見かけますがあれはどの様に操作しているのでしょうか?
なんだかよくわかりません
どなたかご存じでしょうか?
応えられる回答の時しか出てこない(笑)、古籏一浩です。
At 0:35 97.8.12 +0000, k-waka wrote:
>設定項目などのメニューにチェックマークをつけるソフトを見かけますがあれはどの様に操作しているのでしょうか?
これは
DEF CHECKONEITEM(メニュー番号,項目番号)
という命令で操作します。
私の講座にも一応解説があります。
最近まったくメールが届かなかったので,ひょっとしたらメーリング・リストで私だけ配信されていないのかと不安でした(笑)
でも,ちゃんと届いたので一安心。
みなさん夏休みなのかなぁ...
古籏さん,SimpleTextからBadPaintへのペーストができないという件ですが,私の環境ではうまくいきます。Painterからでもクオークからでも大丈夫です。PageMaker6からはフリーズしましたが,PageMakerの具合が悪いのでPageMaker側の問題と思います。
私の環境はPM7200/90 KT7.5.3r2 拡張機能最低限(ほんまか?)
SimpleText Ver J1-1.3.3 といったところです。
最近ちっと悩んでいますが,FB2でプログラムを作成中にPGというメニューがありますよね。このメニューの中にはおいしそうなルーチンが見えるのですが純FB2のソースでは使ってはいけないのでしょうか。なんか目の前に餌を置かれた猫みたいです。
昨日やっとこさサンプルソースの整理が終わりました。IBのCDも買ってしまったので,サンプルはたくさんあるけど何が何かわからんという状態でした。ひとつひとつ調べて日本語のコメントを付けたフォルダに格納し整理しました。これでサンプル例が利用可能になったというわけです。こうやって丁寧にサンプルを整理してみると,このメーリングリストで質問する内容がすべて解決されたような気分です。これで初歩的な質問が減ると良いのですが(^^;
古籏一浩です。
At 14:47 97.8.12 +0000, 仙台7200/90 wrote:
>最近まったくメールが届かなかったので,ひょっとしたらメーリング・リストで私だけ配信されていないのかと不安でした(笑)
>でも,ちゃんと届いたので一安心。
>みなさん夏休みなのかなぁ...
他のメーリングリストにも入っていますが7月末から、がくっとメール数が減りました。1/10以下になった所もあります。
まあ、夏休みというのと、暑くて頭が働かない(笑)というのもあるかもしれませんね。
>古籏さん,SimpleTextからBadPaintへのペーストができないという件ですが,私の環境ではうまくいきます。Painterからでもクオークからでも大丈夫です。
>PageMaker6からはフリーズしましたが,PageMakerの具合が悪いのでPageMaker側の問題と思います。
>私の環境はPM7200/90 KT7.5.3r2 拡張機能最低限(ほんまか?)
>SimpleText Ver J1-1.3.3 といったところです。
う~ん、となると私の環境の問題かな。
またBe OSChooserが悪さをしているのか!?
BeOS入れてますが、いや~激速ですよ~ん。
BeOSに乗り換えようと考えてます。
>こうやって丁寧にサンプルを整理してみると,このメーリングリストで質問する内容がすべて解決されたような気分です。これで初歩的な質問が減ると良いのですが(^^;
初歩的な質問や、今まで出てきた質問はFAQとしてまとめておけばよいのですが、ちょっと忙しくて駄目です。
次なるサンプルプログラムも用意しないと・・・
そのうち、朗報がこのMLに流れるでしょう(^^)
'--- PostScript Print Test ---
_PSBegin = 190
_PSEnd = 191
_PSHandle = 192
'
WINDOW #1
'
PostScript$ = "80 23 { 180 mul cos exch 180 mul cos add 2 div } setscreen"
PSSize = LEN(PostScript$)
'
PICTURE ON
'
'--- PostScript Set ---
CALL PICCOMMENT(_PSBegin, 0, _NIL)
' "第三引数にPostScript文字列のハンドルを渡す必要がある"
CALL PICCOMMENT(_PSHandle,PSSize,[PostScript$])
REM ^^^^^^^^^^^^"ここでタイプミスと言われる"
CALL PICCOMMENT(_PSEnd, 0, _NIL)
'
'--- Draw Start ---
PEN ,,,,3
BOX FILL 50,20 TO 200, 70
PEN ,,,,0
PICTURE OFF, tempPictH&
'
'--- Print Start ---
ROUTE _toPrinter
PICTURE (0, 0), tempPictH&
ROUTE _toScreen
CLOSE LPRINT
'
END
古籏さん,毎日暑いですね。
さっき不完全なメールを出してしまいました。
みなさん,すいません。
今日は休みなので長らく調べているPicCpmmentの件をやっていました。すると,PicCommentの第三引数にPostScriptの文字列へのハンドルを渡すということですが,文字列のハンドルってどうやって取得するのでしょうか。下のようなサンプルで試しています。
FB2では文字変数のポインタなら得られる命令があるのですが,ハンドルとなるとGetNewHandleで確保しなくてはならないのかなぁ。
しかし,確保したメモリ領域に文字列を放り込む方法も知らないので困ってしまいました。何か良い案はないでしょうか。
'--- PostScript Print Test ---
_PSBegin = 190
_PSEnd = 191
_PSHandle = 192
'
WINDOW #1
'
PostScript$ = "80 23 { 180 mul cos exch 180 mul cos add 2 div } setscreen"
PSSize = LEN(PostScript$)
'
PICTURE ON
'
'--- PostScript Set ---
CALL PICCOMMENT(_PSBegin, 0, _NIL)
' "第三引数にPostScript文字列のハンドルを渡す必要がある"
CALL PICCOMMENT(_PSHandle,PSSize,[PostScript$])
REM ^^^^^^^^^^^^"当然ここでタイプミスと言われる"
CALL PICCOMMENT(_PSEnd, 0, _NIL)
'
'--- Draw Start ---
PEN ,,,,3
BOX FILL 50,20 TO 200, 70
PEN ,,,,0
PICTURE OFF, tempPictH&
'
'--- Print Start ---
ROUTE _toPrinter
PICTURE (0, 0), tempPictH&
ROUTE _toScreen
CLOSE LPRINT
'
END
BeOSってそんなに早いのですか。
でもC++は解らないのでFB2が出るまでおあづけです。
なんか久しい ベン/矢野勉 です。
At 3:04 AM 97.8.13, 仙台7200/90 wrote:
> ' "第三引数にPostScript文字列のハンドルを渡す必要がある"
> CALL PICCOMMENT(_PSHandle,PSSize,[PostScript$])
まあ、これではおかしいのは間違いない(^^;)
え、[] というのは、PEEK LONG() の省略形ですので、上記を次のように書き換えると何がおかしいのか多少はわかるでしょう。
PEEK LONG(PostScript$)
PEEK LONG は指定アドレスから4バイト (ポインタやハンドルといった、アドレスを収める変数のサイズ) 取ってくる命令ですが、PostScript$ はアドレスじゃないですね(^^;)
かといって
PEEK LONG(@PostScript$)
としても無駄です。PostScript$という変数の先頭アドレスから4バイトとってきても、文字列の最初の1バイトにある「文字数」と、あと3文字を取ってくるだけですから。
で、文字列のハンドルを作るには、自前で作成してコピーするのが一つの (最も分かりやすい) 方法です。これには BLOCKMOVE を使います。
「メモリブロックのコピーには BLOCKMOVE」
と格言のように覚えておきましょう(笑)
BLOCKMOVE は引数にポインタ (メモリブロックへのアドレス) をとりますが、ハンドルの中にはポインタが入っていることを思い出して、
DIM thePtr&, newHdl&, length
length = LEN(PostScript$)
newHdl& = FN NEWHANDLE _clear (length)
thePtr& = [newHdl&]
BLOCKMOVE @PostScript$, thePtr&, lenght+1
これで文字列のハンドルのでき上がりです。
と基礎を勉強したところで(笑)、回答を。
osErr% = FN PTRTOHAND (ptr&, hndl&, size&)
という ToolBox があります。ポインタからサイズ分だけ取ったものを同じ内容のハンドルを作成し、hndl& に返します。第一引数にコピー元の先頭アドレスを、第二引数に結果を収める4バイト変数を、第三引数にコピーする長さをいれます。ハンドルはこの関数で自動的に作成されます。
DIM length, err, strH&
length = LEN(PostScript$)
err = FN PTRTOHAND(@PostScript$, strH&, length+1)
これでいけるはずです。PtrToHand が内部でやっていることはおそらく上記と同じでしょう。
ベンさん,お久しぶりです。
詳しい説明をありがとうございます。
とてもよくわかりました。
文字変数の頭に@を付ければBlockMoveできたのですね。
これはすごく役立つテクニックですからとても幸せです。
今日はもう寝たいと思いますので,明日実験をしてみます。
結果はまた報告します。
メニューにチェックマークの件ですが,私も今作っている最中です。
古籏さんが,DEF CHECKONEITEM(メニュー番号,項目番号)を回答されておられるので,私は別の機能を紹介します。
DEF CHECKONEITEMでは該当するメニュー番号のすべての項目のうち一つだけにチェックが付きますよね。Fontメニューなどがこれに当たります。
しかし,スタイルメニューなどでは複数の項目にチェックが入ったりしますが,これらはToolBoxのitemBoolを使います。
doMenu関数内の一部分ですがサンプルとしてお役にたてば幸いです。
英語のスペル間違いがあっても笑って許して(^^;
CASE _styleMenu
mHandle& = FN GETMENU(_styleMenu)
SELECT itemID
CASE _nomal: '"標準だから全チェック解除"
gBoldCheck = FN itemBool(mHandle&,_bold,_true) '"_trueでチェック消える"
gltalicCheck = FN itemBool(mHandle&,_italic,_true)
gShadowCheck = FN itemBool(mHandle&,_shadow,_true)
CASE _bold: '"太字 itemBoolで自動切り替え"
gBoldCheck = FN itemBool(mHandle&,_bold,gBoldCheck)
CASE _italic: '"斜体"
gltalicCheck = FN itemBool(mHandle&,_italic,gitalicCheck)
CASE _shadow: '"影付"
gShadowCheck = FN itemBool(mHandle&,_shadow,gShadowCheck)
お気づきのようにg...のグローバル変数は現在のメニュー項目のチェックマークの状態を保管しています。ですからプログラムの初めに_falseで初期化しておくと初めて開いたメニューではチェックマークは表示されません。初めから表示さしたい場合は,初期化直後に該当項目のitemBoolを呼び出すだけです。
'--------------------------------------------------------
' "テキストを開く"
'--------------------------------------------------------
CLEAR LOCAL
LOCAL FN openText
filename$ = FILES$(_fOpen,"ZTXT",,volRefNum%)
LONG IF filename$<>""
OPEN "I",#1,filename$,,volRefNum%
READ FIELD #1,efHandle&
EDIT FIELD #1,&efHandle&
CLOSE #1
KILL FIELD efHandle&
END IF
END FN
'--------------------------------------------------------
' "テキストを保存する"
'--------------------------------------------------------
CLEAR LOCAL
LOCAL FN saveText
filename$ = FILES$(_fSave,"保存ファイル名:",".txt",volRefNum%)
LONG IF filename$<>""
DEF OPEN "ZTXTztxt"
OPEN "O",#1,filename$,,volRefNum%
GET FIELD efHandle&,#1
WRITE FIELD #1,efHandle&
CLOSE #1
KILL FIELD efHandle&
END IF
END FN
以上の保存方法で、EditFieldがいくつも(例えば10ヶのEditField)ある場合はどうすればいいのでしょうか?
また画面内全てを保存して、読み込むというような事が出来るのでしょうか。
初歩的な質問でどうもすいませんが、よろしくお願いします。
古籏一浩です。
At 9:51 97.8.13 +0900, Hiroyuki-Tsurimoto wrote:
> EDIT FIELD #1,&efHandle&
> GET FIELD efHandle&,#1
>以上の保存方法で、EditFieldがいくつも(例えば10ヶのEditField)ある場合はどうすればいいのでしょうか?
上記の#1をfor i=1 to 10とかでループさせて
EDIT FIELD i,,&efHandle&
といった具合にすればOKです。
>また画面内全てを保存して、読み込むというような事が出来るのでしょうか。
できます。
が、ちょっと自前で工夫しないと駄目じゃないかな。
一度に保存する場合、うまい方法ありますか?
データサイズをヘッダーにでもしておいて連結していくくらいしか思いつかないf(^^;
古籏一浩さん今日は、釣本です。
以下に教えて頂いた通りに実行してみたんですが、ここで一つおかしな事になるんです。
それは、EditField_1には1・EditField_2には3が入れて、それを保存すると、2つのFieldの値は最後のFieldの3になってしまうんです。どうしてでしょうか...?
'--------------------------------------------------------
' "テキストを開く"
'--------------------------------------------------------
CLEAR LOCAL
LOCAL FN openText
filename$ = FILES$(_fOpen,"ZTXT",,volRefNum%)
LONG IF filename$<>""
OPEN "I",#1,filename$,,volRefNum%
READ FIELD #1,efHandle&
FOR i = 1 TO 2
EDIT FIELD #i,&efHandle&
NEXT
CLOSE #1
KILL FIELD efHandle&
END IF
END FN
'--------------------------------------------------------
' "テキストを保存する"
'--------------------------------------------------------
CLEAR LOCAL
LOCAL FN saveText
filename$ = FILES$(_fSave,"保存ファイル名:",".txt",volRefNum%)
LONG IF filename$<>""
DEF OPEN "ZTXTztxt"
OPEN "O",#1,filename$,,volRefNum%
FOR i = 1 TO 2
GET FIELD efHandle&,#i
NEXT
WRITE FIELD #1,efHandle&
CLOSE #1
KILL FIELD efHandle&
END IF
END FN