作成者 |
メッセージ |
|
|
名無しさんkonisiさんありがとうございます。
konisiさんのだとタイマーのインターバルが1秒になってますよね。
実行のタイミングによっては1秒程度ズレますが…
難しいところですね。
ありがとうございました。
名無しさんkonisiさんありがとうございます。 konisiさんのだとタイマーのインターバルが1秒になってますよね。 実行のタイミングによっては1秒程度ズレますが… 難しいところですね。 ありがとうございました。
|
|
|
投稿記事 |
Posted: 2010年3月18日(木) 14:16 |
|
|
|
|
|
まず、 コード: lstrcpy(ti,Time$()) は上手く動く保証が無いので コード: Dim time$ As String
time$=Time$()
lstrcpy(ti,StrPtr(time$)) にするべきです。
#実際にはAB4ではStringが指す先は少なくとも8バイト以上の構造体になっていて(よく調べてない)、先頭4バイトが文字列を指すポインタになっているので上手く動いてしまうんですが。
この場合だと、次の方が適切かもしれません。 コード: Dim ti As *Byte
Dim time$ As String
time$=Time$()
ti=StrPtr(time$)
#×ボタンが無くてもAlt+F4で閉じれますよ。
添削してみた。 コード: '-----------------------------------------------------------------------------
'イベントプロシージャ
'-----------------------------------------------------------------------------
'このファイルには、ウィンドウ[MainWnd]に関するイベントをコーディングします。
'ウィンドウハンドル:hMainWnd
'TODO:この位置にグローバルな変数、構造体、定数、関数を定義します。
Const BMPSIZE=32
'-----------------------------------------------------------------------------
'ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND,dwMsg As DWord,wParam As WPARAM,lParam As LPARAM) As DWord
'TODO:この位置にウィンドウメッセージを処理するためのコードを記述します。
'イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
'ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
digiclk_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_LButtonDblClick(flags As Long,x As Integer,y As Integer)
End
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
SetTimer(hMainWnd,0,1000,NULL)
Dim l As Long
l=GetWindowLong(hMainWnd,GWL_STYLE)
SetWindowLong(hMainWnd,GWL_STYLE,l Xor WS_CAPTION)
SetWindowPos(hMainWnd,NULL,0,0,BMPSIZE*8,BMPSIZE,SWP_NOMOVE)
End Sub
Sub MainWnd_Paint(hDC_ As HDC)
Dim hDC As HDC
hDC=GetDC(hMainWnd)
Dim bmp1 As HBITMAP,dc1 As HDC
Dim ti[100] As Byte,i As Long
Dim time$ As String
time$=Time$()
lstrcpy(ti,StrPtr(time$))
bmp1=LoadImage(GetWindowLong(hMainWnd,GWL_HINSTANCE),IDB_BITMAP1,IMAGE_BITMAP,BMPSIZE*11,BMPSIZE,LR_DEFAULTCOLOR)
dc1=CreateCompatibleDC(hDC)
SelectObject(dc1,bmp1)
Do
ti-=Asc("0")
If ti>9 Then ti=10
BitBlt(hDC,i*BMPSIZE,0,BMPSIZE,BMPSIZE,dc1,ti*BMPSIZE,0,SRCCOPY)
i++
Loop While ti
DeleteDC(dc1)
DeleteObject(bmp1)
ReleaseDC(hMainWnd,hDC)
End Sub
Sub MainWnd_Timer(TimerID As DWord)
Select Case TimerID
Case 0
InvalidateRgn(hMainWnd,NULL,TRUE)
End Select
End Sub
引用: もしかして下のスタートバーに出てくる文字をタイトルバーと呼んでいるのでしょうか… "スタートバー"は一般にはタスクバーと呼ぶかと。
AB4とAB5ではString型の扱いがかなり変化したので、その周りで多少コードへの変更が必要かもしれません。
通る筈が無いと思って書いたコードのコンパイルが通った。感動。コード: Dim A$ As String
A$="abc"+"efg"
まず、[code]lstrcpy(ti,Time$())[/code]は上手く動く保証が無いので[code]Dim time$ As String time$=Time$() lstrcpy(ti,StrPtr(time$))[/code]にするべきです。 #実際にはAB4ではStringが指す先は少なくとも8バイト以上の構造体になっていて(よく調べてない)、先頭4バイトが文字列を指すポインタになっているので上手く動いてしまうんですが。 この場合だと、次の方が適切かもしれません。[code]Dim ti As *Byte Dim time$ As String time$=Time$() ti=StrPtr(time$)[/code]
#×ボタンが無くてもAlt+F4で閉じれますよ。
添削してみた。[code]'----------------------------------------------------------------------------- 'イベントプロシージャ '----------------------------------------------------------------------------- 'このファイルには、ウィンドウ[MainWnd]に関するイベントをコーディングします。 'ウィンドウハンドル:hMainWnd
'TODO:この位置にグローバルな変数、構造体、定数、関数を定義します。 Const BMPSIZE=32
'----------------------------------------------------------------------------- 'ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND,dwMsg As DWord,wParam As WPARAM,lParam As LPARAM) As DWord 'TODO:この位置にウィンドウメッセージを処理するためのコードを記述します。
'イベントプロシージャの呼び出しを行います。 MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam) End Function
'----------------------------------------------------------------------------- 'ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy() digiclk_DestroyObjects() PostQuitMessage(0) End Sub
Sub MainWnd_LButtonDblClick(flags As Long,x As Integer,y As Integer) End End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) SetTimer(hMainWnd,0,1000,NULL) Dim l As Long l=GetWindowLong(hMainWnd,GWL_STYLE) SetWindowLong(hMainWnd,GWL_STYLE,l Xor WS_CAPTION) SetWindowPos(hMainWnd,NULL,0,0,BMPSIZE*8,BMPSIZE,SWP_NOMOVE) End Sub
Sub MainWnd_Paint(hDC_ As HDC) Dim hDC As HDC hDC=GetDC(hMainWnd) Dim bmp1 As HBITMAP,dc1 As HDC Dim ti[100] As Byte,i As Long Dim time$ As String time$=Time$() lstrcpy(ti,StrPtr(time$)) bmp1=LoadImage(GetWindowLong(hMainWnd,GWL_HINSTANCE),IDB_BITMAP1,IMAGE_BITMAP,BMPSIZE*11,BMPSIZE,LR_DEFAULTCOLOR) dc1=CreateCompatibleDC(hDC) SelectObject(dc1,bmp1) Do ti[i]-=Asc("0") If ti[i]>9 Then ti[i]=10 BitBlt(hDC,i*BMPSIZE,0,BMPSIZE,BMPSIZE,dc1,ti[i]*BMPSIZE,0,SRCCOPY) i++ Loop While ti[i] DeleteDC(dc1) DeleteObject(bmp1) ReleaseDC(hMainWnd,hDC) End Sub
Sub MainWnd_Timer(TimerID As DWord) Select Case TimerID Case 0 InvalidateRgn(hMainWnd,NULL,TRUE) End Select End Sub[/code]
[quote="名無し"]もしかして下のスタートバーに出てくる文字をタイトルバーと呼んでいるのでしょうか…[/quote]"スタートバー"は一般にはタスクバーと呼ぶかと。
AB4とAB5ではString型の扱いがかなり変化したので、その周りで多少コードへの変更が必要かもしれません。
通る筈が無いと思って書いたコードのコンパイルが通った。感動。[code]Dim A$ As String A$="abc"+"efg"[/code]
|
|
|
投稿記事 |
Posted: 2010年3月18日(木) 13:42 |
|
|
|
|
|
>スタイルを枠なしにしたのですが、タイトルb-が出てきます。
>しかも右上のばってんとかが消えてしまい閉じれないウインドウになってしまします。
なんか矛盾を感じてならないのですが、
もしかして下のスタートバーに出てくる文字をタイトルバーと呼んでいるのでしょうか…
タイトルバーと言われると、ウインドウの上部を思い浮かべるのですが…
ウインドウ上部を消し去りたいのにばってんなしの半端な状態で残ってしまうんです、という状況だったらすみません。
スタートバーに出てくる文字列を出ないようにするためにだとすれば、自分はウインドウの拡張スタイルで「ツールウインドウ」とやらを設定したことがあります。
ただしこれだと、枠ありの場合は枠の形が変わってしまいますが…。
あと、konisiさんの書かれている、「右クリック時にメニューを出す」というのが枠なしの場合に終了させる方法でよくあるものですので頭の片隅にでもどうぞ。
しかしプログラムを作ってみた場合、最新のABっていうのがver4の最新かver5βの最新かでも違ってくるんでしょうかね…?
>スタイルを枠なしにしたのですが、タイトルb-が出てきます。 >しかも右上のばってんとかが消えてしまい閉じれないウインドウになってしまします。
なんか矛盾を感じてならないのですが、 もしかして下のスタートバーに出てくる文字をタイトルバーと呼んでいるのでしょうか… タイトルバーと言われると、ウインドウの上部を思い浮かべるのですが…
ウインドウ上部を消し去りたいのにばってんなしの半端な状態で残ってしまうんです、という状況だったらすみません。
スタートバーに出てくる文字列を出ないようにするためにだとすれば、自分はウインドウの拡張スタイルで「ツールウインドウ」とやらを設定したことがあります。 ただしこれだと、枠ありの場合は枠の形が変わってしまいますが…。
あと、konisiさんの書かれている、「右クリック時にメニューを出す」というのが枠なしの場合に終了させる方法でよくあるものですので頭の片隅にでもどうぞ。
しかしプログラムを作ってみた場合、最新のABっていうのがver4の最新かver5βの最新かでも違ってくるんでしょうかね…?
|
|
|
投稿記事 |
Posted: 2010年3月17日(水) 00:52 |
|
|
|
|
|
スタイルを枠なしにしたのですが、タイトルb-が出てきます。
しかも右上のばってんとかが消えてしまい閉じれないウインドウになってしまします。
いったい何がいけないいのでしょうか。
画像の11枚は:を打つためです。
プログラム書いたので添削して下さい。
コード: '-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Const BMPSIZE=32
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
digiclk_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_LButtonDblClick(flags As Long, x As Integer, y As Integer)
End
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
SetTimer(hMainWnd,0,200,NULL)
SetWindowPos(hMainWnd,NULL,0,0,BMPSIZE*8,BMPSIZE,SWP_NOMOVE)
End Sub
Sub MainWnd_Paint(hDC As HDC)
Dim bmp1 As HBITMAP,dc1 As HDC
Dim ti[100] As Byte,i As Long
lstrcpy(ti,Time$())
bmp1=LoadImage(GetWindowLong(hMainWnd,GWL_HINSTANCE),IDB_BITMAP1,IMAGE_BITMAP,BMPSIZE*11,BMPSIZE,LR_DEFAULTCOLOR)
dc1=CreateCompatibleDC(hDC)
SelectObject(dc1,bmp1)
Do
ti-=Asc("0")
If ti>9 Then ti=10
BitBlt(hDC,i*BMPSIZE,0,BMPSIZE,BMPSIZE,dc1,ti*BMPSIZE,0,SRCCOPY)
i++
Loop While ti
DeleteDC(dc1):DeleteObject(bmp1)
End Sub
Sub MainWnd_Timer(TimerID As DWord)
InvalidateRgn(hMainWnd,NULL,TRUE)
End Sub
スタイルを枠なしにしたのですが、タイトルb-が出てきます。 しかも右上のばってんとかが消えてしまい閉じれないウインドウになってしまします。 いったい何がいけないいのでしょうか。
画像の11枚は:を打つためです。
プログラム書いたので添削して下さい。
[code]'----------------------------------------------------------------------------- ' イベント プロシージャ '----------------------------------------------------------------------------- ' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。 ' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。 Const BMPSIZE=32
'----------------------------------------------------------------------------- ' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。 MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam) End Function
'----------------------------------------------------------------------------- ' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy() digiclk_DestroyObjects() PostQuitMessage(0) End Sub
Sub MainWnd_LButtonDblClick(flags As Long, x As Integer, y As Integer) End End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) SetTimer(hMainWnd,0,200,NULL) SetWindowPos(hMainWnd,NULL,0,0,BMPSIZE*8,BMPSIZE,SWP_NOMOVE) End Sub
Sub MainWnd_Paint(hDC As HDC) Dim bmp1 As HBITMAP,dc1 As HDC Dim ti[100] As Byte,i As Long lstrcpy(ti,Time$()) bmp1=LoadImage(GetWindowLong(hMainWnd,GWL_HINSTANCE),IDB_BITMAP1,IMAGE_BITMAP,BMPSIZE*11,BMPSIZE,LR_DEFAULTCOLOR) dc1=CreateCompatibleDC(hDC) SelectObject(dc1,bmp1) Do ti[i]-=Asc("0") If ti[i]>9 Then ti[i]=10 BitBlt(hDC,i*BMPSIZE,0,BMPSIZE,BMPSIZE,dc1,ti[i]*BMPSIZE,0,SRCCOPY) i++ Loop While ti[i] DeleteDC(dc1):DeleteObject(bmp1) End Sub
Sub MainWnd_Timer(TimerID As DWord) InvalidateRgn(hMainWnd,NULL,TRUE) End Sub[/code]
|
|
|
投稿記事 |
Posted: 2010年3月15日(月) 16:47 |
|
|
|
|
|
ノーマルウインドウベースのプロジェクトを作成し、スタイルを枠なしにする事で
タイトルバーはなくなります。
画像の読み込みと描画はLoadImage関数、GetDC関数、BitBlt関数等を使うことで行えます。ヘルプと過去ログを読んできてください。
右クリック時にメニューを出すには、右クリックされたことを検出して、TrackPopupMenu関数を使ってポップアップメニューを表示するという手法が使えるようです。
#画像が11枚ある件について突っ込むべきか・・・
ノーマルウインドウベースのプロジェクトを作成し、スタイルを枠なしにする事で タイトルバーはなくなります。
画像の読み込みと描画はLoadImage関数、GetDC関数、BitBlt関数等を使うことで行えます。ヘルプと過去ログを読んできてください。
右クリック時にメニューを出すには、右クリックされたことを検出して、TrackPopupMenu関数を使ってポップアップメニューを表示するという手法が使えるようです。
#画像が11枚ある件について突っ込むべきか・・・
|
|
|
投稿記事 |
Posted: 2010年3月14日(日) 05:21 |
|
|
|
|
|
konisiさん、ありがとうございます。
ええと僕がつくりたいのはそういうんじゃなくタイトルバー(?)が無くて
数字は0~10の画像を貼りたいんです。
右クリックで時間になったらアラームとかの設定ができたりするのがいいです。
konisiさん、ありがとうございます。 ええと僕がつくりたいのはそういうんじゃなくタイトルバー(?)が無くて 数字は0~10の画像を貼りたいんです。 右クリックで時間になったらアラームとかの設定ができたりするのがいいです。
|
|
|
投稿記事 |
Posted: 2010年3月10日(水) 20:02 |
|
|
|
|
|
#ソースを打ち込んでコンパイルし、実行するくらいは出来るという前提で話を進めます。
#これが分からない場合はその事を明記して、もう一度質問してくださいな。
どんなデジタル時計が作りたいんですか?
簡単な描画なら#N88BASICと1行目に書けば、Line、Circle、Print、Cls、PSet等で行えます。
コード: #N88BASIC
Do 'DoからLoopの間に書かれた事は何度でも繰り返し実行されます。
Sleep(10) '少しの時間が経過する間待つ。単位は0.001秒(1ミリ秒)。つまり10だと0.01秒。
Locate 0,0 '書き出す位置を調整
Print Time$() '現在時刻を表示
Loop
Lineでは線や四角形、Circleでは円や扇形、PSetでは点が書けます。
そしてClsでは画面の消去が出来ます。
ヘルプを見つつやってみてください。
#ソースを打ち込んでコンパイルし、実行するくらいは出来るという前提で話を進めます。 #これが分からない場合はその事を明記して、もう一度質問してくださいな。
どんなデジタル時計が作りたいんですか?
簡単な描画なら#N88BASICと1行目に書けば、Line、Circle、Print、Cls、PSet等で行えます。
[code]#N88BASIC Do 'DoからLoopの間に書かれた事は何度でも繰り返し実行されます。 Sleep(10) '少しの時間が経過する間待つ。単位は0.001秒(1ミリ秒)。つまり10だと0.01秒。 Locate 0,0 '書き出す位置を調整 Print Time$() '現在時刻を表示 Loop[/code]
Lineでは線や四角形、Circleでは円や扇形、PSetでは点が書けます。 そしてClsでは画面の消去が出来ます。 ヘルプを見つつやってみてください。
|
|
|
投稿記事 |
Posted: 2010年3月10日(水) 15:09 |
|
|
|
|
|
はじめまして。Activebasicでプログラミングでデジタル時計を作りたいです。
初心者なのでどうしたらいいのか全くわかりません。教えてください。
できればプログラムを見せていただけるといいです。
使っているのは最新のABです。OSは2000です。
ご教示よろしくお願いします。
はじめまして。Activebasicでプログラミングでデジタル時計を作りたいです。 初心者なのでどうしたらいいのか全くわかりません。教えてください。 できればプログラムを見せていただけるといいです。 使っているのは最新のABです。OSは2000です。 ご教示よろしくお願いします。
|
|
|
投稿記事 |
Posted: 2010年3月06日(土) 20:45 |
|
|
|
|