트레이 아이콘 어플리케이션의 제작

Similar documents
PowerPoint Template

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

歯MDI.PDF

기본적인 컴포넌트의 제작

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

4장기본프로그래밍2

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

Javascript

gnu-lee-oop-kor-lec10-1-chap10

04장 메시지 처리 유형

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

델파이 4 프로그래밍의 이해 (Understandings of Delphi 4 Programming)

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

PowerPoint Presentation

슬라이드 1

Chapter #01 Subject

윈도우시스템프로그래밍

View Licenses and Services (customer)

SOFTBASE XFRAME DEVELOPMENT GUIDE SERIES ActiveX 컴포넌트가이드 서울특별시구로구구로 3 동한신 IT 타워 1215 호 Phone Fax

 메소드 오버로딩

JDK이클립스

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

오버라이딩 (Overriding)

gnu-lee-oop-kor-lec06-3-chap7

제 1장 C#의 개요

NTD36HD Manual

PowerPoint Presentation

Visual Basic 반복문

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

윈도우시스템프로그래밍

Microsoft Word - Armjtag_문서1.doc

PowerPoint Presentation

슬라이드 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

구조화 저장소 기법

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

슬라이드 1

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

1장 윈도우 프로그래밍 들어가기

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

Studuino소프트웨어 설치

Convenience Timetable Design

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

게임 기획서 표준양식 연구보고서

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

Microsoft PowerPoint - e pptx

Microsoft Word - src.doc

쉽게 풀어쓴 C 프로그래밍

Network Programming

1. SNS Topic 생성여기를클릭하여펼치기... Create Topic 실행 Topic Name, Display name 입력후 Create topic * Topic name : 특수문자는 hyphens( - ), underscores( _ ) 만허용한다. Topi

1

Microsoft PowerPoint - 3장-MS SQL Server.ppt [호환 모드]

볼륨 조절 아이콘 표시하기 만일 알림 영역에 볼륨 조절 아이콘이 표시되지 않았다면 아래의 방법을 따라합니다. 1> [시작] - [제어판] - [사운드 및 오디오 장치] 아이콘을 더블 클릭합니다. 2) [사운드 및 오디오 장치 등록 정보] 대화상자에서 [볼륨] 탭을 클릭

슬라이드 제목 없음

어댑터뷰

C# Programming Guide - Types

윈도 모바일 6.1을 OS로 사용하는 스마트폰(옴니아2 등)에서의 Tcl/Tk의 사용

PowerPoint 프레젠테이션

PowerPoint Presentation

UI TASK & KEY EVENT

Microsoft PowerPoint - 04windows.ppt

Chapter 1. MFC 시작하기

슬라이드 1

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

ISP and CodeVisionAVR C Compiler.hwp

Visual Basic 기본컨트롤

컴포넌트 제작의 깊은 곳

Microsoft PowerPoint - 07-Data Manipulation.pptx

슬라이드 1

Microsoft PowerPoint 세션.ppt

기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다.

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

슬라이드 1

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

Microsoft PowerPoint UI-Layout.Menu.pptx

MF3010 MF Driver Installation Guide

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - 06-Body Data Class.pptx

UI TASK & KEY EVENT

Microsoft PowerPoint 웹 연동 기술.pptx

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

Database Design Lab: MS Access Queries 1. Download lab6.accdb and rename it to lab7.accdb. 2. 이름 값을가지는쿼리 qryauthor 를만든다 a) Open lab6.accdb. b) 리본메뉴 만들

Microsoft PowerPoint - [부가상품]USBsafe 사용자 메뉴얼_111103

API 매뉴얼

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

DLL(Dynamic Linked Library)

<4D F736F F D20C5D7C6AEB8AEBDBA20B0D4C0D320B8B8B5E9B1E22E646F63>

Contents 1. 설치하기 1 2. 환경설정실행하기 4 3. PC사용시간설정 5 4. 게임사용시간설정 7 5. 유해동영상차단설정 8 6. 유해사이트차단설정 게임사이트차단설정 프로그램차단설정 정보변경 기타설정

ThinkVantage Fingerprint Software

歯제작.PDF

1. 무선 이미지 유틸리티 설명 1-1. 기능 이 Wireless Image Utility 는 안드로이드용 응용 프로그램입니다. 안드로이드 태블릿 또는 안드로이드 스마트폰에서 사용할 수 있습니다. 안드로이드 기기에 저장된 파일을 프로젝터로 무선 전송 컴퓨터에서 USB

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Design Issues

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

쉽게 풀어쓴 C 프로그래밍

CODESYS 런타임 설치과정

Transcription:

