8

最近、Delphi2007で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を使用します。http: //artbyloveland.com/icon.icoこのアイコンには、64x64、48x48、32x32、24x24、および16x16のサイズが含まれます。

さて、私のWindows Vistaでは、すべて問題ありません。

Windows Server 2003のようなテーマのないWindowsでは、結果はすべて台無しになります。

ねじれたアイコン

編集: 最初は、アルファチャンネルのせいだと思いました。そこで、アルファチャネルを使用せずにicoファイルのバージョンを作成しようとしました。ケンの提案に従って、GreenFishIconEditorも試しました。利用可能なすべての色深度とすべてのサイズを選択しました。どちらの場合も、最終結果はより良いものになります。ただし、icoファイルにはまったく存在しない黒いストロークがあります。

ねじれたアイコン2

4

3 に答える 3

8

アイコンを割り当てていないと述べています。この場合、コンポーネントはを使用しApplication.Iconます。ただし、これは通常、通知領域のサイズが間違っているアイコンになります。

SM_CXSMICON通知領域には、システムメトリックによって決定されたサイズの正方形のアイコンを使用する必要があります。これを取得する最良の方法はLoadImage、アイコンのサイズを指定できるように呼び出すことです。アイコンをにロードしたら、次のHICONように記述できます。

AppTrayIcon.Icon.Handle := IconHandle;
于 2012-11-28T20:29:58.023 に答える
6

アイコンに適切なサイズまたは色深度がありません。

アイコンエディタを使用して、1つのファイルに複数のサイズと色深度のアイコンを提供できます.ico。Windowsは、ユーザーの設定とビデオドライバの構成に基づいて適切なアイコンを自動的に選択します。Windowsには、最も近い一致を選択するときに使用するいくつかの選択肢があり、スケーリングとブレンディングの外観がはるかに良くなります。

私はドネーションウェアであるGreenFishIconEditorを使用しています。サポートされているグラフィックタイプを開いて、そこから複数の色深度と解像度のWindowsアイコンを自動的に作成できます(Iconメニューを参照)。Delphi 7、2007、2010、XE、およびXE3でマルチイメージアイコンファイルをテストしましたが、およびで正常に動作Application.IconTForm.Iconます。

トレイに表示するのに最適なアイコンサイズも参照してください

于 2012-11-28T13:51:55.487 に答える
1

現在、ここには完全な解決策がないため、この問題の解決策を共有したいと思いました。

これは明らかにDelphi/VCLのバグであるため、この問題は私を悩ませていました。必要なすべてのサイズ(16、24、32、48、256)のアイコンをプロジェクトに割り当てると、DelphiはTTrayIconで正しいサイズを自動的に使用する必要がありますが、代わりに32pxのアイコンのみを取得して縮小します。

必要な画像はすでにexeファイル(Windowsエクスプローラーに表示するため)に含まれているため、次のように簡単に修正できます。

procedure FixTrayIcon(TrayIcon: TTrayIcon);
var
  i: Integer;
begin
  i := GetSystemMetrics(SM_CXSMICON); //Gets the correct size for the tray (e.g. 16)
  TrayIcon.Icon.Handle := LoadImage(hInstance, 'MAINICON', IMAGE_ICON, i, i, LR_DEFAULTCOLOR);
  TrayIcon.SetDefaultIcon; //Updates the icon
end;

FormCreateで呼び出すだけで、トレイアイコンがデザインどおりに表示されます。

于 2019-07-09T17:20:01.753 に答える