∵ なぜならば

映画とかネットとかパソコンとかコミックとか音楽とか……

これはブログトップ固定記事でっすぃ~♪ヘ(^^ヘ)(ノ^^)ノヘ(^^ヘ)(ノ^^)ノ♪

2027-12-16 21:48:45 | NanaTerry

NanaTerry は現役のアウトラインプロセッサです
ダウンロードはこちらで最新版を


覚え書きを項目毎にまとめたり
小説やゲームシナリオのプロットを整理したり
使い方はあなた次第で無限に広がります



エディタ部分は Windows リッチエディタベースで画像文字装飾も可能
ツリービューで項目を分けて情報の整理
ツリーノードごとにアイコンを設定出来ます


全ツリーノードからキーワード検索すれば探したいものがすぐに見つかります


複数の環境設定で多重起動すれば常に同じ場所それぞれの設定で起ち上げることが出来ます
画像は必要ないという方のためにプレーンテキストモード(α版)も用意しています
プレーンエディタでは背景に壁紙も設定出来ます


ノードリンク / アンカーリンク / シャドウリンク / ポップアップリンク
ひたすら情報収集するためのクリップボード監視(自動貼り付け)
マクロ作成で作業の自動化 / 簡易化
外部アプリを登録して連携作業
ノードの別窓表示で参照しながらの編集
ナナタブ(仮)で多重起動管理


開発者も忘れるほどの設定項目

娘 ◆rBYKKypTPeak 作成の詳細ヘルプ

ウェブ小説を執筆されている方のために「カクヨム記法」「小説家になろう記法」での傍点変換およびルビ表記入力支援

5ちゃんねる専用スレッドか当ブログで質問すれば反応が返ってきます
新規要望も基本ポリシーに反しない内容で私の力量と時間が許す限り考えていきます
バグ報告は優先的に調査していきます
急ぎで困っているときは Twitter で「NanaTerry」という言葉を含めてツイートしてもらえば私か娘が召還されます


ダウンロードはこちらで最新版を
SkyDrive(OneDrive) は右上の「並び替え」を「更新日」にその右にある ←こんなアイコンをクリックして詳細ビューにすると日付が出てさらにわかりやすいです



NanaTerry について

【NanaTerry】最初にすること

縦書き版 NanaTerry が Winodws10 で日本語が打てない件について

Windows10 で NanaTerry のフォントがにじむ

【NanaTerry】画像ファイルを多用する場合

もしもファイルサイズが大きくなりすぎて .nna が読み込めなくなったり不安定になってしまった場合

コメント (228)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

NanaTerry について

2027-12-01 11:00:41 | NanaTerry
ということで、同梱してます TeReadme.txt にも書いていることですが

長文編集の際重いと感じた時
設定「表示」~「総字数のカウント」「~行くらいでやめる」に適当な数値を入れてみてください
設定「表示」~「リンクタグでカーソルを変化させない」にチェックしてみてください

ツールバーとかブックマークウィンドウがいなくなってしまった時
まず、本体(エディタ)の後ろに隠れていないか覗いてみてください
それでもいない時は画面の外に家出したか、光学迷彩を使っているかです
一度終了してから
Ctrl + Shift を押しながら起動して「起動時問い合わせダイアログ」を試してみてください

バックアップと自動保存
こちらを参照してください

XP での .nna 関連づけがうまくいかない場合
ケンさんから情報を頂きました→こちらのコメント欄です
それでも上手くいかない方へ(tera さんより)
http://www.pasoble.jp/windows/7/08843.html


参考リンク
私、「テンプレ」っていう記事を過去に書いています
要望、質問などを書き込む際に参考にしてください

質問要望バグ報告などはこちら
5ちゃんねる NanaTerry(アウトラインプロセッサ) Part4
https://egg.5ch.net/test/read.cgi/software/1560074001/

長い文章を書く人のためにアウトラインプロセッサの基本をまとめてみた
https://readingmonkey.blog.fc2.com/blog-entry-750.html
無料で使えるおすすめのアウトラインプロセッサー11選【小説家・ライター向け】 – ライカツ
https://lifelikewriter.com/free-outline-editor/

