X



【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
0001デフォルトの名無しさん
垢版 |
2016/12/24(土) 12:22:27.77ID:CVYSyiU+
FreeBasic
ttp://www.freebasic.net/

建てたいって人がいたので勝手に建てた
後はご自由にどうぞ
俺は知らん
過去スレ
http://echo.2ch.net/test/read.cgi/tech/1139379786/
0107デフォルトの名無しさん
垢版 |
2017/03/05(日) 10:44:56.24ID:rfEgkW/x
https://ja.wikipedia.org/wiki/MS-DOS
に「アジアバージョン」とかかれているのがDBCSをさぽとーしたMS-DOS。
英語版を無理に使うと日本語ファイる名がディレクトリーになったりして、散々な目にあった方々がいた。
0108デフォルトの名無しさん
垢版 |
2017/03/08(水) 20:31:55.47ID:Wan8ns7S
ついに、サブルーチンの移植総数が1000個を超えた。
大域サブルーチン 901個、局所サブルーチン 99個、作成中 3個。
Overload も全体で114個、27種類のルーチン名でまとめた。
引数の型違いのルーチンが増えれば、より多くなるだろう。

http://makoto-watanabe.main.jp/freebasic/CatPgString.html
で、KLEN、KMIDの2つしかないので、いろいろ作成中。
Dim CodePage as UINT
Dim As Long IAA, IBB, InALong
Dim TestChar as UBYTE

'https://msdn.microsoft.com/ja-jp/library/cc448045.aspx
'declare function IsDBCSLeadByte(byval TestChar as UBYTE) as WINBOOL
'https://msdn.microsoft.com/ja-jp/library/cc448047.aspx
'declare function IsDBCSLeadByteEx(byval CodePage as UINT, byval TestChar as UBYTE) as WINBOOL

For IAA = 1 To InALong
TestChar = asc(Mid$(InAstring, IAA, 1))
IBB = IsDBCSLeadByte(TestChar)
If (IBB = 0) Then
Else
EndIf
Next IAA
又は
IBB = IsDBCSLeadByteEx(CodePage, TestChar)
で振り回して、先頭から処理していけば比較的簡単に作れるだろう。
0109デフォルトの名無しさん
垢版 |
2017/03/08(水) 20:35:59.45ID:Wan8ns7S
ただし、Right$()は
If (IBB = 0) Then
StateLong(IAA) = 0
Else
StateLong(IAA) = 1
IAA = IAA + 1
StateLong(IAA) = 2
EndIf
と、SBCS(0)かDBCS(1文字目が1, 2文字目が2)と記録して
後ろから文字数を数える必要がある。
Instr() は手を付けていない。
ASC1文字検索の時だけDBCS2文字目の場合にはねるだけだから、比較的簡単に作れると思う。
0110デフォルトの名無しさん
垢版 |
2017/03/11(土) 09:33:14.20ID:U4jxaOIA
http://makoto-watanabe.main.jp/program.html#binary_editor
に紹介のあった Stirling の実行形式のパスを取得するルーチンを作成した。
宣言は
Dim RootKey as HKEY
Dim As string SubKeyString, kNameString
Dim As string AAString, BBString, CCString, FileString
Dim FileTypeString as String
TakaDammyReturnCode = RegistryRead01(RootKey, SubKeyString, kNameString, AAString)
でレジストリーを読み取って、管理ファイル名(たぶん)から実行形式に変換
TakaDammyReturnCode = FileTypeCat(AAString, FileTypeString, 0): 'AAString から識別子(.以降)を取り除く
StirlingPathString = AAString + ".exe"
'使用例
'BinLineString = StirlingPathString(0&)
'If (Len(BinLineString) > 0&) Then TakaDammyReturnCode = Exec(BinLineString, FileString): '同期する
関数名などは省略。
0111デフォルトの名無しさん
垢版 |
2017/03/11(土) 09:55:02.25ID:U4jxaOIA
Function RegistryRead01() は、旧 Fun GetRkey01() の名称を書き換えたもの。
旧 Fun GetRkey01()は、前スレを探してくれ。

>>109 つづき。
Instr() を作ろうとして、整理していったらば、
StateLong() 配列の解釈に間違いがあったことまでつかんだ。

気がめいったので一時中止。Instr( start, str, substring )
のstartの値、strや substringの長さより、場合分けが必要で
混乱に混乱を重ねて、一括ダンプルーチンを2回作り直した時点で、気がめいった。
StateLong() 配列作成の時点で場合分け用値を定義するか、返した値から定義するか、で迷っている。

ここにMID$()関数の問題が入った。
Mid$(A$, 10, -5)なんて使い方用のルーチンもあったのよ。
これは、N88を使いだす前、A$が255文字制限のあったころ、ペット用Basicを使っていたころの名残。
忘れていたわ、こんなルーチンを作っていたなんて。
0112デフォルトの名無しさん
垢版 |
2017/03/12(日) 18:13:41.20ID:a1qa7agM
以前書いた、BEEP系の内容の続き。
Win系関係ルーチンで発見できたものを記載する。
'declare 文は、C:\tool\FreeBASIC 内 *.BIファイルを検索してくれ。
大域宣言
#Include Once "win/mmsystem.bi"
Dim Shared MSerrorCodeMM as MMRESULT : 'MS音声処理関係処理のリターンコード

'declare function Beep_ alias "Beep"(byval dwFreq as DWORD, byval dwDuration as DWORD) as WINBOOL
MSReturnCode = Beep_(Frequency, BeepTime) : '命令語
'https://msdn.microsoft.com/ja-jp/library/cc428923.aspx

'https://msdn.microsoft.com/ja-jp/library/cc429002.aspx
'Declare function MessageBeep(byval uType as UINT) as WINBOOL
MSReturnCode = MessageBeep(-1)
MSReturnCode =MessageBeep(MB_ICONASTERISK)
MSReturnCode = MessageBeep(MB_ICONEXCLAMATION)
MSReturnCode= MessageBeep(MB_ICONHAND)
MSReturnCode = MessageBeep(MB_ICONQUESTION)
MSReturnCode =MessageBeep(MB_OK)
0113デフォルトの名無しさん
垢版 |
2017/03/12(日) 18:17:37.48ID:a1qa7agM
'http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200707/07070177.txt
にあったMIDI利用 BEEP は何とか成功した。

Dim lngmidHndVal As HMIDIOUT__
Dim lngmidHndPtr As HMIDIOUT
Dim lngmidHndPtrPtr As LPHMIDIOUT
で宣言して、
'declare function midiOutOpen(byval phmo as LPHMIDIOUT, byval uDeviceID as UINT, byval dwCallback as DWORD_PTR, byval dwInstance as DWORD_PTR, byval fdwOpen as DWORD) as MMRESULT
MSerrorCodeMM = midiOutOpen(@lngmidHndPtr, MIDI_MAPPER, 0, 0, CALLBACK_NULL)
If (MSerrorCodeMM = MMSYSERR_NOERROR) Then BeepMidiOut (lngmidHndPtr, MdiMsg)
Sleep mTime
midiOutClose (lngmidHndPtr)
とならす。

Private Function BeepMidiOut(lngmidHndPtr As HMIDIOUT, DataString As String) As Wata
Dim MLMsg() As Byte
Dim As Long IAA, IBB
Dim lpMidiOutHdr As MIDIHDR
と、宣言して、
ReDim MLMsg(0& To Len(DataString) \ 2& - 1&)
For IAA = 1& To Len(DataString) Step 2&
MLMsg((IAA - 1&) \ 2&) = Val("&H" & Mid(DataString, IAA, 2&))
Next
lpMidiOutHdr.lpData = VarPtr(MLMsg(0))
lpMidiOutHdr.dwBufferLength = UBound(MLMsg) + 1&
lpMidiOutHdr.dwFlags = 0&
'declare function midiOutPrepareHeader(byval hmo as HMIDIOUT, byval pmh as LPMIDIHDR, byval cbmh as UINT) as MMRESULT
MSerrorCodeMM = midiOutPrepareHeader (lngmidHndPtr, @lpMidiOutHdr, Len(lpMidiOutHdr))
'declare function midiOutLongMsg(byval hmo as HMIDIOUT, byval pmh as LPMIDIHDR, byval cbmh as UINT) as MMRESULT
MSerrorCodeMM = midiOutLongMsg (lngmidHndPtr, @lpMidiOutHdr, Len(lpMidiOutHdr))
と鳴らす。
0114デフォルトの名無しさん
垢版 |
2017/03/12(日) 18:21:32.40ID:a1qa7agM
音が聞こえなかったのは、Sleep mTime の解釈が原因だと思う。
BeepMidi("02", "60", 2000)
'BeepMidi("57", "60", 2000) 'C7:2093Hz
のように、演奏時間を2000としたら、何秒か聞こえた。
遅延が、2-3秒ぐらいあり、その期間無答となるので、ゲームサウンドには使えない。
0115デフォルトの名無しさん
垢版 |
2017/03/12(日) 19:21:01.74ID:a1qa7agM
さっぱりわからんけど
https://blogs.windows.com/buildingapps/2016/09/21/midi-enhancements-in-windows-10/#HWygA7trSYw9sboJ.97
なんてものを見つけた。
Windows 10でMIDIを強化するというが、2秒ぐらいの遅延が発生していることからみれば
対応を取らなければ、MIDI関係ルーチンが使い物にならないわけで
主要用途である、ゲームのバックグラウンドサウンドにうまく適応で切るような、低負荷ルーチンの存在が必要となってくる。
Win 10では、1/4を超えるCPU占有をTSSで他のタスクに割り振るために認めていない。
より負荷を軽くすることが要求される。
しかし、負荷を軽くする内容については記載がない。
0116デフォルトの名無しさん
垢版 |
2017/03/12(日) 19:38:38.32ID:a1qa7agM
いくらやっても見つからないと思ったらば、こんなの見つけた。
https://www.slideshare.net/garicchi/windows10api
37. バックグラウンドタスク
38. BackgroundTask • UWPは基本的にアプリを閉じるとタスクを実行できなくなる • BackgroundTaskに登録しておくとTriggerが発動したときに別
のプロセスとして処理を実行できる App System System Trigger BackgroundTask 別プロセス BackgroundTask登録
39. Background Task Triggerの例 • Time Trigger • 一定時間でTaskを実行 • 最短15分間隔 • System Trigger • システムのあらゆるイベント時にTask実行
• 例 Internet Available , Power State Changed • Push Notification Trigger • プッシュ通知が来た時にTask実行

MIDI 再生専用のタスクを作って、何かしかの指示を送って実行、
という処理が必要なのかな?。
0117デフォルトの名無しさん
垢版 |
2017/03/13(月) 22:50:24.29ID:71lamdyx
http://www.utp.or.jp/bd/978-4-13-064067-1.html
機会があったらば読んでほしいのだけれども。

細かい計算や理論は除外して、
SALSの運用の話を見てほしい。

全部のソースリストが記載されているものがあって、
記載内容を修正した後でソースリスト(2万枚のパンチカード?)を修正する
という旨の内容が書いてあったはず。
いつ、どのような修正をしたのか、修正の前後の内容を保存している
ということをしないと、障害の巣窟になってしまう、なんて内容が書いてあったはず。

これは、デカコンを使っていたころ読んだ本なので、手元にない。版元では品切 の模様。
どこが、どのようにおかしいから、どのように変更した、
ことを記載しておくこと。
現実としては、作業記録として専用に作るのは面倒だから、
ライブを定期的に、あるいは大規模な修正を行う前に、一括して圧縮保存。
修正作業に入って、修正した日時と修正の原因をコメント行としてソースに残しておく、
ということで、済ましている。

FreeBasicの癖がよくわからないので、>>111 の様な事をやっていて、
本格的な移植作業には入っていない。
ライブの移植が終わるころには、癖がつかめてくるのではないかと思われる。
0118デフォルトの名無しさん
垢版 |
2017/03/13(月) 22:59:35.57ID:71lamdyx
MIDIファイル再生に関して、こんなものを見つけた。
http://officetanaka.net/excel/vba/tips/tips22.htm
以下のファイルが関係している。
C:\tool\FreeBASIC\inc\win\mmsystem.bi
C:\tool\FreeBASIC\inc\win\ddk\mmddk.bi
ここまでしかやっていない。
0119デフォルトの名無しさん
垢版 |
2017/03/13(月) 23:49:42.95ID:71lamdyx
>>114 こんなの見つけたので知らせておく
http://www.cactussoft.co.jp/Sarbo/divMIDISeqLongMsg.html
そのためmidiOutLongMsg()関数は、非同期式で動作する仕様になっています。
非同期式とは、関数が実行された段階でデバイスドライバーは、
「はい、ロングメッセージの送信ですね、受け付けました。」と言うだけで制御を戻します。

