テキストエディター「Mery」アルファ版 Ver 3.2.1 を公開、ダークモードに対応 (試験的)

テキストエディター「Mery」アルファ版 Ver 3.2.1 を公開、ダークモードに対応 (試験的)

今回はダークモードを試験的に実装したので、その概要を簡単にご紹介したいと思います。

スポンサーリンク

ダークモードに対応 (試験的)

画面の配色を暗くすることで目に優しく作業に集中でき、なおかつオシャレで省エネということでちょっとしたブームになったダークモード。

Windows 10 にダークモードが搭載されてからかれこれ 2 年ほどになりますが、現在では多くのアプリケーションがダークモードに対応しています。

しかしながら Windows 10 のダークモードがサポートしているのは UWP アプリのみで、Mery のような Win32 アプリは完全に取り残されてしまいました。

そんな Win32 アプリですが、実はこっそりダークモード関連の API が用意されていることがわかっており、これらの API が正式に公開される日を待ちわびていました。

2 年待ってもそんな日はやって来ませんでした。

ゲームギアミクロ ブラック

ゲームギアミクロ ブラック
セガ
色いっぱい、だからおもしろいゲームギア。私は白黒のほうしか持ってませんでしたが、モータルコンバットがカラーで遊べるのは本当にうらやましかったです。
Amazon で探す 楽天市場で探す

どうやって実装したのか?

Win32 アプリからでも UWP アプリのモダンな外観を使えるようにして Win32 アプリを復活させるという「Project Reunion」なる計画がありますが、そういったものを使ったわけではなく、非公開 API と独自描画を使ってゴリゴリと実装しました。

どうやって実装したのか?

非公開 API ということで Windows 10 のバージョンによっては API の仕様が変わってしまうこともありえますし、実際に今までにも何度か仕様変更がありました。

そういった理由から非公開 API を使うのは最終手段だと思っていたのですが、CrystalDiskInfo さんや EmEditor さんなどの有名な Win32 アプリが続々と非公開 API を使ってダークモードに対応されているようなので Mery も便乗してみた次第です。

ちなみに、エクスプローラーやコマンドプロンプトのような Windows 標準の Win32 アプリがダークモードに対応したこともあってか、Windows 10 1903 [OS ビルド 18362] (2019年5月21日) 以降、非公開 API に大きな仕様変更はないようです。

Mery のダークモードは現時点 (2020年10月26日) で以下の環境で動作確認しました。

  • Windows 10 1809 (OS ビルド 17763)
  • Windows 10 1903 (OS ビルド 18362)
  • Windows 10 1909 (OS ビルド 18363)
  • Windows 10 2004 (OS ビルド 19041)
  • Windows 10 20H2 (OS ビルド 19042.572)
  • Windows 10 Insider Preview (OS ビルド 20201)

【追記】Mery のダークモードは現時点 (2020年11月02日) で以下の環境で動作確認しました。

  • Windows 10 1809 (OS ビルド 17763.1)
  • Windows 10 1809 (OS ビルド 17763.107)
  • Windows 10 1809 (OS ビルド 17763.195)
  • Windows 10 1809 (OS ビルド 17763.404)
  • Windows 10 1809 (OS ビルド 17763.615)
  • Windows 10 1809 (OS ビルド 17763.652)
  • Windows 10 1809 (OS ビルド 17763.678)
  • Windows 10 1809 (OS ビルド 17763.720) [非公開 API で仕様変更あり]
  • Windows 10 1809 (OS ビルド 17763.805)
  • Windows 10 1809 (OS ビルド 17763.1432)
  • Windows 10 1809 (OS ビルド 17763.1554)

ダークモードの設定方法

ダークモードはメインメニューから [オプション] をクリックして、[基本] カテゴリの中にある [外観モード] の項目から設定できます。

ダークモードの設定方法 1

  • ライト: 通常の外観モードです
  • ダーク: ダークモードを使用します
  • 自動: Windows 10 の [色] の設定に連動します

その項目の右側にある [アクセント カラーを使用する] をオンにすると、アクティブなタブなどの色に Windows 10 のアクセントカラーが適用されます。

ダークモードの設定方法 2

Windows 10 のアクセントカラーは、スタートメニューの [設定] から [個人用設定] を選択し、その中の [色] という項目で設定することができます。

ダークモードの設定方法 3

例えば本番環境と開発環境でカラーを変えて分かりやすくしたり、職場用と自宅用で気分を変えたりなどの用途で役に立つかもしれません。

また、エディター部分の色はダークモードの設定には連動しませんので、必要に応じて [表示] カテゴリの [テーマ] からお好みの暗いテーマを選択してください。

ダークモードの制限事項

Windows 10 は Win32 アプリ向けにダークモードを提供していません。

Mery のダークモードは非公開 API を使って無理やり実装しているものなので、UWP アプリのようなモダンな外観のダークモードとは異なる部分が多々ありますが、仕様上の制限事項ということでご了承ください。

  • Windows 10 1809 (OS ビルド 17763) 以上が必要

    Windows 10 のバージョンがそれより古い場合はダークモードを使用できません。

  • Windows 10 のアップデートによって動作しなくなる恐れがある

    Windows 10 のアップデートで非公開 API の仕様が変更されてしまうと、ダークモードが使用できなくなったり、Mery が起動しなくなったりするかもしれません。

  • ツールバーのアイコンが見づらい

    これはどうしようもない部分ですが、ダークモードに対応した高品質なアイコン素材集が欲しいところです。

    また、以前に当サイトで期間限定の特典として配布していた「マテリアルアイコン」を入手されていれば、それを使うことである程度は見やすくなるかもしれません。

  • ダークモードにならない箇所がある

    一部のコントロールはダークモードに対応していなかったり、実装が不十分だったりします。

    例えば、メニューバーやツールバーが乗っているコントロール (クールバー) で、ウィンドウのサイズを小さくした場合にはみ出した項目をポップアップメニューとして表示するための [»] ボタン (シェブロン) が表示されません。

  • プラグインはダークモードに未対応

    同梱されているアウトラインプラグインはダークモードに対応させておきましたが、MeryWiki で公開されているその他のプラグインはダークモードに対応していません。

  • Windows 10 のバージョンによって動作が異なることがある

    例えば、Windows 10 1809 ですとダークモードを強制する機能がありません。[外観モード] は [ライト] と [自動] の 2 つとなり、設定変更時には Mery の再起動が必要です。

万が一のときには…

Mery のダークモードは非公開 API を使っているため、Windows 10 のアップデートによってダークモードが使用できなくなるかもしれません。

ダークモードの API に仕様変更が発生した場合、自動的にダークモードをオフにして起動するようにはしているつもりですが、仕様の変わり方によっては Mery が起動できなくなってしまう可能性もあります。

そのような事態が発生した場合、Mery.ini * を書き換えてダークモードの設定を削除すれば、ダークモード関連の API を使用することなく Mery を通常通り起動できるようになります。

Mery を終了 (タスクトレイに常駐している場合はトレイアイコンも終了) した状態で、メモ帳などを使って Mery.ini のGeneralセクションにあるDarkMode=1 or 2の項目を削除します。

Mery.ini
[General]
DarkMode=0

* Mery.ini は通常、C:\Users\<ユーザー名>\AppData\Roaming\Mery\Mery.iniにあります。

変更ログ

本バージョンではいくつかの不具合修正や機能改善が含まれています。現在お使いのバージョンで問題がある場合はバージョンアップで改善されるかもしれません。

3.2.1 (2020-11-02)

  • ダークモードでウィンドウ分割時にペインを行き来すると画面の右端がチラつくことがあったのを修正
  • Per-Monitor DPI 対応の仕組みを作り直した

    フォーラム Per-Monitor DPI対応に不十分な点があります

  • Windows 10 1809 の特定のビルド (17763.720 ~ 17763.1554) でダークモードのタイトルバーが黒くならない問題の対策

    フォーラム ダークモードがタイトルバーにだけ適用されない

  • ダークモードに変更した直後、Mery を再起動するまでステータスバーの内容が更新されなくなる問題を修正
  • トゥルーインライン入力で入力時の装飾を波線から破線に変更 (お作法的に通常のインライン入力が波線、トゥルーインライン入力が破線っぽい)
  • DirectWrite で合字に対応 (試験的)
  • その他、細かい修正

