пользовательский интерфейс — некоторые проблемы с C ++ Builder 6

Я только что попытался написать небольшую программу на C ++ Builder 6 (не спрашивайте меня почему, это просто домашняя работа в институте).
Итак, моя программа должна скрывать button1 при изменении размера формы.
Но событие resize возникает после того, как окно создано, это означает, что после запуска программы button1 уже невидим.

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

Я пытался использовать различные события изменения размера, но это тоже не работает.
Что я делаю не так?

PS. Извините за мой плохой английский.

1

Решение

Нет ничего плохого. Форма действительно изменяет размер во время ее создания, поэтому вы получаете событие. Есть много способов решить эту проблему:

  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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector