またまたすみません。先ほど聞くのわすれていたのですが
テキストボックスに文字入力が
Atext=”12345” & vbCrLf
Code =SendMessage(ChildWindowHandle,WM_SETTEXT,0,ByVal Atext)
このvbCrLfで、改行だと思うのですが、
例えば、このテキストボックスにフォーカスを置きキーボードのエンターを押す
→”123”入力→キーボードのエンターを押す
このよう動きをさせる場合どのようにすればよいか教えてください。
現在は、”123”入力まではできました。それと、vbCrLf←これを使うと
123・・・となってしまいます。
よろしくお願いします。
MultilineがTrueになってないだけでは?
編集 削除ん〜やってみたのですが、できませんでした。
ただ、テキストボックスを1度クリックして(多分フォーカスを与えるってことだと思うのですが..)から、キーボードのエンターを押すという流れの場合は
どのようにすればよいか、よろしくお願いします。
AutoSizeを確認して見てください。(テキストが一行ではなく複数行入力できるようになっていますか?)
Sayさんの言ったようにMultilineの確認
WordWrapの確認
私の場合これしか思いつきませんでした。
AutoSize Multiline はプロパティによって変更だと思うのですが、
exeソフトの時も、AutoSize Multilineをtrueにどのようにするんですか?
(テキストが一行ではなく複数行入力できるようになっていますか?)
表示画面としては リストボックスがありテキストボックスの2つあり
テキスト入力するとリストボックスに表示される(exeソフトの中)ものなのですが
手順としては、テキストボックスに数字入力しリストボックス(20項目)に
キーボードのエンターにより入力(1項目)。それの繰り返しでエンターで次の項目。数字入力、エンター.....この繰り返しなのですが、それをボタン1回押すだけで、すべて入力できるようにしたいんですが、よいアドバイスあればよろしくお願いします。
>exeソフトの時も、AutoSize Multilineをtrueにどのようにするんですか?
TextBoxにAutoSizeプロパティはありません。
また、
単一行TextBoxと複数行TextBoxは本来別物で、
デザイン時のMultilineの設定に従って実行開始時にすげかえているだけですから、
実行中にMultilineを変更することはできません。
(これはVBの世界の話でなく、OSの作りの話になりますから、APIを使っても変更不可です。)
というわけで既存のExeに対し、単一行TextBox→複数行TextBox変換はできませんから、
コンパイル前に編集画面でMultilineを変更しておいてください。
自作でないExeファイルの場合は、ソース入手不可能ならあきらめてください。
参考までに、
GetWindowLongでGWL_STYLEを指定して取得できる値(スタイル)の中に
ES_MULTILINE(複数行テキスト)がありますが、
これを単一行TextBoxに対しSetWindowLongしても
複数行テキストにはなりません。
この定数はCreateWindowでTextBoxを作成するときに
複数行指定するために存在します。
理由は、前述したように、単一行TextBoxと複数行TextBoxは
本来別物ですから、Create時に選択することはできても、
すでに作られたTextBoxに対しては、スタイルを変更しようとしてもできないからです。
ちなみに、複数行TextBoxをCreateWindowするサンプルはここ。
http://www.vbapihelpline.de/const/constk.php4?Func=ES_MULTILINE&Letter=Textboxen
ドイツ語だけど、ま、いいか・・・。(^_^;
(日本語がよければ、この掲示板の過去ログ探せば、つい最近書いた記憶が・・・。)
>テキスト入力するとリストボックスに表示される(exeソフトの中)ものなのですが
ListBoxにデータを流し込むだけなら、LB_ADDSTRINGをSendMessageするとか。
(ボタンのClickイベントの中でAddItem以外の処理をやっていたら無意味ですが)
> キーボードのエンターにより入力(1項目)。それの繰り返しでエンターで次の項目。
ということなので、もしかしてEnterキーで次のテキストに移動したい?
SendMessage(hWnd, WM_NEXTDLGCTL, 0, 0)
とかはどうでしょうか。
>>エンターを押したい
>改行したいという事ですよね。
>エンターを押す(キーボードをエミュレートする)プログラムと、
>改行する(改行コードを送る)プログラムは違います。
>以下、後者を想定してアドバイスします。
前回の質問で、後者を想定してアドバイスしましたが、
前者、つまり改行させたいのでは無く、エンターを押したかった訳ですね。
そういう事であれば、
AppActivate
SetFocus(ChildWindowHandle)
Keybd_event(VK_RETURN,0,0,0)
Keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0)
多分こんな流れでよいかと。。。
SetFocusを使った事が無いので、その辺が微妙ですが、
一応、対象アプリの対象TextBoxにフォーカスを置いて、
エンターキーをエミュレートできるハズです。
すみません回答ではないです
Sayさんが
> TextBoxにAutoSizeプロパティはありません。
と言われていますが
VB.NETのテキストボックスには存在します
VB6.0のテキストボックスには確かに存在しませんが・・・
hiroさんの環境は過去の質問などから
VB6.0であることがわかるので
間違ってはいませんが
誤解を与えてしまいそうな気がしたので
勝手ながら補足させていただきました
気分を害されたとしたら申し訳ありません
皆さんありがとうございます。こんな初心者ごとの質問に親切に回答すごくうれしいです。(自分の環境はVB6.0です>補足の説明ありがとうございます=karaさん)
また、自分の質問が悪くいろんなニアンスで、いろいろ考えさせてしまいすみませんでした。
SendMessage(hWnd, WM_NEXTDLGCTL, 0, 0)
この方法も試したのですがだめでした。おそらくsayさんの言っている通り、
>コンパイル前に編集画面でMultilineを変更しておいてください。
>自作でないExeファイルの場合は、ソース入手不可能ならあきらめてください。
exeファイルが自作ではないので、現段階では不可能なのかもしれません。(キ▼д▼;)トホホ・・
ただ、ひろあきさんの
>AppActivate
>SetFocus(ChildWindowHandle)
>Keybd_event(VK_RETURN,0,0,0)
>Keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0)
は、どのように書けばよいのでしょうか?(すみません、何から何まで聞いてしまい...一応自分でも調べて試してはいるのですがなかなかわかりません....)
一つの提案なのですが(まだ、やり方が分からず試みてないのですが..)
まず、テキストボックスにフォーカスをおき、そこに入力フォーカスのあるウィンドウにデータを送る方法(sendkeys)これを使うとどーなんでしょう??
(Enter {ENTER} または ~ )
すみませんがよろしくお願いします。
皆さんありがとうございます。こんな初心者ごとの質問に親切に回答すごくうれしいです。(自分の環境はVB6.0です>補足の説明ありがとうございます=karaさん)
また、自分の質問が悪くいろんなニアンスで、いろいろ考えさせてしまいすみませんでした。
SendMessage(hWnd, WM_NEXTDLGCTL, 0, 0)
この方法も試したのですがだめでした。おそらくsayさんの言っている通り、
>コンパイル前に編集画面でMultilineを変更しておいてください。
>自作でないExeファイルの場合は、ソース入手不可能ならあきらめてください。
exeファイルが自作ではないので、現段階では不可能なのかもしれません。(キ▼д▼;)トホホ・・
ただ、ひろあきさんの
>AppActivate
>SetFocus(ChildWindowHandle)
>Keybd_event(VK_RETURN,0,0,0)
>Keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0)
は、どのように書けばよいのでしょうか?(すみません、何から何まで聞いてしまい...一応自分でも調べて試してはいるのですがなかなかわかりません....)
一つの提案なのですが(まだ、やり方が分からず試みてないのですが..)
まず、テキストボックスにフォーカスをおき、そこに入力フォーカスのあるウィンドウにデータを送る方法(sendkeys)これを使うとどーなんでしょう??
(Enter {ENTER} または ~ )
すみませんがよろしくお願いします。
>一つの提案
私の提案と同じです。
ただひとつ違うのは、SendKeysの代わりにkeybd_eventを使用している点です。
SendKeysはいろいろと問題があるので。。。
<SendKeysの問題点>
http://support.microsoft.com/default.aspx?scid=kb;ja;179987
http://support.microsoft.com/default.aspx?scid=kb;ja;JP408402
http://www.gj.il24.net/~nakasima/vb/trap/
AppActivate(MSDNヘルプ参照)
対象アプリをアクティブにする
SetFocus(API)
ハンドルを渡されたウィンドウをキーボードフォーカスを持つウィンドウにする
keybd_event(API)
アクティブなウィンドウにキーボード状態(仮想)を送る
KEYEVENTF_KEYUP = &H2
VK_RETURN = &HD
を定義すれば、そのまま使えますが。。。
エンターキーを押す
Keybd_event(VK_RETURN,0,0,0)
エンターキーを離す
Keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0)
( ^-^)ノ(* ^-^)ノこんばんわぁ♪
またまた質問なのですが、まず、アクティブにするには
appactivate(string1 , string2 )
string1 :タイトルバー文字列
string2 :クラス名
でよいのでしょうか?
で、フォーカスがいまいち分からないのですが、どのように組めばよいかお願いします。
そのまま SetFocus(ChildWindowHandle) でいいのでしょうか?
いろいろ聞いてしまい真にすみませんが、よろしくお願いします