>>949 日本語限定というのが、おかしいですね。
そのGoogle検索でも、すでに大量にヒットしているじゃないですか。
英語が分からなくても、コードをみれば「適当に」分かるのでは?
付属ヘルプもリンク切れしていないようですし。
初心者すれで聞けば、すぐ回答がつく事ですし
何を求めているのか良く分かりません。
完璧を求めるなら、ソース付のPro版をお勧めします。
> 他の言語では、こんな酷い状態に陥りまくったことはないんだけど
何と比較しているのか良く分からんが
他の言語は金を出してもソースがついて来ないからな。
つか、適当に使って、上手く行かないって逆切れしている
>>949って・・・
>>949 ヘルプのリンク切れであれこれ悩んで長文書く間に
お気軽にWideFormatってなんだと聞いてくれればいいのに。
# 気持ちはわかるがこのスレでそういう物言いをすると
# おにいさんたちが嬉々として寄ってくるので正直もう少し言葉遣いを考えてくれ。
# このスレの平和と安定の為に・・・
いまから、Delphi入門は正直おすすめしない。
そうそうWIN32対応のLonghornがリリースされるもんね。
最近プログラマにも、安定した公務員が一番、みたいなやつが増えてきたな。
タダにしても流行しない、それがDelphiクオリティ
ファイルの更新日時を秒単位まで正確に取得したいのですが、奇数秒が偶数に切り上げられてしまいます。
Delphiでファイルの更新時刻を正確に取得するにはどうしたらいいんでしょうか。
調べてみたところ、ファイルシステムがFAT32だと、奇数秒が切り上げられるというファイルシステム上の
制限があるらしいのですが、私の使用している端末はNTFSです。
テストに使用した関数は、
・FileAge→FileDateToDateTime
・FileGetDate→FileDateToDateTime
・(FindFirst→)SearchRec.Time→FileDateToDateTime
です。すべて同じように奇数秒が偶数に切り上げられます。
OSはWindowsXP SP1
DelphiはDelphi7 Enterprise
です。
よろしくお願いします。
GetFileTime API
内部でDOS形式に変換してるから必ず2秒きざみになる
NTFS専用ならばSearchRec.FindData.ftLastWriteTimeを
FileTimeToSystemTimeで変換しる
>>961使う場合のやり方は
>>961に聞け
963 :
960:2005/06/16(木) 15:48:37
>>961 私ももうちょっと調べてみましたが、Delphiから呼ばれるAPIは
・FileAge→FindFirstFileA
・FileGetDate→GetFileTime
・(FindFirst→)SearchRec.Time→FindFirstFileA
となっていました。
GetFileTime APIは、FileGetDateから呼ばれているようですね。
FATの最終更新時刻の分解能は 2 秒で、NTFSでは1秒(?)なので、
FileGetDateで正しく取得できるはずなんですけどねえ...
>>963 FileTimeToDosDateTimeを見落としてる
>>963 ごめん、
>>962はFileTimeToLocalFileTimeしてからFileTimeToSystemTimeだ
皆さんありがとうございます。なんとかできました。
SearchRec.FindData.ftLastWriteTime→FileTimeToLocalFileTime→FileTimeToSystemTime→SystemTimeToDateTime
とすればうまく取得できますね。
こんな感じになりました。
function GetFileUpdTime(sFileName: String): TDateTime;
var
SearchRec: TsearchRec;
LocalTime: TFileTime;
SysTime: SYSTEMTIME;
begin
FindFirst(sFileName, faAnyFile, SearchRec);
try
FileTimeToLocalFileTime(SearchRec.FindData.ftLastWriteTime, LocalTime);
FileTimeToSystemTime(LocalTime, SysTime);
result := SystemTimeToDateTime(SysTime);
finally
FindClose(SearchRec);
end;
end;
967 :
960:2005/06/16(木) 16:31:28
966=960です。
FileAgeやFileGetDateでは、内部でFileTimeToLocalFileTime→FileTimeToDosDateTime
と変換しているため、秒が切り上げられてしまうんですね。
というわけで、GetFileTime(API)→FileTimeToLocalFileTime→FileTimeToSystemTime→SystemTimeToDateTime
でもうまくいきました。
ところでなぜ、DelphiではFileTimeToSystemTimeを使わずに、FileTimeToDosDateTimeを使っているのでしょうか?
FileTimeToSystemTimeがWin95/98に対応している以上、FATでも問題あるじゃないですよね?
>>967 WindowsAPIのヘルプにFATは2秒単位だと書いてあるが?
互換性という意味ではDOS形式にするのが正しい罠
ただ、プラットフォームで切り分けれとも思うけどさ
D1からの名残かもね。
970 :
960:2005/06/16(木) 17:35:54
>>968 互換性ですか。分解能が高くなる分には問題ないような気はしますが、もし互換性のためであれば、
やっぱりNTFSとFATの両方に対応した新しい関数も用意して欲しいものですね。
>>892 フォームを閉じただけではフォームは廃棄されず,そのコンポも廃棄されません.
閉じるときに廃棄したい場合はOnCloseイベントでAction に caFree を代入します.
>>929 もう5年くらい前ですが東京・新宿の紀伊國屋書店にDelphi関連書籍がほとんど無くて参ったことがありました.
近場の書店の方が揃っていたという.
(※近年,某魔法メガネ君の本で有名になった八王子駅前の某書店)
>>948 Delphiのヘルプは駄目なのは事実ですけどね.
J Builderの成功例をまねて普及のために無料版をばらまくなら
初心者がしっかり学べるドキュメントを残さなければいけなかったのですが….
>解能が高くなる分には問題ないような
偶数しか入ってこないはず、と思い込んでるソフトもあるんじゃないかな?
> J Builderの成功例をまねて普及のために無料版をばらまくなら
> 初心者がしっかり学べるドキュメントを残さなければいけなかったのですが….
personal では作れないチュートリアルとかがあって、まだ修正されてないし、
もうそのときからドキュメントに関してはアキラメ。よって、ユーザ拡大もアキラメ。
先細りは自業自得だわな
パーソナルの登録で
「登録の最終確認のメールを xxxxx@xxxxxx に送信しました」
って出てから2日待ってもメールが来ないのは俺だけ?
もちろんメアドが間違ってるなんてオチじゃないよ。
一定時間コンピュータがアイドル状態になったら
イベントが起きるようなコンポーネントかAPIってあります?
スクリーンセーバーみたいなことをやりたいんですが、
TApplication.OnIdle はメインスレッドが暇になったときにガンガン呼ばれるようで、
目的に合致しません。
Delphi 2005使ってます。
>>976 OnIdle イベント
アプリケーションがアイドル状態になったときに一度だけ呼び出され,
Done プロパティが False に設定されない限り再び呼び出されることはありません。
Delphi6のヘルプより。
978 :
976:2005/06/16(木) 21:04:27
>>977 Done := True; すればいいのではないか、ということでしょうか?
アイドル状態の説明が不十分だったのでちゃんとしておきます。
私がやりたいのは、一定時間マウスやキーボードをいじらずに
放置しておいた場合、イベントを発生させるということです。
TApplication.OnIdleは、処理すべきウィンドウメッセージがなくなったりすると
Done := True としてもミリ秒単位で発生するので向いていないようです。
よろしくお願いします。
GetLastInputInfo
980 :
976:2005/06/16(木) 21:24:19
981 :
デフォルトの名無しさん:2005/06/17(金) 04:34:35
Pasclソースの整形ツールってありますか?
984 :
デフォルトの名無しさん:2005/06/17(金) 10:30:40
八王子駅前って、くまざわ書店?
コメントが抜けておりました.問題点等ありましたらご指摘下さい.
特になければこのテンプレでスレ立てにトライしてみます.
以下,1レス消費してしまったので.
>>975 >>973の指摘は正しいと思います.ヘルプのリンク切れってぶっちゃけあ(ry
>>984 そうです.ここ数ヶ月は理工書売り場に行っていませんが,多分今でもおいてあると思います.
雑談・喧嘩はフサフサスレへっていれておいたら?
喧嘩って書くとかどが立つから、「雑談・討論」はフサスレへかな。
992 :
デフォルトの名無しさん:2005/06/17(金) 19:25:26
random(10)
とすると
かなり数値が偏るんですが
対処法は無いでしょうか?
random初期化関数無かったっけ?
ランドミゼ
999
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。