紹介記事
窓の杜レビュー アウトラインプロセッサー「NanaTree」の派生版「NanaTerry」
窓の杜 - 【#モリトーク】第4話:引き継がれる作者魂
窓の杜 - 書きづらい長ーい文章を見やすく、シンプルに管理するアウトラインプロセッサー「NanaTerry」
窓の杜ダウンロードページ
コメント (22)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

自分自身の全身が見えているのか

2023-10-01 16:07:55 | Delphi

ちょっと必要があって書いてみたんだけど

もしかしたら他に方法があって車輪の再発明かも知れない

procedure TForm1.Timer1Timer(Sender: TObject);
  function IsShowFullBody:Boolean;
    function IsShowForm(P:TPoint):Boolean;
    var
      PosHandle:HWND;
    begin
      PosHandle:=WindowFromPoint(P);
      Result:=Handle=PosHandle;
    end;
  begin
    Result:=(IsShowForm(Point(Left+1,Top+1)))and
            (IsShowForm(Point(Left+1,Top+Height-1)))and
            (IsShowForm(Point(Left+Width-1,Top+1)))and
            (IsShowForm(Point(Left+Width-1,Top+Height-1)));

  end;
begin
  if IsShowFullBody then Caption:='IsShowFullBody' else Caption:='No';
end;

#真ん中だけ隠れてたら False 返しちゃうぢゃん(T▽T)当たり前だけど

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

今更 Abort

2023-08-16 16:23:16 | Delphi

普段 Abort 手続き自体使うことは無かったんだけどオリジナルで使っていたから調べてみたら何十年も思い違いをしていた
(というのを何年か前に調べてたんだけど記録してないから忘れてた)

Abort 手続き
Abort は,エラーを報告せずに処理を終了します。
Abort は,特殊な「サイレント例外」を生成します。サイレント例外は他の例外(EAbort)と同じように動作しますが,「サイレント例外」の場合,エンドユーザーにはエラーメッセージは表示されません。Abort は,try .. finally ブロックの最後に制御を移します。

というDelphi5 時代のヘルプを読んでいたので単純に exit と同じような扱いだと思っていたら普通に「Delphi abort Exit 違い」ってサジェストがあった

TMemo と TSpeedButton (新規作成 NewDocumentSpeedButton)一個ずつのテスト

  private
    { Private 宣言 }
    function QuerySaveDocument:Boolean;
    function SaveExecute:Boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Modified:=False;
end;

function TForm1.QuerySaveDocument: Boolean;
begin
  Result:=False;
  if Memo1.Modified then
  begin
    case MessageDlg('現在編集中の文書を保存しますか?', mtWarning, mbYesNoCancel, 0) of
      mrYes   :Result:=SaveExecute;
      mrNo    :Result:=True;
      mrCancel:Abort;//※1 ここが mrCancel:exit; だと例外は起きずQuerySaveDocumentを抜けるだけ
    end;
  end else Result:=True;
end;

function TForm1.SaveExecute: Boolean;
begin
  Result:=True;//本当は保存処理
end;

procedure TForm1.NewDocumentSpeedButtonClick(Sender: TObject);
begin
  QuerySaveDocument;
//  if not QuerySaveDocument then exit; が必要だと思っていたが
  Memo1.Lines.Clear;//Cancel:Abort だとこの行は実行されない(例外発生)
end;

end.


※1 の時点で例外(Abort)が起こっているのでサイレントで無い普通の例外の場合を考えると処理されないのは当たり前だった
(ここで「エラーメッセージ」が出るはず)

情けない

 

いやでもやっぱり「保存します(Yes)」を選んでそこで「名前をつけて保存」的なモノをユーザがキャンセルしたら?
ああ function SaveExecute の方もセーブしなかった時に Abort すればいいのか
いやいやそれはそれで管理しにくいんじゃないか?
Abort は Abort で基本押さえておいて
if QuerySaveDocument then
にしておいた方がいいか

難しい

 

結局グデグデじゃねーか

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PDF to TreeText - PDF を階層化テキストに変換して保存するソフト

2023-04-20 22:37:15 | NanaTerry

NanaTerry の周辺ソフトとして「PDF to TreeText」をアップしました

PyMuPDF100.zip

PDF ファイルを PDF2Tree.exe にドラッグ&ドロップすると同名のテキストファイル(.txt)が作成されます

テキストファイルの中身は、しおり(目次)をノードとした階層化テキストファイルです。

NanaTerry で開くとしおりをツリーとして再現出来ます。

画像データなどは無視されます

 

今回の開発は Delphi ではなく Python です

一週間ほど前に初めてさわった言語なのでど素人が作ったものと割り切ってください

Windows10 64bit で動作します

多分 Windows11 64bit でも動きます。


Python のソースはこちらにありますのでその他のOSの方や保存先指定したいとかもう少し改造してみたいという方はリンク先を UTF8 で保存してください

cace 文を使っていますので Python 3.10 以降でないと if 文に変更しないと動きません

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PDF ファイルから NanaTerry への移行作業

2023-01-09 20:53:20 | NanaTerry

手間はコピペとあんまり変わらないかも知れませんがこういった方法もあるということで

こちら「HiPDF:オールインワン 無料オンラインPDFソリューション」


PDF分割→ファイルをアップロード→すべてのページを選んでから分割ボタンを押せばページ毎 pdf の Zip が落とせます
各ファイル毎に開いて rtf か txt で出力保存します
私の記事を参考に各ノードを作ってから(ノードに深い階層を作る場合は「.」「..」「...」としていきますがそこら辺はググってください)(多分しおり部分をテキストで取り出すことも簡単にできると思います)
ツリーメニューあるいはノードを右クリックして「ファイルから追加」します

 


2023/01/11 追記 ~「フォルダ階層をツリーとしてノード追加」すればいいジャマイカ

PDF のしおりがこうなってるとしますと

分割した時点で8個のPDFとなります

それらをテキストファイル(リッチテキストファイル)に変換した後
PC の任意のフォルダ(「c:\NanaPDF」とします)に「001プロローグ」「002本編」「003エピローグ」という3つのフォルダを作成後(頭に数字をつけるのは順番を再現するためです)
それぞれのフォルダにテキストファイルを移動します
テキストファイル変換時にはやはり頭に数字を打ってノードタイトル名で保存してください

NanaTerry のメニュー「ファイル」「インポート」「フォルダ階層をツリーとしてノード追加」で「c:\NanaPDF」を読み込めば完了です

 

ここまで書いてきましたがもしかして全然見当違いだったかも知れません
この「HiPDF:オールインワン 無料オンラインPDFソリューション」分割サービスってページ毎であってしおり毎ではないのですね
PDF HTML 変換 の方ならとやってみましたがこちらもページで分割されます

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

複数の空ノードを一度に追加する方法

2022-12-31 14:41:24 | NanaTerry

例えば「あいう」「かきく」「さしす」というノードを追加する場合
以下の様に各行毎行頭に「.」をつけてテキストファイルで保存する
--ここから「c:\AddNode.txt」
.あいう
.かきく
.さしす
--ここまで「c:\AddNode.txt」


NanaTerry 本体で追加したい場所(ノード)にフォーカスした状態でメニュー「ツリー」~「ファイルから追加」で「c:\AddNode.txt」を
階層化テキストファイルとして読み込むとあら不思議(出来るかなと思いついてやってみたら)出来ちゃった

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

const の呪縛

2022-07-07 20:58:07 | Delphi
function OpenFile(const Path: TFileName):Boolean;
という関数がオリジナルの時から存在する(中身は結構肥大化させてしまった)
おいらは普段(邪魔くさいので)const はつけないんだけどまあついてるモノをわざわざ外したりはしない

FFileName は現在開いているファイル名が入っているグローバル変数(FFileName: TFileName;)
これもまたオリジナルソースからある

OpenFile(FFileName);で現在開いているファイルを開き直す

これだけなら問題は無いんだけれど
多重起動で同じファイルを開く + 上書き禁止にする などの諸条件が加わった時アプリケーションエラーとなる
ソースを追っていくと
CompareText 関数→の中で使われている UpperCase や LowerCase の基本関数で例外が出てて Delphi がヘニョヘニョ状態になってる
もうここだけで二週間くらい悩んでた

んでタイトルの通り const が問題だったようで
OpenFile 関数の中でグローバル変数 FFileName を空にしたり開くことが確定した時にファイル名を代入していたため
静かなアクセス違反が溜まっていく
const は「Path」にかかってるので
Path:= とか直接さわるときだけの制限だと思っていたが
Path として渡された中身が実は FFileName だと気づいてしまう時に不整合を起こしてしまうのか
まるで AI がアンビバレンツで機能停止してしまう話みたいだ

