FormをCreateしたときにCloseしたい

解決


藤園  2006-09-05 08:50:04  No: 23088

パソコンを起動するとスタートアップに登録しているプログラムを起動しある処理をします。
1日1回処理すればよいためiniファイルに更新処理した日付を登録し、
起動時にiniファイルをチェックして本日分が処理済みであれば
何もせずに終了したい。
というプログラムを組みたいのですが、
procedure TForm1.FormCreate(Sender: TObject);
begin
 if 更新処理チェック then
 beging
   処理
   ini更新
 end else
 begin
   Close; 
 end;
end;

としてみましたがプログラムを終了できませんでした。
Closeに飛びますがFormはそのままです。
procedure TForm1.Button1Click(Sender: TObject);
begin
  Close;
end;
であればFormは終了します。
このような処理を行うにはどのようにすればよいか教えてください。

今Delphiがない環境のため、日本語で表示してます。
申し訳ありません。

Windows2000
Delphi6


zebra  2006-09-05 12:21:48  No: 23089

Close;の変わりに
PostMessage(Handle, WM_Close, 0, 0);
と書くと動くようですが、起動直後に閉じるので一瞬だけフォームが
表示されます。


えーと  2006-09-05 12:34:58  No: 23090

二重起動防止の論理と同じように、Form を作る前に、まずプロジェクトファイルで

if 更新処理チェック then

の処理をしたらよいのでは?


Syake  2006-09-05 17:10:50  No: 23091

>FormをCreateしたときにCloseしたい
>procedure TForm1.FormCreate(Sender: TObject);
>begin
>  {略}
>   Close;
>  {略} 
>end;
私も最初の頃やっちまいました。
表題の質問の答えは不可で、この記述自体が無効です。
何故かは以下を参照してください。
http://www.jnishida.com/faq/archives/2002/05/del0038.htm

他の方が書かれたように代替方法をお勧めします。
私なら、えーとさんの方法


ん?  2006-09-05 17:27:04  No: 23092

zebra 2006/09/05(火) 03:21:48 
> Close;の変わりに
> PostMessage(Handle, WM_Close, 0, 0);
> と書くと動くようですが、起動直後に閉じるので一瞬だけフォームが
> 表示されます。

これを追加しておけば、表示されないのでは?
Application.ShowMainForm := False;

メインフォームのFormCreate処理時点では、
Application.Run; まで進んでいないはずなので。

更新チェックの内容が、どの程度かわかりませんが、
自分なら、えーとさんの方法で行います。

program Hogehoge;

begin
  if 更新チェック then begin
    //更新済みのためなにもしない
  end
  else begin
    Application.Initialize;
    Application.CreateForm(TMainForm, MainForm);
    Application.Run;
  end;
end.


deldel  2006-09-05 18:04:37  No: 23093

いいのかどうか分かりませんが、こういうのもあります・・・
「Terminate」があまり気持ちのいいものでは無いのですけど。

procedure TForm1.FormCreate(Sender: TObject);
begin
  if False then begin
    beep;
  end else begin
    Application.ShowMainForm := False;
    Application.Terminate;
  end;
end;


もにゃ  2006-09-05 19:56:30  No: 23094

いやいや、もっとシンプルに
Formを作成しない方法は如何ですか?

ファイル名"Project1.dpr"
program Project1;
uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs;
{$R *.res}
var
  strList:TStringList;
begin
  //Application.Initialize; //無くても良い?
  //Application.Run;        //無くても良い?
  strList:=TStringList.Create;
  strList.Add(DateTimeToStr(now));
  strList.SaveToFile('test.txt');
  strList.Free;
  showmessage('終了します。');
end.


もにゃ  2006-09-05 19:58:16  No: 23095

…って、質問の答えになって無いですね。
なにやってるんだ…


藤園  2006-09-06 10:10:39  No: 23096

皆さんありがとうございます。
無事目的のことができました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加