と待ち時間に関係なしに制御が戻って、勝手に演奏してくれないと、パックグラウンド゜サウンドに使えない。

ズンチャカやっていて、それ以外の処理系が止まってしまうのは、使えない。
0121デフォルトの名無しさん
垢版 |
2017/03/14(火) 22:03:19.95ID:1/oLMu3p
Case MM_MCINOTIFY
'「MM_MCINOTIFY」定数を使うには 要 #Include Once "win/mmsystem.bi"
Astring = "MM_MCINOTIFY "+ Hex$(wParam) + " " + Hex$(lParam)
TakaDammyReturnCode = SoundFilePlay(10, Astring)
buff = Astring
SetDlgItemText(hWin, IDC_STC1, @buff)
'wParam = (WPARAM) wFlags
'lParam = (LONG) lDevID
0122デフォルトの名無しさん
垢版 |
2017/03/14(火) 22:06:03.27ID:1/oLMu3p
あと
CmdZString ="Open " & SoundFile+" notify"
MSerrorCodeMI= mciSendString(CmdZString, @CmdRetZString, SizeOf(CmdRetZString), TakaHWND)
buff ="Openを開始します"
SetDlgItemText(hWin, IDC_STC1, @buff)
Case IDC_BTN3
CmdZString= "Play "&SoundFile + " notify"
MSerrorCodeMI =mciSendString(CmdZString,@CmdRetZString, SizeOf(CmdRetZString), TakaHWND)
buff= "Playを開始します"
SetDlgItemText(hWin, IDC_STC1, @buff)
Case IDC_BTN4
CmdZString ="Close " & SoundFile+" notify"
MSerrorCodeMI= mciSendString(CmdZString, @CmdRetZString,SizeOf(CmdRetZString), TakaHWND)
buff ="Closeを開始します"
SetDlgItemText(hWin, IDC_STC1, @buff)
0123デフォルトの名無しさん
垢版 |
2017/04/09(日) 21:36:39.17ID:LdLCQwyT
Test
0124デフォルトの名無しさん
垢版 |
2017/04/09(日) 21:43:21.61ID:LdLCQwyT
>>122 のあと、マンゴーがなにんとかで、かけなくなって放置。
気が付いた点で関係情報を
外部タスクの同期起動は、Shell 等がある。
保守関係で、被同期にしたいので探して見つかったのが
'declare function WinExec(byval lpCmdLine as LPCSTR, byval uCmdShow as UINT) as UINT
'MSReturnCodeUINT = WinExec(byval "notepad", SW_SHOW)
とか
MSReturnCodeUINT = WinExec(byval "notepad "+OutFile, SW_SHOW)
これは、MSが切り替えを予定している。それで
'declare function CreateProcessA(byval lpApplicationName as LPCSTR, byval lpCommandLine as LPSTR,
byval lpProcessAttributes as LPSECURITY_ATTRIBUTES, byval lpThreadAttributes as LPSECURITY_ATTRIBUTES,
byval bInheritHandles as WINBOOL, byval dwCreationFlags as DWORD,
byval lpEnvironment as LPVOID, byval lpCurrentDirectory as LPCSTR, byval lpStartupInfo as LPSTARTUPINFOA,
byval lpProcessInformation as LPPROCESS_INFORMATION) as WINBOOL
Dim pi As _PROCESS_INFORMATION
Dim PiPtr as LPPROCESS_INFORMATION
dim si as _STARTUPINFOA
Dim SiPtr as LPSTARTUPINFOA
Dim As Zstring * 256 szCmd = "notepad "+OutFile

PiPtr = @pi
SiPtr = @si
memset(@si, 0, sizeof(STARTUPINFO))
memset(@pi, 0, sizeof(PROCESS_INFORMATION))
si.cb = sizeof(STARTUPINFO)
' 1 2 3 4 5 6 7 8 9 10
MSReturnCode = CreateProcess(NULL, szCmd, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, @Si, @pi)
0125デフォルトの名無しさん
垢版 |
2017/04/09(日) 21:48:26.55ID:LdLCQwyT
タイマー割り込み処理。
Case IDC_BTN1
buff = "IDC_BTN1を開始します"
'declare function SetTimer(byval hWnd as HWND, byval nIDEvent as UINT_PTR, byval uElapse as UINT, byval lpTimerFunc as TIMERPROC) as UINT_PTR
SetTimer(hwnd, 1, 2000, NULL)
SetDlgItemText(hWin, IDC_STC1, @buff)

で起動して
case WM_TIMER
'
buff = "WM_TIMER が発生しました"
SetDlgItemText(hWin, IDC_STC1, @buff)
Case WM_SIZE
と「WM_TIMER」事象発生を受けて、かン系ルーチンを起動する
0126デフォルトの名無しさん
垢版 |
2017/04/09(日) 22:09:11.11ID:LdLCQwyT
V.B.用に作ったタートル関係、FreeBasicでは関係命令が存在するだが、
変な拡張をしたがために、廃止できない状態に。
うまく動かないと思ったらば、ByRef, ByValの関係で、出力値に常に0が定義されていた。

(なんたら)=(かんたら)のなんたら部のみを検索するルーチンを作って、
Function文から引数名を引き抜くルーチンを作って、比較。
1ファイル平均3引数程度、ByRefをしなければならない場所がByValになっていた。
短期即興のルーチンだから解釈できない引数が800近くある。
ルーチン数でも同じくらいだから、引数の関係した未発見のエラーが多いと思われる。
タートル関係のルーチンが増えて、現在1170ルーチンのライブラリーとなっている。
0127デフォルトの名無しさん
垢版 |
2017/04/09(日) 22:26:03.33ID:LdLCQwyT
ファミコン等、かなり古いゲームでは8*8文字とか使っている。
それ前だと、ニキシー管 https://ja.wikipedia.org/wiki/%E3%83%8B%E3%82%AD%E3%82%B7%E3%83%BC%E7%AE%A1
を使ったスロットマシーンとかもある。

V.B.でこれを再現しようとした名残で、7セグとか14セグ、16セクとか
https://ja.wikipedia.org/wiki/7%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4
の文字表示ルーチンがある。
結果として、V.B.用のタートルが捨てられない。
0128デフォルトの名無しさん
垢版 |
2017/04/13(木) 21:48:58.87ID:CzF9QVAq
ByRef, ByVal 接頭語に関して。
サブルーチン内で定義する方法をLet文、具体的には「=」記号のみに限定する
という方法を選択して、
引数の変数を示す語をInstrで探して、
前が数字とアルファベット以外・又は文頭、後ろが数字とアルファベット以外、の場合に、変数を参照していると解釈する。
Open、For、Dim、ReDim、Select Case、IF、DO、LOOP、WHILE、Untilの場合には専用にルーチンで語の一致をみて、参照する場合と決定
IF THEN ELSE 文は、IF - Then 間、THen-Else間、ELSE移行の3文に分割
変数の前の文字を 「# : , ( 算術演算子」の場合に分けて
変数の後ろの文字を 「: , ) 算術演算子」の場合に分けて
「,」や「()」の場合には、前後の()を探して、配列名か関数名を特定。Declear文に記載がある場合に限って関数と解釈、ない場合が配列と解釈。
関数の場合には、自己の検査結果より引数が定義にしているか参照しているを調べる。配列名の場合には参照すると決定(MSやUnix系関数は判断できない)。
算術演算子の場合には参照と決定。
前に「#」があるばあいには、参照と決定。
前に「=」があるばあいには、参照と決定。
後ろに「=」があるばあいには、定義と決定。
多文字演算子として、MOD 演算子は + に書き換えで処理。

までやって、100位解釈できない引数があるけど、なんとかそれらしきものができた。
あとちょっとやれば、ByRef ByVal ガ原因の混乱は終焉すると思う。
0129デフォルトの名無しさん
垢版 |
2017/04/15(土) 11:39:21.57ID:e+ro1QoX
>>122 のあとのマンゴー関係で書けなかった内容。
画面中にある表示枠情報。
Dim CmWndpl As WINDOWPLACEMENT
CmWndpl.length = sizeof(CmWndpl): 'MS指示、参照前に定義のこと
MSReturnCode = GetWindowPlacement(hWnd, @CmWndpl)
で取得、
MSReturnCode = SetWindowPlacement(hWnd, @CmWndpl)
で復元。

'使用TVの物理サイズの取得
Dim R As RECT
Dim as HWND hWnd
hWnd = GetDesktopWindow()
MSReturnCode = GetWindowRect(hWnd, @R): 'スクリーン座標の取得