一旦他の変数に入れて呼び出すか
S:=FFileName;
OpenFile(S);

引数の const を外せば問題ない
function OpenFile(Path: TFileName):Boolean;

まあそんな感じの制限もあるのかなという結果ではある

それでも
OpenFile(FFileName);
この関数を単体で呼び出すだけではエラーが起きなかったのが最後までわからない
そっちでも不具合あったのならもっと早く解決してたのに
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

岡田和人 いびつ ibitsu 全07巻

2022-06-11 19:37:06 | コミック

おすすめ完結漫画とかググってて「読んでて鬱になる…後味の悪い漫画」とか「胸糞悪いけど読みたくなる!おすすめ鬱漫画」とかで出てきて気になってたので毎日一巻ずつ読んだ

確かに後味は悪いw

ただ永遠に完成しないままの人形と幸せに暮らしてる男の主人公はハッピーエンドだったと思う
もしくはあれがあの人形の完成形だったかも知れない

歪んだ愛の相思相愛は凄く好きだけどNTRは基本好きではないのでこの作品はいい塩梅で進んでいって続きが気になるいい話だった
ヒロインの正面顔はアップの多い割にあまり画力向上しなかった

ひたすらリアルに近い人形というものに対する想いは特に理解する世代だと思う(キモい)
1980年代の水野俊一が発表したサイボットとコミック実験人形ダミーオスカーはまさに私が二十歳前後の頃だったから

(まだネットインフラがまともにない時代でほとんど資料がないの草)

そういえば一昨年だったかやはり同じ系列で「おやすみプンプン」も読んだけどあれはまあなんだ
経験値として受け入れた

さてこの作者の完結漫画はまだいくつかあるんだが
「すんドめ 全08巻」「ほっぷすてっぷじゃんぷッ! 全09巻」「教科書にないッ! 全18巻」
どうしようか
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

そのキーはプログラムに予約されています

2022-04-10 09:00:31 | Delphi


キー割り当てダイアログでユーザーが使えないキーを知らせるのにどうやっていたっけって
NanaTerry のソース調べたら「おいら天才じゃね?」ってなった

Action 一つ作って Create 時に登録しておいたら HotKey でキー押した時点で横取りしてメッセージを出す

SecondaryShortCuts.CommaText はカンマテキストでいくつでも登録出来るから今回作ったソフトでは
    for i:=0 to 9 do
      SecondaryShortCuts.CommaText:=SecondaryShortCuts.CommaText+','+
        'Ctrl+'+IntToStr(i)+','+'Shift+Ctrl+'+IntToStr(i);

Ctrl+0 ~ Ctrl+9 と Shift+Ctrl+0 ~ Shift+Ctrl+9 まで一気に追加した
コメント (6)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

1.2.5b アップしました

2022-01-30 19:42:09 | NanaTerry


1.2.5 → 1.2.5b
階層テキストをリッチモードで読み込むとノード内文章が切れるのを修正しました
ダウンロード:Ver. 1.2.5b

アップデート詳細:

追加・実装

