많은 사람들이 델파이를 RAD 도구라고 생각합니다. 저를 포함해 학창시절에는 델파이에 대해 편견을 갖고 있었습니다. 이제 "상아탑"에서 벗어나 더 넓은 범위의 영역을 다루게 되었고 더 많은 문제에 직면하게 되었습니다. 나는 점차 내 자신의 관점을 경험하게 되었습니다. 실제로 Delphi는 Object Pascal 언어를 기반으로 한 개발 도구입니다. 이는 Delphi가 본질적으로 언어 도구이자 진정한 객체 지향적이라는 것을 의미합니다. 아래에 제시하는 예는 Delphi에서 구현된 트레이 애플릿입니다. 프로그램은 짧고 간결하며, 명확한 맥락을 바탕으로 주요 부분을 자세히 설명하겠습니다. 허우준걸 선생님이 MFC를 한 겹씩 벗겨내듯이, 오늘도 나 역시 '소를 요리'해야 한다.
델파이에서는 시스템 프로그래밍을 할 때 API 함수를 예외 없이 호출해야 하는데, ShellAPI.pas 유닛에서 사용할 API 함수의 프로토타입이 있습니다.
실제 연습:
하나. 새 응용 프로그램을 만듭니다: 파일->새 응용 프로그램 인터페이스 섹션에서 메시지 상수를 정의합니다. const WM_NID=WM_USER+1000; 시스템에서는 사용자에 대한 메시지를 WM_USER부터 사용자 정의할 수 있다고 규정합니다.
둘. 전역 변수 정의: NotifyIcon:TNotifyIconData NotifyIcon은 기본적으로 전체 프로그램이 이 변수를 중심으로 진행됩니다. TNotifyIconData는 레코드 유형입니다. Ctrl 키를 누른 채 TNotifyIconData를 두 번 클릭하여 ShellAPI.pas 유닛을 입력합니다. (참고: 델파이에서 이는 소스 코드를 분석하는 아주 좋은 방법입니다. 소스 코드는 그 자체로 말해줍니다. 프로그램 뒤에 숨겨진 이야기를 알고 싶다면 소스 코드를 분석하는 것이 가장 좋은 방법입니다!) 시간이 지나면 다음과 같은 할당문이 나타납니다.
TNotifyIconData = TNotifyIconDataA, 이 의미는 매우 분명합니다. 즉, TNotifyIconData와 TNotifyIconDataA는 동일한 데이터 유형이므로 아래를 살펴보세요.
TNotifyIconDataA = _NOTIFYICONDATAA, 의미는 이전과 동일합니다. 아래를 살펴보세요.
유형
_NOTIFYICONDATAA = 기록
cb크기: DWord;
윈드: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: AnsiChar의 배열 [0..63];
끝;
이건 정말 "오랜 시간 불려나왔는데도 여전히 비파를 들고 얼굴을 반쯤 가리고 있는 것"이다. 이제 우리가 정의한 전역 변수 NotifyIcon은 실제로 7개의 구성 요소를 포함하는 레코드 유형 변수이며 이는 C/C++의 구조 변수와 동일합니다(C/C++ 프로그래머는 매우 익숙할 것입니다.). 레코드 유형의 7가지 부분 각각의 기능을 하나씩 설명하겠습니다.
1> cbSize는 정의한 NotifyIcon 변수의 크기입니다. 이는 SizeOf(TNotifyIconData)를 사용하여 얻을 수 있습니다. 숙련된 C/C++ 프로그래머라면 이에 익숙해야 합니다. C/C++에서는 구조 변수에 메모리를 할당할 때마다 SizeOf(구조체 유형)를 사용하여 해당 구조 변수를 저장하는 데 필요한 메모리 양을 알아야 합니다.
2> Wnd는 핸들입니다. 트레이 프로그램이 생성한 메시지가 어떤 양식을 처리하도록 하시겠습니까?
예를 들어 작업 표시줄의 작은 트레이 아이콘을 클릭하여 "표시"와 "숨기기" 사이의 양식을 전환하려면 Wnd를 기본 양식으로 지정하세요.
3> uID: 여러 개의 트레이 애플릿을 생성하려는 경우 이를 어떻게 구별합니까? 이 ID 번호로 구별됩니다.
3> uFlags는 현재 생성된 트레이 프로그램의 속성을 나타내는 플래그 비트입니다.
NIF_ICON은 현재 설정된 아이콘(즉, hIcon의 값)이 유효함을 나타냅니다.
NIF_MESSAGE는 현재 설정된 시스템 메시지(즉, uCallBackMessage의 값)가 유효함을 나타냅니다.
NIF_TIP은 현재 설정된 팁 표시줄(즉, szTip 값)이 유효함을 나타냅니다.
4> uCallBackMessage 7개 부분 중 가장 중요한 부분이다. 여기에 콜백 메시지를 지정합니다. 즉, 메시지 이름을 정의합니다. 트레이 아이콘을 클릭하거나 마우스 오른쪽 버튼을 클릭하면 uCallBackMessage에 정의된 메시지 이름이 Wnd가 가리키는 양식으로 전송됩니다. 이 메시지를 처리하려면 프로그램의 메시지 출력 기능을 사용하세요. 이러한 방식으로 Windows와 관련된 전체 메시지 집합이 처리됩니다.
6> hIcon은 트레이 아이콘의 핸들입니다. 이 핸들을 기반으로 아이콘을 추가, 수정, 삭제할 수 있습니다.
7> szTip은 작업 표시줄 트레이의 작은 아이콘에 마우스를 놓을 때 나타나는 프롬프트 메시지입니다.
여기서는 TNotifyIconData의 내부 스토리를 소개하는 데 많은 시간을 투자했습니다. 이 부분이 명확해지면 나머지 부분도 제자리에 들어갈 것입니다.
삼. FormCreate의 코드 영역을 입력하려면 기본 양식을 두 번 클릭하십시오.
TForm1.FormCreate(Sender:TObject);
시작하다
//NotifyIcon은 전역 변수이며 프로그램 시작 부분에 정의되었습니다.
NotifyIcon을 사용하면
시작하다
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle; //현재 폼 Form1을 가리키는 핸들
uID:=1;
uFlags:=NIM_ICON 또는 NIM_MESSAGE 또는 NIM_TIP;
uCallBackMessage:=WM_NID;
hIcon:=application.Icon.Handle;
szTip:="장 가문의 사악한 청년";
끝;.
//처리를 위해 시스템에 설정된 변수 NotifyIcon을 추가합니다.
Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
끝;
4. 다음 단계는 메시지 처리 기능을 정의하는 것입니다. 시스템이 양식에 메시지를 보내면 다음 기능에 의해 처리됩니다. 각 메시지 처리 함수는 특정 유형의 메시지를 처리합니다. 아래 함수 본문 정의와 일반 함수 정의의 차이점을 자세히 살펴보세요. 메시지 처리 함수는 끝에 메시지 이름을 추가해야 합니다. 시스템이 보낼 때 WM_NID 메시지가 오면 WMNID 메시지 처리 기능이 자동으로 트리거됩니다.
PRocedure WMNID(var msg:TMessage);message WM_NID;
시작하다
케이스 메시지.LParam of
WM_LBUTTONUp; Form1.Visible:=Form1.Visible 아님;
WM_RBUTTONUP: ShowMessage('오른쪽 버튼을 클릭하셨습니다');
끝;
끝;
자, 누구나 자신이 좋아하는 아이콘을 설정할 수 있는 가장 간단한 프로그램이 탄생했습니다.
프로젝트->옵션에서 애플리케이션 페이지를 선택하고 아이콘 항목에 즐겨찾는 아이콘을 로드하면 프로그램이 실행될 때 즐겨찾는 아이콘이 작업 표시줄에 표시됩니다. 아이콘을 클릭하면 Form1 양식이 표시됨과 표시되지 않음 사이에서 전환됩니다. 즉, 표시하려면 클릭하고 숨기려면 다시 클릭하세요. 아이콘을 마우스 오른쪽 버튼으로 클릭하면 "오른쪽 버튼을 클릭했습니다."라는 메시지가 나타납니다.
다섯. 마지막으로 응용 프로그램을 닫을 때 생성된 트레이 프로그램을 해제해야 합니다. 그렇지 않으면 시스템 리소스를 차지하게 됩니다.
TForm1.FormDestroy(Sender:TObject);
시작하다
Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);
끝;
졸업한 지 거의 반년이 지났지만, 아직 학교에서 이해하지 못하는 것이 많고, 사회에 나가서 많은 도교 친구들을 만나 많은 유익을 얻었습니다. 경험이 생기면 늘 글로 적어서 배운 내용을 정리하고 싶어요. 둘째, 모두와 소통하자.
E_Mail: [email protected] QQ: 8133413 장가의 나쁜 소년