Mid$関数で

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
ゲスト

Mid$関数で

#1 投稿記事 by ゲスト »

Dim Data$ As String
Dim buffer$ As String
と変数を定義して、MainWnd_EditBox1_Change()イベントで、
(1)

コード: 全て選択

	GetDlgItemText(hMainWnd, EditBox1, Data$, 8)
	SetWindowText(GetDlgItem(hMainWnd, EditBox2), Data$)
とすると、EditBox1に入力した文字列がEditBox2にそのまま正常に表示されます。
又、
(2)

コード: 全て選択

	Data$ ="1234"
	buffer$ =Mid$(Data$, 1, 2)
	SetWindowText(GetDlgItem(hMainWnd, EditBox2), buffer$)
とやっても、EditBox2には文字列"12"が正常に表示されます。

ところが、
(3)

コード: 全て選択

	GetDlgItemText(hMainWnd, EditBox1, Data$, 8)
	buffer$ =Mid$(Data$, 1, 2)
	SetWindowText(GetDlgItem(hMainWnd, EditBox2), buffer$)
とすると、EditBox1に入力してもEditBox2には何も表示されません。

環境は、Windows XP SP3、ActiveBasic ver.4.24.00で起きています。
Windows Meでも同様なのでOSは関係ないと思います。
(3)は(1)と(2)の組み合わせで、EditBox2にはEditBox1に入力した内容の指定文字列が表示されると思ったのですが、何故でしょうか?
水波形
記事: 106
登録日時: 2009年3月29日(日) 15:45
連絡する:

#2 投稿記事 by 水波形 »

ポインタの概念が私はまだ、完璧ではないのでそのあたりはカットして……

コード: 全て選択

Data$ = ZeroString(8)
GetDlgItemText(hMainWnd, EditBox1, VarPtr(Data$), 8)
buffer$ =Mid$(Data$, 1, 2)
SetWindowText(GetDlgItem(hMainWnd, EditBox2), buffer$) 
と、するとうまくいきそうな気がします。
実験していないので定かではありませんが……
↓個人的ソフト置き場
http://www.software.jpn.org/
↓萌えゲー製作とかしていたい
http://www.holygate.jpn.org/
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

水波形さんの方法でうまくいきます。

このほか、エディットボックスの内容の取得の一番最後の淡幻星さんの発言のところにある拙作GetWindowTextStr関数でも可能です。

コード: 全て選択

GetWindowTextStr(GetDlgItem(hMainWnd, EditBox2), Data$)
buffer$ =Mid$(Data$, 1, 2)
SetWindowText(GetDlgItem(hMainWnd, EditBox2), buffer$) 
GetWindowText関数はABのStringのことなど露知らずです。なので、水波形さん案のZeroStringにせよGetWindowTextStrにせよ、こちら側でStringとのすりあわせを行ってあげないといけないということなのです。
ゲスト

#4 投稿記事 by ゲスト »

水波形さん、イグトランスさん ヒント 大変ありがとうございます。

水波形さんの方法はMicrosoftへのエラ-報告画面が出たので止めました。
イグトランスさんのGetWindowTextStr関数とCode(EditBox1に修正して)でEditBox2に指定どおりの文字列が表示されました。
返信する