したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

■■■20レス以内で済むF-BASICの質問はこちらへ■■■

1F橋:2003/12/19(金) 20:48
20レス以内程度(20回程度の投稿)で終わりそうなF-BASICの質問はこちらでお願いします
短い質問のスレッドがいくつも立つより1つのスレッドで固まっていた方が長期に渡り見ることができ
かつ保存も簡単かと…

(いや…私だけでなく…皆さんも簡単のはずなんですが…(汗(笑)))

掲示板の内容の長期保存にご協力頂ける様よろしくお願いします

157TOKO:2004/12/12(日) 08:46
>ラオウさん
間違えて『20レス以内で済むF-BASIC質問の件#23』に書き込んでしまいました。(^^;)

158ラオウ:2004/12/12(日) 12:11
読込は1行100項目をを一度に読み込まなくてもいいんだ
そうなんだ
昔からずっと勘違いしていました
ありがとうございました

159Fbasic使用者:2004/12/14(火) 14:37
お世話になります。
__________________________
F$ = WINOPENDLG( "メモ帳",CRDIR$("")+"\メモ帳\*.TXT", "テキスト(*.TXT);全てのファイル(*.*)", 0 )
●ここでデバックのブレークを設定
__________________________
上記でダイアログボックス( WINOPENDLG)を実行後、●ここでデバックの
ブレークを設定の所でフォームに設けてありますビットマップボタン
(BMPBUTTON)のビットマップ全てが色抜け状態(白色)になります。
ブレークからデバックのトレースボタンを一個でも実行しますとビットマップ全ての
色抜け状態はなくなり本来のビットマップに戻りました。
何故このような事になるか解りませんがプログラムで本来のビットマップに
戻す方法は可能でしょうか。何かご存知の方がおりましたら、
教えて頂けませんでしょうか。宜しくお願い致します。

160Fbasic使用者:2004/12/14(火) 16:46
>>159 FBASICサンプルでも確認できました。
FBASICV63\Sample_B\BmpBtnにメニューを設けFBASICV63\Sample_B\Edit
サンプルの開く(o)sub OPEN_ON()・・・・end sub部分を追加しました。
__________________________
F$ = WINOPENDLG( APPNAME, "*.TXT", "テキスト(*.TXT)", 0 )
●ここでデバックのブレークを設定
________________________

161Fbasic使用者:2004/12/15(水) 19:52
お陰様で解決することができました。
ダイアログボックスがビットマップボタンと重なる所が
色抜けになりました。F$ = WINOPENDLG・・・の後に
CLS 0(テキストとグラフィックを消去)を追加することで
再描画される様になりました。

162Fbasic使用者:2004/12/23(木) 10:02
日頃から大変お世話になりまして、ありがとうございます。
再度、下記につきましてよろしくお願いいたします。
フォームにビットマップボタンを作成後、プログラムで作成しました
ビットマップボタンを取り除いてフォームにビットマップボタンを無く
する事は可能でしょうか。
________________________________________________
コントロールID BMPBUTTON21
項目
ビットマップ  XXXXX 
   ・
   ・
ツールチップ XXXXX
__________________________________________________

ご存知の方がおりましたら、教えて頂けませんでしょうか。よろしくお願いたします。

163TOKO:2004/12/23(木) 10:38
BmpButton21のハンドルを取得し、APIのDestroyWindowで破棄できるようですが、
単に、ShowWindow 0では不都合があるのでしょうか?

164Fbasic使用者:2004/12/23(木) 15:25
TOKOさん
早々と、返信くださいましてありがとうございました。
少し遅くなりまして本当に申し訳ありませんでした。
ビットマップボタンを作成後、プログラムでビットマップボタンを取り除
きたい理由はタイマーイベントを発生して切り取り、コピー、張り付けを
ビットマップボタンとして利用しています。Windows98、2000、
XPではよいのですがWindows95ですと遅いため切り取り、コピー、
張り付けを実行しますと全体的にかなり遅くなります。それでWindows
95の場合はタイマーの使用をしない為別に切り取り、コピー、張り付けをビ
ットマップボタンを別に設け上に重ねています。
Windows95以外では上に重ねたビットマップボタンを取り除ければと
思っています。タイマーイベントは周期的に他でも使用していますので停止す
る事はできません。幾度もなくご指導くださいまして深くお礼を申しあげます。
少し早いと思いますがよい年をお迎え下さい。
今後とも宜しくお願い致します。

165Fbasic使用者:2004/12/23(木) 16:25
TOKOさん
APIのDestroyWindowのご回答によりまして
作成後のビットマップボタンをプログラムで取り除く事ができました。
if (GETDLGITEM("Bmpbutton21"))<>0 then RET=winapi_DestroyWindow(GETDLGITEM("Bmpbutton21"))
お陰様で目的通りのものが出来ました。
心より厚くお礼を申しあげます。
本当にありがとうございました。

167芳博:2004/12/28(火) 18:56
早速助言頂きました ありがとうございます

前回も書き込もうとしたのですが出来ませんでした
また
具体的な プログラムで一部教授願うときはどのようにすればよいでしょうか

168延ちゃん:2005/01/08(土) 19:13
lprint 命令を使うには
どうしたらいいでしょうか?
使っているのはFBASIC VER.4
です。

169TOKO:2005/01/08(土) 21:19
プリンタにもよりますが、

#include "Windows.bi"

txt1$ = "abcdefghij"
txt2$ = "漢字の出力"
print txt1$
print txt2$

'(A)Windowsの印刷機能を使用する場合
lprint type "DC"

'(B)F-BASICインストール配下のBINフォルダにあるCHECHPRN.EXEを実行し、漢字が印刷
できるプリンタの場合プリンタポートを直接操作できます。(例:PC-PR201G)
'lprint type "PC-PR"

lprint txt1$
lprint txt2$

'これを入れないと排紙されない
lprint chr$(12);

stop
end

(A)、(B)どちらかを生かして試してみてください。

170ラオウ:2005/02/12(土) 06:12:00
 件数が5万件の配列のソートをしたいのですが、バブルソートでは時間がすごく
かかります。

 F−BASICは再帰呼び出しが使えないようなので、再帰呼び出しを使わない
クイックソートか、他のソートを教えてください。

171TOKO:2005/02/12(土) 17:21:29
http://tokovalue.hp.infoseek.co.jp
のソートテストは参考になりませんか?

172iwakifarm:2005/02/12(土) 18:41:50
ソートする場合すべてのレコードを比較するのかな?
それとも何バイト目から10バイトとか。。。。
一度組んだことがあります。
どこかにソースがありますので探してみます。

173ラオウ:2005/02/12(土) 21:50:31
171さん
 参考にさせていただきます。ありがとうございました。

172さん
 固定長ではなく、配列を次のように設定し、D列の昇順でF列の降順というように
したいと思っています。
 var shared HAIRETU(A,B,C,D,E,F) AS LONG

174初心者:2005/02/12(土) 23:45:05
はじめまして。いつも拝見させていただいております。
申し訳ありませんがお力を拝借したくて書き込みをさせていただきます。

