ホームへ戻る|Data Base 桐 User Board|過去ログ一覧|検索|プロパティ |ほっ! |
▼過去ログ No121 |
書き込み数 : 6050件 |
|
|
||||||||||||
> >&STR=#u > >&STR="" > >の違いですね! > このような微妙な問題とも違うと思います。 これは今回の話題とは直接は関係ありません。 ほかのアプリや DB との関係では問題が出てくる場合があると 言うだけです。桐の場合は上記2つに違いは無いけれど、多く の場合に違いがあるので、桐以外に手を出す場合は気をつけた 方が良いと言う内容です。 それと、桐の #未定義値変換 関数について言えば、ほかの アプリだと nvl() とか、Access だと nz() 関数だし、あるい は、直接関数は持たないで、自前で IsNull() を使って関数を 作る必要もあるでしょうが、ふつうそんなものだと思います。 |
|
|
||||||||||||
>不明な値を加えれば和も不明になります。 >先にも書きましたが、「集計」では不明な値は無視(除外)します。 ここなんですよ。 私としては、無視して欲しい。 不明というより未定義とはそこになにも存在しない。 というのが私の見解です。 ですから &i="" &i=&i+1 これが未定義を返すのも あれれ・・・ というのが私の実感です。 むろん<6042>の >&STR=#u >&STR="" >の違いですね! このような微妙な問題とも違うと思います。 私の思い込みがおかしいんでしょうか? |
|
|
||||||||||||
(1)の方法のためには、サンプルを単純にしたほうが、見通しがいいと思います。 ×印を付けた手続きはバッサリ削除してみてください。 ○ 名札 メイン × フォーム::タイマー1 × cmd表1Click × cmd表2Click × prcMsgPause × prcTimerPrimaryOFF × prcTimerPrimaryON × prcサブフォーム編集対象表変更 |
|
|
||||||||||||
TOMさん、こんにちは。 (1)の方法なら、これだけでOKです。 メインフォーム側 *---------------------------------------* 名札 メイン &STR = "○×△.tbl" * *---------------------------------------* サンプルは(1)と(2)の兼用になっているので、判り難かったかもしれませんね。(^^ゞ >変数名を格納しても、サブフォームへ引き継いでいないのです。 メインフォームに配置した、 サブフォームのオブジェクトの属性の[サブフォーム]タブの、 [局所変数を有効にする]をオフにすると、 サブフォームの変数管理で設定した変数が宣言されないと思います。 サブフォームのイベント側で、変数を再宣言していませんか?? |
|
|
||||||||||||
一応、組み込み変数:&STRを使っていますが、 これは、自動変数以外ならOKです。 (1)の方法ならば、&STR に任意の表( .tbl )を指定すればOKですよ。 (1)の方法ならば、タイマーイベントは不要です。 タイマーイベントは(2)の方法の時に必要なだけです。 もちろん、dummy.wfm も同じです。 メインフォーム側 *---------------------------------------* 名札 メイン 変数宣言 局所,整数{ &mOnSubformSet } &STR = #u * *---------------------------------------* ポイントはサブフォーム側の[名札 メイン]です。 早い話が、[オブジェクト操作]コマンドで、編集対象を指定しているだけです。 サブフォーム側 *---------------------------------------* 名札 メイン if ( #ファイル検索( #データパス名 + &STR, 1 ) ) オブジェクト操作 @フォーム.編集対象表 = #変数("STR") end * *---------------------------------------* |
|
|
||||||||||||
お世話になります。 ド・モ・ONnojiさん、ありがとうございます。 2年以上も前のものを探して頂きまして、お手数おかけしました。 それと「ほっ」も見せて頂きました。 結論から言いますと、まだ上手くいってません。 すごくカッコイイプログラムでしたので、半分?くらいしか 理解出来ないような状況でしたが、繰り返し繰り返し読んでみて 動きを追いかけ、やっと筋が見えたところです。 まだ、全てを理解出来ていない状況とちょっとそのままでは 使えそうにない事をこちらのプログラムでしてしまっている為、 どうすれば近い形にもっていけるか検討しています。 タイマーを使う事は過去ログからすると必須のようですが、 編集対象表の変更部分はサブフォームの"メイン"部分でなければ ダメなのでしょうか? というのは、サブフォーム用に別のイベント(kev)プログラムを作った のですが、一括処理からメインフォームを立ち上げ、メインのkevで 変数名を格納しても、サブフォームへ引き継いでいないのです。 まだまだ掛かりそうです・・・。 |
|
|
||||||||||||
TOMさん、こんにちは。 以前にも同様の話題がありました。よろしければご参照ください。 過去の桐井戸端BBS (桐ver.9) 18050 サブフォームの編集対象表を動的に切り替えてその内容を表示したい http://www.fuku3.com/~habata/kbbs/kakov9/18050.htm |
|
|
||||||||||||
う〜ん? >せめて[A]+[B]は >先の例でいえば100を返して欲しい 未定義項目値処理を0にすれば、ちゃんと100になっていますよね? そのための設定です。そう設定しない場合、「未定義値=値不明」ですから、 不明な値を加えれば和も不明になります。 先にも書きましたが、「集計」では不明な値は無視(除外)します。 #件数でも勘定に入りませんよね。 私の「まじめに#NVLを使うなら未定義項目処理=0は不要」は >#nvl([A],0)+#nvl([B],0) と書いてるように、0扱いしたい項目には#NVLを使えば済むはずということです。 |
|
|
||||||||||||
出張中なので詳しくは読んでいませんが・・・ #未定義値変換() 関数って、あくまでも未定義値を ある値に変換する関数なので、&STR=#str(#nvl([金],"")) で、"" に変換しようとしたところで、意味のある 結果は出てきませんよね!? 元が未定義値のものを未定義値に変換するのだったら 最初から意味のある式で無くなるし、元が 0 である ものを未定義に変換する関数でもないし! だから、#未定義値変換() 関数で返すように設定すべき 値は 0 もしくは、定義値で無いと・・・ そんな話では無いのかな? あと、桐とほかの DB やアプリケーションとの関係で 気をつける必要が出てくるものとしては、#未定義値 (NULL)、"" (長さ 0 の文字列) もありますよね! この関係で、桐は外部DB を使った場合に困ったことに なります。 &STR=#u &STR="" の違いですね! |
|
|
||||||||||||
お世話になります。 うにんさん、ありがとうございます。 >フォーム属性の編集タブの右下の「設定」ボタンで改行タブのあるダイアログが出てきま あまりに素早いご返事でしたので見落としていました、すいません。 bonitoさん、ありがとうございます。 教えて頂いた方法はいつかの時に使わせて頂きます。 やりたい事が上手く伝わっていないといけないので 説明が下手なので、すいません、もう少し具体的に書かして頂きます。 社内LANで複数のオペレーターが同じフォームから入力します。 バッティングを避ける為に、ユーザ名を利用しそれぞれの作業ファイルを作り、 そのファイルからの入力後、マスターテーブルを更新する方法をとっています。 共有更新を採用している処理もあるのですが、VER5からVER9への移行中で 全てがこのユーザ名を利用した方法でプログラムされています。 これで伝わるでしょうか? 何卒、何卒、宜しくお願いします。 |
|
|
||||||||||||
TOMさん、こんにちは。 この掲示板の右上にある「ほっ!」にサンプルをアップしました。 ▼Data Base 桐 User Board -----ホームへ戻る|過去ログ一覧|検索|プロパティ |ほっ! http://www2u.biglobe.ne.jp/~s_tanaka/bbs/ho/cbbs.cgi サブフォームの編集対象表をプログラムで.. └#37 [作成:02/19(Sat) 11:59] [File:1 -23KB] 1 ONnoji ONnoji 02/19(Sat) 11:59 <追伸> メインフォームに配置した、 サブフォームのオブジェクトの属性の[サブフォーム]タブの、 [表の引継ぎ]のチェック印をオフにするのがコツのようです。 なお、私は今回の方法はあまり試した経験がありませんので、 何か都合の悪いことがありましたらご容赦ください。 ファイルは桐ver.8 です。桐ver.9 でも動作します。 |
|
|
||||||||||||
TOMさん、みなさん、たまには参加させてちょうだい.. (^^; 標題のような事は「オブジェクト操作」で可能ではあるでしょうが、 桐のHELPには次のように書いてあるので (V8では一部は必ずしもその通りでもないものもあったりはする) >つぎのオブジェクト属性は、メイン処理でのみ変更できます。 > 編集対象表 > 開始条件種別1 〜 2 > 開始条件名1 〜 2 > [フォーム開始]イベントのON/OFF > グループキャッシュ > グループソース /*??*/ > グループソート > 局所変数(サブフォームオブジェクト) > ジャンプバー > グループ操作バー > ボタンの大きさ > ボタンの種類1 〜 2 ちょっと面倒というかまったく随意にという訳にもいかないような 気がして私の場合は幾つかのサブフォーム用のwfmを作っておいて (サブフォームのメイン上でのオブジェクト名=さぶおぶ) (変更するサブフォーム名=用意01.wfm 用意02.wfm...) オブジェクト操作 @さぶおぶ.サブフォーム="用意01.wfm" とか オブジェクト操作 @さぶおぶ.サブフォーム="用意02.wfm" とか...サブフォームそのものを変更しています... が これにも少し問題があって例えば用意01.wfmの対象表を 編集(訂正等)した後に用意02.wfmに変更しようとすると 桐がおセッカイに「保存するかぁ?」と訊いてきます。 でもってサブフォームは開始時・終了時ボタンが使えな いのでしたなく上書き保存のコマンドボタンをつくって 上記のオブジェクト操作の前に メソッド呼び出し ハンドル=&hwindow @さぶおぶ.@うわがきb.実行() とかしたりして苦労してます... 以上V8の話しなので今の桐はもっと便利かも知れませんが... |
|
|
||||||||||||
お世話になります。 >(1)メインフォームが開く時に、 >サブフォームの編集対象表を任意の表に変更したいという意味でしょうか? >それとも、 >(2)メインフォームが開いた後で、あるアクションによって、 >サブフォームの現在の編集対象表を、別の表に変更したいという意味でしょうか? どのタイミングで設定(変更)するかは まだ決められていません。 今のところ(1)をと考えていたのですが、 出来ましたら両方教えて頂くことは可能でしょうか? |
|
|
||||||||||||
たゆーさん、こんにちは。 蒸し返しの議論になりますが… 表の定義における「未定義項目値処理」というのは、 おそらく、表( .tbl )の項目計算式のために導入されていると思います。 未入力の場合にはそれをゼロと扱って計算すると普通の場合には便利なことが多いでしょう。 と、K3がそのように思ったかは、私はぜんぜん知りませんが、 確かに、こういう設定が便利な場面がありますよね。 ※すべての未定義値をゼロに置換しなくてもいいのですから… 一方、成績処理のような場合には、 試験を欠席した生徒が、零点になるはずがありません。 このような場合、欠席した試験の点数を機械的にに零点で計算するわけにはいきませんよね。 学校関係のデータ処理では、 表の定義における「未定義項目値処理」というのが、 役に立つ場合があるのかなと想像できます。 表の定義における「未定義項目値処理」と、#未定義値変換の場合、 まず、優先されるルールは、表の定義における「未定義項目値処理」でしょう。 次に、その影響下で、#未定義値変換( )関数が適用されるのは、 何も不思議なことではないとおもいますが………… |
|
|
||||||||||||
>#NVLは未定義項目値処理より新しい関数だったと思います。 >まじめに#NVLを使うなら未定義項目処理=0は不要でしょうね。 [A]+[B] #nvl([A],0)+#nvl([B],0) せめて[A]+[B]は 先の例でいえば100を返して欲しい これさえ適えば |
|
|
||||||||||||
>#NVLは未定義項目値処理より新しい関数だったと思います。 >まじめに#NVLを使うなら未定義項目処理=0は不要でしょうね。 これは????? この話題は、興味深いですね。そこで、ヘルプを見てみました 桐 ver9-2005(桐-2004 sp2)・の、ヘルプより(バージョンを書きづらいゾ!!) 「#NVL」のヘルプ >#NVL( val1 , val2 ) >val1 が未定義値であれば val2 を、そうでなければ val1 を返す。 > 【例】 #NVL([数量],1) * [単価] > ※ [数量] が未定義値なら [単価] に 1 を掛ける。 >《別名》 #NVL #未定義値変換 「#未定義値変換」のヘルプ >#未定義値変換( val1 , val2 ) >val1 が未定義値であれば val2 を、そうでなければ val1 を返す。 > 【例】 #未定義値変換([数量],1) * [単価] > ※ [数量] が未定義値なら [単価] に 1 を掛ける。 >《別名》 #NVL #未定義値変換 最後の「《別名》」以外は一緒ですね(空白行削除してます) と、いうことはどちらでも同じ結果が出るはずです・・・と? |
|
|
||||||||||||
>サブフォームの編集対象表をプログラムで設定したい? TOMさん、こんにちは。 質問の範囲がとても広いので、すこしお尋ねします。 (1) メインフォームが開く時に、 サブフォームの編集対象表を任意の表に変更したいという意味でしょうか? それとも、 (2) メインフォームが開いた後で、あるアクションによって、 サブフォームの現在の編集対象表を、別の表に変更したいという意味でしょうか? それとも、(1)と(2)の両方でしょうか?? |
|
|
||||||||||||
>祝!20万カウント突破 遅れ馳せながら、おめでとうございます。 表題のような事は可能なのでしょうか? 宜しくお願いします。 |
|
|
||||||||||||
原山さんの列挙された例を一通り見ましたが、特に 不可解な点はありませんでした。 未定義「項目値」処理なので、変数には影響しません。 集計では未定義値は0と見なさず無視します。(0と見なすと 平均などが狂ってしまいます) #NVLは未定義項目値処理より新しい関数だったと思います。 まじめに#NVLを使うなら未定義項目処理=0は不要でしょうね。 |
|
|
||||||||||||
別の問題かも知れませんが、変数宣言しただけの変数は・・未定義? 例: 変数宣言 整数{&i} &i=&i+1 確認 #文字列(&i) これも、「確認」等で表示すると「1」はでなかったような・・・ つまり、未定義と「0」とは、違うということだと記憶しています 原山さんありがとうございます |
|
|
||||||||||||
>祝!20万カウント突破 【多遊】さんへ 私からも >私には、もともと比べようが無い素材同士を無理に比較しているように思えます。 どうも私の不毛の論議にお付き合いいただいて恐縮です。 以下、私の備忘録として作ったものです。 ******************** * 0と未定義値 ******************** test.tbl 3項目とも数値項目 [A] [B] [C] 100 * [A]にのみデータを入力 [C]を置換 0定義 未定義 [A]×[B] 0 "" [A]+[B] 100 "" [B]+1 1 "" #横合計([A],[B]) 100 100 #横合計([B],[B]) "" "" #横平均([A],[B]) 100 100 [B]に 0 を入力 #横平均([A],[B]) 50 50 test.cmd 変数 数値{&i} 確認 #str(&i) "" &i=&i+1 確認 #str(&i) "" &i="" &i=&i+1 確認 #str(&i) "" &i=0 &i=&i+1 確認 #str(&i) 1 表 "test.tbl" 確認 #str([B]) 0 "" &i=[B] 確認 #str(&i) 0 "" 確認 #str([A]+[B]) 100 "" 確認 #str(#横合計([A],[B])) 100 100 確認 #str(#横合計([B],[B])) "" "" &i=#横合計([B],[B]) 確認 #str(&i) "" "" "test.tbl"の未定義項目値処理を未定義に設定 確認 #str([B]) "" 確認 #str(#nvl([B],1)) 1 ここに来られている方々には言わずもがなのことですが、 [A]+[B]・#横合計・#横平均・&i=&i+1 これらの両者の違いなど釈然とはしないものの 私自身の今後の留意事項とします。 #横合計・#横平均では明確に未定義値を未定義値として 取り扱っているのに[A]+[B]・&i=&i+1では・・・ 未定義項目値処理を0に設定して上記の問題を意識しながら 処理することにします。 ド・モ・ONnoji さん、今村さん その他のここを ご覧の皆様私の今度の発言にお気を悪くされたら、 どうかご容赦のほどお願い致します。 |
|
|
||||||||||||
このハンドルで書くのも久しぶりですが、 ><6023>・・・/ド・モ・ONnoji ・・・ >祝!20万カウント突破 ド・モ・ONnojiさん、皆様、本当にありがとうございます。 ほとんど私からの情報はないのに、こんなに素晴らしい数字(カウンター)を いただきまして、本当にうれしく思います いま、この掲示板をご覧いただいてる皆さんのおかげと本当に感謝致して おります 私の場合、最近の桐利用は「印字処理」だけの処理が大半でした。 また、違う方にも目を向けて桐を活用していきたいと思います 本当に皆様ありがとうございます |
|
|
||||||||||||
>ただ私が納得できないのは、 >未定義値はあくまで未定義値であって >表の定義で0か未定義を選ぶのは変である。 >もっと言えば未定義と0は別物である。 >極端に言えばこれに尽きます。 原山さん、こんにちは。 未定義値とゼロの問題は、 DOSの頃のデータベースソフトに普通にあった問題だろうと認識しています。 この問題は、今のデータベースの常識からすれば、不完全で未熟なものかもしれません。 でも、当時は(今から思えば)不自由でも、それなりに普通に使っていたと思います。 以下はあくまでも個人的な感想です。 もしも、失礼があればお許しください。 原山さんが perl がお好きなことはこの掲示板で存じ上げていますが、 DOS時代から存在する商用ソフトウェア=桐 と perl を比較するのは、 私には、もともと比べようが無い素材同士を無理に比較しているように思えます。 |
|
|
||||||||||||
>同じ味噌でも古味噌ですよ。 やはり相当過去からこの問題は引きずっていたんですね。 ただ私が納得できないのは、 未定義値はあくまで未定義値であって 表の定義で0か未定義を選ぶのは変である。 もっと言えば未定義と0は別物である。 極端に言えばこれに尽きます。 私が一番好きなperlではこの点の区別が 明確です。 ついでにperlの方が優れていると思う点 1.桐のような制限も可能であるが、変数の型を選ばない。 つまり今数値で扱ったものをそのまま次の場面では 文字として扱える。 2.正規表現での強力なポテンシャル 3.配列の使い勝手の良さ(特に連想配列→ハッシュ) 4.デバッグの容易さ(比べるほうがおかしいのかな) 5.処理の早さ(テキストを扱うのだから当たり前?) 等など数え上げればかなりなものになります。 とは言いながら、桐には少なからざる愛着があります。 帳票の部分では他の追随を許さぬものがあり、 私にとって欠かせない武器ではあるのです。 だからこそのグチなのであります。 V10ではどうなっているのかな?!・・・ |
|
|
||||||||||||
>#横合計 これがミソだったんだ。 >今村さん の例題で、何で横合計なのかな >とは思っていました。 >分かりましたが・・・ 原山さん、こんにちは。 同じ味噌でも古味噌ですよ。 調べたところ、#str でも #項目属性( n, 1 ) でも、 その時点で、すでにゼロになってしまいます。 だから、普通にやったのでは駄目ですね。 ヨクワカリマセンが、表の未定義値項目値処理というのは、 四則演算の時にお節介をすると思いました。 しかし、普通の式の場合でも、項目を参照すると影響するようですね。 唯一の例外は旧名:#合計 現在は、#横合計 関数のようですよ。 私は、DOS版の桐でも使っていた記憶があります。 |
|
|
||||||||||||
ド・モ・ONnojiさん こんにちは #横合計 これがミソだったんだ。 >&STR = #str( #cond( #横合計([金], [金] ) <> #u, [金] ) ) >&STR = #str(#横合計([金], [金]) ) どちらも未定義を返しました。 今村さん の例題で、何で横合計なのかな とは思っていました。 これで可能であることは分かりました。 分かりましたが・・・ *#横合計( item1 , item2 ) *項目 item1 から item2 までの合計値を返す。 これが未定義を返すこと (合計を計算しているのだからこれこそ 0 を返すほうが私には納得できる。) #str(#nvl([金],""))が 0 を返すこと 両方とも益々納得がいきません。 #nvl は何のためにあるの→ 管理工学様 またグチってしまった。 |
|
|
||||||||||||
蛇足です。 >※表の未定義項目値の設定の影響を受けないように#合計( )関数を使っています。 過去の桐井戸端BBS (桐ver.9) 21579 項目計算式で計算された値をある場合だけ強制的に手入力したい http://www.fuku3.com/~habata/kbbs/kakov9/21579.htm |
|
|
||||||||||||
>表定義の未定義値処理を 未定義 にチェックすれば期待通りの動作をするからいいとは言うものの >でも &STR=#str(#nvl([金],"")) >この結果が納得できない 原山さん、こんにちは。 次のように試したらいかがでしょうかね。 桐ver.8 でも 桐ver.9 でも大丈夫だと思います。おそらく、DOS版も… 【変更前】 &STR= #str( #nvl([金], "" ) ) 【変更後】 &STR = #str( #cond( #横合計([金], [金] ) <> #u, [金] ) ) <追伸> 祝!20万カウント突破 |
|
|
||||||||||||
今村さん こんにちは >これは桐9では良くて桐9-2004ではだめたったということですか? 桐9は並存させていないので分かりません。 あくまで桐9-2004 で且つ私の環境での結果です。 <6021>を試したわけでもありません。 ただ該当の表で [金] の部分が全て未定義(空)であるのは 確認しております。 |
|
|
||||||||||||
これは桐9では良くて桐9-2004ではだめたったということですか? &STR=#str(#横合計([金],[金)) 確認 &STR 表 "IRO.TBL" var Str{&R,&G,&B} 印字開始 "tesuto",終了状態=&実行リターン 繰り返し (.not #eof) &R=#STR(#横合計([R],[R])),&G=#str(#横合計([G],[G])),&B=#STR(#横合計([B],[B])) 印字 &R,[色名],&G,[色3原色],&B ジャンプ 行番号=次行 繰り返し終了 印字終了 改頁=する 表 |
|
|
||||||||||||
表定義の未定義値処理を 未定義 にチェックすれば 期待通りの動作をするからいいとは言うものの この未定義値にはこれからも悩まされそう・・・ でも &STR=#str(#nvl([金],"")) この結果が納得できない |
|
|
||||||||||||
>Windows 版の桐は「印字コマンド」で、数値型の変数や関数などを >扱う場合に、編集対照表の「未定義項目値処理」の影響を受けるので >(要は印字コマンド以外の行での結果と異なる)、その影響を避ける >には、印字コマンドでこれらを直接扱うのでは無く、印字コマンドの >外で、一旦、文字列型の変数に値を文字列として落とし込んで、印字 >コマンドでは数値型のものを扱わず、文字列型の変数で書き出すよう >にすると言う事ですね!・・・ 時間が出来たので、実験してみました。 当方の環境 WIN2000 sp4 桐 ver9-2004(まだ2005は導入していません) 表定義の未定義値処理を ゼロ にチェックしている場合 while (.not #EOF) * ↓ 確実に未定義値の部分 &STR=#str([金]) 確認 &STR &STR=#str(#nvl([金],"")) 確認 &STR &STR=#str(#nvl([土],""))+","+ \ #str(#nvl([日],""))+","+ \ #str(#nvl([月],""))+","+ \ #str(#nvl([火],""))+","+ \ #str(#nvl([水],""))+","+ \ #str(#nvl([木],""))+","+ \ #str(#nvl([金],""))+"," call 印字(&STR, &tmpDIR+"週報.txt") 編集表 &val2 ジャンプ 行番号=+1 end これを実行すると どちらも 0 が表示されます。 当然出力結果にも 0 が・・・ バージョンによって違うのでしょうか? |
|
|
||||||||||||
今日くらいにトップページのカウンタが20万を突破しそうですね。 |
|
|
||||||||||||
フォームにグループを設定して集計で、 うまく行くかも知れない |
|
|
||||||||||||
hidetake 様 スクリプト持っていません、どこかにありましたら参考までにお願いします >今では、ここに書いたサイトは使っていないので、ダウンロード >する事はできないですけど、ここに書いた ktitle_b.vbs とか >kiri_cnv.vbs を少し弄ればできない事は無いです。 |
|
|
||||||||||||
Jpeg ファイル以外を喰わせたらエラーになるのでチト修正。 ' ----------------------------------------------------------------------------- Option Explicit Dim Arg, File Set Arg = WScript.Arguments If Arg.Count < 1 Then WScript.Quit End If File=ARG(0) If Not IsNull(File) Then Dim Stream, _ Data1, Data2, Data3, _ DataX, DataX1, DataX2, _ DataY, DataY1, DataY2 Set Stream = WScript.CreateObject("Adodb.Stream") Stream.Type = 1 Stream.Open Stream.LoadFromFile File Do while not Stream.EOS Data1 = Stream.Read(1) Data2 = Stream.Read(1) Data3 = Stream.Read(2) If (AscB(Data1) = 255) Then If ((AscB(Data2) >= &HC0) And (AscB(Data2) =< &HC3)) Then Data3 = Stream.Read(1) DataY1 = Stream.Read(1) DataY2 = Stream.Read(1) DataX1 = Stream.Read(1) DataX2 = Stream.Read(1) DataX = AscB(DataX1) * &H100 + AscB(DataX2) DataY = AscB(DataY1) * &H100 + AscB(DataY2) Exit Do End If End If Loop Stream.Close Set Stream = Nothing End If If (DataX + DataY) Then WScript.Echo DataX & " , " & DataY Else WScript.Echo "This is not Jpeg File." End If ' ----------------------------------------------------------------------------- |
|
|
||||||||||||
> 一応、Jpeg の構造からサイズを取得する方法は次のようになっているようです。 > Re: JPEG ファイルのイメージの大きさを知る方法 > http://java-house.jp/ml/archive/j-h-b/027543.html#body 一番簡単な範囲内で・・・ GetSizeJpeg.vbs ( ex. GetSizeJpeg.vbs x:\path\image.jpeg ) ' ----------------------------------------------------------------------------- Option Explicit Dim Arg, File Set Arg = WScript.Arguments If Arg.Count < 1 Then WScript.Quit End If File=ARG(0) If Not IsNull(File) Then Dim Stream, _ Data1, Data2, Data3, _ DataX, DataX1, DataX2, _ DataY, DataY1, DataY2 Set Stream = WScript.CreateObject("Adodb.Stream") Stream.Type = 1 Stream.Open Stream.LoadFromFile File Do Data1 = Stream.Read(1) Data2 = Stream.Read(1) Data3 = Stream.Read(2) If (AscB(Data1) = 255) Then If ((AscB(Data2) >= 192) And (AscB(Data2) =< 195)) Then Data3 = Stream.Read(1) DataY1 = Stream.Read(1) DataY2 = Stream.Read(1) DataX1 = Stream.Read(1) DataX2 = Stream.Read(1) DataX = AscB(DataX1)*256 + AscB(DataX2) DataY = AscB(DataY1)*256 + AscB(DataY2) Exit Do End If End If Loop Stream.Close Set Stream = Nothing End If WScript.Echo DataX & " , " & DataY ' ----------------------------------------------------------------------------- |
|
|
||||||||||||
一応、Jpeg の構造からサイズを取得する方法は次のようになっているようです。 Re: JPEG ファイルのイメージの大きさを知る方法 http://java-house.jp/ml/archive/j-h-b/027543.html#body |
|
|
||||||||||||
VBScript で画像ファイルの画像の大きさを取得する (unibon) http://www.geocities.co.jp/SiliconValley/4334/unibon/asp/getimagesize.html WMI か VBS からエクスプローラの情報を取得する方法があると 思うけど、見つけられなかった。 jpeg だけで無くイメージを広く扱う事を考えて、上のを参考に して、既知のイメージを桐のテンプレートにあるファイルに してしまうと、次のようなスクリプトで可能ではあります。 GetImageSize.vbs ( ex. GetImageSize.vbs x:\path\image.jpeg ) ' ------------------------------------------------------------------------------ Option Explicit Dim WS, FS, Arg Set WS = WScript.CreateObject("WScript.Shell") Set FS = WScript.CreateObject("Scripting.FileSystemObject") Set Arg = WScript.Arguments Dim KiriVer, KiriPath, KiriImage, ImageFile KiriVer = WS.RegRead("HKCR\.tbl\") If KiriVer = "Kiri8tbl" Then KiriPath = WS.RegRead("HKLM\SOFTWARE\K3\KIRI\8.0\Path") KiriImage = KiriPath + "\Template\TTON2IND.BMP" ElseIf KiriVer = "Kiri9tbl" Then KiriPath = WS.RegRead("HKLM\SOFTWARE\K3\KIRI\9.0\Path") KiriImage = KiriPath + "\Template\TTON2IND.BMP" Else Ret = WS.Popup( "桐の関連付けがありません!" _ , 0 _ , "桐の関連付け確認" _ , 0) Set Arg = Nothing Set FS = Nothing Set WS = Nothing WScript.Quit End If If Arg.Count < 1 Then WScript.Quit End If ImageFile=ARG(0) Dim x, y Call GetImageSize(ImageFile, x, y, KiriImage, 100, 113) WScript.Echo"幅 = " & x & ", 高さ = " & y WScript.Quit Sub GetImageSize(ByVal f, ByRef x, ByRef y, ByVal r, ByVal xx, ByVal yy) Dim p Set p = LoadPicture(f) ' 未知の画像 Dim q Set q = LoadPicture(r) ' 既知の画像 x = CLng(CDbl(xx) * CDbl(p.Width) / CDbl(q.Width)) ' CLng の丸めの機能を利用している。 y = CLng(CDbl(yy) * CDbl(p.Height) / CDbl(q.Height)) ' CLng の丸めの機能を利用している。 Set p = Nothing Set q = Nothing End Sub ' ------------------------------------------------------------------------------ |
|
|
||||||||||||
>一覧表印刷でHTML出力するとIMGタグにサイズが設定されているので、 >これを取り込む方法を考えれば桐だけでできそうなんですが。 試していませんが、うにんさんが書かれた方法が、 桐だけで何とかする有力な方法だろうと思いますが…(^^ゞ |
|
|
||||||||||||
OSの違いかも知れませんが、エクスプローラで画像の入ってるフォルダーを 表示すると、ファイル名・サイズは当然ですが「撮影日・画像の大きさ」また 設定によっては、「カメラのモデル」等まで表示することができますね そこで、桐得意のファイル名コピー時に、エクスプローラの環境を、つまり、 そのとき画面に表示されてる項目(内容)すべてを取得できればいいですね 私の場合「VIX」を利用して画像サイズを取得してます。が、 イベントを組んでも、VIXで、どうしても2手かかってしまいます 「表面にでなくて処理できるかもしれませんが不明です 俗にいう、コマンドライン???」 桐だけでできればすぐそちらに移りたいと思うのですが・・・ |
|
|
||||||||||||
> perl でやっちゃうとか vbs とかで組み押して使うとか? > 使うのならモジュールを使えばもっと簡単なようですが・・・ perl と言っても、フルに入れるとなると何だけれど、たまに ちょこっとした操作をするぐらいだったら、5.00x であれば perl.exe で数百キロバイト程度であるし、cygwin 版で一番 新しい v5.8.6 だって、最低限の perl.exe cygwin1.dll cygperl5_8.dll cygcrypt-0.dll で 2Mbyte ちょいだし、 パスの通ったところに入れておいてあげる程度なので、パソ コンには入れておいて、遊ぶにも結構楽しめると思う。 :-p |
|
|
||||||||||||
あっ! これの元は KentWeb のアップロード付きの掲示板関係に 含まれているやつでしたかね? (^^; 似たようなルーチンもいろいろあるようですし、敢えて perl を 使うのならモジュールを使えばもっと簡単なようですが・・・ |
|
|
||||||||||||
perl でやれば、次のようなやつで可能ですね。 perl でやっちゃうとか vbs とかで組み押して使うとか? #!/usr/bin/perl $filename = $ARGV[0]; local($t, $m, $c, $l, $wi, $hi); open(JPEG, $filename); binmode JPEG; read(JPEG, $t, 2); while (1) { read(JPEG, $t, 4); ($m, $c, $l) = unpack("a a n", $t); if ($m ne "\xFF") { $wi = $hi = 0; last; } elsif ((ord($c) >= 0xC0) && (ord($c) <= 0xC3)) { read(JPEG, $t, 5); ($hi, $wi) = unpack("xnn", $t); last; } else { read(JPEG, $t, ($l - 2)); } } close(JPEG); print "$wi, $hi"; |
|
|
||||||||||||
そういえば、書式メニューで「定義画面の設定」を「詳細プロパティを使用する」に しとかないとでてきませんね。 |
|
|
||||||||||||
フォーム属性の編集タブの右下の「設定」ボタンで改行タブのあるダイアログが出てきます。 |
|
|
||||||||||||
某掲示板の話題ですが。 一覧表印刷でHTML出力するとIMGタグにサイズが設定されているので、 これを取り込む方法を考えれば桐だけでできそうなんですが。 |
|
|
||||||||||||
お世話になります。TOMです。 たゆーさん、うにんさん、hidetakeさん、ありがとうございます。 編集表の「強制改行文字」は、以前たゆーさんのお勉強で教えて頂いていました。 これって、フォーム上の変数にも有効だったのですね。 おかげさまで上手く行きそうです。 で、ちょっと気になるのですが、hidetakeさんから >別にフォームだったら編集対象表と関係なくフォーム自体で >「非表示改行文字」が設定できますが? とあるですが、この設定ってどこにあるのでしょうか? |
|
|
||||||||||||
あるはずだと思って探したけど見つからなかったのです。 1段深い階層にちゃんとありました^^; |
|
|
||||||||||||
> 編集対象表の強制改行文字が有効です。項目値である必要はありません。 > そのことと違う? 別にフォームだったら編集対象表と関係なくフォーム自体で 「非表示改行文字」が設定できますが? そのこととも違う? |
|
Copyright (C) 2000 CGI Arkadia All rights reserved. Script written by Shintaro Wakayama. BBS-TypeN Ver.2 Preview4 remodel advice by hidetake |