2012-11-28 1 views
8

저는 Delphi 2007에서 TTrayIcon 컴포넌트를 발견했습니다. 사용 된 코드는 매우 간단합니다. 64 × 64, 경우 48x48, 32 × 32, 16 × 16 및 24x24 : http://artbyloveland.com/icon.ico이 아이콘 크기는 다음을 포함한다 : 할당 된 아이콘이 없으므로TTrayIcon이 설치된 트레이 막대에 내 아이콘이 왜 못 생깁니 까?

procedure TForm1.FormCreate(Sender: TObject); 
begin 
AppTrayIcon := TTrayIcon.Create(nil); 
AppTrayIcon.OnDblClick := OnAppTrayIconDblClick; 
Application.OnMinimize := OnApplicationMinimize; 
Application.OnRestore := OnApplicationRestore; 
end; 

procedure TForm1.OnApplicationRestore(Sender: TObject); 
begin 
AppTrayIcon.Visible := False; 
ShowWindow(Application.Handle, SW_SHOW); 
Application.BringToFront; 
end; 

procedure TForm1.OnApplicationMinimize(Sender: TObject); 
begin 
AppTrayIcon.Visible := True; 
ShowWindow(Application.Handle, SW_HIDE); 
end; 

procedure TForm1.OnAppTrayIconDblClick(Sender: TObject); 
begin 
Application.Restore; 
end; 

Delphi는 해당 아이콘이다 Application.Icon을 사용한다.

내 Windows Vista에서는 모든 것이 정상입니다. 비 테마 윈도우 윈도우와 같은 Server 2003에서

는, 결과는 모든 나사 - 최대 :

Screwed-up icon

편집 : 처음에는 , 나는 그것 때문에 알파 채널의 생각했다. 그래서 알파 채널을 사용하지 않고 ico 파일 버전을 만들려고했습니다. Ken이 제안한 GreenFish Icon Editor도 시도해 보았습니다. 나는 모든 색상의 깊이와 모든 크기를 선택했습니다. 두 경우 모두 최종 결과가 더 좋습니다. 그러나 ico 파일에는 전혀없는 검은 선이 있습니다.

Screwed-up icon 2

+0

아이콘 크기가 작은 HICON이 필요합니다. 얼마나 큰지 알아 내기 위해 GetSystemMetrics를 호출하십시오. 예를 들어 값이 20 인 경우 올바른 크기가 없습니다. 아마도이 컴포넌트는 평범한 오래된 LoadIcon을 사용하고 있으며, 다시 샘플링 된 32px 아이콘이 있습니다. –

+0

글쎄요, 그것이 20 살이더라도 다른 컴퓨터 설치를 위해서는 뭔가 다른 것이 될 수 있습니다. 맞습니까? 어쨌든 내 Windows 2003 서버에서 SM_CXSMICON에 대해 16을 얻습니다. Ken의 충고를 적용하여 부분적으로 버그를 수정할 수 있습니다. 그러나 여전히 ico 파일의 첫 번째 위치에는 존재하지 않는 검은 획이 남아 있습니다. –

+0

나는 항상'Shell_NotifyIcon'을 호출하고'LoadImage'로 만든'HICON'을 전달합니다. VCL 처리 아이콘은 절망적입니다.나는 당신이이 컴포넌트가'Application.Icon'을 사용하도록하는 것 이외의 일을한다는 어떠한 증거도 보지 못했습니다. 그리고 그것은 실패 할 운명입니다. –

답변

8

당신의 상태를 참조하십시오. 이 경우 구성 요소는 Application.Icon을 사용합니다. 하지만 일반적으로 알림 영역의 크기가 잘못된 아이콘이됩니다.

알림 영역의 경우 시스템 메트릭이 SM_CXSMICON 인 정사각형 아이콘을 사용해야합니다. 이를 얻는 가장 좋은 방법은 아이콘 크기를 지정할 수있는 LoadImage으로 전화하는 것입니다. HICON에 아이콘을로드하면 다음과 같이 쓸 수 있습니다.

AppTrayIcon.Icon.Handle := IconHandle; 
+0

+1. 잘 했어, 데이빗. 실제로 질문에 (최종 코드 블록 이후의 첫 번째 문장), 그러나 나는 그것을 놓쳤다 (그리고 분명히 다른 모든 사람들도 마찬가지였다). –

+0

@Ken 감사합니다. 지금 텍스트를 개선했습니다. –

6

당신은 당신의 아이콘에 대한 적절한 크기와 색 농도를 필요가 없습니다.

아이콘 편집기를 사용하여 하나의 .ico 파일에 여러 크기 및 색상 심도 아이콘을 제공 할 수 있으며 Windows는 자동으로 사용자 설정 및 비디오 드라이버 구성을 기반으로 적절한 아이콘을 선택합니다. 그런 다음 Windows는 가장 가까운 일치 항목을 선택할 때 여러 가지 선택 항목을 사용하게되며 크기 조정 및 혼합이 훨씬 더 좋은 모양을 갖게됩니다.

나는 기부금 인 GreenFish Icon Editor을 사용합니다. 지원되는 모든 그래픽 유형을 연 다음 여러 색상 수와 해상도로 자동으로 Windows 아이콘을 만들 수 있습니다 (Icon 메뉴 참조). 필자는 Delphi 7, 2007, 2010, XE 및 XE3에서 다중 이미지 아이콘 파일을 테스트했으며 Application.IconTForm.Icon에 대해서는 정상적으로 작동합니다.

또한이 아이콘을 할당하지 않는 Best Icon size for displaying in the tray

+0

아이콘 편집기에 대한 링크가 맞습니까? –

+0

질문에 이미 파일에 5 개의 아이콘 크기가 있다고합니다. 알림 영역에서 열거 된 크기가 부족한 크기는 무엇입니까? –

+0

@Andreas : GFIE 자체의 Help-> About 페이지에서 복사했습니다. 대신 다운로드 링크로 수정하겠습니다 (지금 현재 어디에 있는지 알 수는 없습니다). –