ab.com コミュニティ https://www.activebasic.com/forum/ |
|
ボタンのクリック https://www.activebasic.com/forum/viewtopic.php?t=635 |
ページ 1 / 2 |
作成者: | 雷電 [ 2006年1月11日(水) 17:08 ] |
記事の件名: | ボタンのクリック |
ボタンをクリックすると、エディットボックスに指定した文字を入力するのが難しくて、悩んでます。 どうやったらうまくできるか教えてください。 |
作成者: | 7 [ 2006年1月11日(水) 20:31 ] |
記事の件名: | |
RADツールでコマンドボタンを貼り付けたらそれを右クリックし、「イベントコード」、「ボタンがクリックされた時」を選択しコードを書きます。 ボタンをクリックした時に、エディットボックスに文字列を設定したい場合、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) |
作成者: | 雷電 [ 2006年1月12日(木) 20:39 ] |
記事の件名: | ちょこっと |
ついでに、場合の改行は、どういうコードですか? 教えてください。 |
作成者: | 雷電 [ 2006年1月12日(木) 20:47 ] |
記事の件名: | すいません |
書き直します。↑の文。 この場合の改行は、どういうコードですか? 教えてください。 また、このときにボタンを何回クリックしても、同じところにできてしまうんす。どういう意味かというと、ボタンを1回目クリックしたら、ちゃんとエディットボックスに出力されるのですが、2回目に、Enterキーをおして、クリックすると、もとの出力された場所に戻ってしまうんです。 どうしてでしょうか、↑のこと、教えていただけたら幸いです。[/hide] |
作成者: | 7 [ 2006年1月12日(木) 21:42 ] |
記事の件名: | Re: すいません |
> この場合の改行は、どういうコードですか? 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 |
作成者: | 雷電 [ 2006年1月13日(金) 21:33 ] |
記事の件名: | それでも |
すいません。 ほんと、AB初心者なんでわかりません・・・・とほほ・・・・ すいませんけど、教えてください。 Chr$()関数見てても、よく仕組みがわからないんで、。。。Exも・・・ お手間かけますが、よろしくお願いします。・・・ それと、もっと、AB勉強します・・・。<(_ _)> |
作成者: | 7 [ 2006年1月13日(金) 22:56 ] |
記事の件名: | Re: それでも |
> Chr$()関数見てても、よく仕組みがわからないんで、。。。Exも・・・ 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)ということで改行は、Chr$()関数の場合、Chr$(13)+Chr$(10)、Ex文字列は、Ex"\r\n"、と表現します。 お勉強頑張ってください(^_^) |
作成者: | 雷電 [ 2006年1月14日(土) 15:19 ] |
記事の件名: | Thanks |
ありがとうございました。 ちゃんといい具合に作動しました。 また、AB勉強して、もっといいプログラムを作っていきます。 応援よろしく(^^♪ by RAIDEN ↑雷電って言うのは、戦闘機の名前です。 |
作成者: | 雷電 [ 2006年1月14日(土) 18:25 ] |
記事の件名: | それはそうと |
いま、APMのファイルを作っています。 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/ を見てください。 |
作成者: | 7 [ 2006年1月14日(土) 20:01 ] |
記事の件名: | Re: それはそうと |
> というものなんですが、これをプログラムに利用したいと思います。 えーと、そのプログラムを出力するプログラムを、作っているんでしょうか? やりたいことを分かりやすく書いてくれるとレスが返しやすいです。 > それは、このコード内にある、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」、とすると良い感じになります。 |
作成者: | 雷電 [ 2006年1月14日(土) 20:21 ] |
記事の件名: | ... |
入力してやってみた。 やばい。バグで、危なくなった、。。。 [UnitSet1] [UnitSet2] . . . [UnitSet28] となるのはいいんだけど、1回目押すと [UnitSet1] . . . . となって、2回目に押すと [UnitSet2] . . . . . となっていくような、コードはありませんか? あれば幸いです。 これは、あるプログラムを参考に作っているものです。 |
作成者: | 雷電 [ 2006年1月14日(土) 20:25 ] |
記事の件名: | 追記 |
追記します。 [ここをクリックすると内容が表示されます]
こうすると、前に記入していた文字が消えてしまうんです。コード: 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/ です。 |
作成者: | 7 [ 2006年1月14日(土) 20:42 ] |
記事の件名: | Re: ... |
> 入力してやってみた。 > やばい。バグで、危なくなった、。。。 どんなバグか気になりますね...。 > となるのはいいんだけど、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 > これは、あるプログラムを参考に作っているものです。 自分も昔、こういった入力支援プログラムを作ったことがあります。 |
作成者: | 雷電 [ 2006年1月14日(土) 21:40 ] |
記事の件名: | できました |
プログラム完成です AppendMIssionEditor Ver1.00 完成 やっと。 1.20になったら、ツリービューも入れよかなーーー。 そのときもよろしくお願いします。 というより今から教えてもらいたいんですけどね。 |
作成者: | 7 [ 2006年1月14日(土) 22:04 ] |
記事の件名: | Re: できました |
> 1.20になったら、ツリービューも入れよかなーーー。 > というより今から教えてもらいたいんですけどね。 構いませんが、ツリービューに関してはusher@@さんのサイトが参考になります。 ここの、「ActiveBasicFan」「Control Windows」「11.ツリービューの使い方」を読んだ上で分からないことが有ったら質問するのが賢いと思います。 当たり前ですが、その時は新しくトピックを作って下さいね。 |
ページ 1 / 2 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |