|
|
//うまくいかない点を考慮しつつ読み解こうとするとかなり骨が折れるので //まるっと作り変えてしまいましたがこんな感じでどうでしょう //一つ一つのロジックが読み解きやすいように機能を関数ごとに分割してみました
Public SaveDir = GET_CUR_DIR //ファイルパス(とりあえず、UWSファイルあるとこにする) Public ListFile = SaveDir + "\まとめ.csv"
Public Dim Files[0] // [0]大事 Dim Range Dim FileName
/////////////////////////////////////メインここから If FOpen(ListFile, F_Exists) Then GetList() // 既存ファイルリストの読込
Repeat Ifb GetKeyState(1) and GetKeyState(VK_Shift) Range = GetRange() // 範囲指定 FileName = SetFileName() // ファイル名決定 PutList(FileName, Range) // 画像保存 While GetKeyState(1) and GetKeyState(VK_Shift); WEnd // キークリックを初期化 EndIf
If GetKeyState(VK_Alt) and Length(Files) > 1 Then SaveImage(SelectFile()) // ALTキーをトグルとして画像保存 Until GetKeyState(VK_Esc) /////////////////////////////////////メインここまで
//既存ファイルをリストから読込 Procedure GetList() ListID = FOpen(ListFile, F_Read) ReSize(Files, FGet(ListID, F_LineCount)) For i = 1 to ReSize(Files) Files[i] = FGet(ListID, i, 1) Next FClose(ListID) Msg( ReSize(Files) +" 行を読み込みました<#CR>最後の行:" + Files[ReSize(Files)] ) FEnd
// シフトキー+クリック(ドラッグ)で範囲指定 Function GetRange() Dim Mouse[4] Mouse[0] = G_Mouse_X; Mouse[1] = G_Mouse_Y // マウスの位置を保存(始点) While GetKeyState(1) and GetKeyState(VK_Shift); WEnd // Shiftキーが離されるorドラッグ終了時を判別 Mouse[2] = G_Mouse_X; Mouse[3] = G_Mouse_Y // マウスの位置を保存(終点) Ifb Mouse[0] > Mouse[2] //マウスの動きが逆の時に始点終点を入替 x軸 Mouse[4] = Mouse[0]; Mouse[0] = Mouse[2]; Mouse[2] = Mouse[4] EndIf Ifb Mouse[1] > Mouse[3] //マウスの動きが逆の時に始点終点を入替 y軸 Mouse[4] = Mouse[1]; Mouse[1] = Mouse[3]; Mouse[3] = Mouse[4] EndIf Result = Mouse[0] +","+ Mouse[1] +","+ (Mouse[2] - Mouse[0]) +","+ (Mouse[3] - Mouse[1]) // 絶対座標から幅高に変換 Msg(Result) FEnd
//その際、ファイル名を決める。 Function SetFileName() Result = "" Repeat; Result = Input("ファイル名を決めて下さい", Result) If Result = -1 Then Result = "" // ×を押されたら空欄と判断 If Result = "" Then Continue // 空欄ならもう一度 For i = 1 to ReSize(Files) // リスト参照して重複チェック If Result = Files[i] Then Result = "" // 重複ならファイル名無しと同じ事にする Next Until Length(Result) > 0 Msg("ファイル名:" + Result) FEnd
//ファイル名をCSV書き出し。(できれば、座標も一緒に出したい) Procedure PutList(FileName, Ranges) Files[ReSize(Files, Length(Files) + 1)] = FileName // 重複比較用配列サイズを増やすついでに配列に格納 FileID = FOpen(ListFile, F_Read or F_Write) // ファイル名と保存したい位置をファイルに保存 FPut(FileID, FileName +","+ Ranges) FClose(FileID) Msg(FileName +","+ Ranges) FEnd
//ALTキーで、画像保存。 Procedure SaveImage(FileInfo) FileName = Copy(FileInfo , 1, PoS(",", FileInfo) - 1) // 保存メッセージが不要ならこの処理も不要 SaveImg( Token(",", FileInfo), 0, Token(",", FileInfo), Token(",", FileInfo), Token(",", FileInfo), Token(",", FileInfo), False, 70, IMG_Fore ) Msg(FileName + " に保存しました") FEnd
//ファイル名を選択します。 Function SelectFile() File = -1 // ファイル名の未選択状態を-1と仮定 If ReSize(Files) = 1 Then File = Files[1] // 保存ファイル名が1つしか決まってなければ即決定 While File = -1 // ファイル名が決定するまでループ File = SlctBox(Slct_Cmb + Slct_Str, 0, "保存ファイル名を選んでね!", Files) WEnd
FileID = FOpen(ListFile, F_Read) // ファイル名が決まったらリストファイルから保存位置を読み込み For i = 1 to FGet(FileID, F_LineCount) If Length(Result) > 0 Then Break // 保存位置の抜き取りが成功していたらそれ以上詮索しない If FGet(FileID, i, 1) = File Then Result = FGet(FileID, i) // ファイル名とリストファイルが一致したら情報抜取 Next FClose(FileID) Repeat; Until GetID("","TUslctBox_uwsc") // ファイル名選択ダイヤログが消えるまで待機 Msg(Result) FEnd
//メッセージ用。不要な場合はコメントアウトで Procedure Msg(Str) Fukidasi(Str) FEnd
|
No.1101 2015/04/07(Tue) 02:02:23
|