2017/9/12 (火) 22:36:53 返信 削除
[641] 画面表示開始行の取得方法

マクロの命令 SetViewTop を使用すると,
表示する一番上の行の行番号を指定することができますが,
現在何行目から表示されているかを取得するにはどうすればよいのでしょうか?
NaKIT
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0


2017/10/6 (金) 23:27:36 返信 削除
[642] Re:画面表示開始行の取得方法

▼ NaKITさん
> マクロの命令 SetViewTop を使用すると,
> 表示する一番上の行の行番号を指定することができますが,
> 現在何行目から表示されているかを取得するにはどうすればよいのでしょうか?


実装ベースで確認したところ、方法はありませんでした。
現状、サクラエディタには存在しない機能です。


マクロから使える全ての機能は、
以下のファイルで実装されています。

https://sourceforge.net/p/sakura-editor/code/4196/tree/sakura/trunk2/sakura_core/macro/CSMacroMgr.cpp

・VB的にSubな関数群
sakura_core\macro\CSMacroMgr.cpp(43):        MacroFuncInfo CSMacroMgr::m_MacroFuncInfoCommandArr[] =

・VB的にFunctionな関数群
sakura_core\macro\CSMacroMgr.cpp(411):        MacroFuncInfo CSMacroMgr::m_MacroFuncInfoArr[] =


値を返す関数群「m_MacroFuncInfoArr」に
CEditWnd::getInstance()->GetActiveView()->m_pcTextArea->GetViewTopLine();
を返す関数を追加してやれば良いです。

需要があるとわかればきっと誰かが作ってくれる気がします。
開発Uとかでアピってみてください。

もしくは、これを機にC言語開発に挑戦してみるのもよいかもしれません。
F_SETVIEWTOPを参考にF_GETVIEWTOPを定義し、
他の部分は隣の処理からコピペしてくれば簡単に実現できる機能です。
javascript等で他人のコードが読めるなら、不可能じゃないと思います。
berryzplus
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko


2017/10/7 (土) 16:32:53 返信 削除
[643] Re2:画面表示開始行の取得方法

ちょっと考え直してパッチ投稿することにしました。
https://sourceforge.net/p/sakura-editor/patchunicode/1112/

この程度ならオレにもできる!
と感じてもらえれば幸いです。

berryzplus
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko


2017/10/8 (日) 23:31:49 返信 削除
[644] Re3:画面表示開始行の取得方法

▼ berryzplusさん
ありがとうございます。
C++ は門外漢ですが,いただいた解説と実装例のパッチを拝見し,どうにかできそうな気になりました。

実のところ,もともとの目的は,以下の Request「EOFが最上部に来るまでスクロール可能にする」
http://sakura.qp.land.to/?Request%2F483
をマクロでどうにかすることです。
パッチ&ビルドが必要となると,私個人はともかく,Request の投稿者さんには敷居が高いですね。

需要についてですが,表示開始行/桁が取得できると,エディタの舌触りというか,使用感を変更できるようになります。
示していただいたサンプルのように,マクロでいろいろやった後に元の表示状態に戻すことが容易になります。
段落移動・タグジャンプ・次/前検索・ブックマーク移動 などで,カーソル移動後の表示を望む場所にできます。

正式版への採用をにらんで考えるに,仕様としては,新たに GetViewTop()・GetViewLeft() を増発するよりも,ChangeTabWidth(), ChangeWrapColm() のように,SetViewTop()・SetViewLeft()・CurLineCenter() の戻り値とした方が良いように思えます。

取得のみ行いたいときは SetViewTop(), SetViewLeft() へ 0 を指定するわけです。
NaKIT
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0


2017/10/9 (月) 21:08:59 返信 削除
[645] Re4:画面表示開始行の取得方法

さらに考え直してパッチとパッチ適用済みexeをwikiにあげときました。

▼ NaKITさん
> 正式版への採用をにらんで考えるに,仕様としては,新たに GetViewTop()・GetViewLeft() を増発するよりも,ChangeTabWidth(), ChangeWrapColm() のように,SetViewTop()・SetViewLeft()・CurLineCenter() の戻り値とした方が良いように思えます。
>
> 取得のみ行いたいときは SetViewTop(), SetViewLeft() へ 0 を指定するわけです。


いらないものが増えるのは困りそうですが、
SetがあるのにGetがない状況は不自然だと思います。
戻り値を返すようにするのは賛成ですけど、
足りないものを補う増発はやむなしかな、と思います。


あと、ややこしいんですが、
SetViewTopは絶対レイアウト行番号を指定して
その行が上端になるようにスクロールする機能です。
正確な値が必要ならば、やはり取得関数が欲しいです。


ここであるべき姿についてグダグダ語ったとしても
きっと誰も読まないと思うのでそういうのは他所でやることにします。
berryzplus
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

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