C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[17286] Re:답변감사드립니다. 한번만 더 봐주시겠어요?
유영인 [Chris] [cuperido] 1113 읽음    2002-04-08 12:00
지금의 Tray 방식은 폼에서 생성을 하고 폼의 메뉴를 의존하기 때문에, 폼이 올라와 있지 않은 경우에 에러가 발생합니다. 이 때, 두가지 방법으로 처리가 가능합니다.

1. 시작시 폼을 강제로 안보이게 하는 방법

// 아래 이벤트를 추가
void __fastcall TForm1::FormActivate(TObject *Sender)
{

ShowWindow(Form1->Handle, SW_HIDE);
ShowWindow(Application->Handle, SW_HIDE);

}

// 아래의 이벤트에서 밑의 두 줄을 추가
void __fastcall TForm1::N11Click(TObject *Sender)
{

     ShowWindow(Form1->Handle, SW_SHOW);           <<-  추가
     ShowWindow(Application->Handle, SW_SHOW);     <<-  추가

     pTray->Restore();
}



2. Tray 아이콘을 만드는 방식을 바꿈
아래는 제가 사용하던 트레이 아이콘 만드는 루틴 입니다. WM_USER + 1 의 메세지 번지가 다른 프로그램에서 사용하고 있지 않아야 합니다.


<<헤더 파일에 선언>>

#include "TrayIcon.h"


TTrayIcon *pTray;

void __fastcall TrayOnMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);



<<소스 파일에 선언>>

UINT          uiTrayMessage;

/****************************************************************
Tmain
- Main Initialize
****************************************************************/
__fastcall TMain::TMain(TComponent* Owner) : TForm(Owner)
{

// Receive Register Message From Windows
uiTrayMessage = RegisterWindowMessage ("MyIconNotify");

}

/****************************************************************
AddTray
- Add icon to tray-bar
****************************************************************/
void __fastcall TMain::AddTray()
{

NOTIFYICONDATA   niIcon;

memset(&niIcon, 0x00, sizeof(niIcon));

niIcon.cbSize           = sizeof(niIcon);
niIcon.hWnd             = Handle;
strncpy(niIcon.szTip, "Hi-Net Communicator", sizeof(niIcon.szTip));

niIcon.hIcon            = Application->Icon->Handle;
niIcon.uCallbackMessage = WM_USER + 1;

niIcon.uFlags           = NIF_MESSAGE | NIF_ICON | NIF_TIP;

Shell_NotifyIcon(NIM_ADD, &niIcon);

}

/****************************************************************
RemoveTray
- Remove icon from tray-bar
****************************************************************/
void __fastcall TMain::RemoveTray()
{

NOTIFYICONDATA    niIcon;

memset(&niIcon, 0x00, sizeof(niIcon));

niIcon.cbSize     = sizeof(niIcon);
niIcon.hWnd       = Handle;

Shell_NotifyIcon(NIM_DELETE, &niIcon);

}


void __fastcall TForm1::TrayOnMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
     if( Button == mbRight ) {
       pTray->ShowMenu();
     }
}



쉬운 방법으로 선택하시면 됩니다.

초짜 ^^ 님이 쓰신 글 :
: 답변 감사드립니다.
:
: Application->ShowMainForm = false; 이 부분을 프로젝트에 포함시키니
:
: 폼이 화면에 나타나지 않더군요.
:
: 근데 트레이에서 폼을 표시할려고 오른쪽 마우스 버튼을 누르니깐 에러가
:
: 나거든요..
:
: 어떻게 해결해야하나요?
:
: 트레이 오른쪽 버튼을 누르면 팝업창에 뜨고 폼이 생성해야하는데
:
: 잘 안되는군요.
:
: 다시한번 답변 부탁드립니다.
:
: 그럼 수고하세요.. ^^

+ -

관련 글 리스트
17274 [질문] 트레이아이콘에 대한 질문입니다. 초짜 ^^ 1030 2002/04/08
17276     Re:[질문] 트레이아이콘에 대한 질문입니다. 유영인 [Chris] 1285 2002/04/08
17284         답변감사드립니다. 한번만 더 봐주시겠어요? 초짜 ^^ 920 2002/04/08
17286             Re:답변감사드립니다. 한번만 더 봐주시겠어요? 유영인 [Chris] 1113 2002/04/08
17288                 님 너무 감사드립니다 초짜 ^^ 865 2002/04/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.