ボタンのクリック
RADツールでコマンドボタンを貼り付けたらそれを右クリックし、「イベントコード」、「ボタンがクリックされた時」を選択しコードを書きます。
ボタンをクリックした時に、エディットボックスに文字列を設定したい場合、SetWindowText()関数かSetDlgItemText()関数を使って文字列を設定します。
エディットボックスに設定されている文字列に、新たな文字を追加する場合は、SendMessage()関数を使います。
ボタンをクリックした時に、エディットボックスに文字列を設定したい場合、SetWindowText()関数かSetDlgItemText()関数を使って文字列を設定します。
コード: 全て選択
SetWindowText(GetDlgItem(hMainWnd,EditBox1),"Bonjour")
SetDlgItemText(hMainWnd,EditBox1,"Bonjour")
エディットボックスに設定されている文字列に、新たな文字を追加する場合は、SendMessage()関数を使います。
コード: 全て選択
Dim hEdit As HWND
hEdit=GetDlgItem(hMainWnd,EditBox1)
SendMessage(hEdit,EM_SETSEL,GetWindowTextLength(hEdit),-1)
SendMessage(hEdit,EM_REPLACESEL,TRUE,"ADD")
SetFocus(hEdit)
Re: すいません
> この場合の改行は、どういうコードですか?
AB付属のヘルプ、Chr$()関数とEx表記による文字列を読めば分かると思います。
> また、このときにボタンを何回クリックしても、同じところにできてしまうんす。
SetWindowText()関数は、文字列を設定するので既に入力されている文字列は無くなります。
どういったことがしたいのかよく分からないので解決するか分かりませんが、文字列を設定するのではなく、追加したら良いのではないのでしょうか。
エディットボックスの内容が消されることなく、最後尾に文字列が追加されます。
AB付属のヘルプ、Chr$()関数とEx表記による文字列を読めば分かると思います。
> また、このときにボタンを何回クリックしても、同じところにできてしまうんす。
SetWindowText()関数は、文字列を設定するので既に入力されている文字列は無くなります。
どういったことがしたいのかよく分からないので解決するか分かりませんが、文字列を設定するのではなく、追加したら良いのではないのでしょうか。
エディットボックスの内容が消されることなく、最後尾に文字列が追加されます。
コード: 全て選択
Sub AddEditBoxText(ByVal hDlg As HWND,ByVal nIDDlgItem As Long,ByVal lpString As BytePtr)
Dim hEdit As HWND
hEdit=GetDlgItem(hDlg,nIDDlgItem)
SendMessage(hEdit,EM_SETSEL,GetWindowTextLength(hEdit),-1)
SendMessage(hEdit,EM_REPLACESEL,TRUE,lpString As LPARAM)
SetFocus(hEdit)
End Sub
Sub MainWnd_CommandButton1_Click()
AddEditBoxText(hMainWnd,EditBox1,"追加する文字")
End Sub
Re: それでも
> Chr$()関数見てても、よく仕組みがわからないんで、。。。Exも・・・
Chr$()関数は指定された文字コードを文字に変換してくれる関数です。
Ex表記は、普通文字列はダブルコーテーション(")で囲みますが、Ex"文字列"とすることによってエスケープシーケンスで文字列を表現することができます。
メッセージボックスに「A(改行)B(改行)C」と表示させる。
ということで改行は、Chr$()関数の場合、Chr$(13)+Chr$(10)、Ex文字列は、Ex"\r\n"、と表現します。
お勉強頑張ってください(^_^)
Chr$()関数は指定された文字コードを文字に変換してくれる関数です。
Ex表記は、普通文字列はダブルコーテーション(")で囲みますが、Ex"文字列"とすることによってエスケープシーケンスで文字列を表現することができます。
メッセージボックスに「A(改行)B(改行)C」と表示させる。
コード: 全て選択
MessageBox(hMainWnd,Chr$(65)+Chr$(13)+Chr$(10)+Chr$(66)+Chr$(13)+Chr$(10)+Chr$(67),"Chr$()関数",MB_OK)
MessageBox(hMainWnd,Ex"A\r\nB\r\nC","Ex表記による文字列",MB_OK)
お勉強頑張ってください(^_^)
それはそうと
いま、APMのファイルを作っています。
APMは、ゲームのファイルなんですが、ためしにコードを書いてみます。
というものなんですが、これをプログラムに利用したいと思います。
それは、このコード内にある、UnitSet(数字)を変数で扱おうと思っています。
しかし、まだ、変数を利用したことがありません。
変数を、入力するのはどうやればいいですか?
ちなみに、このゲームの名前はTWB(The Wing Bluff)といいます。
このゲームに関しては、http://primulasoft.cool.ne.jp/
を見てください。
APMは、ゲームのファイルなんですが、ためしにコードを書いてみます。
コード: 全て選択
[Mission]
Name=~爆撃被害~日本を守れ!!
Author=雷電
Rank=8
PlaneSelectable=0
SubSelectable=0
DfPlane=MEIRYU
DfSub=Bomb
Sky=4
Map=海陸砂陸海
Reward=10000
Capt_Win=相手の爆撃機を落とす
Capt_Lose=友軍爆撃機の損傷
Message=相手はソ連軍。日本に対してかなりの大群を送ってきました。#それを阻止するために頑張ってください。
Type=3
Atlas_Sort=2
Atlas_X=155
Atlas_Y=55
WinAtLimit=0
Limit_Time=0
Limit_Comment=
ReversePrior=0
BGM=0
[PlayerUnit]
Block=2
Sector=1
Factor=InitOnBase
[Camp1]
WinCond=NoEnemyTank,NoEnemyHead,NoEnemyBomber
Escape=HTF,NoL,NoR
Wave1_comment=第一部隊出動!敵発見しだい打ち落とせ。
Wave2_comment=増援部隊を送る。直ちに敵陣地を攻撃せよ。
Wave2_time=40
Wave3_comment=第三部隊、特攻隊出撃せよ。
Wave3_time=90
WinComment=よし、直ちに空母に帰還せよ。
SplashEnemyPer=90
SplashTargetPer=90
EscFriendTargetPer=0
[Camp2]
WinCond=NoEnemyTank,NoEnemyHead,NoEnemyBomber
Escape=HTF,NoL,NoR
Wave2_comment=敵の第二部隊を確認。直ちに出撃隊を送る。
Wave2_time=30
Wave3_comment=敵の第三部隊確認。特攻隊を出撃させる。
Wave3_time=80
WinComment=空母がなくなった。相手の軍に特攻せよ。
SplashEnemyPer=90
SplashTargetPer=90
EscFriendTargetPer=0
[UnitSet1]
SetName=TaskForce1
Num=1
camp=1
wave=1
Level=5
Block=1
Sector=1
Factor=GreatGeneral
[UnitSet2]
SetName=TaskForce1
Num=1
camp=2
wave=1
Level=5
Block=5
Sector=12
Factor=GreatGeneral
[UnitSet3]
SetName=ArmyBase2
Num=1
camp=1
wave=1
Level=5
Block=2
Sector=9
Factor=
[UnitSet4]
SetName=ArmyBase2
Num=1
camp=2
wave=1
Level=5
Block=4
Sector=3
Factor=
[UnitSet5]
UnitName=SINDEN
SetName=
Num=7
camp=1
wave=1
Level=5
Block=1
Sector=1
Factor=InitOnBase,TouchDown
[UnitSet6]
UnitName=LA7
SetName=
Num=10
camp=2
wave=1
Level=5
Block=5
Sector=12
Factor=InitOnBase,TouchDown
[UnitSet7]
UnitName=RENZAN
SetName=
Num=7
camp=1
wave=1
Level=5
Block=1
Sector=1
Factor=InitOnBase,TouchDown
[UnitSet8]
UnitName=Tu2
SetName=
Num=10
camp=2
wave=1
Level=5
Block=5
Sector=12
Factor=InitOnBase,TouchDown
[UnitSet9]
UnitName=LRC
SetName=
Num=10
camp=1
wave=1
Level=5
Block=2
Sector=9
Factor=
[UnitSet10]
UnitName=LRC
SetName=
Num=10
camp=2
wave=1
Level=5
Block=4
Sector=3
Factor=
[UnitSet11]
UnitName=JPinf
SetName=
Num=30
camp=1
wave=1
Level=5
Block=2
Sector=11
Factor=GreatGeneral
[UnitSet12]
UnitName=SVinf
SetName=
Num=30
camp=2
wave=1
Level=5
Block=4
Sector=1
Factor=GreatGeneral
[UnitSet13]
UnitName=HONI
SetName=
Num=7
camp=1
wave=1
Level=5
Block=2
Sector=10
Factor=GreatGeneral
[UnitSet14]
UnitName=BT7
SetName=
Num=7
camp=2
wave=1
Level=5
Block=4
Sector=2
Factor=GreatGeneral
[UnitSet15]
UnitName=KI102
SetName=
Num=7
camp=1
wave=2
Level=5
Block=0
Sector=10
Factor=TouchDown
[UnitSet16]
UnitName=IL10
SetName=
Num=7
camp=2
wave=2
Level=5
Block=6
Sector=2
Factor=TouchDown
[UnitSet17]
UnitName=SIDEN21
SetName=
Num=7
camp=1
wave=3
Level=5
Block=0
Sector=10
Factor=TouchDown
[UnitSet18]
UnitName=JINPU
SetName=
Num=7
camp=1
wave=3
Level=5
Block=0
Sector=10
Factor=TouchDown
[UnitSet19]
UnitName=YAK9U
SetName=
Num=10
camp=2
wave=3
Level=5
Block=6
Sector=2
Factor=TouchDown
[UnitSet20]
UnitName=YAK9B
SetName=
Num=7
camp=2
wave=3
Level=5
Block=6
Sector=2
Factor=TouchDown
[UnitSet23]
UnitName=RENZAN
SetName=
Num=5
camp=1
wave=3
Level=5
Block=0
Sector=10
Factor=TouchDown
[UnitSet24]
UnitName=IL4
SetName=
Num=5
camp=2
wave=3
Level=5
Block=6
Sector=2
Factor=TouchDown
[UnitSet25]
UnitName=TroopShip
SetName=
Num=2
camp=1
wave=1
Level=5
Block=1
Sector=1
BorneBlock=3
BorneSector=5
Factor=GreatGeneral
[UnitSet26]
UnitName=TroopShip
SetName=
Num=2
camp=2
wave=1
Level=5
Block=5
Sector=12
BorneBlock=3
BorneSector=5
Factor=GreatGeneral
[UnitSet27]
UnitName=JPinf
SetName=
Num=7
camp=1
wave=1
Level=5
Block=3
Sector=5
Factor=Embark,GreatGeneral
[UnitSet28]
UnitName=SVinf
SetName=
Num=7
camp=2
wave=1
Level=5
Block=3
Sector=5
Factor=Embark,GreatGeneral
それは、このコード内にある、UnitSet(数字)を変数で扱おうと思っています。
しかし、まだ、変数を利用したことがありません。
変数を、入力するのはどうやればいいですか?
ちなみに、このゲームの名前はTWB(The Wing Bluff)といいます。
このゲームに関しては、http://primulasoft.cool.ne.jp/
を見てください。
Re: それはそうと
> というものなんですが、これをプログラムに利用したいと思います。
えーと、そのプログラムを出力するプログラムを、作っているんでしょうか?
やりたいことを分かりやすく書いてくれるとレスが返しやすいです。
> それは、このコード内にある、UnitSet(数字)を変数で扱おうと思っています。
>
> しかし、まだ、変数を利用したことがありません。
> 変数を、入力するのはどうやればいいですか?
AB付属のヘルプで「変数」と検索してみましたか?
変数はDimステートメントで宣言してあげた識別子が使用可能になります。
[UnitSet1]
[UnitSet2]
.
.
.
[UnitSet28]
となります。
長いコードを書く場合、「hide」「code」「/code」「/hide」、とすると良い感じになります。
えーと、そのプログラムを出力するプログラムを、作っているんでしょうか?
やりたいことを分かりやすく書いてくれるとレスが返しやすいです。
> それは、このコード内にある、UnitSet(数字)を変数で扱おうと思っています。
>
> しかし、まだ、変数を利用したことがありません。
> 変数を、入力するのはどうやればいいですか?
AB付属のヘルプで「変数」と検索してみましたか?
変数はDimステートメントで宣言してあげた識別子が使用可能になります。
[ここをクリックすると内容が表示されます]
"UnitSet(数字)"という文字列をエディットボックスに出力したいのなら、下のようになります。
コード: 全て選択
Dim i As Long'符号付き32ビット整数型
Dim str As String'可変長文字列型
Dim pStr As BytePtr'Byte型データを示す符号無し32ビット整数型
i=10000
str="簡単に文字列を弄くれる"
pStr=calloc(256)
lstrcpy(pStr,"初心者には面倒かも")
Debug
free(pStr)
[ここをクリックすると内容が表示されます]
実行してみると、コード: 全て選択
Dim hEdit As HWND
Dim cnt As Long
Dim bStr[256] As Byte
hEdit=GetDlgItem(hMainWnd,EditBox1)
'エディットボックスの描写を無効
LockWindowUpdate(hEdit)
'エディットボックスの初期化
SetWindowText(hEdit,NULL)
For cnt=1 To 28
lstrcpy(bStr,"[UnitSet"+Str$(cnt)+Ex"]\r\n")
'自作関数
AddEditBoxText(hMainWnd,EditBox1,bStr)
Next
'エディットボックスの描写を有効
LockWindowUpdate(NULL)
[UnitSet1]
[UnitSet2]
.
.
.
[UnitSet28]
となります。
長いコードを書く場合、「hide」「code」「/code」「/hide」、とすると良い感じになります。
追記
追記します。
初期化と入っているので、消えるのは当たり前ですが、、、
参考にしているプログラム
http://www.geocities.jp/niikata4747/twb/AppendMaster/
です。
[ここをクリックすると内容が表示されます]
こうすると、前に記入していた文字が消えてしまうんです。コード: 全て選択
Dim hEdit As HWND
Dim cnt As Long
Dim bStr[256] As Byte
hEdit=GetDlgItem(hMainWnd,EditBox1)
'エディットボックスの描写を無効
LockWindowUpdate(hEdit)
'エディットボックスの初期化
SetWindowText(hEdit,NULL)
For cnt=1 To 28
lstrcpy(bStr,"[UnitSet"+Str$(cnt)+Ex"]\r\n")
'自作関数
AddEditBoxText(hMainWnd,EditBox1,bStr)
Next
'エディットボックスの描写を有効
LockWindowUpdate(NULL)
初期化と入っているので、消えるのは当たり前ですが、、、
参考にしているプログラム
http://www.geocities.jp/niikata4747/twb/AppendMaster/
です。
Re: ...
> 入力してやってみた。
> やばい。バグで、危なくなった、。。。
どんなバグか気になりますね...。
> となるのはいいんだけど、1回目押すと
> となって、2回目に押すと
> となっていくような、コードはありませんか?
押す度に数値が増えていくようにしたいのであれば、下のようになります。
> これは、あるプログラムを参考に作っているものです。
自分も昔、こういった入力支援プログラムを作ったことがあります。
> やばい。バグで、危なくなった、。。。
どんなバグか気になりますね...。
> となるのはいいんだけど、1回目押すと
> となって、2回目に押すと
> となっていくような、コードはありませんか?
押す度に数値が増えていくようにしたいのであれば、下のようになります。
[ここをクリックすると内容が表示されます]
エディットボックスが初期化されて困るなら初期化の部分を飛ばして下さい。コード: 全て選択
'グローバル領域に整数型変数cntを宣言
Dim cnt=0 As Long
Sub MainWnd_CommandButton1_Click()
Dim bStr[256] As Byte
cnt=cnt+1
'28を超えたら1に戻す
If 28<cnt Then
cnt=1
End If
lstrcpy(bStr,"[UnitSet"+Str$(cnt)+Ex"]\r\n")
AddEditBoxText(hMainWnd,EditBox2,bStr)
End Sub
> これは、あるプログラムを参考に作っているものです。
自分も昔、こういった入力支援プログラムを作ったことがあります。