트레이아이콘어플리케이션의제작 (Creating Tray Icon Application) 윈도우 95 와 NT 4.0 에는작업바의우측에작업트레이라는부분이있다. 여기에있는아이콘은현재데스크탑에서실행되고있는윈도우를가지고있는어플리케이션이라기보다는도스시절에있었던램상주프로그램과비슷한역할을하는것이많다. 이번장에서는트레이에상주하는어플리케이션을제작하는방법에대해서알아보자. Shell_NotifyIcon 트레이아이콘을사용하는어플리케이션에서는 Shell_NotifyIcon 이라는 API 함수를사용하게된다. 이함수에는파라미터가둘있는데, TNotifyIconData 구조체에대한포인터와트레이에작업을원하는플래그를설정한다. 플래그에는아이콘을추가, 삭제, 수정등의기능을설정할수있다. TNotifyIconData 구조체는다음과같이정의되어있다. type TNotifyIconData = record cbsize: DWORD; Wnd: HWND; uid: UINT; uflags: UINT; ucallbackmessage: UINT; hicon: HICON; sztip: array[0..63] of AnsiChar; 여기서 cbsize 는구조체의크기이며, Wnd 는트레이아이콘이메시지를보낼윈도우에대한핸들이다. uid 는아이콘을확인하기위한것으로어플리케이션에트레이아이콘이여러개있을때사용된다. uflag 필드에는세가지를사용할수있다. NIF_MESSAGE, NIF_ICON, NIF_TIP 이그것으로어느것이유효한것인지결정하는플래그이다. ucallbackmessage 필드는사용자의아이콘에대한동작에대해윈도우 (hwnd) 로보내어지는사용자정의메시지의갯수를나타내며, hicon 은트레이영역안에표시할아이콘의핸들이다. 마지막으로 sztip 필드에는작업표시줄의아이콘위로마우스커서가놓일때보여주는툴팁문자열에대한텍스트이다.

이구조체는 ShellAPI.pas 유닛에선언되어있으므로, 실제사용을하기위해서 interface 섹션의 uses 문에 ShellAPI 를추가해서사용한다. 기본원칙 트레이아이콘어플리케이션이동작하는방식에대해생각해보자. 제일먼저폼이생성될때작업트레이부분에 TNotifyIconData 구조체의내용을적절히채워서아이콘을등록해야할것이다. 그리고, 아이콘이나툴팁등의변화가있을경우이를적절하게반영해주어야한다. 그리고, 콜백메시지를등록해서일단트레이아이콘어플리케이션에해당되는메시지일경우에는이메시지를처리해주는루틴을만들어주어야한다. 이때트레이아이콘을더블클릭할경우에는디자인한폼을보여주도록해야할것이며, 폼이보여진후최소화버튼을눌렀을때에는다시트레이아이콘으로복귀하도록해야할것이다. 그리고, 트레이아이콘에서오른쪽버튼을클릭했을때에는디자인한팝업메뉴를보여주고메뉴를실행할수있어야한다. 또한, 작업이끝나면트레이아이콘을제거해야한다. 마지막으로염두에두어야할것은어플리케이션이처음시작할때어플리케이션폼이바로트레이아이콘으로최소화해서위치하게해야한다. 이를간략하게정리하면다음과같다. 1. 트레이아이콘등록 2. 트레이아이콘변화를반영 3. 메시지처리루틴제작 4. 팝업메뉴와폼의최소화 (minimize), 복귀 (restore) 메시지처리 5. 트레이아이콘제거 6. 어플리케이션시작시트레이아이콘으로시작할것 먼저트레이아이콘을등록하는부분에대해서알아보자. 다음의프로시저는전형적인트레이아이콘을등록하는코드를담고있다. procedure AddTrayIcon; var IconData: TNotifyIconData; with IconData do cbsize := SizeOf(IconData);

Wnd := Handle; uid := 0; uflags := NIF_ICON or NIF_MESSAGE or NIF_TIP; ucallbackmessage := WM_MyCallBack; hicon := LoadIcon(hInstance, MyIcon ); sztip := 시계 ; Shell_NotifyIcon(NIM_ADD, @IconData); 내용은앞에서설명한 TNotifyIcon 형의구조체변수에적절한데이터필드를입력하고, 마지막에 Shell_NotifyIcon API 함수를호출하는것이다. 여기서주의깊게보아야할부분이세군데있다. 첫째는 uflags 필드로여기에서추가또는수정을할때이용할플래그를결정한다. NIF_ICON 은트레이아이콘에대한정보를, NIF_TIP 은트레이아이콘에대한툴팁힌트에대한정보를나타낸다. 마지막으로 NIF_MESSAGE 는사용되는사용자정의메시지에대한것이다. 보통처음트레이아이콘을추가할때에는이세가지정보를모두등록해야하므로 NIF_ICON, NIF_TIP, NIF_MESSAGE 를사용하게된다. 둘째는 ucallbackmessage 필드로여기에는메시지처리를하게될사용자정의메시지를대입한다. 보통처음에상수선언을해서대입을하게된다. 세째로는 Shell_NotifyIcon API 함수를호출할때사용하는파라미터로, 지금과같이아이콘을추가할때에는 NIM_ADD, 아이콘에대한정보를수정할때에는 NIM_MODIFY, 아이콘을제거할때에는 NIM_DELETE 를각각호출한다. 이렇게등록된트레이아이콘에대한정보를수정할때에는다음과같이하면된다. Shell_NotifyIcon(NIM_MODIFY, @IconData); 즉, 바뀌게되는내용을 TNotifyIconData 형변수의필드에대입하고 NIM_MODIFY 로 Shell_NotifyIcon API 함수를호출한다. 트레이아이콘을제거할때에도다음과같이해주면해결된다. Shell_NotifyIcon(NIM_DELETE, @IconData); 메시지처리 메시지를처리하기위해서먼저사용할사용자정의메시지와이를처리할콜백함수를선

언해야한다. const WM_CallbackMessage = WM_User + 100; procedure WndProc(var Message: TMessage); 이함수는어플리케이션에대한메시지를전담해서처리하게된다. 이함수를다음과같이사용해서메시지를처리한다. 다음의코드는필자가제작한트레이아이콘제작컴포넌트 (TTrayIcon) 소스의일부이다. procedure TTrayIcon.WndProc(var Message: TMessage); try with Message do case Msg of WM_QueryEndSession: Message.Result := 1; WM_EndSession: if TWmEndSession(Message).EndSession then EndSession; WM_CallbackMessage: case Message.lParam of WM_LBUTTONDBLCLK: DblClick; WM_LBUTTONUP: Click(mbLeft); WM_RBUTTONUP: Click(mbRight); else Result := DefWindowProc(FHandle, Msg, wparam, lparam); except Application.HandleException(Self); 즉, 반드시처리해주어야하는메시지는자신이 TNotifyIconData 형의변수필드에등록한메시지로여기서는 WM_CallbackMessage 가된다. 보통그중에서도마우스더블클릭과좌우버튼클릭에대한메시지만처리하면된다. 그밖의메시지중 WM_EndSession 은트레이아이콘어플리케이션을종료하고자할때

발생하는메시지이다. 여기서는필자가따로제작한 EndSession 이라는프로시저를호출한다. EndSession 프로시저에서는다음과같이등록된트레이아이콘을제거하는코드를사용한다. procedure TTrayIcon.EndSession; Shell_NotifyIcon(NIM_DELETE, @FIconData); 트레이아이콘컴포넌트 (TTrayIcon) 의제작 트레이아이콘어플리케이션에대한확실한이해를돕기위해델파이폼에올려놓고모든어플리케이션을바로트레이아이콘어플리케이션으로전환시킬수있는컴포넌트를하나제작해보았다. 이컴포넌트를사용하면쉽게트레이아이콘어플리케이션을만들수있다. 지면관계상모든소스를다설명할수는없지만중요한부분을골라서설명하겠다. 기본적인테크닉은앞에서설명한 Shell_NotifyIcon 함수를이용해서 TNotifyIconData 구조체를등록, 수정, 삭제하고메시지를처리하는것이다. 먼저컴포넌트를설계하도록하자. 이컴포넌트에서는트레이아이콘의형태를지정할수있는 Icon, 툴팁을지정할수있는 Hint, 그리고트레이아이콘을오른쪽버튼클릭할때보여줄팝업메뉴를설정할때사용할 PopupMenu 프로퍼티를제공하도록하자. 또한이벤트로는트레이아이콘을클릭할때발생하는 OnClick, 더블클릭할때발생하는 OnDblClick, 그리고폼을트레이아이콘에최소화하거나정상형태로복귀할때각각발생하는 OnHide, OnShow 이벤트를제공하도록한다. 다음은 TTrayIcon 컴포넌트의선언부분이다. TTrayIcon = class(tcomponent) private FHandle: HWnd; FIconData: TNotifyIconData; FIcon: TIcon; FHint: string; FPopupMenu: TPopupMenu; FOnClick: TMouseEvent; FOnDblClick: TNotifyEvent; FOnHide: TNotifyEvent;

