program spad; { Unicode対応RichEditクラスのサンプルプログラムから発展した簡易エディタ。 ※課題 ・他のプログラムにフォーカスがあるときにこのプログラムの文書を直接マウスで触った  あとそのままドラッグしても選択状態にならない。  これはRichEditコントロールの仕様のようだ。 ・ツールバー、ショートカットのカスタマイズ。 ・置換機能。 ・巨大ファイル(30MB以上は確実にアウト)をバイナリダンプで読み込むと処理にえらく時  間がかかってしまい返ってこなくなる。  2010-12-08:バイナリダンプの場合は先頭から64KBまでに制限することで回避。  まぁ、バイナリエディタなわけではなし。 2013-10-11:Ver 0.1.39.115 ・UnicodeではなくShift_JISで貼り付けるコマンドを追加。  D6のエディターからのコピペで文字化けしてしまうことへの対策。 2013-01-22:Ver 0.1.38.114 ・下の修正でどういうわけか修正されていなかった不具合を修正。 2012-11-29:Ver 0.1.37.114 ・下の修正で保存時にCRLFがCRLFLFになっていた不具合を修正。 2012-11-21:Ver 0.1.36.112 ・「編集」→「コピー」で改行コードがCRLFに対応していなかった不具合を修正。 2012-06-05:Ver 0.1.35.112 ・ファイルを開くダイアログのプレビューでBOMがあるファイルは他の文字コードで表示  できない仕様を変更。 ・改行コードの指定でCR+LFにした場合保存にえらい時間がかかってしまう不具合を回避。 2012-05-26:Ver 0.1.34.112 ・OnKeyDown, OnKeyUpの引数Shiftの初期化を行っていなかったためCtrlキーを押していな  い時にもCtrlキーが押されているような挙動になっていた不具合を修正。 ・置換ウィンドウの「キャンセル」ボタンを押しても何も起こらなかった不具合を修正。 2012-03-18:Ver 0.1.33.112 ・検索のオプションを無効にした。 ・置換機能実装。 2012-01-15:Ver 0.1.32.110 ・検索の「大文字小文字を区別」が逆になっていた不具合を修正。 2012-01-05:Ver 0.1.31.110 ・「対応する括弧に移動」機能を実装。 2011-12-31:Ver 0.1.30.110 ・ファイルを開くダイアログのファイルの種類を設定ファイルに持つようにした。 2011-12-08:Ver 0.1.29.110 ・拡張子のカスタマイズに対応。 2011-11-23:Ver 0.1.28.102 ・EUC、JISの自動判定が正しく行えずにUTF-16BEと判定していた不具合を修正。 ・BOMなしのUTF-16の判定の制度を若干あげた。  文字列中のひらがな及びカタカナの比率を求めて1%未満ならエンディアンが違うと判定。 2011-11-22:Ver 0.1.27.102 ・ファイルの末尾の改行コードが必ず入る仕様を改善。 ・選択状態でホイール操作を行うとCtrlキーを押していないにも関わらずフォントの大き  さが変わってしまうことがあった不具合を修正。  TMyMemoのWMNotifyメッセージでMs.Resultに0をセットしていたため。 2011-11-19:Ver 0.1.26.91 ・オートインデントに対応。 ・変更済みテキストで「ファイルの名前のみ取得」にチェックをつけてファイルを開こう  とすると変更されているので保存するかと聞いてくる不具合を修正。 ・「ファイル名の取得」とファイル名のみを取得」で末尾に余計な改行が入る仕様を解消。 ・Ctrlキーを押しながらのホイール操作でフォントの大きさを変更するようにした。 2011-11-17:Ver 0.1.25.87 ・マウスの左ボタンを押している間はステータスバーの文字コードの表示をスキップする  ようにした。  スキップしないと文字列をマウスで選択するのに引っかかるような感じがあるので。 ・UTF-8のビット列表記に対応。 ・ステータスバーの文字の表示で制御コードの場合背景色を水色にした。 ・半角スペースと全角スペースの時にそれぞれ「半角スペース」「全角スペース」と表示  するようにした。 ・Shift-JISのコード表示の頭に「0x」を付け足した。 ・検索ボックスのポップアップメニューが表示されなくなっていた不具合を修正。 ・名前をつけて保存の時常に文字コードがShift_JISになっていた不具合を修正。 ・[Ctrl]+ホイール操作でフォントの大きさを変えるようにした。 ・ツールバーから「ステータスバーの表示のON/OFF」と「フォント選択」のボタンを削除。  シンプルに。 ・ツールバーとステータスバーのポップアップヒントを表示するようにした。 ・ステータスバーのHintにフルパスのファイル名をセットするようにした。 2011-11-10:Ver 0.1.24.85 ・選択範囲をソートに「大文字小文字を区別してソート」「大文字小文字を区別せずソート」  「数値でソート」「反転」を追加。  数値でソートは行頭の数値文字列のみが対象。  対象となる文字は 0123456789 〇一二三四五六七八九 十百千 万億兆 拾陌佰阡仟萬 零壱壹弐貮貳参參肆伍陸 WideChar($67D2) 漆質捌玖 @ABCDEFGHIJKLMNOPQRS TUVWXYZ[\]  位取りは兆まで。 2011-11-08:Ver 0.1.23.84 ・↓で保存の時に選択した文字コードと実際に保存される文字コードが一つずれてしまっ  ていたアホみたいな不具合を修正したはずが修正できていなかったアホ丸出しの不具合  を修正。 ・文字コードの自動判定がうまくいかなくなっていた不具合を修正。  ↓で行ったUTF-16の自動判定を少しまともなものにした時に不具合が紛れ込んでしまっ  た。 2011-11-03:Ver 0.1.22.84 ・保存の時に選択した文字コードと実際に保存される文字コードが一つずれてしまってい  たアホみたいな不具合を修正。 ・一度読み込んだ後の文字コードの選択アイテムがおかしくなっていた不具合を修正。 ・BOMなしのUTF-16のビッグエンディアンが文字コードの自動判定ができていなかった不具  合を修正。 ・UTF-16の自動判定を少しまともなものにした。  とはいえ手抜きなことには変わりなし。 2011-10-17:Ver 0.1.21.83 ・ステータスバーの表示・非表示を設定ファイルに保存していなかったミスを修正。 2011-10-16:Ver 0.1.20.83 ・ステータスバー表示のオンオフ実装。 ・ステータスバー、行番号非表示の時の効率を良くした。  ステータスバーを表示している時にカーソル移動が引っかかる感じがあって気持ち良く  なかったのが改善。 2011-10-06:Ver 0.1.19.83 ・選択範囲を置き換えると置き換えられた文字列がクリップボードへコピーされる不具合  を修正。 ・選択範囲のソート機能を実装。 2011-09-27:Ver 0.1.18.83 ・大量の文字列の編集作業で文字化けしてしまう不具合を修正。  恐らくRichEditコントロールの改行コードはデフォルトでCRのみであるのをCR+LFに変更  していたのが原因。 ・コマンドが正しく機能するように調整。  SendOneKeyのKeyUpをSendMessageで送っていた部分をコメントアウト。 ・一部コマンドにショートカットキーを割り当て Ctrl+Y「一行削除」 Ctrl+N「空行挿入」 Ctrl+T「カーソル位置から単語の終わりまで削除」 Ctrl+Shift+T「カーソル位置から単語の始めまで削除」 2011-07-19:Ver 0.1.17.76 ・検索ボックスで「f」を入力すると本文に移動してしまう不具合を修正。 ・新規作成や開くなどのショートカットを削除。  現状カスタマイズができないので使いづらいため。 2011-06-20:Ver 0.1.16.74 ・末尾が改行コードのファイルを読み込むとエラーになっていた不具合を修正。  myWStringsライブラリの文末の処理を変更した際に紛れたバグによる不具合。 2011-05-24:Ver 0.1.15.62 ・本文のポップアップメニューのショートカットをFormCreate時に削除していたためタブ  の入力ができなくなっていた不具合を修正。 2011-05-16:Ver 0.1.14.59 ・改行コードのないテキストを保存した場合必ず改行コードが付加されていた不具合を修  正。 2011-05-10:Ver 0.1.13.59 ・TScreenのMonitorプロパティがモニター情報の変更に追随しないことからモニター情報  が変わった後にツールバーのドロップダウンメニューを表示させようとするとアクセス  違反のエラーが出てしまっていた不具合を修正。 2011-04-01:Ver 0.1.12.58 ・エクスプローラからドロップされたファイルの文字コードの判定を直前に選択した文字  コードから自動判定に戻した。  ※結局混乱の元なのでやめた。 ・大きいサイズのファイルを開く時のメッセージボックスにファイルサイズを表示するよ  うにした。  またタイトルバーのキャプションに「お待ちください」を表示するようにした。 2011-02-10:Ver 0.1.11.58 ・起動中にシステムを終了させたりログオフさせたりした場合設定を保存していなかった  不具合を修正。 ・タスクバーのUnicodeなタイトルの表示をキャンセル。  Unicodeなフォームを作成し親にすることで実現させていたのだけれども上記の修正に伴  い不具合が出てしまったのでキャンセル。  いずれUnicode対応のDelphiで書き直すことを考えてノーマルに近づけるようにした。 2011-01-21:Ver 0.1.10.58 ・DLLプリロード攻撃対策。 2011-01-12:Ver 0.1.9.58 ・マウスジェスチャー実装。  ← 編集/元に戻す  → 編集/やり直し  ↓ ファイル/開く 2010-12-08:Ver 0.1.8.58 ・バイナリダンプの読み込みを64KBまでに制限。  処理に時間がかかるためとメモリー不足のエラーを回避するため。 ・エクスプローラからドロップしたり開くの履歴から選択した場合の文字コード判定を自  動から直前の設定を引き継ぐようにに変更。 ※自動のままの方が良いかも知れないので要検討項目。 ・ツールバーに編集メニューのボタンを追加。  いずれカスタマイズ可能なようにツールバー用アイコンを追加。 ・編集メニューの「すべて選択」の選択の可/不可の判定を間違えていた不具合を修正。 ・変換メニューにURLエンコードとURLデコードを追加。 ・「行間をあける」オプションを削除。  行番号表示の調整が面倒なので。 2010-11-20:Ver 0.1.7.57 ・バイナリダンプの改行コードを間違えて#$Cにしていた不具合を修正。 ・バイナリダンプの場合書込み禁止モードに変えてから読み込むように変更。  書込み禁止にする時に時間がかかるのでその分の時間短縮のため。 ・巨大なファイル(とりあえず5MB以上)を開こうとした場合警告を出すようにした。 ・読み込み処理中の経過表示を行うようにした。  Atomなネットブックで1MB以上くらのサイズのファイルでないと意味は無いような感じも。 2010-11-16:Ver 0.1.6.54 ・他のアプリで開いている文書(恐らくCloseしていないもの)を読み込めなかった不具合を  修正。 ・行番号表示の左マージンを狭めて右マージンを1ドット増やして多少見やすくした。 2010-11-09:Ver 0.1.5.54 ・ポップアップメニューで貼り付けができなかった不具合を修正。 ・本文のポップアップメニューの「選択範囲をネット検索」と「検索サイトを選択」を非  表示に変更。  結構とわずらわしいので。 ・行番号表示機能追加。 ・コマンドラインオプション実装開始。 2010-11-08:Ver 0.1.4.53 ・開くダイアログを呼び出して閉じた後フォーカスを失っていた不具合を修正。 ・ファイルを開いた後カーソルが行頭でないところに行ってしまう不具合を修正。 ・プログラムが非アクティブになった後アクティブになってもフォーカスが本文に戻らな  かった不具合を修正。  タイトルバーを触ってキーボードからCtrl+Cでコピーを行おうとしてもできなかった不  具合が解消。 ・ステータスの表示形式を変更。  (あ) SJIS/82A0 UTF-16/U+3042 UTF-8/U+E38182  という形式。UTF-8のバイナリイメージはとりあえず非表示な方向で。  UTF-16のサロゲートペアはU+5桁の表記と併せて4桁二つの表記も表示。 ・改行コードの指定でCRを選んだ場合「CR」ではなく「FF」が入っていた不具合を修正。  #$Dを間違えて#$Cとしていた単純なミス。 2010-10-28:Ver 0.1.3.46 ・「選択範囲をネット」で検索でキーワードのUnicodeな文字が代替文字に変換されてし  まっていた不具合を修正。 ・選択範囲の文字をUnicodeあるいはShift-JISのコード番号に変換したり逆に選択範囲の  数値をUnicodeあるいはShift-JISの16進コード番号であるとみなして対応する文字に変  換する機能を実装。  リッチエディットコントロールが持つ編集機能のShift+Alt+XやAlt+Xのようなもの。 2010-10-06:Ver 0.1.2.43 ・保存の時に改行コードを指定できるようにした。 ・読み込みの時に改行コードを判定して表示するようにした。 2010-10-05:Ver 0.1.1.23 ・タイトルバーのUnicode対応を復活。 ・タスクバーのタイトルもUnicode対応に。 ・BOMのついたUTF-16とUTF-8のファイルは他の文字コードを選んでも強制的にUTF-16ある  いはUTF-8で読み込んでいたのを他の文字コードを選んだら選んだ文字コードで読み込む  ように仕様変更。 2010-10-04:Ver 0.1.0.22 ・暫定でフォームのタイトルバーのUnicode対応をキャンセル。  Unicodeなファイル名のテキストの場合タスクバー上のタイトルが空文字になってしまうため。 ・文字コードにJISとEUCを追加。 ・バイナリダンプで読み込む機能を追加。  読み込むだけで書き戻す機能はなし。 ・読み込むファイルの文字コードの自動判定に対応。 文字コードの自動判定がおこなえるようになったのでマイナーバージョン上げ。 2010-10-01:Ver 0.0.6.12 ・「上書き保存」を行った後ファイル更新チェックに引っかかり"再読み込みするか"と聞  かれる不具合を修正。 ・フォームのタイトルバーのUnicodeな文字の表示に対応。 2010-09-27:Ver 0.0.5.11 ・複数ファイルを選んで読み込んだ時にファイルを繋げて読み込むのではなく、別プロセ  スでこのブログラムを起動して1ファイルずつ読み込むように変更。 ・開くの履歴から選択したときにダイアログを開くのではなくいきなり読み込むように変  更。  普通のエディタらしく。 2010-09-20:Ver 0.0.4.11 ・読み込んでいるファイルの更新チェック機能を実装。 2010-09-16:Ver 0.0.3.11 ・ネット検索機能を追加。 ・「ファイル名を挿入」を「ファイル名を取得」に変更し、チェックのオンオフでファイ  ルを読み込むときに動作を切り替える実装に変更。  ドラッグアンドロップのときにもあらかじめチェックしておけばファイル名を取得でき  るようになった。 ・検索ボックスでエンターキーを押したら下方検索を行うように変更。 ・ステータスバーを追加。 ・環境変数%TEMP%のフォルダ中のファイルを履歴から選択した場合に選択できなかった不  具合を修正。  他のフォルダなら問題なくできるのものが環境変数の%TEMP%もしくは%TMP%にセットされ  ているC:\TempなどのファイルはNGになってしまうのでInitialDirにフォルダ名をセット  することで回避。 2010-09-11:Ver 0.0.2.8 ・ツールボタンのタブの画像が切り替わらなかった不具合を修正。 ・ポップアップメニューの「選択範囲を上方検索」が選択不可であるはずの場合も選択で  きる状態のままであった不具合を修正。 2010-06-03:Ver 0.0.1.8 ・「ファイル名の挿入」機能を追加。 2009-06-12: ・「切り取り」が「コピー」と同じ動作になっていた不具合を修正。 ・書込み禁止にした場合にメニューの「元に戻す」「やり直し」「切り取り」をDisable  にしていなかった不具合を修正。 ・「新規作成」、「開く」と「終了」で文書が変更されていたら確認ダイアログを出すよ  うにした。 ・ポップアップメニューに「選択範囲を下方検索」と「選択範囲を上方検索」を追加。 2009-04-24: ・F_Memoにフォーカスがない場合に検索をしても検索結果の行までスクロールしなかった  不具合を修正。  HideSelectionをFalseにするか検索する前にF_Memoにフォーカスを移すかしないといけ  ないようだ。 } //{$DEFINE DEBUG} (* {$IFDEF DEBUG} HeapChecker, {$ELSE} FastMM4, {$ENDIF} my_safedll, Forms, main in 'main.pas' {App_sPad}, // custom_base in 'custom_base.pas' {App_CustomBaseForm}, // custom_menu in '..\..\custom\custom_menu.pas' {App_CustomMenu}, // custom_toolbar in '..\..\custom\custom_toolbar.pas' {App_CustomToolBar}, // custom_shortcut in '..\..\custom\custom_shortcut.pas' {App_CustomShortCut}, // custom_help in '..\..\custom\custom_help.pas' {App_CustomVersionInfo}; notification in 'notification.pas'; replace_form in 'replace_form.pas' {TApp_sPadReplaceForm}; *) uses {$IFDEF DEBUG} HeapChecker, {$ELSE} FastMM4, {$ENDIF} my_safedll, Forms, main in 'main.pas' {App_sPad}, replace_form in 'replace_form.pas' {App_sPadReplaceForm}, notification in 'notification.pas'; {$R *.res} begin {$IFDEF DEBUG} HeapChecker.OutputClassName := True; HeapChecker.DumpLeakMemory := True; {$ENDIF} Application.Initialize; // gpcWindowStyleExAdd(Application.Handle, WS_EX_TOOLWINDOW); Application.Title := 's-pad'; Application.CreateForm(TApp_sPad, App_sPad); Application.Run; end.