◆設定
・設定ダイアログがデスクトップ解像度より大きい場合、ダイアログのサイズを小さくしてスクロールバー追加、左ペインにスプリッタを追加
・全般「ノードを開いたときのキャレット位置」{常に先頭/記憶復元/常に末尾}追加
(旧「ノードを開いたときに文末にキャレットを移動する」を修正とともに格納)
・エディタ>外観・操作「非アクティブ状態からクリックした時キャレットを移動する」実装
・ツリー>動作>ノードの削除、結合、分割時に確認メッセージを表示する…ON:ノードを削除する時、ノード名を表示/複数選択時はノード数を表示するようにした
・ツリー>動作「ノードをマウスドラッグで移動時に確認メッセージを表示する」実装(初期設定はOFF)
・ツリー>動作>ツリービューでホイールスクロールした時ノードを切り替える:クイック設定に追加した
━-━-━-━-━-━-━-━-━-━-━-━-━-━-━-
◆メニュー
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
【ツリー】
・ノード削除:時計カーソルの状態で実行した時「本体の作業と重なりました。通常のカーソル時に再度実行してください。」メッセージ
・「アイコンで選択」実装
(表示>ノードタイトルバー>ノードアイコンボタン:右クリックにも併設)
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
【編集】
・Webアシスト>ルビ(小説家になろう/カクヨム):「オートコンプリート」追加
・Webアシスト>ルビ(小説家になろう/カクヨム):入力途中で{上下キー/Atl+上下キーあるいはクリックで履歴プルダウン}した時、手動オートコンプリート
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
【検索】
・検索>結果出力:全てのノードから探す…OFFを反映するようにした
・検索>結果出力:子ノードから探す…ONを反映するようにした
・検索/置換/スタイル変換:正規表現支援「▼」ポップアップメニュー
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
【ツール】
・ツールボタンの表示設定「印刷」追加(初期設定は非表示)
・ツールボタンの表示設定「別窓で開く」追加
・メインメニューの表示設定「全ての Nana に設定」実装
━-━-━-━-━-━-━-━-━-━-━-━-━-━-━-
・メモ:右クリックメニュー「選択色の変更..」実装

「ピックアップ」実装(初期設定は非表示)
 ・表示:ピックアップ
 ・ツリー:新しいピックアップ/ピックアップに追加
 ・ツール>ツールボタン表示設定:新しいピックアップ/ピックアップに追加
 ・ツール>キー割付>フォーカス:ピックアップにフォーカス

「インデックス」実装(初期設定は非表示)
 ・表示:インデックス
 ・ツール>キー割付>フォーカス:インデックスにフォーカス
 ・設定>その他:インデックスの表示方法{タブ/リスト}
━-━-━-━-━-━-━-━-━-━-━-━-━-━-━-
◆プレーンテキストモード(α版)
・設定>プレーン(α版)>詳細:「文字選択状態のとき、TABキーでタブを入力する」実装
(リッチテキストモード(標準)と同じ挙動になります。インデント:Ctrl+Shift+I/アンインデント:Ctrl+Shift+U)
━-━-━-━-━-━-━-━-━-━-━-━-━-━-━-
◆マクロ
・サンプルマクロ
該当行を括弧で挟む(キャレット行or選択範囲各行).nmc
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
・エディタ関連
property EditorLineText:string;
procedure EditorInsertLine(S:string;PreLine:Bool);
procedure EditorCaretLineSelect;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


仕様変更・修正

