VBの上書きモードで全角文字を入力するには?


あき  2002-10-31 15:19:30  No: 76293  IP: [192.*.*.*]

こんにちは。  どうしてもできなくて困っています。よろしくお願い致します。
VBの上書きモードなのですが、SelstartとSelLengthで青く反転させて、
文字を入れまして、Enterで上書きはできるのですが、入力文字が
青反転の右側にきてしまいます。半角数字で上書きを行った場合は、
既に入力されている文字の上からの入力になるのですが、ひらがなや漢字での
上書きはこのようにはできないのでしょうか??

編集 削除
DotL  2002-10-31 21:04:13  No: 76294  IP: [192.*.*.*]

下のコードをkeydownイベントに追加すると一様できます。


Dim Slen&, Elen&
start = Text1.SelStart
tlen = Text1.SelLength
Text1.Text = Left$(Text1.Text, start) + Mid$(Text1.Text, start + tlen + 1)
Text1.SelStart = start

編集 削除
DotL  2002-10-31 21:06:19  No: 76295  IP: [192.*.*.*]

すみません。一応が一様になってしまいました…

編集 削除
DotL  2002-10-31 21:09:07  No: 76296  IP: [192.*.*.*]

間違えました。

Dim Slen&, Elen&
start = Text1.SelStart
Elen = Text1.SelLength
Text1.Text = Left$(Text1.Text, start) + Mid$(Text1.Text, start + Elen + 1)
Text1.SelStart = start

編集 削除
DotL (追記)  2002-10-31 21:37:46  No: 76297  IP: [192.*.*.*]

Text1になっていますが他のオブジェクトや名前の時は
Text1の部分をそのオブジェクト名に変えてください。
※Dim  SlenはDim  Startでした。

Dim Start&, Elen& 
Start = Text1.SelStart
Elen = Text1.SelLength
Text1.Text = Left$(Text1.Text, Start) + Mid$(Text1.Text, Start + Elen + 1)
Text1.SelStart = Start

編集 削除
あき  2002-11-01 11:02:16  No: 76298  IP: [192.*.*.*]

DotL様
ありがとうございますvv  ソッコーで試して見ましたところ、
カーソルが移ると文字が消えて上書きできましたvv

・・・のですが、カーソルが移ると文字が消えて処理(文字を入力)を
しない場合でも、文字が消えたままになってしまうんですー(T_T)
上書きモードの様に青く反転させまして、
全角文字の既に入力されている文字の1文字目より
上書きと  (エクセルで範囲を青く範囲指定をしまして、全角文字で
上書きをするのと同じようなイメージです。)
いうのはやはり無理なのでしょうか・・・?
お手数ですが、ご存知でしたらぜひぜひよろしくお願い致します。m(_  _)m

編集 削除
ドンペイ  2002-11-01 15:56:17  No: 76299  IP: [192.*.*.*]

こんにちは。

GotFocusイベント時に下のコードをいれて出来ないでしょうか?

オブジェクト名.SelStart = 0
オブジェクト名.SelLength = Len(オブジェクト名.Text)

編集 削除
あき  2002-11-01 16:22:39  No: 76300  IP: [192.*.*.*]

ドンペイ様、ありがとうございます。
SelStartとSelLengthは指定しているのですが、全角文字が上書き
できないんです(TOT)

エクセルでの範囲指定後の上書きの状態のようにしたいのですが、
今はこんな感じなんです。  ↓

●「ああ」とテキストに入力します。
  ここで、再度「ああ」にフォーカスがきた時には、SelStratとSelLengthを指定しているので、
  文字が青く反転しまして、上書き状態になります。

●全角で「いい」と上書きをしようと文字を入力しますと、"ああいい"  と表示されまして、
  (「ああ」は青反転のまま、「いい」は下線が漢字変換前なので、点線状態です。)
  エンターキーを押下しますと、"ああ"は削除され、「いい」のみになります。

●これが、半角英数字の場合は、半角で「AA」と上書きしようと文字を入力しますと、
  すぐに"AA"と表示されまして、(「ああ」の青反転の部分は"A"と入力した瞬間に消えまして、
  "A"ひとつになります。カーソルは"A"の左側に表示されます。)
  一文字目を入力すると"ああ"はなくなり、上書きになります。

この半角英数字での上書き状態("い"と入力しまして、下に点線のついている状態)で
「ああ」が消えて、上書きをできる状態にしたいんです。


たくさん書いたんですけど、伝わりにくくてごめんなさい。
本当に困っていますので、ご存知の方いらっしゃいましたら、よろしくお願いいたします。

編集 削除
かげうら  2002-11-01 17:06:58  No: 76301  IP: [192.*.*.*]

意味が違うかもしれませんが
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If Text1.SelLength <> 0 Then
    Text1.Text = ""
End If
End Sub

では?どうでしょう。
問題はありますけど。

編集 削除
ドンペイ  2002-11-01 17:11:29  No: 76302  IP: [192.*.*.*]

なんとなく状況が読めてきました。


>・・・のですが、カーソルが移ると文字が消えて処理(文字を入力)を
>しない場合でも、文字が消えたままになってしまうんですー(T_T)

この部分が出来れば解決するのでしょうか?

1つの方法として
変更する前のデータと変更後のデータを比較してみて
変更があるようならDotL様のプログラムが流れるようにする。

編集 削除
DotL  2002-11-01 18:36:26  No: 76303  IP: [192.*.*.*]

では次の様にしてみてはどうでしょうか。

