おはようございます。
パソコンの時刻を一定期間ごとに正確に合わせたいのですが
どのようにすればよいのかわかりません。
過去の履歴でへりーなさんのご質問欄に回答があったので
その通りにコーディングしてみました。(下記)
function GetSNTPTime(Server: String): TDateTime;
begin
with TIdSNTP.Create(Self) do
try
Port := 123;
Host := Server;
Result := DateTime;
SyncTime;
finally
Free;
end;
end;
procedure TfrmMenu.Button3Click(Sender: TObject);
begin
Label6.Caption := FormatDateTime('YY/MM/DD HH:MM:SS',GetSNTPTime('clock.nc.fukuoka-u.ac.jp'));
end;
しかし、コンパイルすると以下のようなエラーが発生しました。
[エラー]未定義の識別子:'self'
なにか、他に必要なのでしょうか?
Delphi Selfというのを検索してみてください。
かなり基本的なキーワードです。
http://www.wwlnk.com/boheme/delphi/vbtodel/daf0930.html
>function GetSNTPTime(Server: String): TDateTime;
を TfrmMenu のメソッドにするのはいかがですか?
function TfrmMenu.GetSNTPTime(Server: String): TDateTime;
にして、下記のように宣言を追加。
TForm1 = class(TForm)
・・・
private
{ Private 宣言 }
function GetSNTPTime(Server: String): TDateTime; // ここに追加
・・・
public
{ Public 宣言 }
・・・
end;
igyさんResありがとうございます。
ご指示通りコーディングし実行したところ、
クッリクボタンを押下すると
以下のエラーが発生しました。
「プロジェクト TimeSyusei.exe がEIdSocketError クラス例外を生成しました。 'Socket Error #11004!'
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。」
まだ、どこかおかしいようです。
どこまでやったの?丸投げでは回答つかないんじゃない?
> 過去の履歴でへりーなさんのご質問欄に回答があったので
> その通りにコーディングしてみました。
「ヘリーナ」さんとこのスレを、最終行までよく読みましたか?。
私のとこでは問題なく機能していますよ。
というかさん、ご指摘ありがとうございます。
全く分からなかったのでついつい、楽をしちゃいました。
へりーなさんの質問欄は全て試したつもりなのですが、
「[エラー]未定義の識別子:'self'」
がでましたので、改めてご質問した次第です。
igyさんから教えていただいた通り
function TfrmMenu.GetSNTPTime(Server: String): TDateTime;
begin
with TIdSNTP.Create(Self) do
try
Port := 123;
Host := Server;
Result := DateTime;
SyncTime;
finally
Free;
end;
end;
ボタンクリックイベントを
Label6.Caption := FormatDateTime('YY/MM/DD HH:MM:SS',GetSNTPTime('clock.nc.fukuoka-u.ac.jp'));
とし実行したところ
'Socket Error #11004!' のエラーが発生しました。
ネットでエラー内容で探していたのですが
今一、わかりませんでした。
単純に、パケットが宛先に到達できない環境では(会社の火壁とか)?
ping か nslookupで確認願います。
NovさんResありがとうございます。
pingでもnslookup でも通信できませんでした。
当社のネット環境はproxyソフト経由です。
proxyでは出来ないのでしょうか?
おそらくproxyソフトはntpを肩代わりしてくれないでしょう...
目的にもよりますが、すぐ思いつくのは次の3つです。
(1) 同じやり方で宛先を社内NTPサーバにする。
(2) HTTPで時刻を取得して、自前で設定する。
NICT公開サーバのHTTPアクセス用URLでHTTPテキストをゲットし、
SyncTimeのソースを参考にして時刻を設定する。
(3) OSに任せる(w32tm.exeなど)。
でも、(2)の場合、精度を確保するのは面倒くさそう。自分ではやりたくない部類のコーディングです。
ツイート | ![]() |