3.2.0 (2020-10-26)

  • 鬼車を使った逆方向検索の実装方法を変更してみた

    フォーラム 検索の"前"と"次"で、正規表現"(?>pattern)"(原子的式集合)のヒットする回数が違う

  • ついでに鬼雲を使った逆方向検索の実装方法も変更してみた (本来の性能を発揮できるようになるはず)
  • Per-Monitor DPI でディスプレイ間を移動させたときに、特定の条件下でリストビューの表示がおかしくなる問題の対策

    フォーラム Per-Monitor DPI対応に不十分な点があります

  • ATOK で全角スペースをキーリピートで入力したときに画面に反映されるのが遅延する問題の対策
  • 前回の「その他、細かい修正」で ATOK の状態を示す小窓の位置がカーソルに追従しなくなっていたのでロールバック

    フォーラム Mery 3.1.0 試してみました

  • 選択範囲をドラッグしたときに表示される禁止マークの出現条件を調整

    フォーラム Mery 3.1.0での文字列の選択について

  • タブのドラッグアンドドロップで、タブの [X] ボタンの上にドロップしたときにも動作するようにした
  • ウィンドウ分割で選択範囲がないときもカーソル位置を同期するようにしてみた

    フォーラム ペインごとのカーソル位置と保存判定

  • ダークモードに対応してみた (試験的)
  • [オプション] から [鬼車を使用する] を設定できるようにしてみた (試験的)
  • タブのアイコンを Per-Monitor DPI に対応させた
  • ツールバーなどのヒントを Per-Monitor DPI に対応させた
  • 縦書きで DirectWrite オフのときの絵文字の文字間を修正
  • 印刷で接合された絵文字に対応 (カラー絵文字じゃないよ)
  • テーマのリソースを merycfg.dll に分離した
  • それにともないすべてのテーマを微調整した
  • その他、細かい修正

ダウンロード

導入が簡単なインストーラー版、設定ファイルを外部に作成しないポータブル版、レジストリを一切使用しない ZIP 版を用意しています。

インストーラー版

解凍などの作業が必要なく簡単に使えるインストーラー版です。

Mery Ver 3.2.1 (32 ビット版) インストーラー Mery Ver 3.2.1 (64 ビット版) インストーラー
VirusTotal で誤検出されたり SmartScreen で保護されたりしますが、もちろんウイルスではありません。ご心配なかたは正式版が Vector さんか窓の杜さんで公開されるまでお待ちください。

ポータブル版

インストールは不要。通常の ZIP 版と異なり設定ファイルを外部に作成しないので USB メモリに保存して持ち歩けますし、PC 環境を汚すこともありません。

Mery Ver 3.2.1 (32 ビット版) ポータブル Mery Ver 3.2.1 (64 ビット版) ポータブル
ポータブル版は解凍したフォルダの中に、設定ファイルなどのすべてのデータを保存しますので、必ずアクセス権のあるフォルダに配置してください。

ZIP 版

アーカイブを解凍するだけですぐに使える ZIP 版です。

Mery Ver 3.2.1 (32 ビット版) ZIP Mery Ver 3.2.1 (64 ビット版) ZIP
ZIP 版はレジストリを汚したくないかた向けにインストーラー版の内容を ZIP アーカイブにしたものです。1 つの環境に複数の Mery を導入する場合は ZIP 版ではなくポータブル版をご利用ください。

おわりに

アルファ版ということで鬼車に続いてダークモードを試験的に実装してみましたが、ツイッターでつぶやいた開発着手からかれこれ 1 年半も経過してしまいました。

おわりに

非公開 API の使い方は早い段階で分かっていたのですが、それを使って黒くできるのは一部のコントロールのみということで、その他のコントロールをどうやって黒くするかが大きな課題でした。

Delphi ですと VCL スタイルという機能があって、これを使えば簡単な操作であっという間にテーマ機能を実装できてしまうのですが、Mery では VCL スタイルを使っていません。

というのも、VCL スタイルは画像を使ってテーマ機能を実現しているため、リソースの埋め込みによるアプリケーションの肥大化と、リソースの読み込みによる起動速度の低下が避けられず、テキストエディターとしては致命的だったのです。

当初はそこまで考えが及ばず、数日かけてコツコツと VCL スタイルのスタイルファイルを制作していたこともありましたが、CrystalDiskInfo さんが非公開 API と独自描画を使ってダークモードに対応されたのを拝見し、私もイバラの道を進む覚悟を決めました。

そういうわけで、しばらくの間は Windows 10 の大型アップデートに注意しつつ、可能な範囲で非公開 API の仕様変更にも追従していくしかなさそうです。非公開 API が廃止されてしまった場合はどうしようもありませんが…。

それにしてもダークモードって良いものですね。

今まではなんか黒くてダッサと思って使っていませんでしたが、開発のために仕方なくダークモードに設定してから久しぶりにライトモードに戻してみたところ、あまりの眩しさに目を開けることができず、ダークモードから抜け出せない体になってしまいました。

スポンサーリンク

関連する記事

フォローする