掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SetTimerで、タイマーを作るには? (ID:970)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>MakeObjectInstance? これは、「Windowsのコントロール」から送られてくるメッセージを「Delphiのオブジェクト」が受けるようにするための関数です。 つまり、返ってくるポインタは、 type WNDPROC = function(hwnd : THandle; Msg,wParam,lParam:integer):integer;stdcall; 型の関数です。 >わたしは2つTTimerを使ったコンポーネントをおいたら、 >片方が動き始めると、もう片方の動きがすごく鈍く(1,2秒に1ピクセルくらいずれたような気がするんですけど…)なってしまい、 >Timerのせいだな…と…。 >もしかして早とちり…? そうでもないようです。 Windowsのタイマーですが、正確な同期をとる必要があるときはちょっと工夫が必要なようですね。 タイマーの仕様が、純粋に「Xmsごとに呼び出される」、というものではなく、「OnTimerが処理された直後の時間からXms後にもう一回呼び出す」、というようなもののようです。 試しに、1秒ごとにカウントアップしていくラベルを作ってみてください。 ここでフォームをドラッグしただけで、カウントは一気に遅れてしまいます。 タイマーを使うときはOnTimerイベント中にもう一度正確な時間を取得し、 「その時間にあるべき正しい位置」に描画してやってください。>何!? ………ってことは、Timerは1つにしておいて、そのOnTimerで定期的に全コントロールを正しい位置に描画したほうがいいのでは? それから >Application.ProcessMessage すみません、Application.ProcessMessagesの間違いです。 必要なユニットは Forms です。 アプリケーションにやってくるすべてのメッセージを処理します。 Sleepは単に「何もしないで待つ」関数で、ちょっと違います。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.