Delphi相談室その3

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:02/04/06 14:50
>>951
1から勉強し直してください。
953デフォルトの名無しさん:02/04/06 14:55
>>951
ここは性格異常者の隔離スレだから、こっちへ行きなさい。
http://pc.2ch.net/test/read.cgi/tech/1017803412/l50
954ネタじゃないのよ:02/04/06 14:55
>>952
そんなこと言わんと教えてください。おながいします。
955ネタじゃないのよ:02/04/06 14:57
>>953
ありがとう。逝ってきます。
956デフォルトの名無しさん:02/04/06 15:00
これとよーく見比べてみな。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

end.
957デフォルトの名無しさん:02/04/06 20:43
       v
      (゚ω゚) <そろそろ出番だな
     /(  )\        
      /'\
時刻処理をしたいのだけど、15時から16時の間はAの処理、それ以外はBの処理
ってのはどのようにすればいいのでしょか?
959958:02/04/06 22:14
補足説明
GetLocalTimeを使うと現在時刻が取れるのだけど15時から16時の間とかは
wHourを使ってきちんとif文で処理出来るのだけど15時半とかの場合はif文が
使えないっす。
>>958
"日付時刻ルーチン"でヘルプを検索しる!
>>959
>15時半とかの場合はif文が使えないっす。

って15時半から16時の間なら・・・っていう事が
if文で出来ないってことですか?
962デフォルトの名無しさん:02/04/07 00:23
>>960
検索したけど使い方が分からんかった。
やり方教えてくれぃ。
963デフォルトの名無しさん:02/04/07 00:27
>>961
行き違いになってましたすみません。

>って15時半から16時の間なら・・・っていう事が
>if文で出来ないってことですか?
はい。例えば
if Localtime.wHour>14
とすれば15時以降か以前かの判断が出来るのですけど、
この方法だと分単位の判断が出来ないので良い方法があればと思いまして。

まあ強引に入れ子にしてif文を並べれば出来ないこともないのですが、もっと
スマートな方法があるだろうと思いまして。
>>963
TDateTimeじゃ駄目ですか?
965デフォルトの名無しさん:02/04/07 01:05
>>964
毎度どうも。
TDataTime型に現在の時刻を入れる方法あるのでしょうか?
>>965
あ、いや初レスです。
TDateTimeのメソッド一覧は見ました?

CurrentDate
CurrentTime
CurrentDateTime

辺りだと思います。
967デフォルトの名無しさん:02/04/07 01:37
Delphiでの書き方がわからないので、
BCBでスマソですが、こんな感じでしょう。

if (TDateTime::CurrentTime() >= StrToTime("15:30:00") &&
  TDateTime::CurrentTime() <= StrToTime("16:00:00"))
{
}

else
{
}
968961:02/04/07 01:43
今までなにも考えずにネストしてました…
969Delフサギコ ◆zE1iiRdQ :02/04/07 01:46
         _________
  ∧,,∧   / 
 ミ;゚Д゚彡<  つくってみたけど
  ミ つI)  \ 
〜ミ  ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  U U   
なんか、
[Form1.Caption: '今は1:43:15なので2:00:00から3:00:00の間です']
こんなふうな意味わからん表示になるんだけど
なんでだろ〜〜なんでだろ〜〜(テツ&トモ)

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
 StartTime, EndTime: TTime;
begin
 for i:=0 to 23 do
 begin
  StartTime := EncodeTime(i , 0, 0, 0);
  EndTime := EncodeTime(i+1, 0, 0, 0);

  if (CompareTime(StartTime, Time) = GreaterThanValue)
   and (CompareTime(Time, EndTime) = LessThanValue) then
  begin
   Form1.Caption :=
    '今は'+TimeToStr(Time)+'なので'+
    TimeToStr(StartTime)+'から'+
    TimeToStr(EndTime)+'の間です';

   Break;
  end;
 end;
end;

なんか、どこか間違ったかな?
D6UP1です。
>>969
× CompareTime(StartTime, Time)
○ CompareTime(Time, StartTime)

かな?
あと、iが23のとき、EncodeTime(i+1, 0, 0, 0); で例外が出るような。

またBCBで申し訳ないですが、
日付をまたぐ場合にも対応すると、

TDateTime dtStart = StrToTime("23:00:00");
TDateTime dtEnd = StrToTime("1:00:00");
TDateTime dtCurr = Time();

if (dtEnd < dtStart)
{
  if (dtCurr < dtEnd)
    dtCurr++;

  dtEnd++;
}

if (dtCurr >= dtStart && dtCurr <= dtEnd)
  Caption = "内";