宣言プロシージャで

Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long

を追加し、KeyDownイベントで

Dim Start&, Elen&
Dim Key(255) As Byte
GetKeyboardState Key(0)
If (Key(37) And 128) Or (Key(38) And 128) Or (Key(39) And 128) _
Or (Key(40) And 128) Then
Exit Sub
End If
Start = Text1.SelStart
Elen = Text1.SelLength
Text1.Text = Left$(Text1.Text, Start) + Mid$(Text1.Text, Start + Elen + 1)
Text1.SelStart = Start

を追加してみてください。
もし他のキー入力を無効にしたいなら
If文のところで  
...Or (Key("無効にしたいキーコード") And 128)
を追加していけばよいと思います。

編集 削除
DotL  2002-11-01 23:29:17  No: 76304  IP: [192.*.*.*]

変換などを機能させるなら
(必要ですね)

Dim Start&, Elen&
Dim Key(255) As Byte
If (Key(37) And 128) Or (Key(38) And 128) Or (Key(39) And 128) Or (Key(40) And 128) Or (Key(28) And 128) Or (Key(29) And 128) Then
Exit Sub
End If
Start = Text1.SelStart
Elen = Text1.SelLength
Text1.Text = Left$(Text1.Text, Start) + Mid$(Text1.Text, Start + Elen + 1)
Text1.SelStart = Start

でいくと思います。

編集 削除
DotL  2002-11-02 00:09:49  No: 76305  IP: [192.*.*.*]

通常はこれで大丈夫だと思います。(KeyDownイベント)

Dim Start&, Elen&
Dim Key(255) As Byte
GetKeyboardState Key(0)
If (Key(37) And 128) Or (Key(38) And 128) Or (Key(39) And 128) Or (Key(40) And 128) Or (Key(28) And 128) Or (Key(29) And 128) Or (Key(16) And 128) Or (Key(17) And 128) Or (Key(18) And 128) Or (Key(91) And 128) Then
Exit Sub
End If
Start = Text1.SelStart
Elen = Text1.SelLength
Text1.Text = Left$(Text1.Text, Start) + Mid$(Text1.Text, Start + Elen + 1)
Text1.SelStart = Start

編集 削除
DotL  2002-11-02 19:48:05  No: 76306  IP: [192.*.*.*]

全角にしたでけでも消えてしまうので、KeyDownのところを
次のようにしてみて下さい。

Dim Start&, Elen&, I As Integer, FG As Byte
Dim Key(255) As Byte
FG = 0
GetKeyboardState Key(0)
For I = 48 To 56
If Key(I) And 128 Then FG = FG Or 128
Next
For I = 65 To 90
If Key(I) And 128 Then FG = FG Or 128
Next
For I = 186 To 192
If Key(I) And 128 Then FG = FG Or 128
Next
For I = 219 To 222
If Key(I) And 128 Then FG = FG Or 128
Next
If Key(226) And 128 Then FG = FG Or 128
If (Key(16) And 128) And FG Then GoTo Jump
If ((Key(242) And 128) And FG) - 128 Then Exit Sub
Jump:
Start = Text1.SelStart
Elen = Text1.SelLength
Text1.Text = Left$(Text1.Text, Start) + Mid$(Text1.Text, Start + Elen + 1)
Text1.SelStart = Start

編集 削除
DotL  2002-11-02 19:50:15  No: 76307  IP: [192.*.*.*]

全角にしたでけ⇒全角にしただけ

編集 削除
あき  2002-11-05 14:34:39  No: 76308  IP: [192.*.*.*]

かげうら様
ありがとうございますvv
青反転のままで、ひらがなを入力できました!!
でも、ShiftキーやCtrlキーでも反応してしまうので、
なんとか改良したらすっごく役にたちますv
本当にありがとうございましたvv

ドンペイ様
ありがとうございますvv
DotL様のご意見をドンペイ様のご意見を参考に
考えまして、プログラムしております。
今度こそうまくいきそうな気がしますvv
本当にありがとうございましたvv

DotL様v
本当に何度も何度もお手数おかけしてしまいまして
申し訳ありませんm(_ _)m  ありがとうございます。
最終的にDotL様の最後のご意見のソースだと、
Shiftキーなどの反応して欲しくないキーには反応せず、
全角に変更しても無反応、ひらがなを入力した時のみに
青反転が消えまして、文字を入力することができましたvv
本当に本当にありがとうございますvv

DotL様のソースを上から順番にやってみますと、
これではまだキーが反応してしまうな、
ここでこれを入れるから、反応しなくなるのかなと
とてもとても勉強になりました。まだVBをほとんど
知らない私なので、もっと勉強しなくてはっっと思いました(>_<)
長期に渡っての質問のご解答本当にありがとうございます。

ずうずうしいのですが、あともうひとつ質問があるのですが、(T0T)
ご存知でしたらよろしくお願い致しますm(_ _)m

DotL様に教えていただきました、青反転をさせたままのひらがな入力なのですが、
VBスプレッドシート上での使用をしてみたいのですが、VBのテキストではとてもうまくいったのですが、VBスプレッドシート上のKeyDownイベントでは反応をせず、うまくいきませんでした。(T0T)

VBとVBスプレッドシート上での違いは何かあるのでしょうか??
どうすれば、VBスプレッド上で動くのでしょうか??

2日間ほどずっと調べていたのですが、全然わかりませんでした(W_W)

ご存知の方がいらっしゃいましたら、よろしくお願いいたします。

編集 削除