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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[744] 어, RS 2007에서는 TrayIcon 이 달라졌네.
김태선 [cppbuilder] 7004 읽음    2008-02-23 15:39
이게 웬일이죠. 유용게 사용하던 BCB6의 TrayIcon이 RS2007에서는 달라졌네요.

처음 느낌은 '당황'
필수 메소드가 왕창 사라지고 어떻게 써야할지 당황.
폼을 트레이에 넣는 메소드는 물론이고 트레이아이콘을 클릭하면 나타나는 액션을 지정하는 프로퍼티도 없어졌습니다.
폼을 되돌리는 메소드도 없습니다. 왕창 다 빼버린 듯한 느낌.

다음 느낌은 '설마'
코드기어에서 우릴 골탕 먹이려고 설마 콤포넌트를 이상하게 기능을 축소 했을리가.
절대 그럴리 없다는 믿음이 생기면서
어떻게 문제를 해결해야할지 살펴봤습니다.

다음 느낌은 '그래 이렇게 하면 되는구나.'
트레이로 넣는 것은 폼을 미니마이즈한 뒤에 Hide 하면 되고
트레이에서 꺼내는 것은 폼을 Normal 로 되돌린뒤 Show 하면 되겠구나.
트레이 클릭은 따로 클릭 이벤트가 생겼구나.
아, 이렇게 사용자가 알아서 구현하라는 뜻이었구나.

하지만 그렇게 하려면 기존 메소드를 수동으로 구현해주어야 하더군요.
아래 처럼.

// TrayIcon1의 Minimize()에 해당

void    TForm1::minimize()
{
    WindowState = wsMinimized;
    Hide();
}

// TrayIcon1의 Restore()에 해당

void    TForm1::restore()
{
    Show();
    WindowState = wsNormal;
    SetForegroundWindow(Handle);
    SetActiveWindow(Handle);
}

이 부분만 수동처리하면 있을거는 다 있는 셈이군요.

다음 느낌은 '왜? 바꾼거지?'
크게 동작에 이상이 잇는 것도 아니고, 바꾼게 그렇게 효율적인 것 같지도 않은데,
(적어도 편의성은 떨어지닌까) 굳이 왜 바꾸었을까?

아무래도 이 문제는 기존 C++로 된 TrayIcon을 델파이 코드로 통일하면서
간략하게 구현하느라 그런 것 같군요.
기존에 비해 적은 코드만 필요하닌까 용량면에서는 유리하군요.


이건 팁도 아니고 팁이 아닌 것도 아니고.

@..@;

+ -

관련 글 리스트
744 어, RS 2007에서는 TrayIcon 이 달라졌네. 김태선 7004 2008/02/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.