RichTextBoxコントロールで<MARQUEE>タグのように文字をうごかすことはできるのでしょうか?
できるのならば教えてください。お願いします。
うーん、マーキーするならTextboxかPictureBoxがいいと思いますけど…。
それはとにかくとして、TextBoxでやる場合、
先頭の文字をとって、一番後ろにくっつけて、
先頭の文字をとって、一番後ろにくっつけて…。
を適当な間隔で繰り返します
ただちょっとしかたないですけど、全角半角の混じった文字をマーキーすると、
速度がヘンですね^^;
あと、ちょっとめんどくさいですけど、PictureBoxとかお勧めです。
理論上はですけど、文字列を見えないフォームに文字をプリントし、
それの表示したい位置から表示したい位置までの部分をPaintPictureかBitBlt系APIでコピー
それを少しずつずらしていって…。という風にやれば、
TextBoxでやるのなんか比べ物にならないほどいいできのができると思います。
それと、これらの動作は、Timerコントロールで動かすのはあんまりお勧めできません。
(他のソフトが使ってるTimerコントロールに影響されて速度が変になるみたいです…)
作りたてで、しかもTimerコントロールよりできることがすごく少ないですけど、
下のを使ってみてください
Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Dim id As Long, name As String, obj As Object
Public Function TimerProc(hWnd As Long, uMsg As Long, idEvent As Long, dwTime As Long) As Long
'タイマープロクレス
CallByName obj, name, VbMethod, hWnd, uMsg, idEvent, dwTime
End Function
Public Sub DeCreateTimer()
'タイマーを破棄します
On Error Resume Next
KillTimer obj.hWnd, id
End Sub
Public Sub CreateTimer(HasObject As Object, Optional CallBackName As String = "TimerProc", Optional Interval As Long = 1)
'タイマーを作ります、Timerコントロールよりは正確かも
'HasObject…コールバックプロジージャを持っているオブジェクト
'CallBackName…コールバックプロジージャの名前
'Interval…そのインターバル
'
'コールバック関数は以下のようになります。
'Public Sub TimerProc(hWnd As Long, Message As Long, id As Long, TickTime As Long)
'hWnd…タイマー作成もとハンドル
'Message…タイマーから送られるメッセージ
'id…タイマーのID
'TickTime…Windowsが起動してからの時間
Set obj = HasObject
name = CallBackName
id = SetTimer(obj.hWnd, Int(Rnd * 65535) + 1, Interval, AddressOf TimerProc)
End Sub
Timerコントロールよりは正確(?)です。たぶん。
本当はもうちょっと正確なタイマーがあるんですけどね^^;
いつもソースまでつけていただいてありがとうございます
ツイート | ![]() |