◆設定
・全般>直近の各ノードカーソル位置を記憶復元する:全般>開く「ファイルを開いたとき」へ格納、名称を調整
・全般>ノードを開いたときに文末にキャレットを移動する:プレーンモードでしか機能しなかったのを修正(新「ノードを開いたときのキャレット位置」へ格納)
・全般>開く>ファイルを開いたとき>最後に編集したノードを開く/終了時のノードを開く/保存時のノードを開く:各ノードの直近のキャレット位置を復元する…ONになっていないと機能せず、先頭のノードを開いていたのを修正
・エディタ>既定の行間:再起動しないと反映しなかったのを修正
・ツリー>動作>ノードを下の階層へ移動させた時ツリーを展開する…OFF:元から展開していた場合わざわざ閉じないようにした
・検索>全置換では描画を抑制する…ON:ノード移動もしないようにした
・検索>置換ボタンでダイアログを閉じない…ON:一度置換しないとエディタにフォーカスできなかったのを修正
・検索>置換ボタンでダイアログを閉じない…ON:{前を置換、次を置換}ボタンでダイアログが本体の裏側へ回ることがあるのを修正
・リンク>デフォルトリンクタグ/デフォルトアンカータグ>フォント名とサイズは変更しない…ON:挿入>リンクタグ/アンカータグでフォントサイズがマイナスになるのを修正
━-━-━-━-━-━-━-━-━-━-━-━-━-━-━-
◆メニュー
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
【ファイル】
・全てのNanaTerryを終了:順次アクティブにしてくよう変更
(編集中のファイルを終了しようとした時、どのNanaTerryから警告ダイアログが出たかをわかりやすく、かつキーボード操作がスムーズになった)
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
【ツリー】
・個別表示カスタマイズ>スタイル>変更しない…ON:一度OKすると、設定>ツリー>フォーカスノードの太字/斜体が反映されなくなるのを修正
・ノード削除:まれにあらゆる操作で読み込み違反が起きるようになるのを修正
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
【表示】
・「タイトルバー」を「ノードタイトルバー」へ名称変更
・アドレスバー:設定>全般>外観>ノードタイトルバーのフォントに連動するように変更
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
【検索】
・検索/置換>正規表現…ON:行頭+改行「^\n」による空行がヒットしなかったのを修正
・検索/置換>正規表現…ON:任意の1文字「.」から始まり、グループ「()」を含み、メタ文字以外で終わる場合、ヒットしなかったのを修正
・置換>正規表現…ON>全て置換:途中で力尽きる場合があるのを修正
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
【ツール】
・キー割付>ツール>クイック設定:「フォルダアイコン」「本文一行目をノードタイトルに」「ノードリンクはフルパス」を補欠落ちにした
・ツールボタンの表示設定>大きいアイコンを使用する:NanaTerryを初めて起動した時、ディスプレイ解像度がフルHD(1920*1080)を超えている場合はONにする
・クリップボード監視:ごく希に本体が異常終了するのを修正
━-━-━-━-━-━-━-━-━-━-━-━-━-━-━-
・本体終了時、ごく希に「各設定ファイルを保存できませんでした」となるのを修正
・ノードタイトルバーのサイズをマウスで動かせないようにした(設定>全般>外観:フォントサイズへ自動で合わせる)
・エディタ右端や下端でマウスドラッグするとエディタサイズが動いて下が見えてしまうのを修正
・フローティングしているアイテムがドッキングできない場合があることに対策(原因不明)
・同じ場所へ重ねてドッキングした時、元からある方のサイズを維持するようにした
・同じ場所へ2つ以上ドッキング&オートハイドした時、非アクティブなタブキャプションも表示するようにした
・ウィンドウの上側に{メインメニュー/ツールバー各種}がドッキングした状態で、ウィンドウの左側もしくは右側の同じ高さに{ツリー/ブックマーク/メモ}を上下に割った状態で2つ以上ドッキングしている時、下のアイテムが再起動するたびに縮んでいく不具合を修正
・「NodeIcon.bmp」「MainToolbar.bmp」「EditorToolbar.bmp」「TreeToolbar.bmp」のボタン数が足りなかった場合、その数だけデフォルト画像を表示するようにした
━-━-━-━-━-━-━-━-━-━-━-━-━-━-━-
◆プレーンテキストモード(α版)
・検索>置換>全て置換:エディタが固まるのを修正
・検索>置換>全て置換:希に読み込み違反がおきるのを修正
・検索>置換>正規表現…ON>全て置換:途中で力尽きる場合があるのを修正
━-━-━-━-━-━-━-━-━-━-━-━-━-━-━-
◆マクロ
・正規表現置換「RegStringReplace」で行頭「^」を検索したとき、1行目しか処理を行わなかったのを修正
・リッチテキストモード(標準)にて、正規表現置換「RegStringReplace」で改行「\n」を検索したとき、一切の処理を行わなかったのを修正
・マクロガイド/サンプルマクロにある「Maco」を全て「Macro」に修正した
・マクロファイル名を取得する「SelfMacoName」を「SelfMacroName」でも動くようにした
─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-
・サンプルマクロ
選択範囲の行頭に文字列を追加.nmc:複数行選択で実行した場合、最後に改行が1つ増えるのを修正
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━




NanaTerry 1.2.5 新機能の「インデックス」と「ピップアップ」
コメント (8)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

結論:やはりソースは読むもんだ

2021-12-22 22:09:27 | Delphi
NanaTerry はオリジナルからの流れで Window のドッキングを JVCL に任せている
ググっても英語かロシア語中国語で結局欲しい情報に行き当たらなかったりする

今回はドッキングした状態ではサイズを変えられないようにしたかったので
各々の Constraints を変えればいいと高をくくっていたところ上手くいかなかった

んで JvDockControlForm.pas から JvDockSupportControl.pas に飛んだら Splitter を生成してて
そこにはちゃんと OnCanResize イベントがあったので制御することが出来た
最初は例の type ごまかしで protected メソッドにアクセスしたりして苦労したんだけど
そんなにたいした問題でも無かった


