問題タブ [ttimer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Omnithreadを使用して複数のDelphiTTimerバックグラウンドスキャンタスクを変換するのに最適な方法
マルチスレッドを使用してDelphiアプリケーションを改善するためにOmnithreadを使用することを検討し始めました。1つ以上のワーカータスクの作成については、ドキュメントで十分に説明されているため、ボタンのクリックから呼び出す長いアクションをこのデモコード(Async、CreateTaskなど)に置き換えることができます。私が苦労しているのは、次のように動作する私の最も「厄介な」コードを置き換える方法です。
ハードウェアモジュールに対応する単一クラスインスタンスの概念があります。このクラスは、ハードウェアの現在の値と設定を公開する1つ以上のプロパティを公開します。プロパティは、読み取り専用または読み取り/書き込みの場合があります。これらのクラスインスタンスのそれぞれについて、ゼロからいくつかの表示フォームが表示される場合があります。表示フォームには、TTimerと、前述の公開されたプロパティのビルドリストがあります。このリストは、ラベルや編集コントロールなどの適切な名前のコントロールを照合するために繰り返され、RTTIメカニズムを使用して、コントロールとそのプロパティの間で値を取得および設定します。その結果、実際のハードウェアモジュールに優れたUIを提供し、複数のフォームを開くことができるよりも副作用があります。そのうちの1つでデータを変更すると、すぐ後に他のフォームにそのデータが表示されます。このプロパティの監視は、TTimerが300ミリ秒間隔でティックすることによって実行されます。ティックごとに、クラスのすべてのプロパティをスキャンし、フォームの一致するコントロールを更新します。タイマーは、開いているフォームの存続期間中実行されます。フォームは必要に応じて作成され、解放されます(これには、ハードウェアを検査するためのフォームが開いていない場合、監視タスクを実行できないため、アプリケーションを可能な限り高速に実行する必要があるという便利なパフォーマンスの最適化があります)。
UIスレッドでTTimerを使用するのではなく、スレッドを使用して公開されたプロパティにアクセスするためのより良い方法はありますか?それとも、同期の問題が利点を上回りますか?スレッド化が役立つ場合、ティックタイマーをエミュレートするなどの繰り返しタスクをどのように作成しますか?
delphi - TTimerイベントからSynchronizeを呼び出す必要がありますか?
からグローバル変数またはVCLにアクセスする場合TTimer
、使用する必要がありますSynchronize
か?TThread
すでに同期を使用している、から同じ変数とオブジェクトを使用します。
delphi - TTimerが発火する前に残り時間を取得する方法はありますか?
重複の可能性:
Delphiタイマー:次のイベントまでの時間
Windows 7 Pro(64ビット)でのC ++ Builder XEの使用:
フォームにTTimerがあります。
私がやりたいのは、プログレスバーを更新して、TTimerがOnTimerイベントハンドラーを呼び出すまでの残り時間を表示することです。
TTimerのインターバルがOnTimerイベントを発生させるまでの長さを知る方法はありますか?
delphi - 設計時に TTimer を描画するのは誰ですか?
設計時に TTimer を描画するのは誰ですか?
Delphi IDE のフォーム デザイナを使用している場合、TTimer をフォームにドロップすると、コンポーネントは設計時に表示されます(もちろん、実行時には表示されません)。
TTimer クラスはユニット ExtCtrls で定義されているので、もちろんそのユニットで TTimer のソース コードを読みました。
私は次のようなものを見ることを期待していました:
しかし、そのようなコードがないことに驚きました!
TTimer コンポーネントにはこのプライベート フィールドがあります:FWindowHandle: HWND;
が、これは Windows 自体から WM_Timer メッセージを受信するためにのみ使用されます。設計時であっても、何も描画するために使用されることはありません。そしてキャンバスもありません。
TTimer のソース コードを読んでいるときに、デザイン タイムの描画に関連するものは見つかりませんでした。
問題は、Delphi IDE 自体のフォーム デザイナで、TTimer のデザイン時の外観をフォームに描画するコードと場所です。
さて、なぜ私がこの質問をするのか不思議に思っている人のために、それに関する情報を以下に示します。
StackOverflow の別の場所で、誰かが実行時に .dfm ファイルをロードできるかどうか尋ねました。誰かが答えた:「いいえ、それは不可能です」 .
しかし、それは正確には真実ではありません。これを正確に行うためのコードをいくつか書きました。ディスクから「someform.dfm」をロードし、実行時にそのようなフォームを作成します。それは可能ですが、厄介なのは、次のようなコードを記述する必要があることです。
これは、特定のフォームをエラーなしで読み込んで表示できる最初の例にすぎません。ただし、TSpeedbutton などの他のフォームが含まれているとすぐに、上記の手順を編集して次の行を追加する必要があります。
それをスキップすると、「class Txxx not found」という例外が発生します。
もう 1 つの問題は、ロードする dfm 内の TTimer コンポーネントを見つけるためのコードを追加し、その TTimer インスタンスの ComponentState で csDesigning を手動で設定した後でも、TTimer が非表示のままになることです。
では、Delphi IDE のフォーム デザイナで表示されるのと同じ方法で TTimer を表示するには、(他に) 何をする必要がありますか?
delphi - Delphi : TTimer を表示する
Label で TTimer のカウントダウンを表示することは可能ですか? ラベルキャプションに変数を即座に配置するように。どうすればいいのか考えていたのですが、フォームで目に見えるカウントダウンをやろうとしています。