掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
タイムリミット付きの入力待ちをするには? (ID:22686)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
正確に10秒をのぞんでいるのなら無理ですが、 Buttonを2つ,Memo,Editを配置して フォームのプロパティKeyPreview = True にします Button1を押すと入力した文字はEditBoxにはいります。 EditBoxのTextを処理すれば文字列の判断をして ループを終了すればよいでしょう。 Button2を押すとキーボードから1文字を入力すると ループが終了します。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure Button2Click(Sender: TObject); private InputKey: Char; CloseFlag: Boolean; public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin CloseFlag := True; end; procedure TForm1.Button1Click(Sender: TObject); var StartTime: DWord; StopTime: DWord; begin Edit1.Text := ''; Edit1.SetFocus; Memo1.Lines.Text := '1. あ' + #13#10 + '2. い' + #13#10 + '3. う'; StartTime := GetTickCount; repeat Application.ProcessMessages; if Edit1.Text <> '' then break; //または判断処理してループ終了 StopTime := GetTickCount; Until CloseFlag or (StopTime > StartTime + 10000); ActiveControl := Nil; end; procedure TForm1.Button2Click(Sender: TObject); var StartTime: DWord; StopTime: DWord; begin InputKey := #0; Memo1.Lines.Text := '1. あ' + #13#10 + '2. い' + #13#10 + '3. う'; StartTime := GetTickCount; repeat Application.ProcessMessages; StopTime := GetTickCount; Until CloseFlag or (InputKey <> #0) or (StopTime > StartTime + 10000); ActiveControl := Nil; if InputKey <> #0 then ShowMessage(InputKey); end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin InputKey := Key; end; end.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.