ネット上の資産を活かす【UWSC】
必要なものを探すことさえできれば活用することができる
オリジナルのソース元を見つけられませんでしたが、「使ってます」というコードの紹介です。オリジナルのソース元を見つけた際にリンクさせていただきます。
マウスポインタ下の座標と色を表示
オリジナルのソース元を発見することはできませんでしたが、こちらが便利だと思います。対象の画面で座標取得が必要な場所がたくさんあるのはいつものことなので、プリントスクリーンをして紙に出力した後、線を引いて座標を記入しています。色の変化を取得する際も色と座標を同時に取得できるので、ひとつのプログラムで両方こなせます。
//マウスポインタ下の座標と色を表示
PRINT GET_UWSC_NAME
dim srcX1="status(id,ST_X)", srcY1="status(id,ST_Y)"
dim srcX2="status(id,ST_CLX)", srcY2="status(id,ST_CLY)"
dim strL,strXW,strYW,strColor16
dim i
dim nX,nY
WHILE True
// カーソル下のウィンドウが対象
ID = GETID(GET_FROMPOINT_WIN)
// 絶対座標
x1 = G_MOUSE_X
y1 = G_MOUSE_Y
// 相対座標
x2 = x1 - STATUS(ID, ST_X)
y2 = y1 - STATUS(ID, ST_Y)
// peekcolor
for i=1 to 2
strXW=eval("srcX"+i); strYW=eval("srcY"+i)
nX=eval("G_MOUSE_X-"+strXW); if 0>nX then nX="("+nX+")"
nY=eval("G_MOUSE_Y-"+strYW); if 0>nY then nY="("+nY+")"
strL="peekcolor("+strXW+"+"+nX+","+strYW+"+"+nY+")"
strColor16=getColor16(eval(strL))
// fput(fp,strL+"<#TAB>="+strColor16)
next
strL="peekcolor(G_MOUSE_X,G_MOUSE_Y)"
//fput(fp,strL+"<#TAB>="+getColor16(eval(strL)))
c1 = PEEKCOLOR( G_MOUSE_X,G_MOUSE_Y)
s = "絶対座標 x:" + x1 + " y:" + y1 + "<#cr>"
s = s + "相対座標 x:" + x2 + " y:" + y2+ "<#cr>"
s = s + " 座標色 :" + c1+" "+ strColor16
// 戻す
MOUSEORG(0)
Fukidasi(s, 10, 10, 0)
Sleep(0.1)
WEND
//--------------------
// BGR値を10進数から16進数に変換
// (入力値)decimalNum BGR値10進数(= peekcolor()関数の戻り値)
// (戻り値)result BGR値16進数(= fukidasi()関数の引数)
//--------------------
function getColor16(decimalNum)
if 0=decimalNum then decimalNum=1
dim strW1="00000"+format(decimalNum,0,-1)
result="$"+copy(strW1, length(strW1)-5,6)
fend
マウスポインタ下のテキスト表示
オリジナルのソース元を発見することはできませんでしたが、こちらが便利だと思います。テキスト取得の選択肢のひとつです。座標指定で取得しなければならないときに、POSACC関数で取得できるのか、できなければ複数クリック、キー操作の組み合わせ、範囲指定などを組み合わせて取得します。
プリントスクリーンをして紙に出力した後、線を引いて座標を記入しています。POSACC関数で取得できる場合とできない場合がありますが、ひとつのプログラムで両方こなせます。
//マウスポインタ下の座標とテキスト表示
PRINT GET_UWSC_NAME
WHILE True
// カーソル下のウィンドウが対象
ID = GETID(GET_FROMPOINT_WIN)
// 絶対座標
x1 = G_MOUSE_X
y1 = G_MOUSE_Y
// 相対座標
x2 = x1 - STATUS(ID, ST_CLX)
y2 = y1 - STATUS(ID, ST_CLY)
s = "絶対座標 x:" + x1 + " y:" + y1 + "<#cr>"
s = s + "相対座標 x:" + x2 + " y:" + y2
s = s + " POSACC :"+(POSACC(ID, x1 - STATUS(ID, 間ST_CLX), y1 - STATUS(ID, ST_CLY), ACC_ACC))
// 戻す
MOUSEORG(0)
Fukidasi(s, 10, 10, 0)
Sleep(0.1)
WEND
日付と時間の計算
オリジナルのソース元を発見することはできませんでしたが、こちらが便利だと思います。日付だけ、時間だけという計算はよくあるのですが、日付と時間で差を計算したいケースがあり、その際に参考にさせていただきました。
//日付と時間の計算
GETTIME(0, "1899/12/30 00:00:00")
date1= G_TIME_YY+"/"+G_TIME_MM2+"/"+G_TIME_DD2+" "+G_TIME_HH2+":"+G_TIME_NN2+":"+G_TIME_SS2
PRINT "date1:"+date1+" "+G_TIME_YY+"/"+G_TIME_MM2+"/"+G_TIME_DD2+" " _
+G_TIME_HH2+":"+G_TIME_NN2+":"+G_TIME_SS2
gettime()
date2=G_TIME_YY+"/"+G_TIME_MM2+"/"+G_TIME_DD2+" "+G_TIME_HH2+":"+G_TIME_NN2+":"+G_TIME_SS2
PRINT "date2:"+date2+" "+G_TIME_YY+"/"+G_TIME_MM2+"/"+G_TIME_DD2+" " _
+G_TIME_HH2+":"+G_TIME_NN2+":"+G_TIME_SS2
uwscTime=gettime()
シリアル値 =getSerialTime(uwscTime)
print "getSerialTime:"+ シリアル値
来月の末日付=getEndOfMonth(date2, 1)
print "getEndOfMonth:"+ 来月の末日付
日付判定=isDate(date2)
print "isDate:"+ 日付判定
差日数=dateDiff("d", date1, date2)
print "dateDiff:"+ 差日数
曜日判定=getWeekday(date2)
print "getWeekday:"+ 曜日判定 // 曜日 (0:日曜…、6:土曜)
//////////////////////////////////////////////////
// 【引数】
// uwscTime : GETTIME関数で取得した時間
// 【戻り値】
// シリアル値
//////////////////////////////////////////////////
FUNCTION getSerialTime(uwscTime)
RESULT = (uwscTime - GETTIME(0, "1899/12/30 00:00:00")) / 86400
FEND
//////////////////////////////////////////////////
// 【引数】
// interval : 加算する時間間隔を表す文字列式(yyyy:年、m:月、d:日、ww:週、h:時、n:分、s:秒)
// num : dateに加算する値。未来は正、過去は負で指定
// date : 時間間隔を加算する日付
// 【戻り値】
// 日時(date)に、指定した単位(interval)の時間(num)を加算して返します
//////////////////////////////////////////////////
FUNCTION dateAdd(interval, num, date)
DIM year, month, day, d
GETTIME(0, date)
DIM time = G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2
SELECT interval
CASE "yyyy"
d = (G_TIME_YY + num) + "/" + G_TIME_MM2 + "/" + G_TIME_DD2
IF time <> "00:00:00" THEN d = d + " " + time
CASE "m"
IFB num > 0 THEN
year = G_TIME_YY + INT((G_TIME_MM + num) / 12)
month = REPLACE(FORMAT(((G_TIME_MM + num) MOD 12), 2), " ", "0")
ELSE
year = G_TIME_YY + CEIL((G_TIME_MM + num) / 12 - 1)
month = REPLACE(FORMAT(G_TIME_MM - (ABS(num) MOD 12), 2), " ", "0")
ENDIF
IF month = "00" THEN month = 12
day = G_TIME_DD2
d = "" + year + month + day
IFB !isDate(d) THEN
d = year + "/" + month + "/" + "01"
d = getEndOfMonth(d)
ELSE
d = year + "/" + month + "/" + day
ENDIF
IF time <> "00:00:00" THEN d = d + " " + time
CASE "d"
t = GETTIME(num, date)
d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
CASE "ww"
t = GETTIME(num * 7, date)
d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
CASE "h"
t = GETTIME(num / 24, date)
d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
CASE "n"
t = GETTIME(num / 1440, date)
d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
CASE "s"
t = GETTIME(num / 86400, date)
d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
SELEND
RESULT = d
FEND
//////////////////////////////////////////////////
// 【引数】
// date : 日付(”YYYYMMDD” or “YYYY/MM/DD” or “YYYY-MM-DD” or “YYYYMMDDHHNNSS” or “YYYY/MM/DD HH:NN:SS”)
// m : 第一引数の指定日からプラスマイナスm月とする
// 【戻り値】
// dateからm月後の月末の日付
//////////////////////////////////////////////////
FUNCTION getEndOfMonth(date, m = 0)
date = dateAdd("m", m + 1, date)
GETTIME(0, date)
GETTIME(-G_TIME_DD, date)
RESULT = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2
FEND
//////////////////////////////////////////////////
// 【引数】
// expr : 評価する式
// truepart : 評価した式がTrueのときに返す値
// falsepart : 評価した式がFalseのときに返す値
// 【戻り値】
// truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
IFB EVAL(expr) THEN
RESULT = truepart
ELSE
RESULT = falsepart
ENDIF
FEND
//////////////////////////////////////////////////
// 【引数】
// date : 存在するかを調べる日付文字列。YYYYMMDD or YYYY/MM/DD or YYYY-MM-DDのいずれかの形式。
// 【戻り値】
// TRUE : 日付として認識できる、FALSE : 日付として認識できない
//////////////////////////////////////////////////
FUNCTION isDate(date)
TRY
GETTIME(0, date)
RESULT = TRUE
EXCEPT
RESULT = FALSE
ENDTRY
FEND
//////////////////////////////////////////////////
// 【引数】
// interval : 時間単位(yyyy 年、q:四半期、m 月、d 日、w:週日、ww:週、h:時、n:分、s:秒)
// date1 : 日時1
// date2 : 日時2
// 【戻り値】
// date2からdate1を引いた時間間隔を求めます。
//////////////////////////////////////////////////
FUNCTION dateDiff(interval, date1, date2)
DIM y1, y2, m1, m2, d1, d2, d
SELECT interval
CASE "yyyy"
GETTIME(0, date1)
y1 = G_TIME_YY
GETTIME(0, date2)
y2 = G_TIME_YY
d = y2 - y1
CASE "q"
GETTIME(0, date1)
y1 = G_TIME_YY
m1 = G_TIME_MM
GETTIME(0, date2)
y2 = G_TIME_YY
m2 = G_TIME_MM
d = y2 * 4 + CEIL(m2/3) - (y1 * 4 + CEIL(m1/3))
CASE "m"
GETTIME(0, date1)
y1 = G_TIME_YY
m1 = G_TIME_MM
GETTIME(0, date2)
y2 = G_TIME_YY
m2 = G_TIME_MM
d = (y2 - y1) * 12 + m2 - m1
CASE "d"
d1 = GETTIME(0, date1)
d2 = GETTIME(0, date2)
d = (d2 - d1) / 86400
CASE "w"
d = INT(dateDiff("d", date1, date2) / 7)
CASE "ww"
date1 = dateAdd("d", -1 * getWeekday(date1), date1)
d = INT(dateDiff("d", date1, date2) / 7)
CASE "h"
d = dateDiff("d", date1, date2) * 24
CASE "n"
d = dateDiff("d", date1, date2) * 1440
CASE "s"
d = dateDiff("d", date1, date2) * 86400
SELEND
RESULT = d
FEND
//////////////////////////////////////////////////
// 【引数】
// date : (”YYYYMMDD” or “YYYY/MM/DD” or “YYYY-MM-DD” or “YYYYMMDDHHNNSS” or “YYYY/MM/DD HH:NN:SS”)
// 【戻り値】
// 曜日 (0:日曜…、6:土曜)
//////////////////////////////////////////////////
FUNCTION getWeekday(date)
GETTIME(0, date)
RESULT = G_TIME_WW
FEND
ここからは、現在までに使ったことはないですが研究してみたい事例になります。
この記事が気に入ったらサポートをしてみませんか?