FixedSize:Boolean;//サイズ固定

procedure TNanaMainForm.SplitterCanResize(Sender: TObject; var NewSize: Integer;
  var Accept: Boolean);
begin
  if FixedSize then Accept:=False;
end;

procedure TNanaMainForm.FormCreate(Sender: TObject);
begin
  with JvDockServer do
  begin
    Splitter[JvDockControlForm.dpRight].OnCanResize:=SplitterCanResize;
    Splitter[JvDockControlForm.dpLeft].OnCanResize:=SplitterCanResize;
    Splitter[JvDockControlForm.dpTop].OnCanResize:=SplitterCanResize;
    Splitter[JvDockControlForm.dpBottom].OnCanResize:=SplitterCanResize;
  end;
end;
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

正規表現ライブラリ SkRegExp

2021-11-13 16:54:07 | Delphi
NanaTerry で正規表現検索がおかしいと娘からクレームが入った

.(な|無)く
で検索して

それが無くなって
ン無くなって
らなくなるよ
が無くなって

↑の一つもヒットしない
.(な|無)
.(な|無)く.

とかならおk

まず秀丸や https://regex101.com/ で実際にヒットする事を確認後
自分が余計なことをやらかしてるのを前提にソースを確認したがわからない
最小限のコードで確認する
正規表現エンジンの SkRegExp ソースを読む
https://ht-deko.com/tech053.html#TRAINER_SKREGEXP に練習ツールがあったので確認するとヒットするが
ソースを自分の Delphi でコンパイルするとヒットしない
「もしかして SkRegExp のバージョン違い?」「2.5.3 でいけるのに 3.0.8 でおかしくなってる?」
小宮さんの配布サイトって確か随分前になくなっていたのでは?





GitHub にあった
3.1.12 2015/11/7
履歴読んでもわからんけど治ったっぽい
エンバグだったのか……


結論:GitHub は凄い
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Application.MainFormOnTaskbar

2021-09-11 12:24:51 | Delphi
Delphi2007 以降に搭載されたプロジェクトファイル内の
Application.MainFormOnTaskbar := True;
(新しいプロジェクトには、この行が自動的に追加)

特殊な構造をしていた Delphiを Windows のエアロ対応にするために歪な方法?で実現した(と私は受け取った)
しかしその副作用のため「Show」したサブフォームがメインフォームより前面に出てしまい見た目が「ShowModal」状態になってしまう問題は現在でも解消されていない(らしい)
https://docwiki.embarcadero.com/Libraries/Sydney/ja/Vcl.Forms.TApplication.MainFormOnTaskBar
『このプロパティに依存するアプリケーションでは、このプロパティが MainForm の Z 順序に影響を与える点に注意してください。』

わざとわかりにくく書いているのか?
要するにこう
「メインフォームから表示したフォームが常にメインフォームの上に表示されてしまう」

こちら↓でも「MainFormOnTaskbar はコメントアウトしようぜ」になってる(記事は古いけど)
フォームの重なり順序を変更する方法は?


おわかりいただけただろうか……
Form1 のタイトルバーがアクティブ色なことに……


Application.MainFormOnTaskbar を False にするとこれは解消されるが Aero が機能せずタスクバーにマウスを持って行った時サブフォームがプレビュー(サムネイル)として表示されたりする





ググった結果くろねこさんがファイナルアンサーを出しているっぽいんだけど
[Delphi] MainFormOnTaskBarとタスクバーボタン
[Delphi] MainFormOnTaskBarとタスクバーボタン2


「ITaskbarList インターフェイス」が Delphi 2010 で実装でそれ以前の Delphi ではタイプライブラリを作成
712_タスクバーへの追加・削除とプログレス表示
というのが邪魔くさかったのともっとわかりやすくて安易な方法を求めて彷徨った結果こちらにたどり着く

「How to allow Delphi secondary forms behind the main form」

つまり姿を隠したスプラッシュフォームをメインフォームに設定してサブフォームの親はすべてこいつにする
本来のメインフォームを閉じる( = アプリケーションの終了)時にスプラッシュフォームを閉じるようにすればユーザーにはわからない

『町娘を嫁にしたいからいったん他の武家の養女にする』みたいな感じ