'タスクバーの位置と大きさを返す
Dim TaskBerInfo As _AppBarData
'(大域) Dim MSReturnCodeUintPtr as UINT_PTR
ZeroMemory(@TaskBerInfo, sizeof(TaskBerInfo)) : '(MS指定) 「TaskBerInfo」領域内を0で塗りつぶす
TaskBerInfo.cbSize = sizeof(TaskBerInfo): '(MS指定) 初期化、領域の大きさを定義
'declare function SHAppBarMessage(byval dwMessage as DWORD, byval pData as PAPPBARDATA) as UINT_PTR
MSReturnCodeUintPtr = SHAppBarMessage(ABM_GETTASKBARPOS, @TaskBerInfo)
リターンコードが「UINT_PTR」という使用頻度の低い型を使っていることに注意。
0130デフォルトの名無しさん
垢版 |
2017/04/15(土) 11:46:28.47ID:e+ro1QoX
'システム枠の幅と高さの取得
'declare function GetSystemMetrics(byval nIndex as long) as long
Select Case ActionType
Case SM_CXSCREEN, SM_CYSCREEN
'0, 1 'プライマリモニタの画面全体の幅と高さを取得します。
WideLong = GetSystemMetrics(SM_CXSCREEN)
HightLong = GetSystemMetrics(SM_CYSCREEN)
Case SM_CXVSCROLL, SM_CYHSCROLL
'2, 3 垂直スクロールバーの幅、または垂直スクロールバーの矢印の高さをピクセル単位で取得します。
WideLong = GetSystemMetrics(SM_CXVSCROLL)
HightLong = GetSystemMetrics(SM_CYHSCROLL)
'const SM_CYCAPTION = 4 ''通常のタイトルバーの高さをピクセル単位で取得します。
Case SM_CXBORDER, SM_CYBORDER
'5, 6 立体効果のないウィンドウの境界の幅と高さを取得します。
WideLong = GetSystemMetrics(SM_CXBORDER)
HightLong = GetSystemMetrics(SM_CYBORDER)
Case SM_CXDLGFRAME, SM_CYDLGFRAME
'7,8 'タイトルバーがあり、サイズが変更できないウィンドウの周囲を囲む枠の幅と高さをピクセル単位で取得します。
WideLong = GetSystemMetrics(SM_CXDLGFRAME)
HightLong = GetSystemMetrics(SM_CYDLGFRAME)
以下略。「GetSystemMetrics」関係がやたら沢山あって下手に書くとマンゴーに引っかかりそうなので一部分だけ。
Case SM_CXVIRTUALSCREEN, SM_CYVIRTUALSCREEN
'78, 79 仮想画面の幅と高さをピクセル単位で取得します。
WideLong = GetSystemMetrics(SM_CXVIRTUALSCREEN)
HightLong = GetSystemMetrics(SM_CYVIRTUALSCREEN)
と、40組ぐらいある。
'const SM_CXFOCUSBORDER = 83
から
'const SM_CMETRICS = 97
まで、Win系BIファイル('C:\tool\FreeBASIC\inc\win\winbase.bi)には記載があるが、内容が検索では見つけられなかった定数がある。
0131デフォルトの名無しさん
垢版 |
2017/04/15(土) 11:51:10.66ID:e+ro1QoX
'表示枠全体, 表示枠使用可能範囲、最大表示可能枠の取得
Dim MainWaku as tagRECT
Case 1
'declare function GetWindowRect(byval hWnd as HWND, byval lpRect as LPRECT) as WINBOOL
MSReturnCode = GetWindowRect(InhWin, @MainWaku) 'InhWinの左上端と右下端の座標をスクリーン座標で取得します。
Case 2
'declare function GetClientRect(byval hWnd as HWND, byval lpRect as LPRECT) as WINBOOL
MSReturnCode = GetClientRect(InhWin, @MainWaku) 'InhWinの表示枠内、ユーサー領域の左上端と右下端の座標をスクリーン座標で取得します。
Case 3
'declare function GetClipCursor(byval lpRect as LPRECT) as WINBOOL
MSReturnCode = GetClipCursor(@MainWaku) 'マウスカーソルの移動可能な範囲に相当するスクリーン座標を取得します(最大表示範囲)。
Case 4
'http://liweijing.blogspot.jp/2007/03/blog-post.html
'declare function SystemParametersInfoA(byval uiAction as UINT, byval uiParam as UINT, byval pvParam as PVOID, byval fWinIni as UINT) as WINBOOL
MSReturnCode = SystemParametersInfo(SPI_GETWORKAREA, 0, @MainWaku, 0) 'タスクバーの大きさをのぞいた画面の大きさ
0132デフォルトの名無しさん
垢版 |
2017/04/15(土) 11:54:37.99ID:e+ro1QoX
'表示枠全体, 表示枠使用可能範囲取得
Dim hBtn As HWND
Dim MainWaku as tagRECT
Dim PointXY as tagPOINT
hBtn = GetDlgItem(InhWin, IDnoGRALong): '表示枠内部品のハンドル(枠番号)を取得, hBtn=0でエラー
Select Case ActionType
Case 1, 11
MSReturnCode = GetWindowRect(hBtn, @MainWaku) 'hBtnの表示枠内部品の、左上端と右下端の座標を表示枠座標で取得します。
Case 2, 12
MSReturnCode = GetClientRect(hBtn, @MainWaku) 'hBtnの表示枠内部品の、左上端(0,0)と右下端の座標を取得します。
0133デフォルトの名無しさん
垢版 |
2017/04/15(土) 11:58:30.77ID:e+ro1QoX
'スクリーン座標 → ユーザー座標に換算
Dim as tagPOINT PointXY1, PointXY2
PointXY1.X = InWaku.Left
PointXY1.Y = InWaku.Top
IF (ActionType = 1) Then
MSReturnCode = ScreenToClient(InhWin, @PointXY1)
Else
MSReturnCode = ClientToScreen(InhWin, @PointXY1)
End If
IF (MSReturnCode = 0) Then IError = 1
PointXY2.X = InWaku.Right
PointXY2.Y = InWaku.Bottom
IF (ActionType = 1) Then
MSReturnCode = ScreenToClient(InhWin, @PointXY2)
Else
MSReturnCode = ClientToScreen(InhWin, @PointXY2)
End If
IF (MSReturnCode = 0) Then IError = 1
IF (Ierror = 0) Then
InWaku.Left = PointXY1.X
InWaku.Top = PointXY1.Y
InWaku.Right = PointXY2.X
InWaku.Bottom = PointXY2.Y
Else
'エラー
End If
てな感じ。
0134デフォルトの名無しさん
垢版 |
2017/04/15(土) 12:03:35.44ID:e+ro1QoX
表示枠や表示部品移動、大きさの変更について、
MSReturnCode = MoveWindow(hBtn, PointXY.X, PointXY.Y, WideLong, HightLong, True): '個別表示物の枠の寸法を定義, 再作画を指示
MSReturnCode = SetWindowPos(InhWin, HWND_TOP, 0, 0, new_width, new_height, SWP_NOMOVE)
MSReturnCode = SetWindowPos(hBtn, NULL, 0, 0, new_width, new_height, uFlags)
MSReturnCode = GetWindowRect(hBtn, @rw)
MSReturnCode = ScreenToClient(InhWin, @PointXY)
MSReturnCode = MoveWindow(hBtn, PointXY.X, PointXY.Y, new_width, new_height, True): '個別表示物の枠の寸法を定義, 再作画を指示
MSReturnCode = SetWindowPos(InhWin, HWND_TOP, LeftLong, TopLong, 0, 0, SWP_NOSIZE)
が関係しているらしいのだけれども、現在混乱して、作成中止中。
0137デフォルトの名無しさん
垢版 |
2017/05/05(金) 06:45:28.53ID:tmTYNlNg
かいとか。連投規制に引っかかった。
0138デフォルトの名無しさん
垢版 |
2017/05/05(金) 07:11:15.97ID:tmTYNlNg
>>128 の内容で一部抜けがある。
Line()等()の後ろに色々指定されている命令の場合、個別に処理して、参照だけで定義されていない
マルチステートにすると解釈が困難になる(:で切って1文1文を検索、表示は切る前の文節)ので、この手の命令を含むマルチステートを禁止した。
SelectCase, Sleep 文も同様な処理が必要になった。
MOD演算子の他にXOR演算子なども書き換えが必要であった。

ByVal, ByRef の間違いが1ファイルに2-3か所ぐらいあった。
引数として存在する物の使われていない変数が結構ある。これは、Function文として()がないと解釈できないので、無意味な引数をつけている。
これがエラーになるので、Type YearnInteger As Integer とYearn型変数を用意して検索の対象から外した。

Astring = ComDeclareListDir2 + "*.txt"
IF (dir$(Astring) <> "" ) then Kill Astring
が動かないみたい。Kill文に*?を使った場合にエラーになるみたい。
対応ルーチン作成中。

日曜プログラマーの場合には、多少実行効率が悪くても、多少処理が遅くても、
ソフト作製時間が少なくて済むように、一番手間のかかる、障害発見時間を短くて済むようにすることが必要。
0139デフォルトの名無しさん
垢版 |
2017/05/06(土) 16:45:07.39ID:Xeh+WPsq
クロスリファレンス表
https://search.yahoo.co.jp/search?p=%E5%A4%89%E6%95%B0%E5%90%8D+%E7%9B%B8%E4%BA%92%E5%8F%82%E7%85%A7%E8%A1%A8%E3%80%80%EF%BC%A2%EF%BD%81%EF%BD%93%EF%BD%89%EF%BD%83&;
aq=-1&oq=&ai=zigtrn1cQYWrys51a_UUkA&ts=3634&ei=UTF-8&fr=top_ga1_sa&x=wrt
の作成ソフトをしらないか。
自作ソフトではかなり解釈ができない場合がある。
例、For-Next のAs 句

自作ソフトがわかりやすいように、文法を制限することはたやすい。
しかし、過去スレを見ればわかる通り、この手の制限をわかりずらいとする人がいる。

日曜プログラマーにとっては、
自分の描いたソフトには必ず障害が発生する、と信じて例外処理ルーチンを付すこと
は、その後の保守の簡便化に関係する。

しかし、簡便化ルーチンを否定する人は多い。
自前のルーチンで解釈が困難で、「難解なルーチン」となる部分を解釈してくれるもの
クロスリファレンス表作成ソフトがあるものと信じて、ここに問い合わせる。
0140デフォルトの名無しさん
垢版 |
2017/05/09(火) 19:35:55.11ID:YDoq9mLA
ファイル名関係処理でDBCS関連がらみの処理をどうしようか、
と迷っていたら、ファイル名関係のシステムコール(スーパーバイザ参照)ルーチンを見つけた。
細かいことは C:\tool\FreeBASIC\inc\win\shlwapi.BI を見てくれ。
「declare function Path」で検索すると、主要なルーチン名を見つけることができる。
一部 declare sub Pathなんたら()があるから注意してくれ。
「Pathなんたら()」と記載しないと参照できない。
0141デフォルトの名無しさん
垢版 |
2017/05/13(土) 22:52:55.55ID:6qsyWLV0
http://www.dotup.org/uploda/www.dotup.org1247922.zip.html
http://www.dotup.org/uploda/www.dotup.org1247923.zip.html

>>140 関係。動作試験した内容。
使いたい人がいたら、適当に使って。
ネットワーク関係のシステムコールが見つかったので整理中。
ローカルでの運用が主体なので、MSネットワーク関係が出てきて混乱している。
V.B.を購入した2000年頃の内容では、MSネットワークがウイルスソフトにやられることが多いので、MSネットワークは使用しないように、というウイルス対応が多かった。
だから、関係ルーチンを使わないようにしていた。だから、内容が理解できない。

C:\tool\FreeBASIC\inc\win\shlwapi.bi の内容は検索してみればわかる通り、個人サイトでは2010年頃に公開されている。
だから、かなり出遅れた内容となる。
'' MS指示 PathAddExtension() → PathCchAddExtension() を使え
なんて旨の内容もある。MSが指定したルーチン名はC:\tool\FreeBASIC\以下の*.BIファイルには見つからなかった。
近い将来、サポートされるものと思う。
0142デフォルトの名無しさん
垢版 |
2017/05/14(日) 11:53:59.80ID:J0U25/Ze
>>140 つづき。
Astring = "*.Txt": Kill Astring
がうまく動作しなくてはじめたこの処理だけど、こんなの見つけてしまった。
http://www.all.undo.jp/asr/Ver7/11.html
>有用性の高いWindows APIの動作が変わってる事だと思います。
>具体的にはPathMatchSpec()というAPIです。
>このAPIはWindows 8正式版の頃から挙動が怪しくなりまして、取りこぼしやら誤ヒットやらと、落ちるわけじゃないんですが比較の結果が正しくない文字が多数発生してました。
ということで、>>141の内容で打ち切って、自前ルーチンの作成が必要であるということになってしまった。
>Windows Vista以降であればPathMatchSpecEx()というAPIが別で存在している
PathMatchSpecEX()があるらしいのだが、FreeBasic ではサポートされていない。
>FindFirst系のAPIだとワイルドカードの組み合わせによって
は、皆さんご存知ですよね。Win 95頃長いファイル名がサポートされて、別名として短いファイル名が用意された。
別名、つまり、8.3形式のファイル名では重複するときに末尾2文字以上を(チルダ)(数字)に置き換える。
だから、おかしなことになりやすい。*で拾って、個別に比較して、処理するということが必要になってくる。
末端ユーザー(オペレーター)に対して、チルダを使うな、と指示して、チルダを使っているファイルをユーザーレベル(プログラム仕様書)で排除すれば済むのだけれど。
0143デフォルトの名無しさん
垢版 |
2017/05/17(水) 20:43:36.59ID:5N4X+pOX
>>141 のつづき。
http://www.dotup.org/uploda/www.dotup.org1251962.zip.html
http://www.dotup.org/uploda/www.dotup.org1251960.zip.html

>>140 関係。動作試験した内容。
使いたい人がいたら、適当に使って。
ネットワーク関係と、表示枠関係は動作試験をやっていない。

不審な動作があったので、ついでに記載。
DimChk42で新規にDialogAppAsMainのテンプレートを使って作成。
その後をDimChk42の内容をDimChk42B, DimChk42C, DimChk42Dにコピーして試験を続けた。
DimChk42AはDimChk42の名称を変更したもの。
DimChk42A内 BAKディレクトリーを消そうとしたら消えない。ReadOnlyになっていたので、これを解除して消去した。
そしたら、DimChk42B, DimChk42CのBAKディレクトリーも一緒に消えてしまった。
どこをどうしているのか、わからないけどOS由来の不審な挙動か、FBEが何かやっているのか、わからない。
OS由来の仕様の可能性が高い。
0144デフォルトの名無しさん
垢版 |
2017/05/20(土) 11:06:25.21ID:ZcoJjZsO
以前書いたような気がするのだが、
*.DLL ファイルの使い方が現時点で分からない。
結果として、LZH, ISH等のファイルが使えないでいる。
ISHは手作業でバイナリに戻して、手持ちのライブラリーのBAse64に切り替えるとして
LZH等が使えないでいる。 http://www.madobe.net/archiver/index.html

ZIPが使えるような雰囲気だが、
C:\tool\FreeBASIC\examples\manual\libraries\zip.bas
対応する ZIP.A ファイルなどが見つけられなかった。

今回、BZIP関係が成功したので、記載する。関係ファイルは
http://www.dotup.org/uploda/www.dotup.org1254567.zip.html
参照。
https://sourceforge.net/projects/fbc/files/Older%20versions/0.90.1/Binaries%20-%20Windows/Libraries/
内' FB-win32-bzip2-1.0.6.zip 内 libbz2.a の参照例
'コピー元ファイル C:\tool\FreeBASIC\examples\compression\bz2compress.bas
圧縮しかできない。解凍方不明。

検索資料 http://s-yata.jp/docs/libbzip2/
BZip対応解凍ソフト、CubeICE、http://www.vector.co.jp/soft/winnt/util/se489109.html

2ちゃんねるって、Base64による投稿を認めているのかな?
0145デフォルトの名無しさん
垢版 |
2017/05/20(土) 19:52:51.58ID:ZcoJjZsO
>>144 
使いたい人がいたら、適当に使って。
これ書き忘れた。

BZIPでは複数ファイルの一括圧縮ができないようなので、一括ファイル合併ルーチンを作ろうとして四苦八苦。
Dim FileSizeOver as DWORD
Dim FileSizeOverPtr as LPDWORD
「FileSizeOverPtr = @FileSizeOver」行を入れるのを忘れて
FileSezeGetULongInt = GetFileSize(FileHandle, FileSizeOverPtr)
とやると、ハングするので要注意。
0146デフォルトの名無しさん
垢版 |
2017/05/24(水) 23:48:18.25ID:ATqZKMOK
>>145 つづき。
なんとか、TARファイルもどき(タイムスタンプや属性をMSのデータそのまま複写等)を作るのに成功。
TARのファイル構造
'http://www.redout.net/data/tar.html tar の構造
'http://openlab.ring.gr.jp/tsuneo/soft/tar32_2/tar32_2/sdk/TAR_FMT.TXT TAR32.DLL フォーマット説明ファイル
を眺めて
https://ja.wikipedia.org/wiki/Tar
をみたら、考えることって同じなんだね。
パンチカードを使っていたころのルーチンが生きていたころ、パンチカードノ内容をほぼそのまま保存したUnPACK形式のデータファイルと
1枚のパンチカードの末尾以後の空白を削除したPack形式のデータが存在する。
Packデータを直接読み取れないのでpack形式をUnPack形式に変換して、固定長データとして取りあ使う。
パンチカートをデータファイルに変換し、保存することを目的に作ったのがパンチ等シすテム。
Tarの構造は、パンチラシステムに近い構造だった。
TARを読んでいたら、BZIPのマルチファイル形式も認めているようなのだが、
関係情報を持っている人はいないか。
Unixのソースファイルを読めば書いてあるのだろうが、Unixはデカコンを使うのをやめた年の終わりごろに入った機械なので、まったく中身を見る時間がなかった。
さっぱりわからない。
0147デフォルトの名無しさん
垢版 |
2017/05/25(木) 21:36:48.40ID:wf6/c17h
>>144 つづき。こんなファイルを見つけた。
'C:\tool\FreeBASIC\examples\dll\dylib.bas のコピー
0148デフォルトの名無しさん
垢版 |
2017/05/27(土) 15:33:51.50ID:ZQgU3vIU
>>147 つづき。
なんとか、LZH A とLZH E の2つのコマンドが使えるようになった。
詳細は、
http://www.dotup.org/uploda/www.dotup.org1262265.zip.html
さんしょう。
DLLファイル関係命令は、以下の通り。
http://makoto-watanabe.main.jp/freebasic/PgDylibsymbol.html
http://makoto-watanabe.main.jp/freebasic/PgDylibload.html
http://makoto-watanabe.main.jp/freebasic/PgDylibfree.html
0149デフォルトの名無しさん
垢版 |
2017/05/27(土) 15:49:52.47ID:ZQgU3vIU
>>148 つづき。
また、書くのを忘れた。
使いたい人がいたら、適当に使って。

Dim なんたら as function(こうたら) As なんたら
の使い方を覚えるべく、引数の類似したルーチンを見つけて、使いして、
文法エラーが出ないか、
だけを注意して継ぎ足していった結果が、>>148
したがって、FreeBasic用に1行Type 命令で定義されている変数型名に合わせているのではなく、
DLLファイルの内容に合わせて定義していった。
だから、変な型変換が入っていたりして動かないものも多いと思う。
0150デフォルトの名無しさん
垢版 |
2017/05/28(日) 20:11:33.54ID:RhTBneuP
>>148 つづき。
使いたい人がいたら、適当に使って。
http://www.dotup.org/uploda/www.dotup.org1263729.zip.html
ULH3300.EXE 導入すれば何とかなるだろうけど、最小限の動作試験程度の内容しかいれていない。
コマンド(C:\Program Files\なんたら\COMMAND.TXT)の使い方が結構忘れている。
あるいは、仕様が変更になったのかもしれない。
QBでは、バッチファイル作成ルーチンを作って、子プロセスでバッチファイルを起動していたから、スイッチなどはきれいさっぱり忘れている。
うまく動かない(子ディレクトリーの再帰読み出しと再帰解凍ができない)。
うまく動かない状態で、ArcDll.basには記載されている。

メモリーの内容を使った圧縮解凍(UnlhaExtractMem,UnlhaCompressMem)はコンパイルできなかった。
'ANSI 版とUnicode 版の2種類が存在する場合(AW)があるけど、区別していない。ANSI 版が起動しているはず。
UniCode( As WSTRING) を使っていないから。
今のところDBCSがわからなくて放置しているから、Uni-Codeまで手が回らない。
0151デフォルトの名無しさん
垢版 |
2017/06/02(金) 23:57:18.03ID:fEm5aE5c
マイクロソフトの作成した*.HファイルをFreeBasic用の*.BIファイルに機械変換した
という意味にとれる内容が記載されていたので、ちょっと探してみた。
Converting C Headers with swig
と、SWINGというソフトがある模様。しかし、現時点でDLハすべて失敗している。
https://sourceforge.net/projects/swig/?source=typ_redirect
0152デフォルトの名無しさん
垢版 |
2017/06/04(日) 01:21:58.65ID:YYutyyMm
検索してみたらそれらしきものが有ったけど
日付がかなり古い感じ
https://www.freebasic-portal.de/downloads/kommandozeilentools/swig-fb-wrapper-70.html
自分ではダウンロードもしていないし試していない
このサイトなら大丈夫だと思うけど自己責任で

こういうのも有るみたいよ
https://github.com/dkl/fbfrog
これは素のCだけでC++には対応してないみたい
参考にどうぞ

前にスレでswigの話してる時に揉めてたみたいね・・・
0153デフォルトの名無しさん
垢版 |
2017/06/21(水) 08:52:54.72ID:62o+/t06
test
0154デフォルトの名無しさん
垢版 |
2017/06/21(水) 19:25:35.91ID:62o+/t06
>>152
ドイツのサイトで
https://www.freebasic-portal.de/downloads/kommandozeilentools/h2bi-bas-134.html
を見つけた。現在ドイツ語を解読中。
コマンドラインから実行するように作成された複数のファイルがあるみたい。

swig_fb.exe を実行したら、| More とか >>HelpMess.txt のようなパイプ処理が使えないWin10だった。
現在SWIG Users Manual, E:\BasTool\SwigWinDoc\Manual\Contents.html を解読中
共通部分だけ解読すれば何とかなりそうなので、そんなに時間がかからないと思うけど
LZH A とLZH E の2つのコマンドが使えるから、急く必要性は低い。
0155デフォルトの名無しさん
垢版 |
2017/06/23(金) 20:28:24.97ID:sAip3Otx
以前から何回か書いているように、自己書き換えルーチンが存在する。
TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo)
の行を各サブルーチンに追記するだけなんだけど
Function TakaErrorPointSach(IniNameString As String, TakaSubRoutineNo As Long) As Wata
ルーチン内に
TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo)
行を書き込んでしまったのが自己書き換えルーチン。

