Q&A

  • Application.Handle와 Handle의 차이점
제목을 어떻게 해야 할지 몰라서 걍 위에서 처럼 했습니다.

Trayicon 할려고 여기 저기 뒤지고 해서 하긴 했는데 이해 안가는 부분이 있어서요.
작업표시줄에 어플리케이션 사라지게 할려고 구현했는데
다른부분 다 생략하고 아래 FormShow에
ShowWindow(Application.Handle,SW_Hide);  이렇게 하면
프로그램 실행되면서 작업표시줄에서 사라지고
ShowWindow(Handle,SW_Hide); 이렇게 하면 안 사라지거든요.

FromCreate에 해도 안 되고.. 반드시 저렇게 해야만 사라지더라구요.

어떤 차이점이 있길래 그런걸까요?
어이 없는 질문이라고 생각할 수도 있지만 답변 달아 주셨으면 감사하겠습니다.



procedure TForm1.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle,SW_Hide);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
       ShowWindow(Handle, SW_HIDE);
end;

2  COMMENTS
  • Profile
    윤수아 2006.06.04 04:24
    TForm1.xxxx 함수내에서
    우리가 caption := 'aaaaa';라고 코딩할 때...
    caption 앞에 생략된 것이 있습니다..
    그건 Form1. 이 생략된 것이지요...
    질문하신 내용도 이와 마찬가지 입니다..
    Application.Handle 은 말그대로 어플리케이션 자체의 핸들을 의미하고
    그냥 Handle이라고 해주시면 Form1.Handle 입니다..

    procedure TForm1.FormShow(Sender: TObject);
    begin
      ShowWindow(Application.Handle,SW_Hide);
    end;

    procedure TForm1.FormActivate(Sender: TObject);
    begin
           ShowWindow(Handle, SW_HIDE); => ShowWindow(Form1.Handle, SW_HIDE);
    end;

  • Profile
    KDDG_Apine 2006.06.07 07:56
    위에 분이 잘 설명해 주셨는데요..
    제가 보충 설명이 될지 모르겠습니다.     Application 은 델파이로 하자면 하나의 프로그램 원형에 해당 되는 핸들이라고 할수 있죠..   보통 handle은 해당 form의 핸들이구요..

    하나의 application 프로젝트에서 form은 다수가 될수 있고 여러가지 용도로 구현할수 있습니다.  하지만 여기서 application 은 이프로그램을 말하는거죠.. 그래서 tray할때도 해당 프로그램이 사라지게 하려면 application 핸들을 사용해야 되는 겁니다..

    보통 윈도우에서 컴포넌트들은 모두 핸들올 가지고 있습니다.  edti, combobox, panel, button 등등
    델파이에서는 Twincontrol 을 상속받은 컴포넌트들은 모두 가지고 있구요..     핸들은 중복되지 않는거 알고 계시죠..  그럼 즐프하세요..