else
  Caption = "外";

です。
971970:02/04/07 03:05
暇なので勉強も兼ねてDelphiで。

function Hoge: Boolean;
var
 StartTime, EndTime, CurrTime: TDateTime;
begin
 StartTime := StrToTime('23:00:00');
 EndTime := StrToTime('1:00:00');
 CurrTime := Time;

 if (EndTime < StartTime) then
 begin
  EndTime := EndTime + 1;
  if (CurrTime < EndTime) then CurrTime := CurrTime + 1;
 end;
 Result :=(CurrTime >= StartTime) and (CurrTime <= EndTime);
end;
972Delフサギコ ◆zE1iiRdQ :02/04/07 03:18
   ∧,,∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < こうですね!
   U  ミ   \____________
 @ミ  ミ
   ∪''∪

  if (CompareTime(StartTime, Time) = LessThanValue)
   and (CompareTime(Time, EndTime) = LessThanValue) then

そっかそっか。LessとかGreaterとかいうとついわけわかですね

MyCompareTime(StartTime , '<', Time)
とかで比較できたらいいかも。

あ。それって
TimeOf(StartTime) < TimeOf(Time) ってやればいいのか。

ちょっと勉強にナタ。ありがとうです>>970さん
973970:02/04/07 03:52
Delphiのコードの間違い探しをしたり、自分で書いてみたりして
私も今日はいい勉強になりました。
974970:02/04/07 04:11
>>971 訂正です。

  EndTime := EndTime + 1;
  if (CurrTime < EndTime) then CurrTime := CurrTime + 1;
    ↓
  if (CurrTime < EndTime) then CurrTime := CurrTime + 1;
  EndTime := EndTime + 1;
そろそろ、そろっと、新しいスレ立てないと1000になるよ
976デフォルトの名無しさん:02/04/07 15:09
963
です。971をベースにしてできました。ありがとうございました。
969でやろうとしたらCompareTimeとGreaterThanValueとLessThanValueが
未定義だ!と怒られちゃったので。(^^;
爽やかな展開だ、いやに
978デフォルトの名無しさん:02/04/07 19:33
DelphiでXMLをコチョコチョやりたいんですが
情報が集まっているところをご存知でしたら教えていただけないでしょうか
Delphi Magazine 4月号に、interfaceの自動参照カウント処理と、
interfaceを返す関数を呼び出したときに戻り値を受け取らなくても
コンパイラが勝手に一時オブジェクトを作って、スコープ脱出時にその開放をやってくれる機能を
うまく使って記述コードをすっきりさせる手法が紹介されてた。
C++っぽくておもしろいな。

function AutoFree(obj: TObject): Iなんたら;
ってのがあるとすると(Iなんたらはデストラクト時にobjをfreeしてくれるものがあるとする)、

begin
sl := TStringList.Create;
AutoFree(sl);
slを使った処理...
end;
みたいに、try-finallyを記述しなくても確実に開放できるんだな。
mutexとかの管理なんかも同じ調子ですっきりできそうだ。

バイナリのサイズはむしろ増えそうだが。
980デフォルトの名無しさん:02/04/08 01:16
デバッグをしてると時々、
ソースファイルが見つかりません。ExtCtrls.pas
とか表示されるんだけどこれって回避する方法ある?
例外出るとワケワカメなヤツ探しにいくヤツだろ?
パッチあてると治るらしいぜ。
オレはパソナルだから面倒でそのままだけど(ワラ
982名無し~3.EXE:02/04/08 04:14
Ent版を買って[プロジェクトオプション]-[コンパイラ]-[デバッグ用DCUを使う]に
チェックを入れる。
983ageだ:02/04/08 05:19
ageだ
新スレ立てますた

Delphi相談室その4
http://pc.2ch.net/test/read.cgi/tech/1018211735/l50
新スレ移行のついでに埋め立て協力カキコ
埋め。
埋め埋め。
 梅
埋め埋め埋め
990!
ume
 992!
       v
      (゚ω゚) <それそれ出番だな
     /(  )\        
      /'\
 埋め埋め埋め埋め
静かだ・・・
       v
     <(゚ω゚) <うっ!
      (  )\        
      /'>
       v
      (゚ω゚)> <はっ!
     /(  )        
       <'\
       v
     <(゚ω゚)> <うっ!
      (  )        
      /'>
       v
      (゚ω゚)/ <はっ!
     /(  )        
       <'\
10001000:02/04/08 15:56
     v       w
    (゚ω゚)/ \(゚δ゚)<ジーンギスカーン!
   /(  )    (  )ゝ
     <'\    / >
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。