このままではエアロ対応にはならず
・Application.MainFormOnTaskbar は True のまま

更にはタスクバーに登録されないので
・タスクバーへの登録は自分でやる




※最近の Delphi なら{Winapi.}のコメントを外してください

プロジェクトソース
program TestMainFormOnTaskbar;

uses
  Forms,
  TestMainFormOnTaskbarMainFormUnit in 'TestMainFormOnTaskbarMainFormUnit.pas' {RealMainForm},
  Form2Unit in 'Form2Unit.pas' {SubForm},
  SplashFormUnit in 'SplashFormUnit.pas' {SplashForm};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TSplashForm, SplashForm);
  Application.CreateForm(TRealMainForm, RealMainForm);
  Application.Run;
end.

スプラッシュフォームユニット
unit SplashFormUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TSplashForm = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
    procedure CloseApplication;
  end;

var
  SplashForm: TSplashForm;

implementation

uses
  TestMainFormOnTaskbarMainFormUnit;//本来のメインフォーム

{$R *.dfm}

procedure TSplashForm.CloseApplication;
begin
  Close;
end;

procedure TSplashForm.FormCreate(Sender: TObject);
begin
  BorderStyle:=bsNone;
  Height:=1;//見せない方向で……
//  Show;
//  BringToFront;
end;

procedure TSplashForm.Timer1Timer(Sender: TObject);
begin
  if Assigned(RealMainForm) then
  begin
    Visible:=False;

//この部分がないとタスクバーに登録されない
    {Winapi.}Windows.SetWindowLong(RealMainForm.Handle, GWL_EXSTYLE,
      {Winapi.}Windows.GetWindowLong(RealMainForm.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
    {Winapi.}Windows.SetParent(RealMainForm.Handle, GetDesktopWindow);

    RealMainForm.Show;
    Timer1.Enabled:=False;
  end else Timer1.Interval:=10;//スプラッシュ画面を見せるならここを長くする
end;

end.

【リアル】メインフォームユニット
unit TestMainFormOnTaskbarMainFormUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TRealMainForm = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  RealMainForm: TRealMainForm;

implementation

uses
  Form2Unit,    //SubForm
  SplashFormUnit;//Close 手続き

{$R *.dfm}

procedure TRealMainForm.Button1Click(Sender: TObject);
begin
  TSubForm.Create(Self).Show;
end;

procedure TRealMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SplashForm.CloseApplication;
end;

end.

サブフォームユニット
unit Form2Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TSubForm = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  protected
    procedure CreateParams(var Params:TCreateParams); override;
  public
    { Public 宣言 }
  end;

var
  SubForm: TSubForm;

implementation

{$R *.dfm}

procedure TSubForm.CreateParams(var Params: TCreateParams);
begin
//Show されるフォーム
  inherited;
  Params.WndParent:=Application.MainForm.Handle;
end;

procedure TSubForm.FormCreate(Sender: TObject);
begin
  Color:=clRed;//わかりやすいように色つける
end;

end.


これでいけると思うが NanaTerry では多重起動処理で「Application.MainForm」あたり使いまくってるのでキチンとテストしなくてはいけない
コメント (2)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

1.2.4 アップしました

2021-08-15 18:03:39 | NanaTerry
アップデート詳細はこちら
ダウンロード:Ver. 1.2.4




★★★★★★
今回の内容はほとんどが修正ですがひとつだけ

・本体のメモリ使用量が26%減少

☆メモリ使用量:上が今回のバージョン下が以前のバージョン




190MB のファイルを読み込む時間
NanaTerry 2秒(1,954ミリ秒)
↓は謎の文字列({\rtf1\ansi\ansicpg932\...)として読み込んだ場合
Mery 約17秒
秀丸は 1.5秒くらいで開いた後2.5秒くらいバックグラウンドでなにかしてた

一枚エディタは当然「Ctrl + end」ですぐに最後も描画出来るような状態に保たないといけないから
ノード毎に管理してるよりは大変なんだろうけど最初に全部読み込むこと自体は同じなので相当がんばったと思いますヽ('∀'o)ノ

★★★★★★
やっぱもうひとつだけ……
・検索>結果出力>検索結果一覧>右クリック「別窓で表示」:
これ何気に便利です
コメント (10)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする