Q&A

  • 프로그램을 최소화하여 실행하려면?
일반 유틸리티를 보면, 프로그램이 시작되면서, 트레이 아이콘으로 최소화 되어 실행되는 유틸이 많이 있습니다. 저도 비슷하게 구현하려고 했는데, 문제가 좀 있어서 이렇게 고수님들의 도움을 좀 얻고자 글을 올립니다.

일단 윈도우를 최소화하여 실행하는 것은 아무 문제가 없었습니다.

WindowState:=wsMinimized; 코드를 OnFormCreate 이벤트에 넣어 주니 잘 동작을 하더군요. 한데 문제는 최소화 된 상태에서 트레이 아이콘으로 실행된 모습처럼 보이기 위해서는 태스크 바에서 현 프로그램을 제거해야 되겠기에 여기 팁란에서 찾은 다음의 코드를 추가했습니다.

  SetWindowLong(Application.Handle, GWL_EXSTYLE,
     GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW );

그런데, 문제는 이런식으로 코드를 추가하다 보니까, 툴 윈도우를 최소화 시키면, 왼쪽 하단에 최소화된 윈도우 모양이 그대로 남더군요. 별별 코드를 다 넣어봐도 잘 안되더군요.

그런데, 문제는 위의 태스크 바에서 프로그램을 숨기는 코드가 다른 곳에선 아무 이상없이 잘 됩니다.

 Hide;
 ShowWindow(Application.handle, SW_HIDE);
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
      GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW );

버튼을 하나 두고, 버튼에 위와 같은 코드를 삽입하면, OnFormCreate에 삽입했을 경우와는 달리 남는 폼이 전혀 없이 깨끗하게 사라지더군요. -_-; 폼이 생성될 때, 윈도우를 새로 보여주는 루틴을 막기만 하면 될것 같아서, Visible 속성을 false로 해도 안되었습니다. 트레이 아이콘을 사용하기 위해서 RxTrayIcon을 사용했습니다. 트레이 아이콘을 더블 클릭했을 때는 다시 윈도우를 보여주기 위해서

  SetWindowLong(Application.Handle, GWL_EXSTYLE,
      GetWindowLong(Application.Handle, GWL_EXSTYLE) xor WS_EX_TOOLWINDOW );
  ShowWindow(Application.handle, SW_SHOW);
  Show;

이렇게 했습니다. 윈도우가 전체 나타난 상태에서는 잘 동작하는데, 처음 실행하지마자 트레이로 보내기를 어떻게 구현해야할지 조언 바랍니다.


지금 생각이 났는데, 한가지 방법이 있겠군요.
트레이 아이콘을 보여주는 프로그램을 따로 하나 구현한 후에, 메인 프로그램을 화면에서 숨기는 방식으로 하면 될것 같군요. 두 프로세스간의 통신이 좀 문제겠지만, 어렵진 않을 듯... 한번 구현해 본 후에 잘 되면, 다시 답변으로 올리겠습니다.

그래도, 이런 방법 말고, 간단하게 그냥, 한 프로그램에서 해결할 수 있는 방법이 있을 듯 한데 말이죠. ^^;
2  COMMENTS
  • Profile
    박성훈 2002.02.01 21:02

    안녕하세요.
    프로젝트소스에 Application.ShowMainForm:= False를 집어넣어 보세요.
  • Profile
    한원희 2002.02.01 20:36
    >일반 유틸리티를 보면, 프로그램이 시작되면서, 트레이 아이콘으로 최소화 되어 실행되는 유틸이 많이 있습니다. 저도 비슷하게 구현하려고 했는데, 문제가 좀 있어서 이렇게 고수님들의 도움을 좀 얻고자 글을 올립니다.
    >
    >일단 윈도우를 최소화하여 실행하는 것은 아무 문제가 없었습니다.
    >
    >WindowState:=wsMinimized; 코드를 OnFormCreate 이벤트에 넣어 주니 잘 동작을 하더군요. 한데 문제는 최소화 된 상태에서 트레이 아이콘으로 실행된 모습처럼 보이기 위해서는 태스크 바에서 현 프로그램을 제거해야 되겠기에 여기 팁란에서 찾은 다음의 코드를 추가했습니다.
    >
    >  SetWindowLong(Application.Handle, GWL_EXSTYLE,
    >     GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW );
    >
    >그런데, 문제는 이런식으로 코드를 추가하다 보니까, 툴 윈도우를 최소화 시키면, 왼쪽 하단에 최소화된 윈도우 모양이 그대로 남더군요. 별별 코드를 다 넣어봐도 잘 안되더군요.
    >
    >그런데, 문제는 위의 태스크 바에서 프로그램을 숨기는 코드가 다른 곳에선 아무 이상없이 잘 됩니다.
    >
    >  Hide;
    >  ShowWindow(Application.handle, SW_HIDE);
    >  SetWindowLong(Application.Handle, GWL_EXSTYLE,
    >       GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW );
    >
    >버튼을 하나 두고, 버튼에 위와 같은 코드를 삽입하면, OnFormCreate에 삽입했을 경우와는 달리 남는 폼이 전혀 없이 깨끗하게 사라지더군요. -_-; 폼이 생성될 때, 윈도우를 새로 보여주는 루틴을 막기만 하면 될것 같아서, Visible 속성을 false로 해도 안되었습니다. 트레이 아이콘을 사용하기 위해서 RxTrayIcon을 사용했습니다. 트레이 아이콘을 더블 클릭했을 때는 다시 윈도우를 보여주기 위해서
    >
    >   SetWindowLong(Application.Handle, GWL_EXSTYLE,
    >       GetWindowLong(Application.Handle, GWL_EXSTYLE) xor WS_EX_TOOLWINDOW );
    >   ShowWindow(Application.handle, SW_SHOW);
    >   Show;
    >
    >이렇게 했습니다. 윈도우가 전체 나타난 상태에서는 잘 동작하는데, 처음 실행하지마자 트레이로 보내기를 어떻게 구현해야할지 조언 바랍니다.
    >
    >
    >지금 생각이 났는데, 한가지 방법이 있겠군요.
    >트레이 아이콘을 보여주는 프로그램을 따로 하나 구현한 후에, 메인 프로그램을 화면에서 숨기는 방식으로 하면 될것 같군요. 두 프로세스간의 통신이 좀 문제겠지만, 어렵진 않을 듯... 한번 구현해 본 후에 잘 되면, 다시 답변으로 올리겠습니다.
    >
    >그래도, 이런 방법 말고, 간단하게 그냥, 한 프로그램에서 해결할 수 있는 방법이 있을 듯 한데 말이죠. ^^;


    간단하게 해결됩니다. -_-;

    프로젝트 소스 파일에서

        Application.ShowMainForm := False; // 폼을 숨김
        Application.CreateForm(TfrmMain, frmMain);
        Application.Run;

    이렇게 처리를 하고, OnFormCreate에서는 위에서 언급한 태스트바에서 숨김코드를 삽입하고, 폼의 CreateParams 에서 Visible:=false로 지정하면, 시작하자마자 트레이에서 실행되는 것처럼 보입니다. 딱 1줄만 추가하면 되는 것을... -_-;
    • 한원희
    • 2002.02.01 20:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      2002.02.01 21:02
      안녕하세요. 프로젝트소스에 Application.ShowMainForm:= False를 집어넣어 보세요.
    • 한원희
      2002.02.01 20:36
      >일반 유틸리티를 보면, 프로그램이 시작되면서, 트레이 아이콘으로 최소화 되어 실행되는 유틸이 많이 있...
    • 박성훈
      2002.02.01 21:06
      안녕하세요. 5만건이면 파라독스가 감당하기가 점 버거울듯 싶네여. 백업을 받아보시구 해보시죠. 혹...
    • 박용철
      2002.02.01 21:20
      제가 여쭤본 속도 저하 table 이 어떤 일련의 계산 과정에서 중간 테이블중 하나에서 발생하는 문제인 것 ...
    • 장명선
      2002.02.01 21:24
      이건 해당 값으로 색깔 표시한겁니다. 좀 수정하시면 될겁니다. //*** DBGrid Cell 색깔 표시 *** proc...
    • 최용일
      2002.02.01 20:11
      안녕하세요. 최용일입니다. 일반 프로시져로 만드시지 마시고 객체의 메소드로 만들어서 사용하세요... ...
    • 임재균
      2002.02.01 20:18
      답변 감사합니다. 최용일님. 앞으로 자주 궁금한거 있스면 여쭤도 되죠? 정말 고맙습니다. 근데 한...
    • 최용일
      2002.02.01 21:09
      안녕하세요. 최용일입니다. Test2에서 쓰는 Label1은 TForm1이라는 객체에 속해있습니다.  그...
    • 전재욱
    • 2002.02.01 19:47
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 윤도상
    • 2002.02.01 19:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.02.01 20:20
      안녕하세요. 최용일입니다. 델파이 Bin폴더에 있는 TDump.exe를 이용해보세요. DLL버전은 알 수가 없지...
    • 수야.
    • 2002.02.01 19:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      2002.02.01 21:09
      안녕하세요? 물론 도움말은 있습니다. 같이 배포가 안되는 것 뿐이니까요. 여기 자료실이나 Rx홈에 ...
    • 김기자
    • 2002.02.01 19:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이창환
      2002.06.08 22:25
      MIDAS를 사용하시면서 TClientDataSet 컴포넌트가 있는데 왜 TQuery를 사용하세요?? 모든 Query나 Table...
    • 박준영
    • 2002.02.01 19:23
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 장명선
      2002.02.01 19:29
      질문을 하실때는 먼저 자료실에서 검색을 하시고 올려주세요 이왕 올린거 알려드리져 ^^* DBGrid 의 Pr...
    • 박준영
      2002.02.01 19:53
      급한 마음에 자료들을 자세히 보지 못했습니다. 답변 주셔서 감사합니다. 그런데 저도 이왕 글 쓴거 하나...
    • 장명선
      2002.02.01 21:36
      그건 레코드의 위치를 그쪽으로 이동하게 하면 됩니다... 찾기를 해서 이동하시면 됩니다.. 그럼..수거...
    • 신호
    • 2002.02.01 18:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      2002.02.01 21:12
      안녕하세요? 저두 초보라 별 도움이 될지는 모르지만... 라인을 그릴 때 캔버스에 직접 그리지 마시...
    • 최용일
      2002.02.01 21:20
      삼각형 프레스에서 나온 책인데 Inside Secret Delphi 3 개발자 핸드북이란책 괞찮아요...
    • Delphi Kim
    • 2002.02.01 06:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조인환
      2002.02.01 19:14
      아래 예제는 IME 원도우즈 메시지를 처리하며 막는 소스입니다. 예전에 참고했던 소스인데요. 도움이 되...
    • 뚜벅이
    • 2002.02.01 05:20
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 장명선
      2002.02.01 08:04
      파라폭스는 인원의 제한이 있습니다... NT Server를 쓰신다고 했으니깐...제가 보기엔 db에서 인원 제한을...
    • 뚜벅이
      2002.02.01 20:19
      Db에서의 제한은 없습니다. 파라독스를 쓴느 게 아니라 AS/400에 Db2를 씁니다.... 거기에서는 인원 제한...
    • Tk
      2002.02.01 23:23
      as/400 이  델파이랑 연동 할려면  delphi/400 이거나 아님 ace/400(easycom) 또는 ...
    • 장명선
      2002.02.01 04:45
      제가 쓰는 방법인디 괜찮은지 모르겠네요 우선 Project->Options에서 Form을 available form쪽으로 이...
    • 유종근
      2002.02.01 04:49
      그렇게 하면 프로그램이 실행될때 리포트작성폼이 화면에 먼저 뜨잖아요..그문제는 어떻게 해결을 하셨나요...
    • 장명선
      2002.02.01 08:02
      위의 방법대로 하면 리포트작성폼은 안뜨고 프리뷰화면만 뜨는데??? 님이 잘 하셨는지요 ?
    • 장명선
      2002.02.01 04:04
      날짜를 문자형으로 했을경우에는 굳이 날짜형으로 변환하는것보다 그냥 조회하는게 좋지 않을까요 ? Sq...
    • 최영근
      2002.02.01 04:46
      만약 C/S 프로그램       '델파이 4, 시작 그리고 완성'  도서출...
    • 장명선
      2002.02.01 04:00
      다우에서 발행한 책자가 있습니다... 제목이 잘 생각이 안나지만...그것이 좋을듯 하네요 아마 제목 델...
    • 한강민
    • 2002.02.01 03:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 5782_Click
      2002.02.01 04:57
      다른 파일들은 다 있궁 플젝트 파일만 없어졌나요? 그럼 혹시... pas파일들을 모두 열어놓구 프로젝트 ...
    • (_^^)~U
    • 2002.02.01 03:45
    • 3 COMMENTS
    • /
    • 0 LIKES
    • Mr. Ziker
      2002.02.01 08:22
      Object Inspector 에 Propertise에 보시면 MultiSelect 라는 옵션이 있는데 True로 해주시면 됩니다. ...
    • (_^^)~U
      2002.02.01 18:34
      답변은 감사 한대요 TreeView 에는 MultiSelect 가 없는대요?
    • 김현
      2002.02.01 20:55
      ListView 와 달리 TreeView 는 다중 선택을 기본적으로 지원하지 않슴다 토리나 델파이 슈퍼페이지 가면 ...