喫茶XRAYトップページ

[▲前のスレッド]

[831] 悪いのは僕のせい!!返信 削除
2006/6/9 (金) 21:34:21 Syake
いや〜まいりました。
TMemoのカーソル位置に文字を挿入しようとし、挿入した文字列の後に
カーソルをずらすなどということをやっておりましたところ。
SelStartは、2Byteは2としてカウントしていると思っておりましたが
プログラミング中にどうも1Byteも2Byte文字も1としてカウントしてい
るらしく動作するので、??と思いつつそのとおりにプログラミングし
たら、見事に成功。
ところが、他のマシン(Win2000、WinXP)では、2Byteは2としてカウント
しているらしく、見事に失敗!

で、私のマシンが変なのか??
う〜む。



[832] Re:悪いのは僕のせい!!返信 削除
2006/6/10 (土) 00:09:36 Mr.XRAY
▼ Syakeさん
タイトル読んでびっくり!!
日本チームが何かトラブルっているのかと思いました (^_^;)

> ところが、他のマシン(Win2000、WinXP)では、2Byteは2としてカウント
> しているらしく、見事に失敗!

えっ、う〜む。Win98だと2Byteも1となるということですか。
挿入した文字列の後ろへカーソルって他に方法がないのかな〜。
現在のカーソルの前に挿入するとか... (いい加減モードです!)
あっ、ゴメン、SelStartの話ですね。



[833] Re2:悪いのは僕のせい!!返信 削除
2006/6/10 (土) 00:46:11 Mr.XRAY
▼ Syakeさん

> えっ、う〜む。Win98だと2Byteも1となるということですか。
更にゴメン、同じWin2000またはWinXPなのにSyakeさんのマシンでは
そうなるということですね。


[834] Re3:悪いのは僕のせい!!返信 削除
2006/6/10 (土) 00:50:27 Mr.XRAY
▼ Syakeさん
 
> 更にゴメン、同じWin2000またはWinXPなのにSyakeさんのマシンでは
> そうなるということですね。

え〜と、それXPMan使用しています?
なんか、XPMan使用すると狂うようです。確か。これから調べてみます。


[835] Re4:悪いのは僕のせい!!返信 削除
2006/6/10 (土) 08:59:18 Syake
▼ Mr.XRAYさん

> > 更にゴメン、同じWin2000またはWinXPなのにSyakeさんのマシンでは
> > そうなるということですね。
> え〜と、それXPMan使用しています?
> なんか、XPMan使用すると狂うようです。確か。これから調べてみます。


ありがとうございます。
XPManつかってます。
ずばり当たってました。
都合上、DLLとして組んでますが、呼び出し方が違ってます。
@XP非対応(VB)アプリケーション→DLL呼び出し
AXP非対応(VB)アプリケーション→Exe起動(UsesにXPMan)→DLL呼び出し

私のマシンでも@の時には他のマシンと同様の状態になりました。
つまるところ、XPManの関係のようです。
さて、どうしたもんでしょう。




[836] Re5:悪いのはMSのせい!!返信 削除
2006/6/10 (土) 09:23:23 Syake
いろいろありがとうございます。m(__)m

取り敢えず

function XXXXXX.XpManChk: TXPMan;
var
   ObjMem :TMemo;
   RetLen,RetSel :Integer;
begin
   ObjMem := TMemo.Create(Application);
   try
      ObjMem.Parent := Self;
      ObjMem.Text := 'あ';
      ObjMem.SelStart := Length(ObjMem.Text);
      RetLen := Length(ObjMem.Text);
      RetSel := ObjMem.SelStart;
      if RetSel <> RetLen then
      begin
         Result := ManOn;
      end else begin
         Result := ManNon;
      end;
   finally
      ObjMem.Free;
   end;
end;

とうい、強引ともいえる判定方法で切り抜けますか?
学が無いので、この程度しか思いつきませんでした(;_;)


[837] Re6:悪いのはMSのせい!!返信 削除
2006/6/10 (土) 12:07:17 Mr.XRAY
▼ Syakeさん

11時46分。まだ眠いッス。
私も実験してみました。確かにXPMan使用すると、1,2バイト文字とは無関係
に、常に1文字として数えますね。

> とうい、強引ともいえる判定方法で切り抜けますか?
しかないでしょうね。このXPManって、Unicodeを前提なんでしょうか。

カーソル位置を、マウスで指定(設定)して、
   Memo1.SelText := '挿入文字列';
とするとSelStartで取得する文字数とは無関係にカーソル位置に挿入され
るので、SelTextを調べると何かわかるかも...。


[840] Re7:悪いのはMSのせい!!返信 削除
2006/6/12 (月) 08:50:46 Syake
▼ Mr.XRAYさん
> 私も実験してみました。確かにXPMan使用すると、1,2バイト文字とは無関係
> に、常に1文字として数えますね。

お手数おかけしました。

> しかないでしょうね。このXPManって、Unicodeを前提なんでしょうか。
のようです。
只今、過渡期ってやつですね。
思わぬ落とし穴が待っています。
一番厄介なパターンです。



[▼次のスレッド]
INCM/CMT
Cyclamen v3.82