FOnShow: TNotifyEvent; procedure SetHint(const Hint: string); virtual; procedure SetIcon(Icon: TIcon); virtual; procedure WndProc(var Message: TMessage); protected procedure DoMenu; virtual; procedure Click(Button: TMouseButton); virtual; procedure DblClick; virtual; procedure EndSession; virtual; procedure Changed; virtual; public constructor Create(Owner: TComponent); override; destructor Destroy; override; procedure Hide(Sender: TObject); virtual; procedure Show(Sender: TObject); virtual; published property Hint: string read FHint write SetHint; property Icon: TIcon read FIcon write SetIcon; property PopupMenu: TPopupMenu read FPopupMenu write FPopupMenu; property OnClick: TMouseEvent read FOnClick write FOnClick; property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick; property OnHide: TNotifyEvent read FOnHide write FOnHide; property OnShow: TNotifyEvent read FOnShow write FOnShow; 한번쯤컴포넌트를직접만들어보신분이라면그다지어렵지않게이해할것이다. 그렇지만, 앞에서설명한 3 개의프로퍼티와 4 개의이벤트와직접연관되지는않지만내부적으로사용되는데이터필드와메소드를소개하면다음과같다. FHandle 은 WndProc 콜백함수가사용될어플리케이션윈도우에대한핸들을저장한다. 또한, FIconData 는트레이아이콘을등록, 수정, 삭제할때사용할 TNotifyIconData 구조체변수이다. protected 섹션에정의된메소드들중 Click 과 DblClick 은 OnClick, OnDblClick 이벤트를실제구현할메소드이다. EndSession 은앞에서잠깐설명한바있으므로생략한다. Changed 메소드는 Set 메소드에서프로퍼티에저장된 TNotifyIconData 구조체필드의내용을실제로반영하는메소드로이메소드와 Set 메소드들은다음과같이구현된다.

procedure TTrayIcon.Changed; if not (csdesigning in ComponentState) then Shell_NotifyIcon(NIM_MODIFY, @FIconData); procedure TTrayIcon.SetHint(const Hint: string); if FHint <> Hint then FHint := Hint; StrPLCopy(FIconData.szTip, Hint, SizeOf(FIconData.szTip) - 1); if Hint <> '' then FIconData.uFlags := FIconData.uFlags or NIF_TIP else FIconData.uFlags := FIconData.uFlags and not NIF_TIP; Changed; procedure TTrayIcon.SetIcon(Icon: TIcon); if FIcon <> Icon then FIcon.Assign(Icon); FIconData.hIcon := Icon.Handle; Changed; 즉, Changed 메소드는어플리케이션이델파이의디자인모드에있지않으면 FIconData 변수의필드값을 Shell_Notify 함수를이용해서반영하는것이다. 그리고, 각각의 Set 메소드들은먼저 FIconData 변수에해당필드와프로퍼티로나타내기위해서필드데이터 (FIcon, FHint) 에값을저장하고 Changed 메소드를호출한다. DoMenu 메소드는팝업메뉴가선택되었을때메뉴를보여주는메소드로 Click 메소드에의해서호출되며다음과같이구현된다.

procedure TTrayIcon.DoMenu; var Pt: TPoint; if (FPopupMenu <> nil) and not IsWindowVisible(Application.Handle) then GetCursorPos(Pt); FPopupMenu.Popup(Pt.X, Pt.Y); procedure TTrayIcon.Click(Button: TMouseButton); var MousePos: TPoint; GetCursorPos(MousePos); if (Button = mbright) then DoMenu; if Assigned(FOnClick) then FOnClick(Self, Button, [], MousePos.X, MousePos.Y); 그다지어렵지않은코드이므로자세한설명은생략하도록한다. 컴포넌트를구현한다른부분들은이달에디스켓으로제공되는소스를직접참고하기바라 며, 마지막으로 Create 생성자를구현하는코드에대해서살펴보자. constructor TTrayIcon.Create(Owner: TComponent); inherited Create(Owner); FIcon := TIcon.Create; FIcon.Assign(Application.Icon); FHandle := AllocateHwnd(WndProc); if not (csdesigning in ComponentState) then FillChar(FIconData, SizeOf(FIconData), 0); with FIconData do

