procedure TForm1.FormShow(Sender: TObject);
begin
  form1.OnShow := nil;
  you function 即可
end;

解决方案 »

  1.   

    //unit1代码
    uses unit2;procedure TForm1.Button1Click(Sender: TObject);
    begin
      with Tform2.Create(self) do
      begin
        ShowModal;
        free;
      end;
    end;//unit2代码
    private
      FFirstShow: boolean;procedure TForm2.FormCreate(Sender: TObject);
    begin
      FFirstShow := true;
    end;procedure TForm2.FormActivate(Sender: TObject);
    begin
      if FFirstShow then
      begin
        ShowMessage('ok');
        FFirstShow := false;
      end;
    end;
      

  2.   

    to newyj: 你只解决了“只做一次”,但没有解决在SHOW 出FORM之后再自动做事情这一点关键。
      

  3.   

    oncreate
    onactive
    onshow
    onpaint 
     这四钟方法都可以 执行优先级 自上而下 自己选一个吧
      

  4.   

    to taxi: 我不是这个意思。我要的是在程序启动并在主窗口显示之后自动做某些事情,并且在做的过程中会修改主窗口上的控件状态。
      

  5.   

    to taxi: 我不是这个意思。我要的是在程序启动并在主窗口显示之后自动做某些事情,并且在做的过程中会修改主窗口上的控件状态。
      

  6.   

    to xBai21:这四个都不能实现我的要求。我曾经想过用ONIDLE实现,但并不好。
      

  7.   

    在onshow应该可以,如果不行的话,可以试验这个方法,在form中自定义一个消息
    const wm_MYMsg= WM_USER+$1001;
    然后再form的onshow事件中发送此消息到这个窗口。然后再这个消息处理函数中运行你的过程。对于修改了控件,而没有显示可能是由于你的过程运行太快,系统来不及刷新得缘故,凡是在修改控件属性的后面增加一条语句:update;强制刷新。