[▲前のスレッド]

2007/9/2 (日) 22:57:25  
[391] カーソル桁位置を知るには?

 はじめまして。だだ星人と申します。

表題の件ですが、マクロ中で現在のキャレット(カーソル)位置
を知るにはどうしたらよいのか?わからないので投稿させていた
だきます。

 ExpandParameter( '$x' )を使用すればキャレット物理桁位置
が取得できることはわかりました。しかし、以下のような文面で
は私が期待した内容のものが取得できないのです。

例)TABサイズ = 4:TAB = '^'
^   ^   i = 1;

上記行のセミコロンの後ろにキャレットがある場合、私としては
"15"が帰ってきてほしいのですが(※1)、
ExpandParameter( '$x' )だと"9"が帰ってきます。
要は、TABサイズが考慮されていないので、TABサイズを考慮した、
エディタのルーラーに表示されている位置が取得したいのです。

 どうやったらこの位置が取得できますでしょうか?ご存じの方
がいらっしゃいましたら、是非ご教示ください。

 みなさま、よろしくお願いいたします。

※1)"15"は1起算の場合。ゼロ起算の場合は"14"が帰ってきてほ
     しい。
だだ星人
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6


2007/9/3 (月) 01:03:52  
[392] RE: カーソル桁位置を知るには?

S_ExpandParameter('$x'); は「現在の物理桁位置(先頭からのバイト数 1開始)」ですからね。
バイト数だからタブ文字があると桁位置とは剥離します。

で、現状、タブ幅も考慮した桁位置取得機能はありません。

ただ、選択状態をいじっても良いなら「選択開始桁の取得」でできます。

-----
// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておいてください。
// マクロファイルの拡張子は .PPA でなくてはなりません。

var        // 変数確保
        x,y:Integer;        // 整数数値変数 x,y 確保
begin        //{

        S_CancelMode(0);                // 各種モードの取り消し - 選択解除
        // ↑マクロ開始時に選択状態だった場合のため

        S_BeginSelect(0);                // 範囲選択開始
        x := S_GetSelectColmFrom();        // 選択開始桁の取得
        y := S_GetSelectLineFrom();        // 選択開始行の取得
        S_CancelMode(0);                // 各種モードの取り消し - 選択解除

        MessageBox( IntToStr(x) + ',' + IntToStr(y)  , '(x,y)' , 0 );        // 表示

end;        //}
-----
すい
INCM1.23c


2007/9/3 (月) 11:36:57  
[393] Re2: カーソル桁位置を知るには?

すいさん さん こんにちは

ご回答ありがとうございます。
そんな方法があったとは!思いつきませんでした。本当に、ありがとうございます。

 それにしてもサクラエディタのマクロって、エディタ上でできるほとんど全ての操作が行える点はスゴイ!と思うんですが、
現在のエディタ内情報の状態取得が弱いですね。ExpandParameter('$x')にしても「何故文字列で取得?数値は?」と思ったりします。
 なんらかの開発ポリシーがあるんでしょうか?
だだ星人
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6

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