コンパイルは正常終了。実行したら、ハングした。
サブルーチンコールに伴うスタック不足のエラーが発生しないで、ハングする。
どのくらい多重参照できるか調べていないが、原因の特定が困難な障害の原因になりうるので、注意してくれ。
0156デフォルトの名無しさん
垢版 |
2017/06/24(土) 20:29:56.29ID:tgLAy7wE
前スレの内容になるが
http://www.hi-ho.ne.jp/makoto_watanabe/FbEdit/tut2.htm#start
で、
#Define Text1 1001
に対して、IMEで日本語を入れると、じばけしてしまう。対応として
CONTROL "",IDC_LST1,"ListBox",0x50310141,3,0,40,12,0x00000200
のようにリストボックスを用意して、
いくつかの候補をINIファイルなどに保存して置き、
選択入力するようにした。
ソフトで行う内容なんて、初期状態はともかくとして、ある程度の期間がたつと同じようなことしかしなくなる。
入力に関して、自由度が低くても、なんとかならないことはない。
INIファイルなどはエディタを使って直接編集する。
エディタの同期起動については、SHELL命令などを参考にしてくれ。
0157デフォルトの名無しさん
垢版 |
2017/06/25(日) 14:13:32.16ID:0Z+EQ6/s
QB時代から使っていた
AString = "D:\TTT\*.*"
IF Dir$(AString) <> "" Then Kill AString
が、FreeBasicではうごかない。ファイルが削除されず残ってしまう。

ByRef ByVal前置句の辞書とか、過去にソースファイルから読み取って、
後で何かの処理に使おうとして保存している情報がある。
INI ファイルでは、32KB, 64KBの壁があり、32/3*2 = 16KBて、1ファイル21KBを超えないように管理する必要がある。
最大容量の2/3を超えないように最初は設計する。2/3を超えるようなことがあったらば設計しなおし、1/2まで減らす。
というのが、学生時代に学んだ在庫管理で、今は
https://www.sist.ac.jp/~suganuma/kougi/other_lecture/SE/stock/stock.htm
な内容がある。日曜プログラマーとしては、簡便に、多少効率が悪くても最適解を使わないで、簡易解を使うことになる。
1ファイルに入りそうもないと思ったらば、
1文字目でアルファベット別の30分割(A-Z、数字)とか
元ファイル別に本来の値を残して、簡易ファイルで検索するとか
の手法を使う。データベースファイルを構築できればよいのだが、今のところ成功していない。

このためだけに、特定のディレクトリーに分割保存したINIファイル一括削除ルーチンを作成した。
使いたい人は使って、何かの参考にしてくれ。ライブの内容は除いてある。
http://www.dotup.org/uploda/www.dotup.org1293573.lzh.html
0158デフォルトの名無しさん
垢版 |
2017/06/28(水) 21:40:33.73ID:KQoqOcRm
'declare function GetFileTime(byval hFile as HANDLE, byval lpCreationTime as LPFILETIME, byval lpLastAccessTime as LPFILETIME, byval lpLastWriteTime as LPFILETIME) as WINBOOL
lngWin32apiResultCode = GetFileTime(lngOpenFileHandle, @udtCreationTime, @udtLastAccessTime, @udtLastWriteTime)
の関係するフゃいるの時刻情報の取得で、
一連の処理に時間がかかる。CreateFile(), GetFileTime(), FileTimeToLocalFileTime(), FileTimeToSystemTime(), CloseHandle()
結果として、処理が終わる前に再度起動する(障害としてもう1回クリックしなおす)。
2度目の時に、訳の分からない動作をする。
重複起動を抑制するルーチンが必要となる。
0159デフォルトの名無しさん
垢版 |
2017/07/03(月) 12:41:35.66ID:Y68LdOdo
http://makoto-watanabe.main.jp/freebasic/tipsFileDialog.html
がエラーで動かないことは前スレに記載した。
一部変更して動くようになったので、記載する。障害(コンパイルエラー)が発生したのは、Function FileSelectFolder ()内で、ここの変更を記載する。

「 Dim fp As FOLDER_PROPS」行後に「Dim ppidl as LPITEMIDLIST」行を追記する。
「@bi.pidlRoot」という文字を見つけて「@ppidl」と変更、3か所。
挿入1行と変更が3か所。

Fun SHBrowseForFolder() での影響がわからない。
.pidlRootに値を定義していない影響がわからないから。何を定義するのかがわからないから。
コンパイルを通っただけだから、さらなる検証が必要。
0160デフォルトの名無しさん
垢版 |
2017/07/04(火) 22:53:08.02ID:3jSqiyCx
>>159 つづき。
FbEditで
ファイル、新規プロジェクト、DialogAsMain.tplを選択
プロジェクト、Add Existing、モジュールで、Sub01.Bas を作成
Sub01.Bas に、
http://makoto-watanabe.main.jp/freebasic/tipsFileDialog.html
をこぴー、既に上げた変更を行って、緑の▽をクリック、
がやった内容なんだが、
どういうわけが、起動モジュール以外の部分が初回で実行される。
'********************* Usage: *****************************
以後が実行された。