HTTPGETで、"xxx.pl"のようにperlのURLを指定して、
その出力ファイルを得たいと思っています。

実行してみると、html形式の出力は得られるのですが、
なぜかファイルサイズが4096バイトのところまでしか
GETできないようで困っています。

"xxx.html"のように、htmlファイルを指定したときは
ちゃんとEOFまで取得してくれるのですが、
なぜこうなるのでしょうか…。

175F橋:2005/02/13(日) 01:33:50
>>173
私は頭が悪いので(理解力が本当に弱いので)ちょっと確認したいのですが・・・
(速度はとても遅いし配列のソートでは無く「D列の昇順でF列の降順」で表示するのみですが)

>配列を次のように設定し、D列の昇順でF列の降順というように・・・
>var shared HAIRETU(A,B,C,D,E,F) AS LONG

との事ですので

D列の昇順でF列の降順に配列の変数の中身を出力してみてますが・・・

var shared HAIRETU(A,B,C,D,E,F) AS LONG

'HAIRETU(a,b,c,d,e) の aの最大値を max_a, bの最大値を max_b ... とした場合

for d=0 to max_d
 for f=max_f to 0

  for a=0 to max_a
   for b=0 to max_b
    for e=0 to max_e
     print hairetu(a,b,c,d,e)
    next e
   next b
  next a

 next f
next d


D列の昇順でF列の降順に配列の変数の中身を出力してみましたが・・・
要はこんな形で変数の中身を順序よく取り出せればいいだけなんでしょうか?

>>170でソースはある用なので可能ならばそれをここに投稿して頂けると助かります

-----
おそらくですが。こんな巨大な6次元配列で50000件って事は
ファイルから読み込んだものだと想定しております
従って読込時に別配列をキーとして用意すれば高速に並び替える手段が
思いつくような気が・・・少ししますです

-----
今、泥酔中で・・・なんか凄いとんちんかんなレスをしている気が・・・(おい

176F橋:2005/02/13(日) 01:45:52
>>174
多分解決しないと思いますが・・・少々思った事を・・・

1)wait入れたらどうなりますか?(CGIが動ききってない場合を想定)
HTTPGET ID, "xxx.pl"
wait(100)
HTTPGET ID, "xxx.pl"

2)もし xxx.pl が自作ならば・・・
xxx.plの実行結果をxxx.htmlに出力する様に変更してみては如何でしょう?

-----
ネットの読込の何かで4096バイトって何かで聞いた気が・・・
ルーターの有無、別のプロパイダ、OSによって4096バイトでは無い場合が
考えられるのですが・・・(でもその場合の解決策が思いつかない)

Windows95,98とWindowsME,2000,XPで結果が違う気がする・・・
(95系、NT系では無くブロードバンド用の設定のOSとナローバンド用の設定のOSの違い)

177ラオウ:2005/02/13(日) 06:26:11
>>175
すみません。
この表現(var shared HAIRETU(A,B,C,D,E,F) AS LONG)は間違っています。

実際はvar shared SORTWORK1(J&, ITI)で、SORTWORK1の中のITIは6個(1:氏
名、2:年齢、3:住所、4:電話、5:性別、6:金額)があり、年齢を昇順、金額を
降順に並べ替えたいとき

SORT 50000,2,"U" '年齢を昇順
SORT 50000,6,"D" '金額を降順

SUB SORT(TOTALCNT1&,ITI,ZYUN$)
SELECT CASE ZYUN$
CASE IS = "U"
for L& = TOTALCNT1& to 1 step -1
for J& = 1 to L& - 1
if SORTWORK1(J&, ITI) > SORTWORK1(J& + 1, ITI) then
for M = 1 to 6
swap SORTWORK1(J&, M), SORTWORK1(J& + 1, M)
next
endif
next
next
CASE IS = "D"
For L& = TOTALCNT1& to 1 step -1
for J& = 1 to L& - 1
if SORTWORK1(J&, ITI) < SORTWORK1(J& + 1, ITI) then
for M = 1 to SORTKOUMOKU
swap SORTWORK1(J&, M), SORTWORK1(J& + 1, M)
next
endif
next
next
END SELECT
ENDSUB

というふうに、ITIで並べたい項目を指定し、ZYUN$で昇順か降順を指定します。
なお、このサブプロを実行すると2時間以上かかります。

171さんの例を元に、クイックソートで作ってみたのですが、年齢を昇順、金額
を降順に並べ替えたいとき、1回目の年齢を昇順にはきれいにソートできるので
すが、2回目の金額のソートをすると、金額は降順になるのですが、年齢がばら
ばらになってしまいます。
クイックソートでは、もともと無理があるのでしょうか。

長文になりましたが、お知恵をお貸しください。

178iwakifarm:2005/02/13(日) 13:26:27
ラオウさん了解です。
両方共昇順であれば可能です。
そうしてもと言う場合は、昇順されたファイルと降順されたファイル
を同じデータかどうかを調べてでないとでてきません。
そうなると年齢を基準にするか、金額を基準するかでプログラムを
組めば、可能かと思います。

