「テーマの自動変更」の版間の差分

ページの作成:「== 概要 == Windowsのテーマ設定に合わせてMeryのテーマを自動変更します。 Meryのオプションで、「アプリのテーマ」を「システム設定を使用する」とすると、Windowsに合わせてMeryのテーマが変更されるようになりますが、エディタ部のテーマはこれとは別に設定変更する必要があります。 PowerToysのLight Switchや、Auto Dark Modeなどでは、Windowsのテーマを時…」
 
Pizz (トーク | 投稿記録)
 
(2人の利用者による、間の13版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
Windowsのテーマ設定に合わせてMeryのテーマを自動変更します。
Windowsのテーマ設定に合わせて、Meryのエディタ部のテーマを自動変更します。


Meryのオプションで、「アプリのテーマ」を「システム設定を使用する」とすると、Windowsに合わせてMeryのテーマが変更されるようになりますが、エディタ部のテーマはこれとは別に設定変更する必要があります。
Meryのオプションで、「アプリのテーマ」を「システム設定を使用する」とすると、Windowsに合わせてMeryのテーマが変更されるようになりますが、エディタ部のテーマはこれとは別に設定変更する必要があります。


PowerToysのLight Switchや、Auto Dark Modeなどでは、Windowsのテーマを時間で自動変更するなどの機能がありますが、Mery本体はこれに追随するのに、エディタ部のテーマだけ置き去りになって、なんか悲しかったので作りました。
[https://apps.microsoft.com/detail/xp89dcgq3k6vld?hl=ja-JP&gl=JP Microsoft PowerToys]の Light Switch や、[https://apps.microsoft.com/detail/xp8jk4hzbvf435?hl=ja-JP&gl=JP Auto Dark Mode]などを使用すると、Windowsのテーマを時間で自動変更するなどができますが、Mery本体はこれに追随するのに、エディタ部のテーマだけ置き去りになって、なんか悲しかったので作りました。


* Meryのオプション->「基本」->「アプリのテーマ」で、「システム設定を使用する」としている場合のみ動作するようにしてあります。
* Meryのオプション->「基本」->「アプリのテーマ」で、「システム設定を使用する」としている場合のみ動作するようにしてあります。
* ライトモード/ダークモード用のテーマを用意しておき、マクロ先頭でテーマ名を指定します
* ライトモード/ダークモード用のテーマを用意しておき、マクロ先頭でテーマ名を指定します
:(Mery標準のテーマは使えません、「名前を付けて保存」したテーマを使用します)
:(Mery標準のテーマは使えません、「名前を付けて保存」したテーマを使用します)
* マクロのカスタマイズ画面のリストに登録したら、イベントを有効にします
:イベントはお好みで...(「フォーカスを受け取った時」「フォーカスを失った時」くらいが妥当だと思います)


テーマを書き換えるアイディアは、ucky様の「[https://www.haijin-boys.com/wiki/%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AE%E3%83%88%E3%82%B0%E3%83%AB テーマのトグル]」マクロからいただきましたが、表示設定項目が増えた場合などのメンテナンスが面倒だったので、別途対応を行っています。
テーマを書き換えるアイディアは、ucky様の「[[テーマのトグル]]」マクロからいただきました。
すてきなアイディアありがとうございます。


== 変更履歴 ==
== 変更履歴 ==
22行目: 25行目:
// ライトモード/ダークモード用のテーマを用意しておき、ここでテーマ名を指定します
// ライトモード/ダークモード用のテーマを用意しておき、ここでテーマ名を指定します
// (Mery標準のテーマは使えません、「名前を付けて保存」したテーマを使用します)
// (Mery標準のテーマは使えません、「名前を付けて保存」したテーマを使用します)
var lightModeTheme = "#MyTheme-Light"
var lightModeTheme = "#Custom-Light";
var darkModeTheme = "#MyTheme-Dark";
var darkModeTheme = "#Custom-Dark";


// マクロのカスタマイズ画面のリストに登録したら、イベントを有効にします
// マクロのカスタマイズ画面のリストに登録したら、イベントを有効にします
32行目: 35行目:
if ("ReadSettings" in editor) {
if ("ReadSettings" in editor) {
if(editor.ReadSettingInteger("General", "DarkMode", -1) == 2){
if(editor.ReadSettingInteger("General", "DarkMode", -1) == 2){
// Meryの現在のテーマ
var currentTheme = editor.ReadSettingString("Themes", "ThemeName", "");
var currentTheme = editor.ReadSettingString("Themes", "ThemeName", "");
// Windowsのテーマ状態
var regKey = "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize\\AppsUseLightTheme";
var regKey = "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize\\AppsUseLightTheme";
var isLight = (new ActiveXObject("WScript.Shell")).RegRead(regKey);
var isLight = (new ActiveXObject("WScript.Shell")).RegRead(regKey);
42行目: 47行目:
}
}
if(currentTheme != newTheme){
if(currentTheme != newTheme){
var iniSection = "Theme\\" + newTheme;
// 表示設定項目一覧取得
var iniKeys = enumKeysInSection(iniSection);
var iniKeys = enumKeysInSection("Theme\\" + newTheme);
if(iniKeys.length > 0 && editor.ReadSettingString(iniSection, "GeneralForeColor", "") !== ""){
if(iniKeys.length > 0){
editor.WriteSettings();
editor.WriteSettings();
editor.WriteSettingString("Themes", "ThemeName", newTheme);


// テーマを「名前を付けて保存」したときに設定ファイルに追加される
// テーマを「名前を付けて保存」したときに設定ファイルに追加される
56行目: 59行目:
);
);
}
}
editor.WriteSettingString("Themes", "ThemeName", newTheme);


editor.ReadSettings();
editor.ReadSettings();
}else{
}else{
window.OutputBar.Clear();
window.OutputBar.Visible = true;
window.OutputBar.Visible = true;
window.OutputBar.Writeln("指定されたテーマが見つかりません: " + newTheme);
window.OutputBar.Writeln("指定されたテーマが見つかりません: " + newTheme);
66行目: 69行目:
}
}
}else{
}else{
window.OutputBar.Clear();
window.OutputBar.Visible = true;
window.OutputBar.Visible = true;
window.OutputBar.Writeln("動作対象外のMeryです: Ver." + editor.Version);
window.OutputBar.Writeln("動作対象外のMeryです: Ver." + editor.Version);
77行目: 79行目:
// Mery.ini を探す
// Mery.ini を探す
var iniPath = editor.FullName.replace(/\.exe$/i, ".ini");
var iniPath = editor.FullName.replace(/\.exe$/i, ".ini");
if (! (new ActiveXObject("Scripting.FileSystemObject")).FileExists(iniPath)){
if(! (new ActiveXObject("Scripting.FileSystemObject")).FileExists(iniPath)){
var iniName = /\\([^\\]+)\.exe$/.exec(editor.FullName)[1];
var iniName = /\\([^\\]+)\.exe$/.exec(editor.FullName)[1];
iniPath = (new ActiveXObject( "WScript.Shell" )).SpecialFolders("APPDATA") + "\\Mery\\" + iniName + ".ini";
iniPath = (new ActiveXObject("WScript.Shell")).SpecialFolders("APPDATA") + "\\Mery\\" + iniName + ".ini";
}
}
// Mery.ini を読みこむ
// Mery.ini を読みこむ
90行目: 92行目:
adodb.Close();
adodb.Close();


var start = iniText.search(new RegExp( "^\\[" + sectionName.replace(/\W/g, "\\$&") + "\\]$", "m" ));
var start = iniText.search(new RegExp("^\\[" + sectionName.replace(/\W/g, "\\$&") + "\\]$", "m"));
if(start >= 0){
if(start >= 0){
start = start + sectionName.length + 4;
start = start + sectionName.length + 4;
スポンサーリンク