最後に END を書き加えたら、秀良したのだが、なぜが常駐している。
タスクマネージャーを起動して止めたけど、Winが不安定になって、再起動する羽目にあった。

マルチモジュールで開発する時には注意してくれ。
現在は、引数合わせを行っている。
このまま使ってもよいのだが、頭の悪いソースチェックルーチンが引数を理解できない、等の障害が出ている。
ソースチェックルーチンがわかりやすいように、引数を変更する(PTR引数をByRef引数に、Return (値)やFunction=(値)を(ルーチン名)=(値)に等)必要がある。
このあたりが理解できる変数表作成ルーチンはないのだろうか。
解読する必要がある人ならば
C:\tool\FreeBASIC\inc\win\commdlg.bi
を見てくれ。動くには動くのだが、
何か変更しようとすることを前提の描き方ではないので、
どのような変更ができるのか、定義値と参照値はどれか等、内容がよく理解できないでいる。
0161デフォルトの名無しさん
垢版 |
2017/07/09(日) 21:50:01.50ID:RJnMz3eK
かいとか
0162デフォルトの名無しさん
垢版 |
2017/07/09(日) 22:04:22.47ID:RJnMz3eK
If Instr(なんたら) Then の意味が分からなくて作成したもの。
IF <式> Then 内 <式>の値が0の時が False その他がTrue になる感じ。
http://www.dotup.org/uploda/www.dotup.org1302872.lzh.html
>>159-160 のつづき。ライブ化した。
http://www.dotup.org/uploda/www.dotup.org1302874.lzh.html
CtrlFile3String = GetMaintCtrlFileString(5, IniNameString)

TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo)

Function BoxSelectFileString() から End Function 迄
をそっくり削除して、抜けている大域宣言をすれば、単独起動が可能だと思う。
低レベルな自己書き換えルーチンでも理解できるような、容易な状態に書き換えている。
0163デフォルトの名無しさん
垢版 |
2017/07/13(木) 23:00:12.66ID:jVjH3qh4
>>140 DBCSがらみの処理は、ほぼ終わりが見えてきた。
主だったルーチンは C:\tool\FreeBASIC\inc\win\shlwapi.bi を参考にしてくれ。
DBCSがらみは C:\tool\FreeBASIC\inc\win\winnls.bi だけではあるが、ファイル名処理に絡んで一部ルーチンが他の*.BIにも存在する。
Fun StrCmpNI()等で、DBCSの比較が可能なシステム参照が存在する。

文字関数は、http://makoto-watanabe.main.jp/freebasic/PgKLen.html 等が存在する。
VBでは、文字数で規定している。全角文字の「123」がVBでは3文字、FBでは6文字になる。
文字数で位置を指定する場合と、文字位置(DBCS1バイト目)を指定する場合の2つを作成する必要がある。
VBに移植したときに、削除したルーチンを復活させる必要もある。これは、表示文字に限って使うルーチンで、
QBmidString(Astring, STpoint, Haba) というMID$()関数を想定したときに、
文字幅 Haba の値によって、DBCSの途中で途切れてしまう場合が発生する。
途切れた文字を含めて返す場合と途切れた文字を削除して返す場合の2通りを考える必要がある。
QBmidString("123", 3,3)で、「23」と返すか「2」と返すかの違い。
同様に、Left$(), Right$()でも発生する問題だ。表示ルーチンなので、じばけを防ぐ程度の問題であり、少しぐらい表示部位が乱れても気にしない(余分に空白を確保しておく)場合となる。

この後に待っているのが、フォント関係。
http://makoto-watanabe.main.jp/freebasic/CptAscii.html#start
なんてあるけど
http://euc.jp/i18n/charcode.ja.html
をカバーしないと日本語化が終了しない。
現時点において、実行中にフォントの切り替えに成功していない。前途多難である。
0164デフォルトの名無しさん
垢版 |
2017/07/21(金) 20:29:14.28ID:2DaCfB3F
前スレで、アイコンの切り替えに関しての「切り替える方法」が見つかった、と書いた気がする。
か、アイコンの切り替えに成功していない。フォント処理の事前練習としてやってみたんだが、うまくいかない。

C:\tool\FreeBASIC\inc\gmp.bi の解読をしていた。日本語サイト https://na-inet.jp/na/gmp_ja/ をつらつら眺めるに
実数関係は、MPFR ライブラリ http://makoto-watanabe.main.jp/freebasic/tipsMPFR.html を使えという旨の記載があった。
自分でマクローリン(テーラー)をやるならともかく、その他のことだったらば切り替える必要があるかもしれない。
分数演算(mpq_型変数を使うもの)と整数演算(mpz_)をGMPに切り替えてゆく作業に入ることになるかな。
http://www.jma.go.jp/jma/kishou/know/bosai/dojoshisu.html とか
http://www.data.jma.go.jp/cpdinfo/riskmap/exp_qt.html の計算をするとなると、
30年*365日*24時間 =26万点の値を使うことになるから。
度数分布から確率分布計算をしてみたいが、QBの頃はメモリー不足でできなかった。
0165デフォルトの名無しさん
垢版 |
2017/07/21(金) 20:36:30.45ID:2DaCfB3F
>>164 つづき。
やたら資料の大きさ(データ数)を多くするのは、nを無限大に発散させると、すべての分布関数がガウス分布に近似できる、という大数則があるため。
Fit(あてはめ)をして、残差から誤差を推定して、Fitの度合い、つまり、間違う確率を検討づける。
ところが、ガウス分布以外の分布関数だと、検定精度が低いし、誤差も多い。

大量のデータを用意して、計量形検定が使えるようにした方が楽。計数型検定は面倒くさいから。
0166デフォルトの名無しさん
垢版 |
2017/07/22(土) 15:15:30.05ID:9DN5e6AB
>>164 つづき。
MPFR ライブラリ http://makoto-watanabe.main.jp/freebasic/tipsMPFR.html
のうち、 D:\bas\Projects\MPFR01\mpfr-fb.bi は、シングルモジュール用で、
こっちが普通にやっているマルチモジュールには対応していない。
D:\bas\Projects\MPFR01\mpfr-3.1.5\mpfr.bi のみで対応する必要がある模様。

前スレに書いた、自家製の可変長自然数演算ルーチンをGMPに切り替えるべく、ルーチンの分離を始めた。
可変長整数演算ルーチンと可変長分数演算ルーチンを使っているライブラリーが、可変長実数ルーチンをのぞ゜いてないので、
こっちは廃止予定。可変長倍精度ルーチンをMPFRに切り替えられるかどうかがカキだ。

このあたりからうまくいけば、三樽モデルに入れる。
0167デフォルトの名無しさん
垢版 |
2017/07/30(日) 09:04:41.96ID:u+yoeGtL
Font 関係。RCファイルを操作すべく
Resourcefile、add、Font、Font01と手入力、100→510と書き換え、Filename枠内をクリック、横のファイル選択ボタンをクリック
までは良かった。
Windows(C:)、Wndows で、Font ディレクトリーが存在しない。エクスプローラーでは存在する。
手作業でホルターをそっくりD:にコピーして、約340ファイルが存在したが、こちらも洗濯不能。
別のディレクトリーにコピーしたら、こちらは洗濯可能で、関係ファイルをシステムからローカルにコピーするツールを作成中。
0168デフォルトの名無しさん
垢版 |
2017/07/30(日) 20:22:55.03ID:u+yoeGtL
>>163 実行中のFont の切り替えについて。
http://www.hi-ho.ne.jp/makoto_watanabe/FbEdit/tut2.htm#start
関連で、システムホントに限るけど、成功した。
GetStockObject()で、ANSI_FIXED_FONTやANSI_VAR_FONTを読みだして使うとじばけ。
その他、5種は日本語表示可能。

SendDlgItemMessage() となる。
http://www.dotup.org/uploda/www.dotup.org1324099.lzh.html
にテスト結果を記載。ライブは省略してある。使いたい人は適当に使って。
0169デフォルトの名無しさん
垢版 |
2017/07/31(月) 20:53:31.06ID:hUdORezO
アイコン処理。
http://www.hi-ho.ne.jp/makoto_watanabe/FbEdit/tut1.htm#SECOND_STEP
で、LoadIcon()を使った処理が書かれているが、MSでは、LoadImage()を使うようにとの指示。
苦労の日々だったが、ひょんなことから解決された。