179F橋:2005/02/14(月) 01:51:48
>>177
私の会社と似たようなデータみたいですね(笑
F-ISAMやBtrieve、もしくはアクセスなどのデータベースならファイルを読み込むときに
年齢昇順で金額降順に読み込む。って事が簡単なんですけどね
(私の会社ではある程度の件数以上(1000件以上くらい)はこのようにしてます)

データベースが使えなくて配列でなんとか行わなければならないのなら・・・
別の検索用のキー配列を用意するのがとりあえずは早くなるかと・・・

'/// 年齢昇順、金額降順用のsortキー用の配列を作成(ファイル読込時に作成するといいかも)
for j&=1 to 50000
 nen$=right$( space$(3)+str$( SORTWORK1(J&, 2) ),3 )
 kin&=1000000&-val( SORTWORK1(J&, 6) ) '金額は0〜999999(6桁)の場合
 kin$=right$( space$(6)+str$( abs(kin$) ),6 )
 sortkey$(j&)=nen$+kin$+right$( space$(5)+str$(j%),5 )
next j&

'/// sortkey$()をsortするルーチン・・・はいくつか方法あるので後ほど

'/// sotrkey$()を参照しながらsort結果を出力
for j&=1 to 50000
 code&=val( right$( sortkey$(j&),5 ) )
 for m=1 to 6
  SORTWORK1(code&, 6)
 next m
next j&

(↑一切テストしてないのでプログラムが間違っていたらすいませんです)

sortの方法はいくつか考えられますが・・・
配列のsortkey$()をのみをsortすればいいだけなので単純になるので
どこぞでクイックソートのサンプルでも探して簡単に出来るのでは無いかと・・・

それとF-BASICのサンプルにsortのサンプルが(こっそりと)あるので
それを利用して見ると早いと思います
(\fbasicv63\sample_b\ccall\sortを見てみてください)

クイックソートのサンプルが見つからないとかdllの使い方が分からない場合は
sortkey$()をテキストファイルに書き出してテキストファイルを別のソフトを使用し
(フリーソフト sort テキストなどでGoogleで検索してみてください)
ソート後のテキストファイルを順次読み込む。等が考えられます
テキストファイルのソート専用のソフトは50000件でも数分だと思いますので
ファイルの読込時間や書込時間を考えてもトータルでかなり高速ではないかと・・・

で。どの方法を使うか。使いたいのかが分からないので今回は詳細は省略しますが
1.クイックソートのサブルーチンを使うのか
2.F-BASICのサンプルを使うのか(使った事ないけど多分お勧め)
3.テキストファイルにしてソートを他のソフトに任せるのか

の返答を頂ければもう少々細かくお話しますです

180F橋:2005/02/14(月) 02:10:14
>>177
金額の項目の範囲がどのくらいなのか(マイナスがあるのか、最大でいくらくらいなのか、小数点があるのか)
が分かればさらに高速にする話が出来る。かも知れないです

多分ですが。50000件かつたくさんの項目を持つのならF-BASICでは少々厳しいはず・・・
(配列はメモリの許す限りと書いてありますが件数多いと(F-BASICでは)劇的に遅くなりますので)
別の何かにsortを任せるのが一番だと思います

先に話したF-BASICのsortサンプルがベストだとは思いますが
(私と同じで)dllの呼び出しはよく分からないからしたくない。って場合は
↓が一番簡単で効果が高いかと思います



open "sort.txt" for output as #1
for j&=1 to 50000
 nen$=right$( space$(3)+str$( SORTWORK1(J&, 2) ),3 )
 kin&=1000000&-val( SORTWORK1(J&, 6) ) '金額は0〜999999(6桁)の場合
 kin$=right$( space$(6)+str$( abs(kin$) ),6 )
 print #1, nen$+kin$+right$( space$(5)+str$(j%),5 )
next j&
close #1

shell "sort.exe","sort.txt > sort.out" ... 'shellの使い方忘れた。調べてください(笑
' OSによって標準で sort.exeがついているのを忘れてた。
' sort.exeの使い方はsort/?等で調べてみてください
' 上記の例はsort.exeの使い方を調べずに適当に書いてます
' この方法を使うのなら調べ直すのでご返答下さいです。
'
' 現状でどの方法を使いたいのかが分からないので詳細まで書くと長くなるので省略してます

open "sort.out" for input as #1
while not eof(1)
 line input #1, buf$
 code&=val( right$( sortkey$(j&),5 ) )
 for m=1 to 6
  print SORTWORK1(code&, 6)
 next m
wend

尚、私の知識内では上記の用に何らかの方法で検索用のキーを作り
それをsortする方法しか思いつかないです
キーを作らずに高速にソートをしたい場合が思いつきませんのでご了承下さいです。

181F橋:2005/02/14(月) 02:14:39
ひとりごと

お?今試してみたんだけど。sort.exeは予想以上に早かった(笑

dir /s \ > a.txt でテキストファイル(60000行 3Mbyte)を
sort a.txt > a.out にしたら数秒・・・10秒かかってなかった(Win2000 Pen3 900MHz 256Mbyte環境)

これはsort.exeを利用したが簡単で早そうだ・・・
(書込、読込の時間がかかるだけくらいかな・・・)

182F橋:2005/02/14(月) 02:18:06
>>181の続き

数秒っつーか・・・2秒?2秒以内かも。

Windowsを作ったメーカーがWindowsで標準で用意したSortってのは流石に凄まじく高速っすねー

183ラオウ:2005/02/14(月) 04:24:47
レスありがとうございます。

昇順と降順を含む2つ以上の検索キーをまとめるやり方は勉強になりました。

SORT.EXEをつかってみようとSORT/?をしたのですが、開始位置の指定は/+Nだと
わかったのですが、桁数の指定がわからないので教えていただけないでしょうか。

ファイルを20桁目から昇順にする場合はうまくいきました。
shell "SORT.EXE","C:\A.TMP /+20 /R /O C:\B.TMP"

184nisii:2005/02/14(月) 11:20:49
F-BASIC付属のXSRVC_QSORT(F1A0QSRT.DLL)を愛用しています。
メモリ上で受け渡すので、結構速いよ。
検索キーの位置と長さも指定できますからお試しを。

公開中のツールのほとんどで、ファイル名ソートほかに使ってます。
15万件ソートでも耐えてますよ。(WinXP)

…え?ダウンロードしたファイルに添付されてないって?
実はこっそり埋め込んでます。(苦笑)

私は、sortを始め、shell(DOSコール)を避けるようにしています。
というのも、わずか数百回のコールで、致命エラーが発生することが多いから。
メモリクリアや、メモリ配置の工夫程度では、解決できませんでした。

185ひろ:2005/02/14(月) 18:28:51
FBASICの諸先輩方教えて下さい。
ボタンを押したらFORM2を表示したいのですが実行時にコントロールが見つからないとエラー
が出ます。リソースには登録してあるのですが.....
初歩的な質問で恐縮ですがどなたかお願いします。

#include "WINDOWS.BI"
var shared MAINFORM as object
MAINFORM.ATTACH GETDLGITEM("MAINFORM")

var shared FORM_2 as object
FORM_2.ATTACH GETDLGITEM("Form2") ' エラー発生行 [コントロールが見つかりません]

declare sub BUTTON1_ON edecl ()
var shared BUTTON1 as object
BUTTON1.ATTACH GETDLGITEM("button1")

while X=0
WAITEVENT
wend

sub BUTTON1_ON()
FORM_2.SHOWWINDOW -1

end sub

186ひろ:2005/02/14(月) 18:29:08
FBASICの諸先輩方教えて下さい。
ボタンを押したらFORM2を表示したいのですが実行時にコントロールが見つからないとエラー
が出ます。リソースには登録してあるのですが.....
初歩的な質問で恐縮ですがどなたかお願いします。

#include "WINDOWS.BI"
var shared MAINFORM as object
MAINFORM.ATTACH GETDLGITEM("MAINFORM")

var shared FORM_2 as object
FORM_2.ATTACH GETDLGITEM("Form2") ' エラー発生行 [コントロールが見つかりません]

declare sub BUTTON1_ON edecl ()
var shared BUTTON1 as object
BUTTON1.ATTACH GETDLGITEM("button1")

while X=0
WAITEVENT
wend

sub BUTTON1_ON()
FORM_2.SHOWWINDOW -1

end sub

187nisii:2005/02/14(月) 20:07:07
FORM_2.ATTACH GETDLGITEM("FORM_2") ' エラー発生行 [コントロールが見つかりません]

FORM_2.CREATEWINDOW "FORM2" , 0

188ひろ:2005/02/14(月) 21:50:30
nisiiさん
どうもありがとうございました。

お蔭様で目的が実現できそうです。
FORM_2.SETTOPMOSTWINDOW (-1) 
で手前に表示もできました。
本当にありがとう御座いました。

189F橋:2005/02/15(火) 00:47:09
>>183
>桁数の指定がわからないので教えていただけないでしょうか。
すいません。分かりません。
私の考えで申し訳ないのですがOSによってオプションが変わる可能性もあり得るので
私の場合はオプションを付けずにSORTさせる場合が多いのですが・・・

>>184
致命的エラーが出やすいのは知りませんでした。
私はテストでしか使った事が無いのでこれを納品するとハマる所だったかも知れません
ありがとうございました

nisiiさんの意見のF-BASICサンプルのSORT DLLを使うのに私も賛成は賛成っす
ただDLL呼び出し恐怖症(=数年前の私)の方も見えるし
Windows起動後数回程度しか使わない作り方もあり得るのを考えるとSORTの方向もありかな。と思うですので・・・

あの。nisiiさんの意見を否定してる訳じゃないですよー(涙
(今の私ならDLLを呼び出すのを真っ先に考えるので・・・)

どういうシステムか。開発者がどのレベルか。どういう使い方をユーザーがする予定なのか。等々
条件によって様々考えられるので現段階ではどれが正解かってのは分からないっすよねー(汗

190nisii:2005/02/16(水) 17:39:10
>>179
年齢と金額の2つのキーがあり、それぞれ昇順と降順でソートする方法案。

ソートの優先順を1年齢、2金額と想定します。
元データはカンマ区切りなどのテキストファイルと想定します。

氏名,年齢,住所,電話,性別,金額(改行)
氏名,年齢,住所,電話,性別,金額(改行)


まず、各行の先頭に固定長のキーを加えたファイルを作ります。()内は例。

年齢(023)金額(000010000)氏名,年齢,住所,電話,性別,金額[改行]
年齢(031)金額(000021500)氏名,年齢,住所,電話,性別,金額[改行]


このとき、金額が最大9桁なら、キーの値は(999999999 - 金額)とする。
金額に負の値が存在しうるなら、(999999999 - ( 金額 + 499999999))とする。(最大値に注意)
SORT.EXEなどテキスト対応のソートプログラムがあれば、このままソート。

最後に、先頭のキーを取り除きます。


------------------------
高速なバイナリソートをするなら、レコードを固定長にします。

連番(000001)年齢(023)金額(000010000)
連番(000002)年齢(031)金額(000021500)


これをソートし、最後に連番を元に氏名・住所ほかを取り出します。

メモリが充分あるなら、次のレコードでもOKでしょうか?

年齢(023)金額(000010000)氏名,年齢,住所,電話,性別,金額…長さをそろえるスペース
年齢(031)金額(000021500)氏名,年齢,住所,電話,性別,金額…長さをそろえるスペース


------------------------
参考までに、DOS用のソートプログラム。
http://www.vector.co.jp/vpack/filearea/dos/util/text/sort/index.html

191F橋:2005/02/16(水) 22:56:24
>>190
さらに分かりやすいソートをご紹介頂きありがとうございました
これをchr$()やmki()で圧縮するとさらに速そうですね

>参考までに、DOS用のソートプログラム。
あ。こういうフリーソフトのジャンルがあったんだ・・・
私も嬉しかったりしたです(笑

sortの日付(公開日)が古いのが多いですねー
やはり最近はデータベースとかのsortが主流なんすかね

覚えなければならない事がどんどん増えてる気がする(涙

192ラオウ:2005/02/16(水) 23:15:55
sort.exeを使うことにより、2時間以上かかっていた作業が10秒で終わりました。

nisiiさん F橋さん
どうもありがとうございました。

193亀谷 弘之:2005/02/21(月) 14:37:17
fbasic6.3で簡単なProgを作成し次のような命令をしたところ
 Locate 10,10:input "",A$ A$には漢字を入れたいところ、locateにかかわらず
画面の左上に変換された漢字が出てきます、その後enterキーにより所定の場所に移動しますが
しますが、最初からlocate文の場所に表示させることは出来ないのでしょうか?
教えてください。

194亀谷 弘之:2005/02/21(月) 14:38:14
fbasic6.3で簡単なProgを作成し次のような命令をしたところ
 Locate 10,10:input "",A$ A$には漢字を入れたいところ、locateにかかわらず
画面の左上に変換された漢字が出てきます、その後enterキーにより所定の場所に移動しますが
しますが、最初からlocate文の場所に表示させることは出来ないのでしょうか?
教えてください。

195akira:2005/02/21(月) 22:48:09
教えてください!FBASIC6.3をWinXP上で使っています。
統合環境でフォームにコントロールを配置するとき一つ配置すると
フォームが一番下に行ってしまいます。
今日気がついたんですが、前回までは普通に連続で配置できました。
ほかのウインドウをすべて最小化すれば普通に使えます。
FBASICを上書きしてみましたが直りません。どうかよろしくお願いします。

196F橋:2005/02/22(火) 02:05:26
>>194
このHPのトップページでリンクしてある

F-BASICでAPI
http://www.geocities.co.jp/SiliconValley-SantaClara/1866/index.html

↑の
http://www.geocities.co.jp/SiliconValley-SantaClara/1866/FB/toukou/FV63LIB.html
をご参照下さい



>>195
え?そんな症状があるんですか?
その症状はF-BASICだけなんでしょうか?

うろ覚えですが似たような症状でハード(キーボードかマウス)の故障だった事があったような無かったような・・・
相変わらずお役に立たずにすいません

197akira:2005/02/22(火) 15:59:36
>>その症状はF-BASICだけなんでしょうか?
そうなんです!ほかのアプリでは何でもないようなんです。
前回は上書きしてみたけどだめだったので、今度は完全に
アンインストールして入れなおしてみようかな。

198nisii:2005/02/22(火) 17:59:55
>>197
フォームのプロパティで、トップモーストを指定していませんか?
これをしてると、統合環境のダイアログが隠れて操作できなくなることもあります。
トップモーストは、プログラムから指定することをお勧めします。

199akira:2005/02/22(火) 20:52:50
nisiiさん、いつもありがとうございます。
>>フォームのプロパティで、トップモーストを指定していませんか?
してないです。今回一度削除して再インストールしたんですが
まったく変わりませんでした。
どうも常駐プログラムが悪さしているような気がしてきました
最近セットアップしたSKYPUとB's Recorder GOLD8を止めてもう一度
テストしてみます。

200akira:2005/02/22(火) 22:40:06
やっぱりだめでした。しくしく
ただタイトルバーをワンクリックしてからコントロールの配置位置を
決定すればメインフォームが隠れなくなることがわかったので、とりあえず
そうやって見ます。残念!!

201F橋:2005/02/23(水) 02:49:33
>>200
全然関係ない可能性が高いですが・・・
ウイルスとスパイウェアのチェック(特にスパイウェア)をしたらどうなります?


ウイルスバスター オンラインスキャン
http://housecall.antivirus.com/housecall/start_jp.asp?i=n

Spybot (スパイウェアのチェック)
http://www.dream-seed.com/pukiwiki/index.php?Windows%2FSpybot%A4%CE%BB%C8%A4%A4%CA%FD

202akira:2005/02/23(水) 08:38:40
スパイウエア・ウイルス共にいませんでした。

203F橋@役立たず管理人:2005/02/24(木) 20:25:45
>>202
お騒がせしてしまい申し訳ございませんでした

204nisii:2005/02/25(金) 11:45:21
>>199
ある日を境にこの症状が起きるようになったのであれば、
その直前にやったことが原因ですよね。

WindowsXP SP2を入れた。
DirectXを更新した。
ディスプレイドライバを更新した。
「タスクバーをほかのウィンドウの手前に表示する」などの設定を変えた。
キー・マウス操作の補助ツールを入れた。
トップモースト属性のウィンドウを持つ常駐ソフトを入れた。
気づかずに何かのソフトを入れた。

・そのプロジェクトファイルにフォームを2つ以上登録しているなら、
属性を比較してみる。

・セーフモードではどうでしょう?
セーフモードで正常なら、常駐ソフトが原因の可能性大。

205akira:2005/02/25(金) 19:47:36
nisiiさんいつもありがとうございます。
>>WindowsXP SP2を入れた。
SP2を入れた後も正常に動いていました。
>>DirectXを更新した。
これは意識的には更新していないんですが、テストで
Desktop On-CallというIBMのアプリを組み込んだとき
DirectXを更新したかもしれません。
後前にも書きましたが、B'SとSKYPUを入れたんで削除してみたんですが
やはり変わりませんでした。
まだセーフモードではやっていないのですぐやってみます。
フォームにコントロールを配置するときって最初のうちにやっているので
最近はづっとコーディングばかりだったので気がつくのがおくれてしまい
原因がつかめません。
また報告します。

206akira:2005/02/26(土) 14:54:19
セーフモードでやってみましたが、全く同じ動きでした。
後はDirectXぐらいしか思いつきません。ヒロシですヒロシです・・・・

207nisii:2005/02/26(土) 16:29:04
>>206

セーフモードで変わらないなら、F-BASICの問題か、
キーフックがらみのシステムを書き換えられたか、くらいかな?

前者ならアンインストール後、フォルダの削除。
もちろん残っているはずのレジストリキーも削除。
で、再インストール。

後者だとちょっと面倒だね。システムの復元じゃ直らないかも。

208akira:2005/02/27(日) 17:32:20
nisiiさんどうもです。
参考にいろいろやってみます。

209F-BASIC愛好者:2005/03/01(火) 14:14:49
時々拝見しまして勉強になり大変助けられています。
ファイルをダウンロードするため、ダウンロード記述をクリックしますと、
ファイルのダウンロードで保存する場所(I)がデスクットプになります。
F-BASICで保存する場所(I)をデスクットプでなく指定する場所に変更することは
可能でしょうか。もし、可能でありましたら、ご教授よろしくおねがいします。

210nisii:2005/03/02(水) 10:59:33
WINSAVEDLG関数を実行したときの、デフォルトディレクトリを変更したい
ということでしょうか?
そうなら、APIのSaveDlg()を使えば指定できそうですよ。

211F-BASIC愛好者:2005/03/02(水) 14:27:11
nisiiさん返信ありがとうございました。
自分は説明ができていませんでした。本当に申し訳ありません。
自分事ですが、音声読み上げにつきまして下記にしました。
http://www-6.ibm.com/jp/voiceland/download/engdown.html
http://www-6.ibm.com/jp/voiceland/pt20/ocxdown.html
1.ファイルのダウンロードのダイアルログボックスが表示されます。
2.ダイアルログボックスの保存(S)をクリックします。
3.保存する場所(I)は デスクトップになっていました。
PT97VD07.EXE、PT97ENG.EXE、PTOCX.EXE 3個のソフトをダウンロードします。
これらをソフトでダウンロード&インストールしたいと考えています。
 ダウンロード
1.shell "http://www-6.ibm.com/jp/voiceland/download/dl/PT97VD07.EXE&quot; 
2.shell "http://www-6.ibm.com/jp/voiceland/download/dl/PT97ENG.EXE&quot;  
3.shell "ftp://ftp.jp.ibm.com/pub/software/internet/viavoice/ptocx.exe"
 インストール
shell CRDIR$("")+"\Pt97eng.exe" 
shell CRDIR$("")+"\Pt97vd07.exe" 
shell CRDIR$("")+"\SETUP\SETUP.EXE"
shell CRDIR$("")+"\ptocx.exe"
その保存場所の変更、保存する場所(I)が今どの場所になっているかが
解ればCRDIR$("")が定まりソフトでダウンロード&インストールが行えるので
はないかと考えています。何か方法がありましたら宜しくお願いいたします。

212nisii:2005/03/02(水) 15:43:52
IEに限定していいなら、最後に使ったダウンロード先は分かります。

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Download Directory

レジストリの操作例は、トップの記事に書いています。
http://www.geocities.jp/fbasic63/fbn005.htm

213F-BASIC愛好者:2005/03/02(水) 15:55:41
早々ご回答頂きましてお礼を申し上げます。
レジストリの操作例から最後に使ったダウンロード先が
HKEY_CURRENT・・・ Directoryから分かるとの事で
挑戦する事ができます。本当にありがとうございました。

214mgo:2005/03/02(水) 16:38:35
始めまして。いつもは自分で調べものをして解決してるのですが、
とうとう私にはどうにもできない壁にぶつかってしまいました。
さっそくその質問です(くだらなかったらどうしよう・・・)。
f-basicにおいてビットマップボタンを新規プロジェクトで使うにはどうすれば良いですか?
サンプルBのMCIフォルダにあるにはあるんですが、全然参考になりません。
どなたかご教示お願いします。

215nisii:2005/03/02(水) 18:27:28
プロジェクトにリソースファイル .rc を登録。

リソース…インポートでビットマップを登録。

あとは、フォーム上にビットマップボタンを貼り付け、
プロパティ上からビットマップボタン名を選択。

\Sample_B\BmpBtn も参考になるかと。

216mgo:2005/03/03(木) 14:05:43
なるほど・・・
だいたいわかりました。
ということは、ボタンを押したときに表示するbitmaapも用意しないといけない
と考えてよろしいでしょうか?

217nisii:2005/03/03(木) 15:51:22
>>216

「通常」「押す」を同じビットマップファイルにすることもできます。
押したときに大きく変化するのがいいかどうかは、お好みで。(笑)

218mgo:2005/03/03(木) 16:02:13
よくわかりました。
nisii様、丁寧にお答えいただきありがとうございました。

219F-BASIC愛好者:2005/03/05(土) 13:29:36
お世話になります。
>>211
ファイルのダウンロードにつきましてよろしくお願いいたします。
Windows98,2000で時々、例 shell "http://www-6.ibm.com/jp/voiceland/download/dl/PT97VD07.EXE&quot;
でファイルのダウンロードのダイアルログボックスが表示されますがダイアルログボックスが直ぐ消えることがあります。
タスクバーにもありませんでした。消えるのはどのような事が考えられますでしょうか。
ご存知の方がおりましたら、ご指導願えませんでしょうか。よろしくお願いいたします。

220F-BASIC愛好者:2005/03/07(月) 21:34:26
>>219
ハッキリした事は断定できていませんがウイルス対策ソフト
スパイウエアーの常駐ナシの状態で行っています。
現在の所ダイアルログボックスが消えるような事は発生していません。
FBASICは問題ないと思いました。お世話になりました。

221F-BASIC愛好者:2005/03/13(日) 13:41:36
度々、お世話になります。
初歩的な質問で申し訳ありません。
レジストリの使用につきまして宜しくお願いいたします。
記述に本ソフトは、レジストリ命令を使用していませんので、
システムを壊すような処理は行っておりませんとありました。
レジストリ命令の使用とはレジストリの値を書き換えと思っていますが。
ご指導頂きました>>211最後に使ったダウンロード先、IEのバージョンは
レジストリの値を読み込んでいます。レジストリの値を読み込むだけなら
レジストリ命令の使用に該当しないと思ってよいのでしょうか。また、
実行ファイル(拡張子が.exe)がレジストリを使用しているか、
使用してないか調べる方法はありますでしょうか。
もし、ありましたらご教授して頂ければと願います。宜しくお願いいたします。

222nisii:2005/03/14(月) 11:13:34
>レジストリの値を読み込むだけなら
>レジストリ命令の使用に該当しないと思ってよいのでしょうか。

「参照」でもレジストリを使用しています。
ユーザーに不安を与えたく無いなら「レジストリは変更しません」でいいでしょう。

>実行ファイル(拡張子が.exe)がレジストリを使用しているか、
>使用してないか調べる方法はありますでしょうか。

外から調べるのはまず無理で、作成者に問い合わせるのが一番確実です。

どうしても自力でということでれば、レジストリの監視ツールをなどを使って、
特定の操作をしたときの変化を頼りに推察するしかありません。

223F-BASIC愛好者:2005/03/14(月) 15:04:10
nisii さん
返信くださいまして、ありがとうございました。
レジストリ命令の使用について「レジストリは変更しません」は大変参考になりました。
お陰様でレジストリの監視ツールはレジストリ番犬ロンを検索で探して使用できました。
お礼を申し上げます。

224F-BASIC愛好者:2005/03/21(月) 14:53:01
お世話になります。
例・・・・ VAR www As string *32765
で32765部分の数値を定数(32765)として使用しています。
定数部分を可変できるようにしたいのですが。
ご存知の方がおりましたら、ご教授して頂ければと願います。
宜しくお願いいたします。

225nisii:2005/03/22(火) 14:50:15
工夫できてもこの程度かと。

#define MAX_STRING 32765
var WWW as string * MAX_STRING

226F-BASIC愛好者:2005/03/22(火) 17:07:00
nisii さん
度々、ご回答頂きまして、本当にありがとうございました。
(#define)方法で置換できる事が学べました。お礼を申し上げます。
新たな質問となりますが32765部分を変数にできればと思い、
下記の方法で行いましたが文法が正しくありませんとなります。
A=32765
#define MAX_STRING A
変数にする事はできないのかと思いました
もし変数にする方法がありましたら、ご教授して頂ければと願います。
よろしくお願いいたします。

227nisii:2005/03/22(火) 18:11:37
#define は定数の宣言です。
また、固定長の文字変数は長さを可変にできません。
できたら、固定長と呼びません。(笑)

構造から見ても、固定長の文字変数は実行ファイルの中に領域が確保されるため、
動的に長さを変えることは不可能です。

可変長の文字変数にすれば、用は足りると思います。
var WWW as string
WWW = space$( '長さを変数で指定' )

228F-BASIC愛好者:2005/03/22(火) 19:17:44
nisii さん
早々、ご回答を頂きましてありがとうございました。
初歩的な質問で申し訳ありませんでした。
お陰様で動作することができるようになりました。
ご指導して頂きまして本当にありがとうございました。
心よりお礼を申し上げます。
今後とも、よろしくお願い致します。

229ごむんご:2005/04/07(木) 07:57:04
ふと思ったので質問いたします。
f-basicに限ったことじゃないかもしれませんが、
ファイルを多重に開くメリットってなんでしょう。
システムクラッシュ時においてそれらのファイルが破壊させる危険が大きくなるだけかと
思うんですが皆様はどう思われます?
ちなみに私は一つ一つ順にopen、closeを繰り返してます。

230F橋:2005/04/07(木) 20:47:36
>>229
>ファイルを多重に開くメリットってなんでしょう。
同じファイルを別プログラムで開くのでしょうか?
それとも別々のファイルをたくさん開くのでしょうか?

同じファイルをいくつも開くのはサブルーチンの様に使う時はメリットになると思います
住所録の様なソフトを作ったとし、それの検索ソフトを作るとします
住所録のソフトから検索ソフトを起動する時に住所録でファイルをopenしたままでも
検索ソフトで再度openするとしますよね。無駄に見えますよね。
でも。検索ソフトだけ立ち上げたり出来ますよね?
あまりいい方法では無いかも知れませんが検索ソフトを呼ぶようなプログラムを作る時に
ファイルがopenしているかどうか。とかを考えずに使えるので楽は楽かと…

別々のファイルをたくさん開くのはレスポンスだと思います
登録ボタンを押した時に10〜20くらいのファイルに書き込まなければならない時…
それら全てをopen〜closeしていては反応が遅いのでopenしっぱなしもあるかと…

>ファイルが破壊させる危険が大きくなるだけかと
その通りです(笑
データベースを使っているのならば回避手段があったりしたはずですが…

231ごむんご:2005/04/08(金) 05:30:49
まず、きちんと状況を説明せずに質問したことをお許しください。
私としては、別々のファイルを一度に沢山開くという意味で書いたつもりでしたが、
同じファイルを別プログラムで開くというのは思いつきませんでした。


F橋様ご返答ありがとうございました。

232ニャン子:2005/04/09(土) 02:44:43
超〜・・・お久しぶりです。ニャン子です。

ごむんごさん>
> ファイルを多重に開くメリットってなんでしょう。

プログラムを作成する際の思想にもよりますのでOpen,Closeを繰り返す方法が
良い場合もあれば、それがかえってレスポンスを悪くする場合もあります。
これは私の場合ですが、データを保存する目的で使用する場合はファイルを使用
する直前にOpenし、ファイルへの読/書が終了した時点でCloseします。

しかし、プログラムによってはメモリの限界を超えてデータ量を扱う場合もあり
ます。その様な場合、ファイルをメモリの一部の様に扱う必要があり、その場合
はランダムファイルまたはバイナリファイルで随時アクセスする必要があります。
その様な場合はプログラム起動時に複数のテンポラリファイルをOpenし、プログ
ラムが終了するまでCloseは行わない場合もあります。

また、単にデータを蓄積する様な場合であってもOpen,Closeを繰り返すと
レスポンスに大きく影響する場合もあります。基本的にスタンドアロンであれば
Open,Closeを繰り返した方が安全かと思いますが、ネットワーク上でサーバと
クライアント間での通信を行う際にファイルのOpen,Closeを繰り返すとネット
ワークに大きな負担を与える事になります。通信以外にもRAIDを装備したマシン
でファイルのOpen,Closeを繰り返すと、それだけWAITが多く発生します。

その他、業務PGでは複数のファイルをMATCH, JOINなどにより一つのファイル
にまとめる場合があります。これらの場合は最低3つのファイルを同時にOPEN
しておかなければなりません。

という事で、Open,Closeを繰り返すメリットとデメリットはソフトを開発する際
の設計思想に依存すると思われます。

> システムクラッシュ時においてそれらのファイルが破壊させる危険が大きく
> なるだけかと思うんですが皆様はどう思われます?

これも設計思想に含まれますが、万が一クラッシュが発生した場合にどのレベル
までデータを復旧させる事が出来るのかを予め設計段階で決めておきます。
シーケンシャルファイルの場合はデータ書き込み時にクラッシュが発生した場合
データの破損は大きいと思いますが、ランダムファイルやバイナリファイルで
予め使用するデータの大きさを確保しておけばFATが壊れる事が殆どなくなり
ます。汎用機やオフコンなどではファイルを使用する領域を予め確保する必要が
ありますので、その仕組みを活用して予めファイルアロケートを行っておく事も
良いかと思います。

233F橋:2005/04/09(土) 17:00:32
>>231
>同じファイルを別プログラムで開くというのは思いつきませんでした。
私は同じファイルを別プログラムでどんどん開くというのが最近少なくないので(笑

>>232
>ファイルをメモリの一部の様に扱う必要があり、その場合はランダムファイルまたは
>バイナリファイルで随時アクセスする必要があります。
この部分が特に分かりやすいです
私が説明したかった事がこの一文で済んでる気がしました(笑

234ごむんご:2005/04/15(金) 06:50:39
ニャン子様、F橋様ご返答ありがとうございます。
視野が広がりました。
仮想メモリのような使い方があるなんて・・・!
本当にありがとうございました!

235ごむんご:2005/04/15(金) 19:55:38
ニャン子様F橋様先日はありがとうございました。

また質問させてください。
ニャン子様のfbhackとnisii様のフォルダ選択を組み合わせて使用してて
気づいたんです。
はじめにeditboxにkeydownイベントを追加して、その後でフォルダ指定ダイアログを
表示し、そこで特定の条件を満たすフォルダを指定すると
「続行不可能なエラーが発生しました」とでて強制終了してしまいます(9X系だとモジュール違反とでます)。

特定の条件というのは私が実験した限りだと
・フォルダ指定ダイアログを開くのが最初であること
・一番下の層のフォルダ名が半角14文字を超えた場合
です。
原因を探ってみましたがどうも
API_SHGETPATHFROMIDLISTとGetModuleFileNameの相性が悪いのかなぁって位しかわかりませんでした。
というのも、API_SHGETPATHFROMIDLISTを先に実行すると後のGetModuleFileNameでエラーが、
またGetModuleFileNameを先に実行すると、API_SHGETPATHFROMIDLISTのところでエラーが出てしまいます。
この二つのapiは同時に使用することはできないのでしょうか?

お世話になったばかりなのですが、よろしくお願いします。

236名無しさん:2005/04/17(日) 23:53:35
apiは得意では無いので・・私の経験談での話で申し訳ないですが・・

>この二つのapiは同時に使用することはできないのでしょうか?
これは無いと思います

>・フォルダ指定ダイアログを開くのが最初であること
これと似た症状を何度か経験しましたが。そのほとんどが私の場合はプログラムミスでした
API等に渡す変数のパラメータがあっていない可能性が高いと思います
特に文字列のbyte数が違う等が私の場合はほとんどでした

二つのAPIを使っているとの事なのですが。違う文字列長を定義しなければならないのに
その二つに同じ変数を使っていてどちらかの呼び出しが違うとかありませんか?

私はこういう症状になったときに適当な所に dummy1$=space$(1000) dummy2$=space$(1000) ・・・等を
色々な所にいくつか入れてます
これでエラーが出なくなった場合はまず間違いなく文字列のパラメータが違う場合
(API等に渡す文字列変数の文字長が違う場合)でした

もう一つ・・可能な限り小さくしたエラーの症状が出るサンプルソースをこちらに貼って頂けると
他の方からもレスしやすいかも知れません

237F-BASIC愛好者:2005/04/18(月) 23:29:20
お世話になります。
WIinXPで下記と同じ現象になりますでしょうか。
WIin98では下記の現象にはなりませんでした。
例えばC:\FBASICV63\Sample_B\Edit
sub NEW_ON()
*abc
goto *abc
end sub
ファイル(F)→新規作成(N)起動後、数秒後メニューバー部分をクリックしますと
メニューバー【ファイル(F)編集(E)表示(V)・・・】の記述の文字が消え白色になります。
記述の文字が消えるような同じ現象になりますでしょうか。
WAIT 中にクリックしても同じ現象になりました。
ご存知の方がおりましたらご指導お願い出来ればと思います。
宜しくお願い致します。

238nisii:2005/04/19(火) 18:49:15
>>237

イベントを抱えたまま待ったり長時間の処理をすると、
どうしてもそうなります。>>140
ウィンドウのリフレッシュなどは、イベントプロシージャから抜けた後に行われるため。

途中で待ちが発生する場合は、面倒でも「イベントの受け取り」と「処理」は分けましょう。

回避例(○イベントプロシージャ外で実行する解決例 を参照)
http://www.geocities.co.jp/SiliconValley-Sunnyvale/8635/fbn008.htm

239F-BASIC愛好者:2005/04/19(火) 23:49:20
nisii さん
ご回答くださいましてありがとうございました。
VBでも確かめてみましたが、同じ現象でしたので、OSが関係しているのではないかと
想像していました。nisii さんのイベントを抱えたまま待ったり長時間の処理をした場合、
ウィンドウのリフレッシュはできない。その為「イベントの受け取り」と「処理」は分ける
とのご説明は大変参考になり納得する事ができました。
また解決参照例 までご指導下さいまして本当にありがとうございました。
まだ十分に理解できていませんが自分なりにWin9Xはスタンドアロン単独OS
WinXPは連動OSによる為に現象が違っていたのかと理解しました。
今後とも、よろしくお願い致します。 心よりお礼を申し上げます。

240京都のI・T:2005/05/09(月) 02:16:59
名案が有ったら教えて下さい。
基本画面に別ウインドウ又はpicture画面を数枚貼り付けた状態で、各画面のマウスの現在座標を、
リアルタイムで同時に取得する方法はないでしょうか。現在は、各画面のイベントにより取得した座標と
表示位置を加減算するという原始的な方法を使用しています。アクティブでない(後に隠れている)画面
のマウス座標を取得したいのです。いい方法がありましたら教えて下さい。宜しくお願します。

241chigu:2005/05/25(水) 11:24:54
はじめまして。先月からF-BASICをはじめたchiguと申します!
このサイトにはいろいろとお世話になっています。
ファイルの保存について質問なんですが、
保存名に拡張子をつけなくてもファイル形式を固定する方法がないでしょうか?
(( 保存名:aaa , ファイル:aaa.TXT )っとなるような感じなんですが)
基本的な質問なのかもしれませんが、よろしくおねがいします。

242名無しさん:2005/05/26(木) 01:09:23
>>240
すいません。分かりません

>各画面のイベントにより取得した座標と表示位置を加減算するという原始的な方法を使用しています。
私もこの方法を使うと思います



>>241
>ファイルの保存について質問なんですが、
>(( 保存名:aaa , ファイル:aaa.TXT )っとなるような感じなんですが)

WINSAVEDLGを使ってます?
戻り値にファイル名変える様なので

L$ = "テキストファイル(*.TXT)"
F$ = WINSAVEDLG("ファイルの保存","3DG.BAS",FL$,0)
if F$ <> chr$(&H1B) then
'実際はリネームする前にPATHを分解する必要があります。
'また既に同名のファイルがあった場合に削除する処理も必要と思われます
IF RIGHT$(UCASE$(F$),4)><".TXT" THEN NAME F$ AS F$+".TXT"
endif

こんな形で後から慌ててリネームするという方法も無くは無いですが・・(笑

尚、私はWINSAVEDLGを使った事が無いのでご了承下さい
(WINSAVEDLGの引数で勝手に拡張子って付けてくれないんですよね?)
また、WINSAVEDLG以外でファイルの保存を考えている場合はどういう形なのかも教えてください

後は・・私以外のF-BASIC上級者からの返答をお待ち下さい(笑

243chigu:2005/05/26(木) 16:49:25
242>>
親切な回答ありがとうございます!!
説明不足でした(反省)。ご指摘の通りWINSAVEDLGを使っています。
早速試してみたのですが、「ファイル記述に誤りがあります」とエラーが出てしまいました。
ちなみに

L$ = "datファイル(*.dat)"
F$=WINSAVEDLG("新しい名前をつけて保存","main.dat",L$,0)
if F$<>chr$(&H1B) then
open F$ for create as #1
print #1
if right$(ucase$(F$),4)><".DAT" then name F$ as F$+".DAT"

end if

としてみたんですが(フォルダ名やドライブ名でFというものはないんですが)
なにが原因なんでしょう?

244nisii:2005/05/27(金) 11:29:11
name命令にドライブ名やフォルダ名を含めることはできません。

245名無しさん:2005/06/04(土) 08:43:38
>>241
固定ファイル名で保存するなら、
保存しますか(Y/N)
のダイアログで十分だと思いますが。

246F-BASIC愛好者:2005/06/09(木) 23:20:02
日頃から大変お世話になりまして、ありがとう御座います。
概要
自作F-BASICソフトから別ソフトを実行(SHELL)して、別ソフトのCHECKチェック
ボックスに当たる位置にマウスを移動(SETCURSORPOS)クリック(MOUSE_EVENT)に
よりチェックありに設定しています。そしてスタートに当たるBUTTON位置にマウスを
移動してクリックして起動しています。
質問
CHECK、BUTTONのハンドル(HWND&)は得る事は出来ています。
マウスを使用しないでSendMessage(HWND&,・・・・・・・・・)でチェックボックス
にチェックありに設定、及びスタートBUTTONを起動出来ないものかと思っていますが、
記述方法が解りません。ご存知の方がおりましたら、ご指導して頂ければと願います。
宜しくお願い致します。

247F-BASIC愛好者:2005/06/11(土) 19:11:49
日頃からお世話になります。
SendMessage メッセージのメンバをインターネット
で検索してなんとか解決することができました。

248F橋:2005/06/12(日) 01:12:59
>>243
>早速試してみたのですが、「ファイル記述に誤りがあります」とエラーが出てしまいました。

name命令の1つ目のパラメータにフォルダを指定する事は出来ますが
2つ目のパラメータにフォルダを指定する事は出来ません

>if right$(ucase$(F$),4)><".DAT" then name F$ as F$+".DAT"
F$の内容が"c:\windows\aaaa.tmp" とします

name "c:\windows\aaaa.tmp", "c:\windows\aaaa.dat" はエラーですが
name "c:\windows\aaaa.tmp", "aaaa.dat" なら可能です

>if right$(ucase$(F$),4)><".DAT" then name F$ as F$+".DAT"
この例では F$ の変数をフォルダ名、ドライブ名に分ける必要がありますね
パス名やドライブ名を分けるのは SPLITPATH命令を使ってみてください


>>246
分かりません。と書こうと思ったですが・・>>247で既に自己解決されていて助かりました(笑

249chigu:2005/06/13(月) 10:59:10
>>245 , >>248
回答ありがとうございます!
もうできないものと思いあきらめていましたが、これで何とかなりそうです。
また質問することがあると思いますが、その時はよろしくお願いします。

250F-BASIC愛好者:2005/06/13(月) 19:21:23
お世話になります。
WindowsフォルダおよびSystemフォルダ(GetWindowsDirectory、GetSystemDirectory)
のパスを取得することは可能ですが、キャプション又はハンドルのパス取得は可能で
しょうか。もし可能でありましたら、ご指導して頂けませんでしょうか。
よろしくお願いいたします。

251nisii:2005/06/13(月) 21:50:58
>>250
http://www.geocities.co.jp/SiliconValley-Sunnyvale/8635/api17.txt

ただし、WindowsME/98/95では、フルパスのモジュール名が返り、
WindowsXP/2000(NT4.0不可)では、モジュール名のみが返ります。

252nisii:2005/06/13(月) 22:38:25
>>250
http://www.winapi-database.com/Program/Library/GetModuleHandle.html

実行モジュールのハンドルを得て、
>>250のGetModuleFileNameでフルパス名が得られるかも。
でも未確認なので動かなかったらゴメン。

253F-BASIC愛好者:2005/06/13(月) 23:34:32
nisii さん
幾度にも渡りまして、ご回答下さいましてありがとうございました。
提供頂きましたapi17.txt(関数GetModuleFileNameからフルパス名が得られました。)
まだ完成はしていませんがWinXPでは文字化けがありましたがWin98では問題ありませんでした。
従いましてGetModuleFileNameからパス名が得られる確認ができました。
いつも早々と、ご回答頂きまして感謝しております。本当にありがとうございました。

254F-BASIC愛好者:2005/06/13(月) 23:52:13
>>253のWinXPで文字化けが一度ありましたが再度行いましたら
正常にフルパス名が得られ問題はありませんでした。

255F-BASIC愛好者:2005/06/15(水) 15:25:56
度々、お世話になります。
下記のウィンドウハンドルからアイコン取得の記述がありました。
hicon = HICON(SendMessage(hwnd, WM_GETICON, TRUE, NULL));
C言語と思われますが、HICONにつきましてVB又はF-BASICでそれに
変わる記述方法はありますでしょうか。
ご存知の方がおりましたら、ご指導を願えればと思います。
よろしくお願い致します。

256F-BASIC愛好者:2005/06/24(金) 21:43:31
お世話になっています。
>>255ウィンドウハンドルからアイコン取得が、やっとの思いで解決できました。
参考:関数DrawIcon、GetClassLongから取得しました。
今後ともよろしくお願い致します。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板