DBEdit入力から時間型へ

解決


湘南乃海  2007-02-17 13:47:20  No: 24914  IP: 192.*.*.*

では改めて、
データベースで、フィールド名=開始時刻(型=時間型)というのをつってるんですが、入力画面Formで入力された値を、時間型として取り込むためにはどのようにすればよいでしょうか。つまりこういうことです。

入力画面Form
(DBEdit1) 時(Label1) (DBEdit2) 分から(Labal2)

○○時○○分から
これを
○○:○○  というかたちにもっていきたいんです。

編集 削除
Mr.XRAY  URL  2007-02-17 14:27:40  No: 24915  IP: 192.*.*.*

Delph7のヘルプで時刻をキーワードにして検索し、
[時刻の値、形式化]を選択します。  [参照]をクリックし、
[DateTimeToString 手続き]を表示すると変換用の関数の説明があります。
またこのヘルプのページで[日付時刻ルーチン]をクリックすると
時刻や日付の関数の説明があります。

文字列から時刻型への変換は、
StrToTime 関数やStrToTimeDef 関数などがあります。
ヘルプも購入価格の内です。使用しないともったないお化けがでますよ。

時刻型に変換する必要がなければ、文字列をそのまま表示するだけです。

編集 削除
AY  2007-02-17 14:41:04  No: 24916  IP: 192.*.*.*

>フィールド名=開始時刻(型=時間型)というのをつってるんですが
では
>(DBEdit1) 時(Label1) (DBEdit2) 分から(Labal2)
のDBEDit1と2は、どの項目と結びついているのでしょうか?
たぶん数値型でしょうが、単純に時刻にできるかチェックも必要になりますね
例えば55時88分とか入力してる場合不正ですよね
開始時刻を時刻型で作成されているのでしたら
最初から、DBEdit1に開始時刻を結びつけるのが簡単ですが・・

編集 削除
湘南乃海  2007-02-17 19:17:12  No: 24917  IP: 192.*.*.*

AYさんの
”最初から、DBEdit1に開始時刻を結びつけるのが簡単ですが・・”
についてですけど、どう結び付けるんでしょうか。
DBEdit1に、○○:○○  と、直接入力するとか?
仮にそうすることになったとしたら、:(コロン)を打つのが面倒というか・・・テンキーのみで済ませたい気がするんです。
他であればお教えください。

Mr.XRAYさんの教えに従ってヘルプを見てみました。あまり内容を理解できなかったのですが、なんとなくでやってみると、実験では無事にできました。実験というのは、FormにEdit1,Edtit2,Edit3 Button1を用意して、Button1をクリックしたらEdit1(時)、Edit2(分)に入力された数字がEdit3.Textに時間型で表示されるというものです。

procedure TForm1.Button1Click(Sender: TObject);
var
  a:Ttime;
  b:string;
begin
  try
    b:=edit1.text+':'+edit2.text;
    a:=strtotime(b);
    edit3.Text:=timetostr(a);
  except
    showmessage(b+'?');
  end;
end;

一応これでうまく動きました。何か無駄な要素があれば言って下さい。
問題として、”秒”を表示させないようにしたいんです。
あと、DBEditじゃあ勝手が違うんですかね。ていうか違いますよね。

編集 削除
AY  2007-02-17 21:08:02  No: 24918  IP: 192.*.*.*

DisplayFormat hh:mm
EditeMask !99:99;1;_
テンキーのみの入力です。
秒は入力も表示もないです。
時刻型のフィールド直結で

編集 削除
湘南乃海  2007-02-19 10:26:01  No: 24919  IP: 192.*.*.*

ヘルプでEditMaskを調べてみたのですが、OnValidateというのが書いてあって、何とかそれに行き着いたのはいいのですが、そこからどうあいていいのか分かりません。
あと一つ気になったことがありまして、DBEditに値を入力するときに、どこに値が入っているのかなぁ・・・と。
例えば、LabelはCaption、EditはText、じゃぁDBEditは?

編集 削除
AY  2007-02-19 10:58:53  No: 24920  IP: 192.*.*.*

元々、DBeditで質問されていましたよね?
DBEditの値は、結びついているデータベースのフィールド(書き出すまでは、実際にはデータベース上に書き込まれていませんが)ですが

今、フォーム上には  Table,DataSource そして  DBEditがあるのですよね?
DBEditと結びついているのは、プロパティのDataSource・DataFieldを見てください。

編集 削除
湘南乃海  2007-02-19 12:04:44  No: 24921  IP: 192.*.*.*

そうですよね。何でこんなこと質問してんのか・・・(ど忘れ?)すいません。
でですね、

DisplayFormat hh:mm
EditeMask !99:99;1;_

これをどのように書いていいのか・・・
OnValidateはいいんですけど、そのまま上の2行を書けば良い訳ではないみたいで。

編集 削除
AY  2007-02-19 12:50:54  No: 24922  IP: 192.*.*.*

HELPを見られているのでしたら、「持続的項目の作成」で参照してみてください。
プロパティ DisplayFormat や  EditeMask は項目コンポーネントが持っています。

1.フォーム上のTableを右クリック
2.項目の設定を選ぶ
3.項目のリストが開くので(最初は空っぽ)その上で、右クリック
4.全ての項目を追加を選択
テーブルの各項目が登録されます。
その中から、開始時刻の項目をクリックしてください。
オブジェクトインスペクタに、お探しのプロパティが見えるはずです。
それぞれに設定してください。

DisplayFormatに、hh:mm
EditeMaskに、!99:99;1;_

最初の質問に帰りますが
そうすれば、DBEdit1には、直接「開始時刻」を指定できますよ。

編集 削除
湘南乃海  2007-02-19 13:21:36  No: 24923  IP: 192.*.*.*

・・・夢のような光景がそこに。
AYさん、何から何までまことにありがとうございます。まさに’こうしたい!’という形になりました。DisplayFormatとEditMaskはプロパティだったんですね。コードに直接書くものだと勘違いしてました。(どんな勘違いやねん)
ほんとにありがとうございました。

編集 削除
湘南乃海  2007-02-19 13:23:16  No: 24924  IP: 192.*.*.*

すいません。うれしすぎて”解決”ボタン押し忘れてました。

編集 削除