LoadImageゅょ
SendMessageゅょ
のあとに、SetDlgItemText( を入れ
DestroyIcon(ょ
DrawMenuBar(
となる。細かい内容は
http://www.dotup.org/uploda/www.dotup.org1325037.lzh.html
みてくれ。
使いたい人は適当につ買ってくれ。()内をいれるとはじかれてしまうので、()内はぬいてある。
0170デフォルトの名無しさん
垢版 |
2017/08/02(水) 21:17:17.15ID:wtPuYz7+
>>169 つづき。
書いた内容を Case WM_INITDIALOG 以降にコピーしても動作しなかったのが LoadImage() 系処理。

そんなわけで、ちょっと使い方に迷いが出ている。
見本のように、Case IDC_BTN18 以降のように書いていればアイコンの変更ができるのだが。
0171デフォルトの名無しさん
垢版 |
2017/08/03(木) 20:57:23.32ID:GxZl6DCx
>>168 で入力枠、EditText の日本語化が成功したことを知らせた。
日本語化が他の枠でも可能と思って、今まで後回しにしていた編集選択枠、ComboBoxの使用を開始すべく、
RCエディタで編集した、までは良かった。
編集選択枠がなぜか入力モードにならない。先は長い。

>>169
LoadImageゅょ
SendMessageゅょ
のかわりに
Sleep 1
とするとうまくいくかもしれない。
ライブ化して、Taka01U.Bas系にまとめたんだけど、任意のファイルからの入力指定がうまくいかない。
上述改変をしたら、使用可能になったから。
BIファイル作成ルーチンも書き換える必要があるので、起動時の処理は修正していないし、検討もしていない。
本体6ファイル 26KB、ライブ2ファイル、60KB。
本体は、BAS, RC, FBP, BIのテンプレファイルの他に、ライブが作成した2ファイルの構成。
2ファイルにしたのは、Case WM_INITDIALOG内に埋め込む処理と、サブルーチンコールとして使用する処理の2系統。
Declare 文やConst IniNameString as String、Const TakaSubRoutineNo As Long、TakaDammyReturnCode4 = TakaErrorPointSach(ょ行の処理は考えていない。
どのようにBIファイルの処理を構文解読ルーチンで理解させるかを考えたら、何もできなくなってしまった。
0172デフォルトの名無しさん
垢版 |
2017/08/04(金) 21:17:19.91ID:rK3gLdJI
Sleep 命令には注意が必要だ。
表示枠が消えて、ハングして常駐してしまう、という障害があった。
Sleep 命令が実行され、待ち状態に入ったが、
キー入力されたことにタスクが理解できず、いつまでも常駐している
という状態にあった。

WM_HELPINFO という機能があるらしい。
https://msdn.microsoft.com/ja-jp/library/2chd03xy%28v=vs.80%29.aspx
しかし、C:\tool\FreeBASIC\inc\win\winuser.bi には記載がいな。

>>171のアイコン切り替えで、WM_WM_NCUAHDRAWCAPTION = &h00AE、が発生するらしい。
これの意味が分からぬ。
0173デフォルトの名無しさん
垢版 |
2017/08/09(水) 22:20:18.40ID:LLNdI7OD
アイコン関係、初期化ルーチンで任意のファイルのアイコンに切り替える、という、VB時代の処理をあきらめた。
何かの事情が発生したときの処理に対応という方針で、いくつかのサブルーチンを作成した。

ここに、資源関係の処理を入れようとして、いくつかのサブルーチンを作成。
サブルーチンコールを管理している、つまり、Declear文が羅列されている、TakaCon1.BI作成ルーチンに登録するようにして、
大域変数は、全部共通にして、資源関係のサブルーチンの定数と、資源の定数を分離。
個別に処理する時には、#define 指定文字を指定するが、一括処理する場合は指定しないで、全部羅列した処理系を作成した。
一例だと、 IDC_BTN1の処理系に入ったら、 IDC_BTN?の新規割り込みを一括して抑制、
処理が終わったらば、もとの状態に戻すというルーチン。
大域変数を使えば簡単なんだが、Iniファイルに保存しておくようにした。
とここまでやるのに、結構時間がかかってしまった。

>>163 のDBCSがらみの処理がでてきてしまった。
カンマ形式のファイルの内、最も単純な形式、「,」で区切りの分割ルーチン。
二バイト目が,の場合におかしなことになってしまう。
かって一世を風靡した表計算ソフトのカンマ形式ファイルの書式、文字は"で囲む、という処理をしていた理由が分かったような気がする。
両脇を#で囲んだカンマ形式のファイルもあった。この理由もわかったような気がする。区切り記号が2バイト以上だったらば楽なんだけど、1バイトの「,」の処理には苦労した。
パーツの表題として、DBCSを記載して、RCファイルを読み取ると、この現象がわかるかと思う。
Byte単位の位置で返す Instr文、文字数で返すInstr文、DBCSとSBCSを区別しないシステム関数のInstr文の3つか゛必要な理由がわかってもらえると思う。
0174デフォルトの名無しさん
垢版 |
2017/08/18(金) 20:19:53.91ID:9L7+pOSL
前スレの続きになる。
'表示枠(Static)のxstyleを50000100, SS_NOTIFY 指定に変更したもの
'事象が発生し、以下の表示が行われる
に成功した。メッセージ枠の表示をオペレーター(末端ユーザー)が消去するルーチンとして
メッセージ枠のクリックをすること、のルーチンで作成してきた。
障害表示方法としてこの方法が使えるようになった。(消さないといつの障害ひょうじかわからなくなる)

http://www.dotup.org/uploda/www.dotup.org1342596.zip.html
使いたい人は適当に使って。
0175デフォルトの名無しさん
垢版 |
2017/08/22(火) 21:28:01.26ID:C4SDUJ2K
前スレにちょこっと書いた気がする。
今は昔、センターニュース、http://iss.ndl.go.jp/books/R100000002-I000000016279-00 をまとめて読む機会があった。
その中で、端末を使って遠隔操作する時の注意事項がかいてあった。
キーボードを眺めて、右端に、LED赤ランプがつくPRINTキーがある。
初めて使う時には、意味が分かってもわからなくても、このランプをつけて桶。
そうすれば、何かの役に立つときがある
こんな内容のコラムだった。Win系やPC-9801系を使っている人だと意味が分からない。
デカコンの端末としての機能を要求される機種を使っている人しかわからないだろう。

TV画面に表示される文字をそのままプリンターで印刷する機能で、
不慣れなオペレーターがおかしなことをしてしまった時に記録が印刷されているので、
管理者が復旧作業をするときの手助けになる記録を残している。

これは、結構便利な機能で、異常動作を非かく的簡単に割り出すことができる。
ゲームでは、全画面をゲーム画面として使ってしまうのが普通で、
とあるゲームメーカーでは、起動直後にRS-232Cを初期化して(初期化ルーチンは製品版にも残っている)、
ゲームの実行状態を出力し続けるルーチンとして存在した。

日曜プログラマーにとっては、障害復旧作業が容易であることが、優先する。
娯楽でやっているのだから、負担になるようなこと、原因が特定できにくい障害は排除しなければならない。

多少処理が遅くなったとしても、設計上発生しえない異常動作や入力値の異常値は記録しておく価値がある。
異常値は処理しないで即リターン、なんてやると、発見が困難な障害となりやすい。
0176デフォルトの名無しさん
垢版 |
2017/08/26(土) 10:09:58.49ID:YXn+YofD
オプションボタンの処理がなんとかできるようになった。
自動と手動があり、手動の方はさわりをやったぐらい。動作試験はいいかげん。
自動の方がなんとか動くようになったので、こんなところで打ち切り。
使いたい人がいたら適当に使って。Aを最初に作って、コピーしてGまで作成した。
Gで何とか動くので打ち切りとした。
この間に自動書き換えのライブルーチン Taka06E.bas を作成して、作成されたファイルが TakaRadio.BI
ライブファイル、Taka01B.Bas, Taka01S.Bas 等が含まれていないので、関係ルーチンはコメントなどに書き換えてくれ。

DBCS関係でちょっと苦労した。
DBCS非対応のルーチンにDBCSを含む処理をながすと、運が良ければ2バイト目をSBCS文字として処理してくれる。
発見方法としては、入出力文字のダンプしかないので気が付くのに遅れることがある。
0178デフォルトの名無しさん
垢版 |
2017/08/26(土) 19:42:07.42ID:YXn+YofD
DBCS処理で、特定の文字(全角空白等)に対する処理があり、CP932に限って処理していた。
他の日本語ページがあると面倒なので、一覧表を作成してみた。
'http://vanillasky-room.cocolog-nifty.com/blog/2007/06/windows-8ab4.html
'http://vanillasky-room.cocolog-nifty.com/blog/2007/06/post-156a.html

使いたい人がいたら適当に使ってみて。

http://www.dotup.org/uploda/www.dotup.org1350112.zip.html
MSの用語がよくわからぬので、最大値と最小値の範囲が適正な範囲になっているかどうかは不明。
0179デフォルトの名無しさん
垢版 |
2017/09/02(土) 17:01:26.17ID:+2eoALbI
*.RCファイルの解釈で、座標系についてわかったこと。
IDD_DIALOG DIALOGEX -4,-28,208,102  行、表示枠の大きさ。左上ユーザー領域を原点として、原点座標(0,0)と右下座標(208,102)、管理領域(-4,-28)を示す
CONTROL "IDC_STC",IDC_STC1,"Static",0x50000100,3,3,204,18 行の、各部品の表示座標(3,3,204,18)
に対して4+1 = 5, 28+1=29水平移動する。
Dim as tagRECT MainWaku, NowWaku, DialogWaku
TakaDammyReturnCode = IniFileRECTRead(CtrlFile7String, DialogSecName, DialogWaku)と IDD_DIALOG 行の読み取り値を構造体 DialogWaku に定義して
(前略) IniFileRECTRead(CtrlFile7String, SecName, MainWaku)と CONTROL "IDC_STC"行を MainWaku に定義する。
MSReturnCode = OffsetRect(@MainWaku, 1 - DialogWaku.Left, 1 - DialogWaku.Top) と、水平移動して、
(前略) MapDialogRect(TakaHWND, @MainWaku) と座標変換する。
以上の作業で。
hBtn = GetDlgItem(TakaHWND, IDC_STC1): '個別表示物のハンドル(枠番号)を取得, hBtn=0でエラー
MSReturnCode = GetWindowRect(hBtn, @MainWaku): 'スクリーン座標の取得
と得られる表示部品の座標と同じ値が得られるようになった。
0180デフォルトの名無しさん
垢版 |
2017/09/03(日) 19:38:14.65ID:sgzMDNBD
FreeBasic の想定外の仕様があった。
'Public Function IniFileWrite1 OverLoad(FileString as String, SecNameString as String, KeyNameString as String, KeyValBool As Boolean) As Xusa
Public Function IniFileWrite1 OverLoad(FileString as String, SecNameString as String, KeyNameString as String, KeyValLong As Long) As Xusa
とBool型と整数型の宣言があるときに
IniFileWrite1("D:\aaa.txt", "Tekito01", "tekito02", 0)
と即値で参照すると、 KeyValBool As Boolean で宣言したルーチンが選択される。

Str$(KeyValLong) 値が「False」と解釈される。整数だったらば、0&等で参照すればよいのだが、面倒なので
前者のルーチンは廃止した。Iniファイルへの出力ルーチンなので、STR$(なんたらBool)と文字化して、文字列として参照するように変更する、
VBの頃はIniFileWrite()はすべて文字だったので、もとに戻した内容となっている。
文字列と数値だけならば、Linkのほうで間違いをしても、極端な間違いとならないだろうという推定からの対応。
即値「0」がBool型定数と解釈されたことに驚いた。

変数型の間違いによる障害は極めて発見しにくいので、注意してくれ。
0181デフォルトの名無しさん
垢版 |
2017/09/05(火) 21:17:38.14ID:h569Mykb
スタイルシートを色々いじってみたが、コンボボックスが想定したような動作(V.B.6様表示動作)をしない。
しばらくはListBoxで乗り切る予定。
コンボボックスを立て幅が任意に変わってくれるListBoxとして使っていた変態のたわごと。

ライブはないけど、使いたい人は適当に使ってちょうだい。
https://www.dotup.org/uploda/www.dotup.org1358260.zip.html

Taka06系ライブは、使い方の分かるパーツがなくなったことで、ここまでで打ち切りかな。
作画ルーチンがわからないので、ヒ゜クチャボックス等が使えないし
http://www.hi-ho.ne.jp/makoto_watanabe/FbEdit/tut3.htm#start 等
なんとかバーの使い方もよくわからないし、

MPFR系ライブ Taka05L.Bas
http://makoto-watanabe.main.jp/freebasic/tipsMPFR.html
で、変数の解放(終了処理)チェックルーチンが作りかけ。
メモリー関係の終了処理に関係した障害は、発見が極めて困難で、現象が一定しない障害になりやすい。
だから、効率(速度)を重視するか、効率を犠牲して不連続領域の発生しやすい使用直後の終了処理をするか、それとも使う変数を大域変数にして一括開始処理・一括終了処理にするか、で論議が分かれる。
ここの皆さんはどれを選ぶのであろうか。
0182デフォルトの名無しさん
垢版 |
2017/09/05(火) 22:30:41.26ID:h569Mykb
>>181 ツールバー関係がなぜ使い方がわからないかを説明しておいた方がよいかな。

QBの頃に開発したサブルーチン、SUB LineInputMakeCmdLine() がある。
画面上端3行のみ占有、その他の行はReturn時に復旧させる。
Iと入力したら、Input命令と解釈して、次の候補、Txt, CSV, CCC, T10, TSPの選択画面になって、、、、
とIコマンドに対する候補を表示して、選択するという機能。
これをツールバーに割り当てたい。
最初に命令の候補が表示されていて、一つを選択すると、選択肢が現れるという、動的割り当てを行う。
これがわからない。見た感じだと、静的割り当てしかできない。
V.B.では、命令選択をオプションボタンで決定して、候補を羅列、HideかEnableかの使い方があるが、候補を特定するようにした。
ツールバーで動的割り当てをする方法がわからないから、V.B.で使っていた方法で乗り切ろうかと思う。
0183デフォルトの名無しさん
垢版 |
2017/09/10(日) 02:07:35.37ID:6Eba6vnN
起動画面の拡大縮小に伴う、配置部品の拡大縮小表示がなんとか、動くようになった
V.B.の処理をそのまま移植するような調子で作った、DP系、2016.08から始めて1月で挫折した
手作業でいろいろやったのが2017.02-04、これはこれで完成したのだが、ちょっといじろうとすると、何がなんだかわけがわからない状態になってしまう
極端な場合、最初から作り直した方が早いという現象。パーツを2-3個減らして修正しようとして、挫折した6月
*.RCファイルに配置された状態から、そのままの位置配置で拡大縮小ができるようにと、始めた
なんとか、MPRFの*.BIファイルのように、BIファイル内に関係ルーチンを保存させて、これを参照するという方法に切り替えた
親ルーチンファイルごとに専用ルーチンを自動的に作成するという方向性で、Taka06C.Bas からTaka06I.Basを作成、癖をつかんだところで、Taka06B.Basを作成することとなった
なんとか、完成できた
>>181 のナントカバーについて。ツールバーはFreeBasic専用DLLファイルがある模様。いろいろな小細工は不可能に近い。
ステータスバーが、何とか見つかって、DimChk74系で作成
ステータスバーの位置を読み取ることで、画面再上端と画面最下端の4店の取得に成功
やっと、「クライアント座標系」という名称の物が、QBの論理座標系に相当すること
RCファイルの座標系は、ダイヤろくの座標をDialogWakuに保存して、各部品の座標をMainWakuに保存して
OffsetRect(@MainWaku, 1 - DialogWaku.Left, 1 - DialogWaku.Top)
MapDialogRect(TakaHWND, @MainWaku)
の演算を行うことで、「クライアント座標系」に換算できる
枠変形時に発生する事象では
WakuWidth = LOWORD(lParam) 'クライアントエリアの新しい横幅
WakuHeight = HIWORD(lParam) 'クライアントエリアの新しい高さ
WakuType = wParam
'GetClientRect(hWin, @rect) 'WakuWidth = rect.right: WakuHeight = rect.bottom とそれぞれ同じ値
と、変形後のクライアント座標を入手できることをつかんだ
何とか出来たのがコレ、使いたい人は適当に使ってくれ
https://www.dotup.org/uploda/www.dotup.org1361779.zip.html
0184デフォルトの名無しさん
垢版 |
2017/09/16(土) 09:04:18.02ID:0k/O/pWh
https://www.dotup.org/uploda/www.dotup.org1366764.zip.html
ライブはないけど、使いたい人は適当に使ってちょうだい。
V.B.の頃から使いだしたが、ListBoxで複数列の表示をする方法がある。
VBなので、対応値を各候補に割り当てる(関連付ける)方法は見つけられなかった。
キーになるもの、例えば通し番号と、いくつかの列をもつ行を表示して、
通し番号から、保存してある値を参照する、変更したら、全部一括してLISTBoxに候補を設定する
という使い方をしていた。何とかそれらしき、ルーチンの作成に成功した。

Taka06系ライブで、BIファイルを作成している。作成したBIファイルはつけた。
0185デフォルトの名無しさん
垢版 |
2017/09/23(土) 00:11:15.41ID:TIuQkNLj
>>169-172 >>173
Icon関係、こんなのをみつけた
http://www.nitoyon.com/vc/reference/gui/static.htm
表示している最中に DeleteObject してしまうと、Bitmap が表示されなくなってしまうので、親ウインドウを閉じる直前に DeleteObject しなければならない。
と、SendMessage()直後に開放するのではなく、タスク終了時に開放する必要があるとの記載と読み取れる。
0186デフォルトの名無しさん
垢版 |
2017/09/27(水) 19:31:08.07ID:dFhB3tDJ
http://www.hi-ho.ne.jp/makoto_watanabe/FbEdit/index.html
「新規プロジェクト」内「テンプレート」に関する情報
Addin の場合
作成された *.Bas ファイルに
「#include "..\..\Inc\Addins.bi"」行がある。これは、
C:\FbEdit\Inc\Addins.bi
を示すらしい(ディスク内にこのファイル以外の同名のファイルが存在しない)。
D:\bas\Projects\ExeType1\ExeType1.bas
なんて別ドライブにて作業している場合には、
「C:\FbEdit\Inc\*.*」を「D:\bas\Inc\*.*」にコピーする必要がある。
作成された *.Bas ファイルに関して、「#include once "windows.bi"」行の後に
「#Include Once "win/commctrl.bi"」を書き加える必要がある。
これで、内容を修正していない状態でのコンパイルは通る。

Console の場合。
そのままでコンパイルは通るが、マルチモジュールにと複数のファイルを登録したら *.O がないとしてコンパイルできなかった。

Tabstrip の場合。
「declare function DlgProc(byval hWnd as HWND,byval uMsg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as integer」行が
コンパイルエラーで動かない。Declare文に合わせるか Function文に合わせるか、で後者を選択した。
つまり、前述Declear文をコメント行に変更して、
「declare Function DlgProc(byval hDlg as HWND,byval uMsg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as bool」文を追加した。

MS用語で、コールバック関数、以前使っていた用語では、ユーザー定義ルーチン、なので、
参照側、システム(スーパーバイザー)の定義がどうなっているのかをみないと、正確な内容はわからない。

現在チルドレン(GW?QB?用語)で参照ルーチンを作成できないか、あるいは、DLLファイル化するか、で迷っているところ。
多分、「ユーザー側(プログラム)で、連続した領域を要求したにもかかわらず、システムが確保できなくて、無理に実行して、ハングした」と思われる障害で苦しんでます。
https://mevius.2ch.net/test/read.cgi/tech/1475897582/856-897
0187デフォルトの名無しさん
垢版 |
2017/09/30(土) 06:57:11.47ID:0ZNFHa8Z
360互換機を使っていたころ、コマンド行の解釈は専用の内部タスクがあった。
表に出ることはないタスクなので、名称は覚えていない。システムを示す、コマンドの表題の末尾に「$」が記載されていたことを覚えている。

>>186 に書いた通り、領域の確保ができない場合に、分割する必要がある。
「自分で考えるよりも、誰かがやった歴史通りにまねをできるように」と学ぶのが、義務教育の社会科の中の一分野「歴史」。
分割するのに、360の歴史に従って、コマンドラインの解釈を分割することにした。
FBのコマンドラインに準じて、Fun SwitchFileRead2()系統を作成した(前スレ参照)が、これらは全部廃棄。
360に準じて作成し、今回QBに移植したFun SwitchFileRead()系統を復活させた。
前者はコマンドラインを順次解釈しているに対して、後者は前置詞・語・後置詞、修飾語の区切りが規定されているので、汎用化しやすい。
前者は、とうしてもスイッチの解釈が各ユーザー(プログラム)専用になってしまう。
後者は汎用性があるので、無意味なスイッチでも通過してしまうという欠点を持つが、主プログラムで使わないスイッチを読み飛ばしてしまうことで対応可能。

別タスクにして、チルドレン(GW(QBの前のバージョン)用語)で芋づる起動することを前提の Shell 命令
http://makoto-watanabe.main.jp/freebasic/PgShell.html
を使うことになる。タスク間の連絡を何にするか、迷ったところで、ハンチ等システムを復活させることにした。
0188デフォルトの名無しさん
垢版 |
2017/09/30(土) 07:13:23.29ID:0ZNFHa8Z
ハンチ等システム、内部構造は、TARファイルやISHファイルに類似したもので、
Unpack(語句の後ろに未使用の領域がある)データファイル、固定長文字列を単位としたランダムファイルとほぼみなせる。
それで、RANDOMファイルをつらつら眺めるに
http://makoto-watanabe.main.jp/freebasic/PgRandom.html#start
'C:\tool\FreeBASIC\examples\files\random.bas
'C:\tool\FreeBASIC\examples\files\records.bas
セクターの定義が Type命令を使うように替わった。TYPE命令で文字列を定義すると、文字列の区切りにヌル文字(&H00)が挿入される。
QBでは、セクター番号を示すらしい2バイトが挿入された。
ということで、末尾に &h0D, &h0Aを挿入して、テキストエディターで直接編集する、パンチカード等にふさわしい手法が使えない。
かといって、Binaryでやったらば、分量が増えて分割した意味がなくなってしまう、Taka01J..Bas は50KB程度しかないファイルだから。
バイナリエディタ、Stirling.exeで見やすくするために、16バイトの倍数に分割して、先頭と末尾に記号を置いて、、等の作業を始めた。
0189デフォルトの名無しさん
垢版 |
2017/09/30(土) 07:25:12.70ID:0ZNFHa8Z
>>186 の後に色々書いたらば、拒否されたので、用語だけ。
エディターボックスの内容が変わったことを示すルーチン
Case EN_CHANGE
'内容が変わる直前
Case EN_UPDATE
'内容が変わった直後
Select Case LoWord(wParam)
Case IDC_EDT1
GetDlgItemText(hWin, IDC_EDT1, @buff, SizeOf(buff))
Buff = "変更 :" + Buff
SetDlgItemText(hWin, IDC_STC2, @Buff)
End Select
Case EN_MAXTEXT
'挿入時にスペースを使い切った。
End Select
Case WM_SIZE
と、Case WM_SIZE の並びに挿入する。
0190デフォルトの名無しさん
垢版 |
2017/10/02(月) 19:33:39.22ID:pJ+UmT/H
>>186 の後に色々書いたらば、拒否されたので、用語だけ。
パーツの文字色と背景色の変更方法
Case WM_SIZE の並びに以下のように挿入する。
case WM_CTLCOLOREDIT
''エディット コントロールが描画されようとしています。
case WM_CTLCOLORLISTBOX
''リスト ボックスが描画されようとしています。
case WM_CTLCOLORBTN
'ボタンが描画されようとしています。
case WM_CTLCOLORDLG
'ダイアログ ボックスが描画されようとしています。
case WM_CTLCOLORSCROLLBAR
'スクロール バーが描画されようとしていることを示します。
case WM_CTLCOLORSTATIC
'スタティック コントロールが描画されようとしています。
Dim As HDC hdc = Cast(HDC, wParam)
Dim As HWND PatsHWND = Cast(HWND, lParam)
if( GetDlgItem(hWin, IDC_STC2) = PatsHWND) Then
SetTextColor(hdc, BGR( 128, 128, 255))
SetBkColor(hdc, BGR( 0, 0, 128))
Dim PatsHBRUSH As HBRUSH = Cast(HBRUSH, GetStockObject(NULL_BRUSH))
return Cast(BOOL, PatsHBRUSH)
End If
Case WM_SIZE
と、マーこんなところかな。
0191デフォルトの名無しさん
垢版 |
2017/10/02(月) 20:12:31.55ID:pJ+UmT/H
色関係
http://makoto-watanabe.main.jp/freebasic/PgRgb.html
Windows APIプログラマのための注意: Windowsでの衝突を避けるために、Windows参考のRGBというマクロ名は、FBヘッダーでは、BGRに改名されました。
の意味が分からなかったが、 C:\tool\FreeBASIC\inc\win\wingdi.bi の先頭に名称を変更したとの記載有。
どこか忘れたけど GetRValue()とGetBValue()を逆に使っている*.Basが入っているはず。
COLORREF型変数を16進ダンプすれば、内部構造が見当つくはず。
MSReturnCodeLR = SendDlgItemMessage(hWin, IDC_PGB1, PBM_SETPOS, 50, 0) 'メモリ50 を表示
SendDlgItemMessage(hWin, IDC_PGB1, PBM_SETBKCOLOR, 0, MScolor) '背景色設定
とプログレスバーを使って、色はチェックした。
プログレスバーは Select Case LoWord(wParam) 内 Case IDC_BTN1から色を直接制御できる。

DLLファイル関係。
http://www.hi-ho.ne.jp/makoto_watanabe/FbEdit/tut5.htm#start
の「Dim Shared hRichEdDLL As HMODULE 」の後に使い方が書いてある。
0192デフォルトの名無しさん
垢版 |
2017/10/03(火) 19:11:06.84ID:GaATZUfo
>>186 
多分、「ユーザー側(プログラム)で、連続した領域を要求したにもかかわらず、システムが確保できなくて、無理に実行して、ハングした」と思われる障害で苦しんでます。
https://mevius.2ch.net/test/read.cgi/tech/1475897582/856-897
の関係。前スレで、https://www.slideshare.net/MoriharuOhzu/ss-14083300 なんて話題があったわけで、
複数機能を分割してツギハギの算譜を構築していったわけだが、巨大になりすぎた。
VB ( >>198 でVBとQBがごっちゃになっているところがある)で、同じようにメモリーが不足して、非常駐部(*.frm)に分けた内容を常駐部に戻したために、同じような案件が発生した。
元々Win(NT系)では、640KB(又は720KB)の制限が残っている。Win 10 32Bit系でも残っていた。
掲示板の内容を見れば、表に出ることを嫌う内容みたいだ。
サブルーチンやモジュールを参照する管理領域(オーバーレイローダー、ルートモジュール)を最小にして、
オーバーレイ領域を大きくとる、つまり、オーバーレイ領域同士の参照を禁止する(GWの文法)、複数のモジュールで共通するルーチンはそれぞれに分配する、という手法。
大学のサイトで、解説があった。
http://pepper.is.sci.toho-u.ac.jp/index.php?plugin=attach&;refer=%BB%B3%C6%E2%A4%CE%BC%F8%B6%C8%A4%CE%A5%DA%A1%BC%A5%B8%2F16%BD%A9%2F%A5%AA%A5%DA%A5%EC%A1%BC
%A5%C6%A5%A3%A5%F3%A5%B0%A5%B7%A5%B9%A5%C6%A5%E0&openfile=8-3_%C2%E7%CD%C6%CE%CC%CC%E4%C2%EA%A4%C8%A5%AA%A1%BC%A5%D0%A1%BC%A5%EC%A5%A4.pdf
http://www-higashi.ist.osaka-u.ac.jp/~y-nakamr/lecture/systemsprograming2008/sp20081015.pdf
DLL化するには、閉塞されたモジュールにしないと面倒(CollBack関数の使用)なので、チルドレンの使用になると思う。
VBでは、10-60KB程度の内容を*.frmに分割することで、常駐*.Bas領域の容量不足に対応していた。
64bitはあと1-2世代たたないと恐ろしくて使えない。MSが8086以来崩せなかった部分だから。
0193デフォルトの名無しさん
垢版 |
2017/10/05(木) 21:21:49.11ID:NosQ3QuL
>>186
C:\FbEdit\Inc\Addins.bi 関係の情報。同一ディレクトリー内に有ったファイルについて、の調査結果。
わからないものが多い。また、英語ソフトの為ファイルの導入をしていないものもある。
複数台体制になったらば、1台は試験に使えるのだが、現状では1台体制の為動作試験は見送った。
もし、関係ファイルを導入したりして、使うことがあったらば関係情報を知らせてほしい。

''D:\bas\Inc\SpreadSheet.bi
'' sprsht.dll 不在に付不動の障害有。類似名に splsht.dll というファイルがあるらしい
''C:\tool\FbEdit\Projects\Samples\SprShtDemo\SprShtDemo.Bas
'' http://www.fltk.org/wiki.php?V341+TC+Q sprsht 1.2.2 sprsht.exe WIN executable
'' 表計算ソフト(sprsht.exe)

'' D:\bas\Inc\showvars.bi
'' FbEdit 出力画面に何かを表示させるためのルーチン

'' D:\bas\Inc\RAResEd.bi
'' C:\tool\FbEdit\Projects\Addins\ReallyRad\ReallyRad.bas に使用例有

'' D:\bas\Inc\RAProperty.bi
'' C:\tool\FbEdit\Projects\Addins\ReallyRad\ReallyRad.bas 使用例
'' C:\tool\FbEdit\Projects\Addins\FbDebug\FbDebug.bas 使用例

'' D:\bas\Inc\RAHexEd.bi
'' 使用例見つからず

'' D:\bas\Inc\RAGrid.bi
'' C:\tool\FbEdit\Projects\Samples\GridDemo\GridDemo.Bas 使用例
'' https://autohotkey.com/ の AutoHotkey に使われている RAGrid.dll を使った処理。
'' マウス・キーボードの自動入力。
0194デフォルトの名無しさん
垢版 |
2017/10/05(木) 21:23:23.27ID:NosQ3QuL
>>193 つづき
'' D:\bas\Inc\RAFile.bi
'' C:\tool\FbEdit\Projects\Addins\SnipletAddin\SnipletAddin.bas 使用例

'' D:\bas\Inc\RAEdit.bi
'' 使用例 C:\tool\FbEdit\Projects\Samples\RAEditTest\RAEditTest.bas

'' D:\bas\Inc\RACodeComplete.bi
'' 使用例発見できず
'' https://github.com/JohnTroony/Plugme-OllyDBGv1.0/tree/master/IDAFicator%20v2.0.11.45 に、RADASM の構成ファイルとして記載有。
'' http://masm32.com/board/index.php?topic=229.0 より RadASM.zip のDL可能 DLしたが *.DLL不在
'' https://forum.tuts4you.com/index.php?app=forums&;module=forums&controller=topic&id=14483 著者サイト、サインアップという文字があるので追跡を中止

'' D:\bas\Inc\Addins.bi
'' FbEdit で Addin をテンプレートで選択したときに使用される。

以上、解読・ネット検索した結果
0195デフォルトの名無しさん
垢版 |
2017/10/09(月) 09:57:01.97ID:OFonel0E
配列の初期化
http://makoto-watanabe.main.jp/freebasic/PgDim.html
で、要素を書き並べるのだけれども
数があわない、位置があわない、等で散々。
こんなものを作ってみた。1次元、符号付単精度整数のみ対応。
>>186 に書いた通り、Taka06系ライブが容量不足で動作不能でハングしている。
したがって、DBCS非対応、チェックボックス・オプションスイッチ等非対応、等 Taka06系を使用しないで作成している。
以前書いたように、英語は天才的にできないので、Google機械翻訳に頼った。

https://dotup.org/uploda/dotup.org1358694.zip.html
使いたい人は適当に使ってちょうだい。
0196デフォルトの名無しさん
垢版 |
2017/10/09(月) 12:35:42.48ID:OFonel0E
配列の初期化
http://makoto-watanabe.main.jp/freebasic/PgRedim.html
で、
Redim は、固定サイズの配列では使えません - つまり、範囲固定の配列には Dim を使います。
と書かれている。「使えない」ということで、何かしらのエラーが発生する物と思っていた。

大域変数で
Dim Shared TakaCommFile(TakaTakaFigLSU To 0) As String
Dim Shared TakaCommFileFig(TakaTakaFigLSU To 0) As Long
と領域を確保して、別モジュール(ファイル)にある
PunchFileAutoData(TakaCommFileFig(), TakaCommFile())
と、値を定義するルーチンを呼び出し
ReDim iTakaCommFile(TakaTakaFigLSU To 0) As String
ReDim iTakaCommFileFig(TakaTakaFigLSU To 0) As Long
と、値を初期化して使用するつものが
値が定義されない。Redim文を除いたらば定義された。
動的配列と静的配列の違いを子ルーチン側で判断する必要がある。
あるいは、静的配列を廃止して動的配列のみに統一するとか、
いずれにしても、配列の引数関係を追跡する必要が出てくる。
0197デフォルトの名無しさん
垢版 |
2017/10/10(火) 19:42:36.81ID:VvL8ZiBO
>>190 のつづき。
case WM_CTLCOLORSTATIC
'スタティック コントロールが描画されようとしています。
If( GetDlgItem(hWin, IDC_RBN1) = PatsHWND) Then
'If( GetDlgItem(hWin, IDC_STC2) = PatsHWND) Then
の2系統
case WM_CTLCOLOREDIT
''エディット コントロールが描画されようとしています。
If( GetDlgItem(hWin, IDC_EDT1) = PatsHWND) Then
の1系統で背景色が変更可能。

著作権法で注意する点として、
誰が書いても同じ結果にしかならないこと
は、著作権が成立しない。
Tipsサイトがあるけど、それぞれのTipsに著作権はほぼ成立しない。例外として、変数名の命名法等
Tipsサイトでの著作権は、どの内容について書いたか、という、取捨選択した結果について成立する。

今までいろいろ書いてきたけど、Freebasicの算譜については、だれがやっても同じ結果にしかならない内容を特に選んだ。
パンチラシステムという名称は書いたけど、パンチラシステムそのものについては書いていない。
UnPackデータファイル、別の言い方をすれば、ランダムファイルの使用法しか書いていない。
ランダムファイルの使用法は、だれがやっても同じ結果になる。
したがって、著作権が成立しない。

現象の存在を知らせる内容、これは報道になるので、著作権法の規制にならない。
0198デフォルトの名無しさん
垢版 |
2017/10/13(金) 23:33:57.30ID:4WiG0cBL
>>187
なんとか、コマンドライン解釈部の分離に成功した。
実行形式で、450KB。
分離に成功したのは、Taka01J.Bas、ソースファイルで100KB。
100KBの内50KBは動作試験ルーチン、つまり、各種エラーチェックルーチン。
QB用パンチラシステムでは、各種エラーチェックをテキストエディタの各種機能に依存していた。
自前で作るのが面倒だから、エディターでチェックできるようにいろいろ小細工をやっていたわけだけど
FBでは、ヌル改行で、キャリッジリターン改行で゜はない。
結果として、エディタ任せのチェックルーチンを自前で作ることになってしまった。
こうなると、パンチラではなくなってしまう。360の頃に、1箱2000枚のパンチのチェックを手作業でやったことがある。
機械をつかわないで手作業で処理ができるということが、パンチラシステムの根底にあるのだが、
ヌル改行は手作業を著しく面倒にするバイナリエディターの使用に依存してしまう。

EMSの雑誌記事を思い出すわ。20KBの常駐部(コンペ゛ンショナルメモリー)を確保するために
500KBの実行ファイルが存在するというソフトの存在。
0199デフォルトの名無しさん
垢版 |
2017/10/14(土) 11:13:12.14ID:io4DSZT5
>>186-187 >>192 でチルドレンと書いた処理系がある。
FBの内容を読んでいたら、FBにチルドレンが搭載されていることに気が付いた。
http://makoto-watanabe.main.jp/freebasic/PgChain.html#start

よんだ範囲だと、QBやGWと内容が異なっている。
>外部プログラムが終了すると、実行は、Chain 呼び出し直後の部分から、再開します。
とあり、QBやGWでは継続処理ではなく、その場で終了してしまう。
それで、パンチ等に継続処理の命令を書いて、先頭から実行しするようにChain参照を続ける、パンチ等に継続命令があったらば継続するという処理を描いていた。
今は昔のQB, GW。
0200デフォルトの名無しさん
垢版 |
2017/10/16(月) 19:45:20.78ID:Rl7RwqK1
MS の
InDir2ZString = "SCR.exe"
InDir2PTR = @InDir2ZString
'MSReturnCode = PathFindOnPath(@InDir1ZString, @InDir2PTR)
で、SCR.exeのフルパスを取得できないでいる。
結局、GWの環境変数取得・分離分割・実行ファイルの絶対ファイル名取得、ルーチンが復活。
>>198の Taka01J.Basのパンチラファイルの構造を変更して、参照する外部ルーチンのフルパスを保存するようする予定。
今週いっぱいこれにかかりきりだ。
ところで、MSのスプーラはどのあたりを見れば書いてあるのかな。
見つからなければ、自前で作るしかないので、最も簡単な処理方法を選択することとなる。
実行形式のファイルを自己ディレクトリーに共通領域からコピーして、自己タスクとして起動する方法が最も簡単。
レジストリーを使わないで、自己の存在する場所のファイルのみを使っていれば、同じ名称のべ゜つタスクになるので、資源の奪い合いが発生しない。
もっとも単純かつ最も簡単で、一番始末に困るスプーラー(?)となる。
0201デフォルトの名無しさん
垢版 |
2017/10/27(金) 20:48:40.11ID:h0yxU7mD
Declare Function FileSelectString(
と宣言して
Private Function FileSelectString OverLoad(
Private Function FileSelectString OverLoad(
とルーチンを作成したら、なぜかFileSelectString()の大域参照ができるようになっていた。
局所参照ルーチンが大域参照可能となると、発見しずらい障害になるので、要注意。
0202デフォルトの名無しさん
垢版 |
2017/11/08(水) 22:38:42.08ID:yc7uDHtl
子プロセス(GW用語)から子プロセスを呼び出して、
30KB節約しようとした。
一つ目は比較的簡単にできた。
2つ目は、怪しげな変数を返す。
したがって、現在混乱中。
パンチラシステムで、複数のルーチンをチルドレン(GW用語)すると、日常的に発生する怪現象の一つ。

情報処理用語では、時差問題、と呼ぶこの現象で、今月いっぱいかかってしまうかな。
FBはコンパイラーなので、処理情報を標準エラー出力に出し続けて、追跡して、障害を特定する必要があるから。
インタープリンターだと、適当なところにSTOP文を入れて、print文で表示させながら、追跡していくのだが、
コンパイラーだと、状態を標準エラー出力に書き出させて、見当つけるしかない。
デバッカー?、そんな高級なソフトは使えません。MSのデバッカーがなぜか動作して、訳の分からない状態になっていますので。
0203デフォルトの名無しさん
垢版 |
2018/01/02(火) 14:02:32.56ID:5TyhEdY1
あけましておめでとうございます。
相変わらず、時差問題に苦しんでいます。
0204渡辺真
垢版 |
2018/02/12(月) 23:10:18.67ID:J2JlECET
一年ぶりに、FreeBASIC 日本語版マニュアルを更新しました。
2018年1月18日までの英文版 Wiki の変更を反映したつもりです。
http://makoto-watanabe.main.jp/freebasic/

CHM 版は、下記でダウンロードできます。
http://makoto-watanabe.main.jp/freebasic/FB-manualJP20180212.zip

修正すべき点、加筆すべき点など、ご指摘、ご意見を、お願いいたします。
FreeBASIC で遊んでみて下さい。
0205デフォルトの名無しさん
垢版 |
2018/02/16(金) 02:34:42.11ID:RDbDi6VM
漏れは正しいライセンスを遵守する

Documentation
The documentation is released under the GFDL license.
レスを投稿する


ニューススポーツなんでも実況