Ich habe vor kurzem die TTrayIcon-Komponente in Delphi 2007 entdeckt. Der verwendete Code ist ziemlich einfach.Warum ist mein Icon in der Tray-Leiste mit TTrayIcon hässlich?
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;
Da zugewiesen kein Symbol ist, verwendet Delphi Application.Icon, die das Symbol ist: 64x64, 48x48, 32x32, 24x24 und 16x16: http://artbyloveland.com/icon.ico Dieses Symbol, um die folgenden Größen enthält.
Jetzt, auf meinem Windows Vista, alles in Ordnung.
Auf Nicht-Themen Windows-wie Windows Server 2003, ist das Ergebnis alle verkorkste:
EDIT: Zuerst dachte ich, es wegen des Alphakanals war. Also habe ich versucht, eine Version der ico-Datei ohne Alphakanal zu erstellen. Ich habe auch GreenFish Icon Editor wie von Ken vorgeschlagen versucht; Ich habe jede Farbtiefe und jede verfügbare Größe ausgewählt. In beiden Fällen ist das Endergebnis besser. Es gibt jedoch einen schwarzen Strich, der überhaupt nicht in der ico-Datei existiert.
Sie benötigen eine HICON, die kleine Symbolgröße ist. Rufen Sie GetSystemMetrics auf, um herauszufinden, wie groß das ist. Wenn der Wert beispielsweise 20 ist, haben Sie nicht die richtige Größe. Wahrscheinlicher ist, dass die Komponente ein einfaches altes LoadIcon verwendet und Sie ein 32-Pixel-Symbol haben, das erneut abgetastet wurde. –
Nun, selbst wenn es 20 wäre, könnte es etwas anderes für eine andere Computerinstallation sein, oder? Auf jeden Fall bekomme ich 16 für SM_CXSMICON auf meinem Windows 2003 Server. Ich kann den Fehler teilweise beheben, indem ich Kens Rat anwende; Es gibt jedoch immer noch einen schwarzen Strich, der in der ico-Datei nicht existiert. –
Ich rufe immer 'Shell_NotifyIcon' an und gebe ein' HICON' ein, das ich mit 'LoadImage' gemacht habe. VCL Umgang mit Symbolen ist hoffnungslos.Ich sehe keinen Beweis dafür, dass Sie etwas anderes tun, als diese Komponente "Application.Icon" verwenden zu lassen, was zum Scheitern verurteilt ist. –