ab.com コミュニティ https://www.activebasic.com/forum/ |
|
ActiveBasicとPureBasicの第一回交流戦 https://www.activebasic.com/forum/viewtopic.php?t=1507 |
ページ 1 / 1 |
作成者: | Oryaaaaa [ 2006年9月01日(金) 02:17 ] |
記事の件名: | ActiveBasicとPureBasicの第一回交流戦 |
Vistaになると操作感が変わるらしいですね。登場する前に ひとつ世界規模のプログラミング交流戦をやりませんか? 引用:
課題
質問や提案はこちらへ - 第一回プログラミングコンテスト(AB&PB)通常マウスの1番目と2番目のボタンでクリックする [WIN]スタート これを3番目と4番目のボタンでクリックする [オリジナル]スタート このスタートメニューを作る ルール ・オープンソース ・外部ライブラリ使用可能 ・ActiveBasicかPureBasicでメインソースを書くこと ・チーム製作可 呼びかけ ・ActiveBasicフォーラム ・PureBasicフォーラム(Japan,English) ・PureBasic日本ユーザー会(Mixi) 期限 ・2006/11/31 ・ソースと実行EXEなど一式、説明文 ・中途半端になった場合は イメージをPDFなどにして提出 賞品(最高をUSD100ドル前後) http://forum.oryaaaaa.com/viewtopic.php?p=421 世界へ呼びかけます。開発期間が最高3ヶ月あるので おそらく海外から何人か参加します。 http://www.purebasic.fr/english/viewtopic.php?t=23477 |
作成者: | Oryaaaaa [ 2006年9月01日(金) 03:51 ] |
記事の件名: | |
なんにもヒントが無いと難しいと思うので、手順 AB苦手なんです コード: ;GetAsyncKeyState ;http://msdn.microsoft.com/library/ja/jp ... frame=true Repeat GetCursorPos_(mouse.POINT) Debug mouse\x Debug mouse\y Delay(500) If GetAsyncKeyState_(5) > 0 Debug "CLICK" EndIf ForEverスタートにマウスを移動して、3番目4番目のマウスをクリックする のを検知する方法ですが、GetCurosrPosのAPIを使って位置を取得 それから GetAsncKeyStateのAPIを使って、どのボタンが押された か調べます。通常、仮想キーコード表をみると3番4番は無いです。 しかしMSDNでGetAsncKeyStateのAPIを調べると、それは物理的 な位置を示しているという説明の通り、4は真ん中、5は戻る、6は 進むというリザーブされている番号になります。これを検知したとき オリジナルメニューが表示されるようにします。 お詫び (英語板) 交流戦を直訳で Exchange としてしまい、英語環境で使えないという 書き込みが多数ありました。実際は Frendly Matchの間違いです。 辞書で"親善試合"で調べるべきでした。申し訳ありません。 |
作成者: | konisi [ 2006年9月01日(金) 04:04 ] |
記事の件名: | |
ABに直に書き直すとこんな具合ですか?<<サンプルコード コード: 'GetAsyncKeyState 'http://msdn.microsoft.com/library/ja/jp ... ystate.asp? #console'ABとPBではDebugコマンドの動作が違うので代用するためのもの Dim frame As BOOL Dim mouse As POINTAPI frame=true Do GetCursorPos(mouse) Print mouse.x Print mouse.y 'Delay(500) 'すみません、こいつの定義、わかりません。 If GetAsyncKeyState(5) > 0 then 'ここらへんに自前スタートメニューの描画関数とか置くんだろうと思います。 Print "CLICK" End If Loop |
作成者: | Oryaaaaa [ 2006年9月01日(金) 04:22 ] |
記事の件名: | |
そそ、そんな感じです。誤訳ミスしたとはいえ、ABやりたい人 世界に多いと実感しました。たった数時間だったのに・・・ Delay(500) 500ミリ秒停止すると言う意味です。 |
作成者: | konisi [ 2006年9月01日(金) 18:26 ] |
記事の件名: | |
すると コード: 'http://msdn.microsoft.com/library/ja/jp ... ystate.asp? #console'ABとPBではDebugコマンドの動作が違うので代用するためのもの Dim frame As BOOL Dim mouse As POINTAPI frame=true Do GetCursorPos(mouse) Print mouse.x Print mouse.y Sleep(500) If GetAsyncKeyState(5) > 0 then Print "CLICK" End If Loopこんな具合か。 適当に作ってみる。 [ここをクリックすると内容が表示されます]
コード: Dim mouse As POINTAPI Dim Desk As RECT Dim hMainWnd As HWND Dim Start As RECT Dim hFont_MainWnd As HFONT Dim h3DFaceBrush As HBRUSH Dim _RadSys_wcl As WNDCLASSEX Dim WndThread As Long GetWindowRect(GetDesktopWindow(),Desk) Start.left=0 Start.top=Desk.bottom-600 Start.bottom=Desk.bottom-31-Start.top Start.right=400 If Start.top<0 then Start.top=0 If Start.right>Desk.right then Start.right=Desk.right hFont_MainWnd=CreateFont(-12,0,0,0,400,0,0,0,128,3,2,1,32,"fixedSys") h3DFaceBrush=CreateSolidBrush(&HFFFFFF) FillMemory(VarPtr(_RadSys_wcl),Len(_RadSys_wcl),0) _RadSys_wcl.cbSize=Len(_RadSys_wcl) _RadSys_wcl.hInstance=GetModuleHandle(0) _RadSys_wcl.style=CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS _RadSys_wcl.hCursor=LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW)) _RadSys_wcl.hIcon=LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION)) _RadSys_wcl.hIconSm=LoadIcon(NULL,MAKEINTRESOURCE(IDI_WINLOGO)) _RadSys_wcl.lpszClassName="NORMAL0" _RadSys_wcl.lpfnWndProc=AddressOf(MainWndProc) _RadSys_wcl.hbrBackground=h3DFaceBrush RegisterClassEx(_RadSys_wcl) CreateWindowEx(WS_EX_TOOLWINDOW,"NORMAL0","test",&H10cf0000,Start.left,Start.top,Start.right,Start.bottom,0,0,GetModuleHandle(0),0) ShowWindow(hMainWnd,SW_HIDE) Dim A As DWord,B As DWordPtr B=VarPtr(A) WndThread=0 CreateThread(ByVal 0,0,AddressOf(SeeMainWnd),0,0,B) CloseHandle(B) Dim msgMain As MSG, iResult As Long Do iResult=GetMessage(msgMain,0,0,0) If iResult=0 or iResult=-1 Then Exit Do TranslateMessage(msgMain) DispatchMessage(msgMain) Loop End Function DefaultCallProc(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT DefaultCallProc=DefWindowProc(hWnd,message,wParam,lParam) End Function Function EventCall_MainWnd(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT Select Case message Case WM_DESTROY MainWnd_Destroy() Case WM_CREATE hMainWnd=hWnd Case WM_MOVE ShowWindow(hMainWnd,SW_SHOWNOACTIVATE) Case WM_CLOSE Dim cancel=0 As Integer If cancel=0 Then DestroyWindow(hWnd) Case WM_MOVE MainWnd_Move(LOWORD(lParam),HIWORD(lParam)) Case Else EventCall_MainWnd=DefWindowProc(hWnd,message,wParam,lParam) Exit Function End Select EventCall_MainWnd=0 End Function Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam) End Function Sub MainWnd_Destroy() DeleteObject(hFont_MainWnd) DeleteObject(h3DFaceBrush) PostQuitMessage(0) End Sub Sub SeeMainWnd() *A Do If GetAsyncKeyState(5)>0 then GetCursorPos(mouse) If mouse.x<=111 and mouse.y>=Desk.bottom-30 then Exit Do End If Loop ShowWindow(hMainWnd,SW_SHOW) Do GetCursorPos(mouse) If mouse.y<Start.bottom then Exit Do Sleep(20) Loop Do If GetAsyncKeyState(1) or GetAsyncKeyState(2) or GetAsyncKeyState(4) or GetAsyncKeyState(5) or GetAsyncKeyState(6) And &H8000 then GetCursorPos(mouse) If mouse.x>Start.right then Exit Do If mouse.y<Start.top then Exit Do If mouse.x<Start.left then Exit Do If mouse.y>Start.bottom then Exit Do End If Sleep(20) Loop ShowWindow(hMainWnd,SW_HIDE) goto *A End Sub Sub MainWnd_Move(x As Integer, y As Integer) MoveWindow(hMainWnd,Start.left,Start.top,Start.right,Start.bottom,TRUE) End Sub |
作成者: | OverTaker [ 2006年9月01日(金) 18:59 ] |
記事の件名: | |
面白そうな企画ですね。私もできたら参加してみたいと思います。 要はオリジナルのスタートメニュー作成ということですよね? ところで他言語のWindowsでActiveBasicで生成したexeファイルは動くのでしょうか? |
作成者: | OverTaker [ 2006年9月04日(月) 22:34 ] |
記事の件名: | |
自己レスです。英語のWindows XPで動作確認してみたところ、設定を変更すれば使えました。後から気がつきましたが、http://www.purebasic.fr/english/viewtopic.php?t=23477に起動方法が書かれてましたね。 ちなみにVer5 CP1だと、この設定を適用するとエディタの方が起動しなくなります。 もっと英語を話せれば、ABの英語版に協力できるんですがね~。私の今の英語力では無理なので残念です。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |