EditBoxの内容を取得する方法

このQ&Aのポイント
  • Active Basicを使って、EditBoxの内容を取得する方法について解説します。
  • 初心者向けの電卓プログラム作成において、EditBoxから数字として文字列を取得する方法について指示します。
  • 取得した文字列を数字として扱えるように変換する方法を詳しく説明します。
回答を見る
  • ベストアンサー

EditBoxの内容を取得する方法

Active Basicを使ってプログラムを作成しています。 まだまだはじめたばかりの初心者なので、電卓プログラムを作ってみようと決めて、作り始めました。 しかし、EditBoxから文字列を数字として取得する部分がどうしても出来ません。 Dim Buffer As BytePtr Dim Length As Long Length = GetWindowTextLength(hEditBox) Buffer = calloc(Length+1) GetWindowText(hEditBox,Buffer,Length+1) MessageBox(hEditBox,Buffer,NULL,MB_OK) free(Buffer) こういったコードを指定してみました。 文字列としては取得できますが、数字としての取得が出来ず、 取得した後、足したり引いたりすると、文字化けが生じます。 EditBox内の数字をそのまま変数にコピーする方法を御願いします。 分かりにくくてすみません・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

数値として取得するなら Val関数で数値に変換すればいいでしょう Dim nData as Integer nData = Val( Buffer ) といった具合でしょう

HOLYGATE
質問者

補足

ご回答、ありがとうございます。 助かりました。 後、 'EditBoxの内容を取得 Dim Buffer As BytePtr Dim Length As Long Length = GetWindowTextLength(GetDlgItem(hMainWnd,EditBox1)) Buffer = calloc(Length+1) GetWindowText(GetDlgItem(hMainWnd,EditBox1),Buffer,Length+1) SaishoKazu=Val(Buffer) Length = GetWindowTextLength(GetDlgItem(hMainWnd,EditBox3)) Buffer = calloc(Length+1) GetWindowText(GetDlgItem(hMainWnd,EditBox3),Buffer,Length+1) AtoKazu=Val(Buffer) free(Buffer) '計算処理 If Kigo="+" Then Ans=SaishoKazu+AtoKazu End If SetDlgItemText(hMainWnd,EditBox4,Ans) と記述してみたのですが、上手いことEditBox4に文字が表示されません。 SaishoKazu AtoKazu Ansはそれぞれグローバル変数部分にDouble型で定義しています。 もし分かりましたら、ご教授願いたいのですが

関連するQ&A

  • 数列の計算後

    前に質問したのですが、 文字列を数列として扱う関数は分かりました。 その数字を計算し、変数に格納する所までは出来たのですが、 SetDlgItemText関数で、EditBox4にその変数を表示することが出来ません。 変数内には、きちんと数字が入ってます。 MessageBox関数を用いて変数内をテストで表示させようとすると、 アクセスエラーが出ます。 小数点も扱いたいので、Double型を指定しているのですが・・・ どう対処したら良いか分かりません。 すみませんが、ご教授願います・・・ ↓問題のコードです 'EditBoxの内容を取得 Dim Buffer As BytePtr Dim Length As Long Length = GetWindowTextLength(GetDlgItem(hMainWnd,EditBox1)) Buffer = calloc(Length+1) GetWindowText(GetDlgItem(hMainWnd,EditBox1),Buffer,Length+1) SaishoKazu=Val(Buffer) Length = GetWindowTextLength(GetDlgItem(hMainWnd,EditBox3)) Buffer = calloc(Length+1) GetWindowText(GetDlgItem(hMainWnd,EditBox3),Buffer,Length+1) AtoKazu=Val(Buffer) free(Buffer) '計算処理 If Kigo="+" Then Ans=SaishoKazu+AtoKazu End If SetDlgItemText(hMainWnd,EditBox4,Ans)

  • GetWindowTextでアドレスバーからURLを取得したい

    VB6.0でGetWindowTextを使用し、ブラウザ(IE)のアドレスバー部に 表示されているURLを取得したいと考えています。 ウィンドウハンドルを取得してキャプションを得るということに なると思うのですが、下記の内容においてGetWindowTextLengthの 戻り値がどうしても0になってしまいます。 URLはキャプションとして取得できないのでしょうか。 同じ方法でブラウザのタイトルバーの文字列を取得できることは 確認できています。 おわかりになられる方いらっしゃいましたら、よろしくお願い致します。 Private Sub Command3_Click() Dim hwnd As Long Dim Rc As Long Dim Str As String Dim Bite As Long hwnd = "&H" & アドレスバー部のウィンドウハンドル 'Rc = キャプションのバイト数 Rc = GetWindowTextLength(hwnd) MsgBox Rc 'エラーチェック If Rc = 0 Then Exit Sub 'キャプションのバイト数分のバッファ確保 Str = String(Rc, vbNullChar) 'Bite = キャプションのバイト数 'Str = キャプション文字 Bite = GetWindowText(hwnd, Str, Rc) 'Text1.Text = Str の左端の文字からキャプションのバイト数分 Text1.Text = Left(Str, Bite) End Sub

  • 文字数の取得方法(Active Basic 4)

    タイトルのとおりです。 Active Basicを使ってプログラミングをしているのですが、どうしても文字数の取得方法がわかりません。 命令文「Len()」を使えば文字列の「Byte」はわかりますが、文字数が取得できません。 何か良い方法はありますか? (Active Basic 参考プログラム) Dim Str$ As String Str$ = "abc"    '3文字 計3バイト Print Len(Str$)   '「3」が表示されます Str$ = "やほ~"   '3文字 計6バイト Print Len(Str$)   '「6」が表示されます

  • 変数のタイプ

    Active Basicを使ってプログラムを書いています。 そのときに、変数というものがいまいち理解できなく、感覚で適当にしてしまいます。 たとえば、ファイルをを開くのダイアログボックスでファイルパスを取得するとき、Active Basicの本では、その文字列を格納するのに、 『Byte』を使っていました。 Dim buffer[MAX_PATH-1] As Byte といった風です。 しかし、本には、 バイト数:1 値の範囲:0~255 と書いてあります。 文字列を取得する場合はStringを使うのではないでしょうか? Byteでも、文字列を格納できるのでしょうか? 他にも、LongやDWordやIntegerやSingle、Dobleといったものがありますが、どう使い分けていいのかがわかりません。 すみませんが、分かる方、いらっしゃいましたらご教授願えませんでしょうか?

  • Active Basic EditBoxや文字列内での改行を無視したい

    Active Basicの4.23.00を使ってプログラムを書いています。 今、時間によって文字列を表示していくプログラムを書いています。 例えば、 SetTimerで、0.1秒ごとに時間をカウントしていき、CommandButton1が押されたときにEditBox1の文字列をbufferに読み込んで、それをEditBox2に表示させるといったものです。 それを応用して、読み込んだ文字をファイルに保存し、次回からファイルから読み込んで表示させようと思っているのですが、 OpenとInput命令語で読み書きしているため、改行が入るとちゃんと読み込めません。 bufferに読み込んだときに、改行があれば改行をなくすといったプログラムはどのように書けばいいのでしょうか。 すみませんが、知っている方がいらっしゃいましたら、ご教授ください。

  • COMポート 名前を取得する方法

    VC++2008Express Win32Api COMポートの名前Portnameを調べて Listboxに表示させたいと思います。 以下のようにレジストリからフレンドリーネームとかは 取得できるようになったのですが レジストリのフォルダのVIDとかなんちゃらの部分の値は取得できるのですが その1階層下のParameterの中にあるPortNameを取得したいです。 要するにCOM6などの部分だけが欲しいです。 どなたか、ご教示ください。よろしくお願いします。 BYTE Buffer[256]; DWORD Length = 0; SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)}; HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_COMPORT, NULL, NULL, (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)); int ret = SetupDiEnumDeviceInfo( hDevInfo, 0, &DeviceInfoData ); SetupDiGetDeviceRegistryProperty( hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, NULL, Buffer,sizeof(Buffer),&Length ); MessageBox( NULL,(LPCWSTR)Buffer , 0 , MB_OK ); SetupDiDestroyDeviceInfoList(hDevInfo);

  • ADOによるCSVファイルからのデータ取得

    EXCELVBAを用いて、ADODB.CONNECTIONによりデータを取得しようと思い、ネットで調べた プログラムを使ってみたのですが、途中のレコードまでしか取得できませんでした。 ちなみに、データを取得しようと思っているもとのCSVファイルのサイズは10GB超、レコード数は 800万行程度あります。 これが、数十MB程度のファイルだと問題なかったのですが、レコード数などに制限はあるのでしょうか。 ご教示いただけますと幸いです。 用いたマクロの構文は以下のとおりです。 Dim con As New ADODB.Connection Dim connectionString As String Dim csvFilePath As String Dim rs As ADODB.Recordset Dim colNo As Long Dim fileNumber As Long Dim Buffer As String 'CSVファイルが置かれているフォルダ csvFilePath = E:\ connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & csvFilePath & ";" _ & "Extended Properties=""Text;HDR=NO;FMT=Delimited""" 'コネクションオープン con.Open connectionString 'ここでSQL文によりレコードを取得します。 Set rs = con.Execute("SELECT COUNT(*) FROM XXX.CSV") fileNumber = FreeFile Open OutputFolder & Application.PathSeparator & OutputFile For Output As #fileNumber Buffer = "" ’ヘッダーの出力 For colNo = 0 To rs.Fields.Count - 1 If Buffer <> "" Then Buffer = Buffer & "," End If Buffer = Buffer & rs.Fields(colNo).Name Next Print #fileNumber, Buffer ’データの出力 Do While rs.EOF = False Buffer = "" For colNo = 0 To rs.Fields.Count - 1 If Buffer <> "" Then Buffer = Buffer & "," End If Buffer = Buffer & rs.Fields(colNo).Value Next Print #fileNumber, Buffer '次のレコード rs.MoveNext Loop Close #fileNumber 'クローズ con.Close Set rs = Nothing Set con = Nothing End Sub

  • ソケット通信を使ってimageデータを送受信する

    開発環境:VB2003 プログラム中で作成したimageデータを送受信したいのですが、 以下のコードでmyFileStreamに直接imageを代入して送信しようとすると 「指定されたキャストは有効ではありません」というエラーが出てしまいます。 myFileStream = image Dim buffer(4095) As Byte Dim nbytes As Integer nbytes = myFileStream.Read(buffer, 0, buffer.Length) Do While nbytes > 0 mySocketWriter.Write(buffer, 0, nbytes) nbytes = myFileStream.Read(buffer, 0, buffer.Length) Loop 送受信するにはimageデータを何らかの形式に変換する必要があるのでしょうか? どうかご教授お願い致します。

  • TcpClientとWebbrowser

    TcpClientでストリームからバイトでhttpデータを取得しましたが、 EUC-JPの文字コードのサイトだけがhtml内に本来入るはずのない数値が沢山現れます。 いっそのことWebBrowserコントロールを使ってサイトにアクセスし、DocumentTextを参照した方が手っ取り早いでしょうか? バイトから文字列の変換はわかりましたが、文字列から文字列へ文字コードを変換する方法がわからず困っています。ご存知の方教えていただけますか? 以下、EUC-JPの時に数値が混入するサンプルです。 '--------------------------------------------------------------------------------------------------- ' httpファイルを読み込む '--------------------------------------------------------------------------------------------------- Private Sub GetHttp(ByVal host As String, ByVal port As Integer, ByVal cmd As String, ByRef retcode As Integer, ByRef http_data As String) 'TCP/IP接続を行う Dim client As New TcpClient() Try client.Connect(host, port) 'ストリームを取得する Dim stream As NetworkStream = client.GetStream() Dim param As String = cmd + " HTTP/1.0" + ControlChars.CrLf+ControlChars.CrLf Dim buffer() As Byte = System.Text.Encoding.ASCII.GetBytes(param) stream.Write(buffer, 0, buffer.Length) Dim sb As New System.Text.StringBuilder() Dim len As Integer http_data = "" Dim bytData() As Byte = New Byte(1048576) {} '1MB Dim strCharset As String = "" 'すべて受信する Dim cnt As Integer For cnt = 1 To 1000 '受信 len = stream.Read(bytData, 0, bytData.Length) 'バッファサイズを与えて、受信サイズを得る sb.Append(Encoding.GetEncoding("utf-8").GetString(bytData, 0, len)) 'utf-8 If Not stream.DataAvailable Then '受信キューにデータがある場合はTrue Exit For End If Next '正常に受信できた場合 http_data = sb.ToString retcode = 0 Catch ex As Exception retcode = -1 http_data = "" Finally client.Close() End Try End Sub '----- Dim host As String = "ホスト名" Dim port As Integer = 80 Dim cmd As String = "GET /index.html" '戻り値 Dim retcode As Integer Dim http_data As String = "" Dim charset As String = "" Try GetHttp(host, port, cmd, retcode, http_data) Catch ex As Exception MessageBox.Show(ex.Message, "エラーです。") End Try

  • vb2008で文字列から文字列コードを取得する方法

    サイトHTMLをWebBrowserを使用せずに取得するために、 Dim stream As System.IO.Stream = client.OpenRead(tbItemURL.Text) Dim reader As New System.IO.StreamReader(stream) Dim strHtml = reader.ReadToEnd() reader.Close() stream.Close() のような形で文字列を取得しています。 しかし、この場合Sift-jis等の場合、後の作業(一部データ取得)で文字化けに悩まされます。 http://dobon.net/vb/dotnet/string/detectcode.html 上記サイトで「バイト配列」に格納して判別する方法があります。 そこで、文字列をバイト配列に格納しようとしますが…。 文字列→バイト配列には文字コードが必要となります。 Dim data() As Byte = Encoding.UTF8.GetBytes(text) なんだか鶏と卵のような感じになってしまいます。 文字列から文字コードを判別する方法はないでしょうか? よろしくお願いします。

専門家に質問してみよう