cbsize := SizeOf(FIconData); Wnd := FHandle; hicon := Icon.Handle; uflags := NIF_ICON or NIF_MESSAGE; ucallbackmessage := WM_CallbackMessage; StrPLCopy(FIconData.szTip, Application.Title, SizeOf(FIconData.szTip) - 1); if Application.Title <> '' then FIconData.uFlags := FIconData.uFlags or NIF_TIP; if not Shell_NotifyIcon(NIM_ADD, @FIconData) then raise EOutOfResources.Create(' 트레이아이콘을생성할수없습니다!'); Application.OnMinimize := Hide; Application.OnRestore := Show; 즉, 초기아이콘으로어플리케이션객체의아이콘을그대로사용하게하였다. 또한, 등록하는윈도우를 AllocateHwnd 함수를이용해서이컴포넌트의 WndProc 함수가소속된윈도우를찾는다. 그리고, 에러처리부분을추가했으며어플리케이션객체가최소화하거나복귀할때에 TTrayIcon 컴포넌트의 Hide, Show 메소드에서처리하도록한다. TTrayIcon 컴포넌트를이용한트레이아이콘어플리케이션의제작 그럼이제 TTrayIcon 컴포넌트를이용해서실제로트레이아이콘어플리케이션을제작해보자. 먼저이달의디스켓으로제공되는 TrayIcon.zip 파일의압축을풀고 TrayIcon.pas 유닛을이용해서컴포넌트를설치한다. 그러면 Samples 팔레트에 TTrayIcon 컴포넌트가추가될것이다. 새로운어플리케이션을시작하고, 폼을다음과같이디자인한다. 즉, TPopupMenu, TPanel, TTimer, TTrayIcon 컴포넌트를하나씩올려놓는다. Panel1 의 Align 프로퍼티를 alclient 로설정해서폼에꽉차도록한다. 또한, Caption 프 이때

로퍼티는시간을알려주게할것이므로그냥비워둔다. 그리고팝업메뉴에는 시계보기 와 닫기 를다음그림과같이설정한다. 이제 TrayIcon1 컴포넌트의프로퍼티를설정해보자. 디자인시에는 PopupMenu 프로퍼티만콤보박스를이용해서 PopupMenu1 으로설정하면된다. 그리고팝업메뉴들에대한이벤트핸들러를다음과같이작성한다. procedure TForm1.N1Click(Sender: TObject); Application.Restore; procedure TForm1.N2Click(Sender: TObject); Form1.Close; 즉, 시계보기 메뉴일경우에는 Application 객체의 Restore 메소드를사용해서폼을보여주게하고, 닫기 일경우에는폼의 Close 메소드를호출해서어플리케이션을종료한다. 이때 Application.Restore 메소드는 TTrayIcon 컴포넌트의 Show 메소드를호출하도록변경되어있으므로 TrayIcon1.Show 와같은기능을하게된다. 그리고, Timer 의 OnClick 이벤트핸들러를다음과같이작성한다. procedure TForm1.Timer1Timer(Sender: TObject);

Panel1.Caption := TimeToStr(Time); TrayIcon1.Hint := TimeToStr(Time); 현재시각을문자열로변환해서 Panel1 과트레이아이콘의툴팁으로설정한다. 이제사용할어플리케이션아이콘과초기툴팁을결정하기위해 Project Options... 메뉴를클릭한후 Application 탭을선택하고, 다음그림과같이설정한다. 이때사용한아이콘파일은필자가이미지에디터로급히그린것이라그다지아름답지못하므로독자여러분들의너그러운양해를바란다. 원래계획으로는필자가트레이아이콘을이용해서움직이는공룡캐릭터와타이머를이용해서자그마한다마고치예제를제공하려고했으나, 필자의조악한그림실력으로인해이렇게시계예제로전환하였다. 관심있는분들은 TTrayIcon 컴포넌트를이용해서쉽게구현할수있을것이다. 이제마지막으로처음에도언급했듯이어플리케이션이시작할때트레이아이콘상태로시작하도록하자. 필자도이방법을찾기위해별별방법을다써보았는데, 해답은생각보다가까운곳에있었다. 즉, 폼의 OnActivate 이벤트에서 Application.Minimize 를호출해

주면된다. procedure TForm1.FormActivate(Sender: TObject); Application.Minimize; 이제시계예제가완성되었다. 얻을수있을것이다. 프로그램을실행하면다음그림과같이동작하는화면들을 정리 (Summary) 트레이아이콘어플리케이션을만드는방법은아마도윈도우 95 와윈도우 NT 4.0 쉘을수정해서사용하는방법중에서가장유용하고간단하다고말할수있다. 특히도스시절의램상주프로그램처럼간단한유틸리티를제작할때에는그활용도가매우높다고할수있다. 이미많은수의유틸리티프로그램들이제공되고있는데, 이들중에는시스템을모니터하거나, 경고를주는등의유용한유틸리티들이있으며대부분의경우트레이아이콘어플리케이션의형태로제공되고있다.