(02/11/01〜)

02/11/01

・ログを分離しました。

TEAD ver1.85
 リリース。修正点は以下の通り。

・「対応する区切り記号を探す」を追加(デフォルトで「Alt+]」)。

・「表示(V)」-「常に手前に表示(T)」のキーバインドがメニューに表示
 されないバグを修正。

・「Unicode-BE」の読み書きスピードを向上させた。

・TEADマクロ-テキスト効果ルーチン-「ExpandTab」で、文字列が選択さ
 れていないとテキストを重複して返すバグを修正。

・TEADマクロ-その他のルーチンに「ShowDialog」を追加。

・TEADマクロ-ファイルルーチンに「MacroFilePath」を追加。

・TEADマクロ-ファイルルーチンに「MacroStorePath」を追加。

・タブのコンテキストメニューに「書込禁止」を追加。

・「PPA ver1.25β2」に対応。

・コマンド入力ウィンドウで、マクロ(スクリプト)ファイルの拡張子
 (*.p2s)を省略できるようにした。

・細かな修正多数

 「対応する区切り記号を探す」は正確には「対応する半角文字の括弧に移動」です。「([{<「」/「)]}>」」のペアへジャンプします(注:「」が半角で書けないので全角表記にしてあります)。一旦1.85β#1で実装したのですが、先日エディタ環境ファイルを頂いたHiroさんに「遅いカモ...(意訳)」と言われたので、ロジックを見直して再実装してあります(^^;

 今回の目玉...なのかな?TEADマクロに「ShowDialog」が追加されました。これはユーザー定義のダイアログを表示する関数で、「エディットボックス/ラベル/チェックボックス/コンボボックス/メモ/ボタン」を自由に配置できるというものです。詳しくはHelpの[TEADマクロ]-[その他のルーチン]-「ShowDialog」または「TEADマクロスクリプト投稿掲示板」を参考にしてみて下さい。サンプルはアーカイブのMacroフォルダにあります。

・そして、#2
 Hiroさんより...「対応する括弧がない括弧で移動しようとするとアドレス違反が出るみたいです。」高速化にばっかり気を取られてエンバグしてました。修正版が同名でアップしてあります。最新EXEバージョンは「1.8.5.28」になっています。

02/11/08

TEAD ver1.86
 リリース。修正点は以下の通り。

・ツーストロークショートカットの開始キーを3つにした。

・キーバインド用に使えるキーを増やした。

・冗長なキーバインド情報をレジストリに残さないようにした。

・ダイアログ(フォーム)定義ファイル-[Form]セクションの設定に「FontName」を追加。

・ダイアログ(フォーム)定義ファイル-[Form]セクションの設定に「FontSize」を追加。

・ダイアログ(フォーム)定義ファイルのエディットボックスの設定に「MaxLength」を追加。

・「表示(V)」-「常に手前に表示(T)」が正常動作しなくなっていたバグを修正。

・ファイルオープン/セーブダイアログでデフォルト拡張子が利かない箇所があったのを修正。

・ステータスバーの各カラムの幅を自動調整するようにした。

・[オプション(O)]-[環境設定(O)...]の[タブ]タブに「タブ毎にIMEを管理する(M)」を追加。

・「環境設定ウィンドウ」の起動時間を最適化(対ver1.85で約60%高速)。

・「環境設定ウィンドウ」でOKが押された時の設定方法を最適化。

・細かな修正多数。

 ...結構、地味な修正が多いような気がします。

・そして、#2
 修正版が同名でアップしてあります。最新EXEバージョンは「1.8.6.20」になっています。

GEAR戦士電童
 たかはしくんよりDVDを借りて観る。なぜこんなDVDを彼が持っているかといえば、「コレ」のためだそうで。知らない作品はいつも予習するのだとか...。

 内容ですが、設定はよくある「でっかいロボットが活躍するアニメ」です。...しかし、この作品、「過去のでっかいロボットのでてくるアニメを知ってる方」でなおかつ「パソコンに詳しい方」にはツッコミ所満載です。なんてったって動力が「電池」ですしね。

 例えば「ニュータイプじゃないんだから」とか、「太陽光がエネルギーだと夜に動けない」とか「超電童ヨーヨー」とか。技を出すには「コマンドギア」と呼ばれる端末からコマンドを「インストールする必要がある」とか、強力な攻撃をするにはさらに「SP1やSP2をインストールする必要がある」とか(^^;

 制作サイドも「盛り上げる所がわかってらっしゃる」ようで、全38話すべてにおいて面白いです。確かにお子様向けアニメなのですが、使い回しの戦闘シーンで退屈する事はありません。1話完結でもないので次の話がすぐ観たくなってしまいます。

 惜しむらくは、「この番組、テレ東直轄の6局でしか放映されていない」のですよねぇ...。「ガンダムSEED」より遥かに面白い気が...(^^;

02/11/15

・プログラミング
 色々と困った事が...。

・コモンダイアログ
 いつからかのOfficeで実装されたコモンダイアログの「プレースバー」ですが、これが曲者でして。コモンダイアログを拡張して下にエディットボックスなんかを貼っていると

ズレるんですな、これが(^^;

 しかも、「プレースバー」の幅の取得方法がワカラナイし。XPなんかのメモ帳も拡張されていますが、これはきっちり横位置が合っています。メモ帳はOS毎に存在するので「プレースバー」の幅を定数で持っても問題ないのでしょうが...。Delphi6からはOpen/SaveDialogに「プレースバー」を隠すオプションがありますが、やはりコモンダイアログを拡張する以上は隠すしかないのでしょうなぁ。

 コモンダイアログ拡張といえばやっかいなのがアクセラレータキーです。Labelにアクセラレータを付けても駄目です。コモンダイアログのフックプロシージャでどうにかすればいいのでしょうが、VCLの場合外部からは操作できません。...かといって低レベル操作でコモンダイアログを表示するのもなぁ...。

・レジストリ/Iniファイル
 TEAD ver1.87βで環境設定をファイルから読み書きできるようにすべく、TRegAccessというラッパークラスを作った。これはIniファイルをレジストリのように使うというもので、例えば

  RA := TRegAccess.Create(RegFile,RegMode);
try RA.RootKey :=
'HKEY_CURRENT_USER';
RA.WriteString(
'Software\DEKO','KEY1','Value');
RA.UpdateFile;
finally RA.Free; end;

 このような書き方ができる。「RegFile」にファイルの場合のファイル名、RegModeには「レジストリ/ファイル」の種別が入る。同一のコーディングでレジストリ/環境ファイルへアクセスするというものだ。レジストリしか使わないアプリケーションでも、このクラスを使えばわずかな修正で環境ファイル対応にする事ができるので非常に便利ではある。

 しかし、レジストリアクセスをこのラッパークラスで置き換えた時に問題が続出。早い話が、「レジストリの場合は正常動作するが環境ファイルだと変な動作をする」のだ。色々検証した結果、環境ファイルの問題点が解ってきた。

 以前もレジストリ/Iniファイルの話題を持ち出した事があったが、Iniファイルの致命的な問題は「同時アクセス」にある。レジストリ操作だと、誰かがレジストリを読んでいる時に書き込んでも動作が保証されるが、Iniファイルにはそれがない。たとえそれがTMemIniFileであったとしても。

 それはつまり、Iniファイルのネストを許さない事になる。関数の中でIniファイルをオープンし、その関数の中からさらに同一のIniファイルをファイルをOpenして処理する事は許されない訳だ(読み込みだけだったらそれでもいいのだが)。おかげで、レジストリアクセス処理部はコーディングの見直しを余儀なくされた。

・TMemIniFile/TRegistryIniFile
 TRegistryIniFileの発想は逆で、レジストリをIniファイルのように扱うというものだ。しかしここにも落とし穴がある。TRegistryIniFileはWriteIntegerで値をセットしても、REG_SZ(文字列)で書き込んでくれる。やれやれ、困ったものである。

 TMemIniFileはというと、Iniファイルを扱うが故にキーの種類を判断できない。これは「レジストリ->Iniファイル」へのコンバートしかできない事になる。もちろんレジストリのキーがすべてREG_SZであれば話は別だが。...とはいえ、TIniFileに比べれば便利。32KB制限はないし、Iniファイルをメモリ上に展開するので高速に動作する。いわゆるスナップショットなので、実際のファイルに反映させるにはUpdateFileメソッドを呼び出してフラッシュしなければならない。うまく使えばレジストリに近い高速アクセスを実現できる事が分かっただけでも儲けものか。

・TRegAccess

    // Open/Close系
function OpenKey(const Key: String; CanCreate: Boolean): Boolean;
function OpenKeyReadOnly(const Key: String): Boolean;
procedure CloseKey;
// 更新系
procedure UpdateFile;
// 存在チェック系
function SectionExists (const Section: String): Boolean;
function ValueExists (const Section, Ident: String): Boolean;
function HasSubKeys:Boolean;
function GetDataType(const ValueName: String): TRegDataType;
// 削除系
procedure DeleteKey(const Section, Ident: String);
procedure EraseSection(const Sec

 利用できるメソッドは現在の所、上記の通り。まだ完全に検証できた訳ではないので、単体で公開するかどうかは今の所未定。

・おっと...
 祝22万Hit!! 最近、あまり更新できないのが申し訳ないのだけれど...。

02/11/16

・互換性
 TEAD ver1.87βを作っていて思ったのが、過去のバージョンとの互換性の問題。しかし、インポート/エクスポートする環境ファイルの仕様さえ固まっていればどうにかなる事も判明。早い段階で融通の利くフォーマットに変更しておいたのは正解だったかもしれないな。

・TEAD
 次の目標はこれを見れば(チェックしてないだろうな誰も...^^;)、お分かり頂けるかもしれない。体感速度の向上をめざして開発を進める事になると思う。それと安定性の向上。しばらくは「つまらない」バージョンアップになるかもしれませんが。

・レジストコード
 TEAD ver1.87βではレジストコードの処理を変更した。これは環境設定をファイルに保存できるようにしたためで、ユーザーにはレジストコードの再入力を強いてしまう事になった。...とはいえレジストコード自体は変更されていないのだが。ファイルに保存できるようにするとレジスト判定フラグを解析しようとする不届き者が出てくると思われるので、急遽変更した。

 まぁ、お遊びなのだが。というのも、TEADでは単一のレジストコードしか持っていないので、レジストコードさえ解れば解析する必要すらないからだ。こっちの方が遥かに簡単だし...。この辺の話をすると、おそらく正規TEADユーザは「ニヤリ」とするだろうが、あえて触れない事にする(^^;

・環境設定ファイル(*.TEVの事ではない)を他のマシンに持っていってもレジスト済にはならない。
・環境設定ファイルを他のマシンに持っていっても試用期間残日数はちゃんとカウントされる。
・システム日付を試用が始まった日付より前にセットすると弾かれる。
・レジストキーをデタラメに変更するとまた試用期間とみなされる。

 このロジックの謎を環境設定ファイルから紐解ける自身のある方はTEAD ver1.87βをDLして是非解析にチャレンジしてみて欲しい。なお、「Internetに接続してなんだか細工をしている」という解はないのであしからず。

・Delphi7
 「ちょっとバギーだな」と思う事が多い。IDEも改善されたトコと改悪されたトコがあって微妙。ひょっとするとDelphi6からかもしれないが、Delphi6は評価程度にしか使わなかった(勿体無いな)ので、裏はとれてない。

 バージョンアップに伴うサイズ肥大は毎度の事だが、特に今回はXPのビジュアルスタイル描画関係が含まれているので大きくなりがちのようだ。ビジュアルスタイル描画関係のコードをDelphi6以前のバージョンで書くのはホネなので、「仕方ない」とあきらめるしかなさそうだ。ファイルサイズを気にするのは今となってはナンセンスだが、どうしても気になるのならDelphi3辺りと使い分けるのがいいだろうな。

02/11/20

TEAD ver1.87
 リリース。修正点は以下の通り。

・開発環境を「Borland Delphi7」に変更。

・カラーコンボボックスをDelphi標準の物に変更。

・透過/半透明の機能をDelphi標準のロジックで置換。

・すべてのコンポーネントをビジュアルスタイル(視覚テーマ)に対応させた。

・レジストリ操作を刷新。

・[オプション(O)]-[環境設定(O)...]の[システム]タブに「環境設定の保存場所」を追加。これによりTEADでレジストリを一切使わない事が可能になった。

・[オプション(O)]-[環境設定(O)...]の[ファイル]タブの「テンポラリを用いてファイルを開く(E)」を廃止。ファイルがロックされている場合、テンポラリに生成されるコピーから読むようにし、さらに書込禁止で開くようにした。

・ファイルオープンダイアログ/ファイルセーブダイアログのアクセラレータが利かなかった問題を修正。

・EllipsisEditをカスタムVCLに変更。

・SpinEditをカスタムVCLに変更。

・細かな修正多数。

 XP正式対応とレジストリ/Iniファイルアクセス方法の変更がメインです。「環境設定の保存場所」が設定できるようになったのはあるいみ副作用です。また、ver1.87にアップデートするとレジストコードの再入力を求められますのでご注意下さい。

・SpinEdit
 DelphiのSamplesページにあるSpinEditはXPのビジュアルスタイルを適用すると非常に見苦しくなる。描画のための矩形の計算を間違っているような気がするし、アップダウンボタンをボタンのスタイルで描画しているため、▲▼(三角)のBitmapの収まりが悪い(ボタンはフレームが太いから)。あんまりなので、カスタムVCLを作ってみた。Bitmapの描画がない分、幾らか高速に動作すると思われる(最近のマシンでは全く差は感じられないと思うケド...)。しかもあれって「SpeedButton(with Bitmap)×2=SpinButton」、「Edit+SpinButton=SpinEdit」なので、数が増えるとリソース消費量も馬鹿にならないような気がする。

02/11/28

TEAD ver1.88
 リリース。修正点は以下の通り。

・[検索(S)]-[移動先を指定(J)...]を追加。

・[ファイル(F)]-[閉じる(C)]で最後のページが閉じられた場合には、TEADを終了するのではなく、新規タブを作成するようにした。

・検索ダイアログに「ファイル」タブを追加。

・検索ダイアログに「Web」タブを追加。

 項目の数的には大した事はありませんが、結構難儀な修正でした。

・「移動先を指定(J)...」
 行番号を入力するとその行へジャンプします。Borland-IDEとの違いは3つあります。

 まず、入力項目がヒストリ付きのコンボボックスではない点。これはタブ型エディタには無用でしょう。行数の違うファイルを開いているのにヒストリがあっても仕方ないですし。

 次に範囲外の行番号を指定した時の挙動。メッセージボックスは出ません。存在する最終行にジャンプするか、ダイアログが閉じない(指定行=現在行の場合)かのどちらかです。

 最後に相対移動。入力時に符号(+/-)を付けると現在位置からの相対移動になります。

・[ファイル]タブ
 いわゆるGrepです。Borland-IDEのそれとは若干挙動が異なりますが、あまり気にはならないでしょう(行単位で検索を行っているため)。検索結果はインフォメーションリストに返され(ヒットした文字列を強調表示)、ダブルクリックで移動します。移動時にはヒットした文字列が選択状態になります。

・[Web]タブ
 各種検索エンジンを使ってWeb検索し、結果をデフォルトブラウザで表示します。現在の所、検索エンジンを追加/編集するGUIはありませんが、主要な検索エンジンは登録してありますし、どうしても追加したい場合でもsearch.tevを理解するのは容易な事でしょう。
[BACK] 古いのを読む 新しいのを読む