C ++ Builder 6有些麻烦

时间:2013-09-25 18:29:55

标签: c++ user-interface vcl c++builder-6

我刚尝试在C ++ Builder 6中编写小程序(不要问我为什么,它只是学院的一项功课)。 因此,当我调整表单大小时,我的程序必须隐藏button1。 但是在窗口创建后调整大小事件会增加,这意味着在我启动程序后按钮1已经不可见了。

void __fastcall TForm1::FormResize(TObject *Sender)
{
  Button1->Visible = false;
}

我尝试使用不同的调整大小事件,但它也不起作用。 我做错了什么?

PS。抱歉我的英语不好。

1 个答案:

答案 0 :(得分:4)

没有错。表单在创建时确实会调整大小,这就是您获得活动的原因。有很多方法可以解决这个问题:

  1. 使用变量忽略第一个OnResize事件,直到表单就绪:

    private:
        bool fReady;
    

    void __fastcall TForm1::FormResize(TObject *Sender)
    {
        if (!fReady)
            fReady = true;
        else
            Button1->Visible = false;
    }
    
  2. 使用表单OnShow事件发布自定义消息,表明表单已准备就绪:

    private:
        bool fReady;
    protected:
        virtual void __fastcall WndProc(TMessage &Message);
    

    const UINT WM_READY = WM_APP + 100;
    
    void __fastcall TForm1::WndProc(TMessage &Message)
    {
        if (Message.Msg == WM_READY)
            fReady = true;
        else
            TForm::WndProc(Message);
    }
    
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
        PostMessage(Handle, WM_READY, 0, 0);
    }
    
    void __fastcall TForm1::FormResize(TObject *Sender)
    {
        if (fReady)
            Button1->Visible = false;
    }
    
  3. 使用短计时器而不是自定义消息:

    private:
        bool fReady;
    

    void __fastcall TForm1::Timer1Timer(TMessage &Message)
    {
        Timer1->Enabled = false;
        fReady = true;
    }
    
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
        Timer1->Enabled = true;
    }
    
    void __fastcall TForm1::FormResize(TObject *Sender)
    {
        if (fReady)
            Button1->Visible = false;
    }
    
  4. 仅举几例。