2008/12/6 (土) 13:44:26 syat  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
[5493] コンボボックスのリスト選択−編集−エンターの不具合
コンボボックスのリストを選んで、末尾を数文字削ってエンターを押すと、削った文字が復活します。
1.6.3.0限定です。(それ以前では文字列が消える)
パッチを作りました。
Patches:2394131

コンボボックスのメッセージでCB_GETEDITSELはバイト単位の位置を返すのに、CB_SETEDITSELは文字単位の位置を指定するという変な動きをするんですが、私だけでしょうか?
環境依存だったらどうしよう(; °_°)

2008/12/6 (土) 23:48:57 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5495] Re:コンボボックスのリスト選択−編集−エンターの不具合
▼ syatさん
> コンボボックスのメッセージでCB_GETEDITSELはバイト単位の位置を返すのに、CB_SETEDITSELは文字単位の位置を指定するという変な動きをするんですが、私だけでしょうか?
> 環境依存だったらどうしよう(; °_°)


私の所ではCB_SETEDITSELの方もバイト単位でないと正常動作しませんでした。

開発環境:BCC5.5.1およびVC2005 Express Edition
テスト環境:Win2k SP4およびWinXP SP2

2008/12/7 (日) 02:07:43 syat  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
[5496] Re2:コンボボックスのリスト選択−編集−エンターの不具合
▼ なすこじさん
> 私の所ではCB_SETEDITSELの方もバイト単位でないと正常動作しませんでした。
>
> 開発環境:BCC5.5.1およびVC2005 Express Edition
> テスト環境:Win2k SP4およびWinXP SP2

ありがとうございます。
私はVC2008ExpressEditionで、WinXP SP3です。

現象としては、2バイト文字をカーソル位置より前に含むときに問題になります。
例えば、
 あいA|BCDE  縦棒はカーソル
の状態でCB_GETEDITSELを実行すると 5 を取得します。(バイト単位)
その結果を使ってCB_SETEDITSELを実行すると、以下のようになります。
 あいABC|DE
カーソルがずれてしまいます。

UNICODE版では基本的に1文字=2バイトなので問題になりませんでしたが、ANSIビルドだと同様の問題が出ました。
サロゲートペア文字はどちらも2でカウントするらしく大丈夫そうでした。

明日にでもBCCで試してみます。SP3のバグとかいうオチは〜ないよね。

2008/12/7 (日) 22:16:53 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)
[5497] Re3:コンボボックスのリスト選択−編集−エンターの不具合
▼ syatさん

Patches:2394131(combo_list_hide_A2.patch)を適用したプログラムを、
Vista SP1で動かしてみました。

>  あいA|BCDE  縦棒はカーソル

の状態でEnterを押すと、
 あ|いABCDE
のようにカーソル位置がずれてしまいます。

ワークで使っているローカル変数は以下の値になってました。
Aeroスタイル有効のとき:nSelStartByte=3, nSelStartChar=1
Aeroスタイル無効のとき:nSelStartByte=5, nSelStartChar=3

どうやら、
Aeroスタイル有効のときはCB_SETEDITSEL/CB_SETEDITSELとも文字数単位
Aeroスタイル無効のときはCB_SETEDITSEL/CB_SETEDITSELともバイト数単位
ということみたいです。

> 明日にでもBCCで試してみます。SP3のバグとかいうオチは〜ないよね。

CB_GETEDITSELなどの動作結果は、コンパイラではなくOSやIEに付属のコモンコントロール(comctl32.dll)のバージョン依存になると思います。

2008/12/7 (日) 22:59:46 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)
[5498] Re4:コンボボックスのリスト選択−編集−エンターの不具合
パッチ後のexeをXP SP3でも動かしてみました。

結果はVista SP1と同じで、
 あいA|BCDE
から
 あ|いABCDE
になってしまいます。

ローカル変数もVista SP1と同様で、
Lunaスタイル有効のとき:nSelStartByte=3, nSelStartChar=1
Lunaスタイル無効のとき:nSelStartByte=5, nSelStartChar=3
でした。

ひょっとするとsyatさんの環境で使用されている何らかの常駐ソフトが怪しいかもです。
#自分のところの確認環境はVirtual PC上の仮想PC(XP SP3)で、凝ったカスタマイズはほとんどしてません。

2008/12/7 (日) 23:48:07 syat  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
[5499] 解決です!
まず、BCCでコンパイルしてみたところ、皆さんの環境と同じような結果になりました。
また、VC2008EEで、SDKを6.0A、6.1でビルドしたところどちらも私が主張する動きを再現しました。
不思議ですね〜

という報告を書き込もうとしたところで、ryojiさんの書き込みを見ました。
▼ ryojiさん
> ひょっとするとsyatさんの環境で使用されている何らかの常駐ソフトが怪しいかもです。
> #自分のところの確認環境はVirtual PC上の仮想PC(XP SP3)で、凝ったカスタマイズはほとんどしてません。

ryojiさん、正解です!
ZTopという常駐ソフトを止めて試したところ問題が発生しなくなりました。どうもお騒がせしました。

もしこの問題が簡単に解決できそうにないものだったらあまり深入りしたくないので、選択状態を復元する機能をやめようかと考えていました。リストを閉じたら文字列を全選択にするというのも不自然じゃないかな、と。ZTop便利だし。

2008/12/13 (土) 16:34:25 syat  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
[5503] Re:コンボボックスのリスト選択−編集−エンターの不具合
リストボックスを閉じたら文字列を全選択するだけにしてみました。
Patches:2394131

2008/12/23 (火) 21:07:01 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5506] Re2:コンボボックスのリスト選択−編集−エンターの不具合
▼ syatさん
ソースコードおよび動作を確認しました。
コミットOKと思います。

2008/12/26 (金) 21:06:33 syat  
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
[5513] Re3:コンボボックスのリスト選択−編集−エンターの不具合
▼ なすこじさん
> ソースコードおよび動作を確認しました。
> コミットOKと思います。

ありがとうございます。
リビジョン1496でコミットしました。

INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]