ab.com コミュニティ
https://www.activebasic.com/forum/

Mid$関数で
https://www.activebasic.com/forum/viewtopic.php?t=3315
ページ 11

作成者:  ゲスト [ 2012年9月29日(土) 09:31 ]
記事の件名:  Mid$関数で

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に入力した内容の指定文字列が表示されると思ったのですが、何故でしょうか?

作成者:  水波形 [ 2012年9月30日(日) 00:20 ]
記事の件名: 

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

コード:
Data$ = ZeroString(8)
GetDlgItemText(hMainWnd, EditBox1, VarPtr(Data$), 8)
buffer$ =Mid$(Data$, 1, 2)
SetWindowText(GetDlgItem(hMainWnd, EditBox2), buffer$) 
と、するとうまくいきそうな気がします。
実験していないので定かではありませんが……

作成者:  イグトランス [ 2012年9月30日(日) 02:10 ]
記事の件名: 

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

このほか、エディットボックスの内容の取得の一番最後の淡幻星さんの発言のところにある拙作GetWindowTextStr関数でも可能です。
コード:
GetWindowTextStr(GetDlgItem(hMainWnd, EditBox2), Data$)
buffer$ =Mid$(Data$, 1, 2)
SetWindowText(GetDlgItem(hMainWnd, EditBox2), buffer$) 
GetWindowText関数はABのStringのことなど露知らずです。なので、水波形さん案のZeroStringにせよGetWindowTextStrにせよ、こちら側でStringとのすりあわせを行ってあげないといけないということなのです。

作成者:  ゲスト [ 2012年9月30日(日) 08:49 ]
記事の件名: 

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

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

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/