[スレッド全体]

2014/4/16 (水) 23:33:38 Viu89r9VV  
Mozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0
[2152] 不具合:「開きません」のキャンセルが存在しません
環境(Environment): Windows 7, サクラエディタ 2.1.1.1

前回ファイルを「UTF-8」で開き、今回「SJIS」で開こうとした場合、以下の警告メッセージが表示されます。

----------------------------------------
文字コード情報
パス\ファイル名.txt

このファイルを文字コード SJIS で開こうとしていますが、前回は別の文字コード UTF-8 で開かれています。前回と同じ文字コードを使いますか?

・[はい(Y)] =UTF-8
・[いいえ(N)]=SJIS
・[キャンセル]=開きません


[はい] [いいえ]
----------------------------------------

しかし、「キャンセル」のボタンが存在しないため、キャンセルできません。画面右上に [×] マークは存在しますが、グレー アウトしていて押せません。これは不具合ということで よろしいのでしょうか。報告しておきます。

2014/4/19 (土) 23:27:52 novice  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
[2153] Re:不具合:「開きません」のキャンセルが存在しません
▼ Viu89r9VVさん
> しかし、「キャンセル」のボタンが存在しないため、キャンセルできません。画面右上に [×] マークは存在しますが、グレー アウトしていて押せません。これは不具合ということで よろしいのでしょうか。報告しておきます。

patchを登録しました。
http://sourceforge.net/p/sakura-editor/patchunicode/800/

2014/4/20 (日) 17:05:00 神楽  
Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0
[2154] Re2:不具合:「開きません」のキャンセルが存在しません
▼ noviceさん
> ▼ Viu89r9VVさん
> > しかし、「キャンセル」のボタンが存在しないため、キャンセルできません。画面右上に [×] マークは存在しますが、グレー アウトしていて押せません。これは不具合ということで よろしいのでしょうか。報告しておきます。
>
> patchを登録しました。
> http://sourceforge.net/p/sakura-editor/patchunicode/800/

ANSI版(1.6.6.0)にはキャンセルの説明があり、キャンセルボタンもあります。
ANSI版の仕様に合わせた方が良いのではないでしょうか?

2014/4/20 (日) 17:50:43 novice  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
[2155] Re3:不具合:「開きません」のキャンセルが存在しません
▼ 神楽さん
Unicode版は、r1587でキャンセルが削除されたようです。
http://sourceforge.net/p/sakura-editor/code/1587/

PatchUnicodeは未登録で、掲示板にログが残ってましたが、キャンセルの削除については特に記載が見つかりませんでした。
http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=unicode&v=950

2014/5/8 (木) 06:21:50 神楽  
Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0
[2165] Re4:不具合:「開きません」のキャンセルが存在しません
▼ noviceさん
2.1.1.1も同じ挙動だったのですが、2.1.1.2で文字コード情報の
メッセージダイアログがアクティブの時に、
Ctrl+Cでダイアログタイトルバー通りの「文字コード情報」とコピーされず、
「(保存されていません)」と「(印刷プレビューでのみ使用できます)」が
Ctrl+Cする度に、交互に繰り返されます。
1.6.6.0ではタイトルバー通りにコピーされますので、できれば対策をお願い致します。

2014/5/11 (日) 16:44:12 novice  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
[2172] Re5:不具合:「開きません」のキャンセルが存在しません
▼ 神楽さん
> 「(保存されていません)」と「(印刷プレビューでのみ使用できます)」が
> Ctrl+Cする度に、交互に繰り返されます。

patchを登録しました。
http://sourceforge.net/p/sakura-editor/patchunicode/816/

2014/5/13 (火) 18:25:12 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2177] Re6:不具合:「開きません」のキャンセルが存在しません
[trunk2_VMessageBoxF_fix_c.patch]
19行目: STR_BACKUP_ERR_DELETE は STR_BACKUP_ERR_MOVE の誤りではないか?
45行目: pszMsg は LS マクロで取得したポインタなのにローカルコピーしていない
→ ここまでチェックしたところで中断(他にパッチ不足とかの問題もあるかもです)。

この様子だと、労力も過多ですし将来のミス防止も難しいかな?と思いました。
次に、費用対効果が高そうな代替案パッチを貼っておきます。
採用の可否についてはお任せします。

【代替案の説明】
[MessageBoxF.h]
マクロ MessageBox は MessageBoxA/W ではなく Wrap_MessageBox に
展開するように変更

[MessageBox.cpp]
Wrap_MessageBox() は タイトル/メッセージをローカルバッファに
コピーし、明示リンクで MessageBoxA/W を呼び出す。

MessageBoxF.h は StdAfx.h に入っているので、すべての .cpp で
MessageBox が Wrap_MessageBox に展開されます。
メッセージボックス表示がすべて Wrap_MessageBox 経由になるため、
これでビルドした sakura.exe を Dependency Walker で確認すると、
USER32.dll の MessageBoxA/W への暗黙リンクは無くなっているはずです。

2014/5/13 (火) 18:26:18 LR4  
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
[2178] 代替案パッチ
【代替案パッチ】
Index: sakura_core/util/MessageBoxF.cpp
===================================================================
--- sakura_core/util/MessageBoxF.cpp	(リビジョン 3706)
+++ sakura_core/util/MessageBoxF.cpp	(作業コピー)
@@ -40,6 +40,25 @@
 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
 //                 メッセージボックス:実装                    //
 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
+int Wrap_MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
+{
+	static int (WINAPI *RealMessageBox)(HWND, LPCTSTR, LPCTSTR, UINT);
+	static HMODULE hMod = NULL;
+	if( hMod == NULL ){	// 初期化されていない場合は初期化する
+		hMod = GetModuleHandle(_T("USER32"));
+#ifdef _UNICODE
+		*(FARPROC *)&RealMessageBox = GetProcAddress(hMod, "MessageBoxW");
+#else
+		*(FARPROC *)&RealMessageBox = GetProcAddress(hMod, "MessageBoxA");
+#endif
+	}
+
+	// lpText, lpCaption をローカルバッファにコピーして MessageBox API を呼び出す
+	// ※ 使い回しのバッファが使用されていてそれが裏で書き換えられた場合でも
+	//    メッセージボックス上の Ctrl+C が文字化けしないように
+	return RealMessageBox(hWnd, std::tstring(lpText).c_str(), std::tstring(lpCaption).c_str(), uType);
+}
+
 HWND GetMessageBoxOwner(HWND hwndOwner)
 {
 	if(hwndOwner==NULL && g_pcEditWnd){
Index: sakura_core/util/MessageBoxF.h
===================================================================
--- sakura_core/util/MessageBoxF.h	(リビジョン 3706)
+++ sakura_core/util/MessageBoxF.h	(作業コピー)
@@ -37,6 +37,9 @@
 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
 
 //2007.10.02 kobake メッセージボックスの使用はデバッグ時に限らないので、「Debug〜」という名前を廃止
+#undef MessageBox
+#define MessageBox Wrap_MessageBox
+int Wrap_MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
 
 //テキスト整形機能付きMessageBox
 int VMessageBoxF( HWND hwndOwner, UINT uType, LPCTSTR lpCaption, LPCTSTR lpText, va_list& v );

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]