[スレッド全体]

2016/5/15 (日) 20:49:17 もか 返信 削除
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
[2365] Re:文字選択範囲を返すマクロ専用関数の返す値がおかしい。
▼ mmmさん
> GetSelectLineTo() は GetSelectLineFrom() と同じ値を返しています。
こちらではちゃんと違う値が取得できているようです。
>>2282
2.3.0.0からレイアウト座標が文字幅からピクセル単位に変更になったのです。

(function(){
   	var layoutXFrom = GetSelectColmFrom();
	var layoutYFrom = GetSelectLineFrom();
	var layoutXTo = GetSelectColmTo();
	var layoutYTo = GetSelectLineTo();
	var logicXFrom = LineColumnToIndex(layoutYFrom, layoutXFrom);
	var logicYFrom = LayoutToLogicLineNum(layoutYFrom);
	var logicXTo = LineColumnToIndex(layoutYTo, layoutXTo);
	var logicYTo = LayoutToLogicLineNum(layoutYTo);
	var columnXFrom = Math.floor((layoutXFrom - 1) / GetDefaultCharLength()) + 1;
	var columnXTo = Math.floor((layoutXTo - 1) / GetDefaultCharLength()) + 1;
	InfoMsg(
		"layout (" + layoutYFrom + ", " + layoutXFrom + ") - (" +
		layoutYTo + ", " + layoutXTo + ") \n" +
		"logic(" + logicYFrom + ", " + logicXFrom + ") - (" +
		logicYTo + ", " + logicXTo + ") \n" +
		"column (" + layoutYFrom + ", " + columnXFrom + ") - (" +
		layoutYTo + ", " + columnXTo + ")"
	);
})();
columnXFrom,Toが正しく半角文字単位になるには、フォント選択を固定幅フォントを使用していて、
かつ、選択範囲のFrom,Toの行の文字が固定幅になる文字により構成されている必要があります。
(固定幅フォントでも0幅文字などが混ざっているとそれらは1pxの文字になるので、幅がずれます)
選択文字が半角文字かどうかを判定するには、GetLineStrで実際に文字を取得して、GetStrWidthで取得するか、自分で文字種判定する必要があります。
GetDefaultCharLengthは、2.1.0.0から使用可能です。
もし古いバージョンでも動作させたければ
if(0 < CompareVersion(ExpandParameter("$v"),"2.1.0.0"))
などで条件分けが必要です。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.000][st:0.000]