[c++ Builder] VCL Form OnShow, OnActivate 비교

빵욱·2025년 8월 5일

C++Builder with VCL

목록 보기
5/6

OnShow, OnActivate 비교

OnSHow

  • 호출 타이밍
    Form이 Show() 또는 ShowModal() 등에 의해 화면이 보여지기 직전에 한번 만 호출

  • 호출 목적

    • UI 요소의 크기·위치가 결정된 뒤에 초기화 작업을 해야 할 때
    • 화면에 나타낼 데이터를 바인딩하거나, 런타임 사이즈 계산·조정 등
  • 특징

    • FormCreate 이후, OnShow 안에서 컨트롤의 Width/Height 등이 부모 폼 기준으로 계산된 상태
    • 한 번 Hide() 했다가 Show() 하면 다시 호출됨
void __fastcall TMainForm::FormShow(TObject *Sender)
{
    // 폼이 화면에 보이기 직전 단 한 번 실행         
    Memo1->Lines->Add("폼이 처음 보이기 직전!");
}

OnActivate

  • 호출 타이밍

    • 폼이 활성 창(포커스가 있는 창) 으로 전환될 때마다 호출.
    • 최초 보여질 때도 OnShow 다음에 한 번 호출
    • 다른 폼이나 애플리케이션에서 돌아왔을 때마다(Alt+Tab, 자식 폼 닫힘 등) 호출
  • 목적

    • 폼이 활성화될 때마다 갱신해야 할 UI·데이터 처리
    • 예: 메뉴·툴바 활성화, 상태 표시줄 업데이트, 단축키 맵핑 등
  • 특징

    • 사용자가 다른 폼·어플리케이션을 클릭했다가 돌아올 때도 반복 호출
    • FormShow 이후 더 나중에 실행 (초기화 직후 바로 한번, 그 뒤엔 활성화될 때마다)
void __fastcall TMainForm::FormActivate(TObject *Sender)
{
    // 폼이 활성화(포커스 획득)될 때마다 실행 
    Memo1->Lines->Add("폼이 활성화될 때마다!");
}

호출 순서 예시

  1. Application->Run() 시작

  2. FormCreate → OnCreate

  3. Show() → OnShow

  4. (첫 활성화) → OnActivate

  5. 다른 창 클릭 → 본 폼 비활성화

  6. 다시 돌아오기 → OnActivate

  7. Hide() 후 Show() → OnShow → OnActivate


초기 설정은 OnSHow
포커스 기반 갱신은 OnActive 사용하기.

profile
rove drink eat

0개의 댓글