Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tray Icon Symbol ändern. (https://www.delphipraxis.net/107804-tray-icon-symbol-aendern.html)

FLINKER_FINGER 2. Feb 2008 13:39


Tray Icon Symbol ändern.
 
Hallo,

kann mir jmd. sagen wie ich das Tray Icon ändere. Wenn das Programm läuft würde ich gern ein anderes Icon laden. Und ist es möglich, da ich eine art Temperaturanzeigeprogramm machen möchte, das dort auch schrift steht ?
P.s. Ich benutze Delphi7 und habe keine CoolTray Komponeten.

DeddyH 2. Feb 2008 13:41

Re: Tray Icon Symbol ändern.
 
Schau mal nach Shell_NotifyIcon mit NIM_MODIFY.

toms 2. Feb 2008 13:44

Re: Tray Icon Symbol ändern.
 
Zitat:

Zitat von FLINKER_FINGER
Hallo,

kann mir jmd. sagen wie ich das Tray Icon ändere. Wenn das Programm läuft würde ich gern ein anderes Icon laden. Und ist es möglich, da ich eine art Temperaturanzeigeprogramm machen möchte, das dort auch schrift steht ?
P.s. Ich benutze Delphi7 und habe keine CoolTray Komponeten.

Kannst ja mal bei der CoolTray Komponente schauen, wie es gemacht worden ist.

FLINKER_FINGER 2. Feb 2008 14:13

Re: Tray Icon Symbol ändern.
 
Ok ich glaube ich hätte da eine Ahnung wie ich das ändern kann. Nur wo speicher ich die Icons erstmal ? Und wie und wo erstelle ich sie ? geht das mit dem mitgelieferten ImageEditor von Delphi ? Welches Format müssen die haben ?

DeddyH 2. Feb 2008 14:15

Re: Tray Icon Symbol ändern.
 
Das Format muss AFAIK *.ico sein und mit dem Bildeditor kannst Du sie erstellen (obwohl der nicht der Weisheit letzter Schluss ist).

FLINKER_FINGER 2. Feb 2008 14:19

Re: Tray Icon Symbol ändern.
 
Wenn ich damit Tmeperaturen darstellen möchte... reicht es wenn dann die Zahlen von 0 .. 9 als halbes icon erstelle und sie dann irgendwie vor dem darstellen zusammenpacke ? Wie kann man das umsetzten ?

DeddyH 2. Feb 2008 14:25

Re: Tray Icon Symbol ändern.
 
Ach du liebes bisschen, das dürfte schwierig werden. Du könntest dynamisch auf eine Speicherbitmap zeichnen und diese in ein Icon wandeln, aber trivial ist das nicht gerade.

FLINKER_FINGER 2. Feb 2008 14:32

Re: Tray Icon Symbol ändern.
 
Hmm... Aber es gibt doch schon Programm die z.B. die Temperaur vom CPU oder sonstwas ausgebem und diese dann auch im Tray anzeigen können. Ich glaueb nicht das sich da jmd. die Mühe gemacht hat und alls möglichen Temperaturen von hand gezeichnet und als icon gespeichert hat.

DeddyH 2. Feb 2008 14:34

Re: Tray Icon Symbol ändern.
 
Deshalb ja der dynamische Ansatz. Aber AFAIR kannst Du nicht direkt auf ein Icon zeichnen, sondern musst dafür zunächst eine Bitmap nehmen und diese dem Icon zuweisen. Ich lasse mich da aber gerne aufklären, falls das auch einfacher geht.

FLINKER_FINGER 2. Feb 2008 15:04

Re: Tray Icon Symbol ändern.
 
wie kann ich denn überhaupt das icon ändern das klappt bei mir einfach nicht...
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var fIcon: TIcon;
Begin
 ficon.LoadFromFile(extractfilepath(application.exename) + '63.ico');
    // was muss hier rein...
 Shell_NotifyIcon(NIM_MODIFY, @icondata);
end;
kann mir einer sagen was da rein muss...

bitsetter 2. Feb 2008 15:16

Re: Tray Icon Symbol ändern.
 
Hallo,

so eine kleine Temperaturanzeige habe ich auch mal geschrieben.
Kleiner Auszug daraus:
Delphi-Quellcode:
...
  FBmpTemp.Width:= 16;
  FBmpTemp.Height:= FBmpTemp.Width;
...

procedure TMForm.DrawBmp(Text : AnsiString);
begin
  Text:= Format('%s°', [Text]);
  FBmpTemp.Canvas.TextOut((FBmpTemp.width - FBmpTemp.Canvas.TextWidth(Text)) div 2,
    (FBmpTemp.Height - FBmpTemp.Canvas.TextHeight(Text)) div 2, Text);
  FImageList.Clear;
  FImageList.AddMasked(FBmpTemp, clWhite);
  FImageList.GetIcon(0, FIcon);
end;

...
  FGet_CPUBoardValue(addr(Value));
  DrawBmp(inttostr(Value));
  IconData.hIcon := FIcon.Handle;
  Shell_NotifyIcon(NIM_MODIFY, @IconData);
...

FLINKER_FINGER 2. Feb 2008 15:56

Re: Tray Icon Symbol ändern.
 
Hey danke für den Code ! =)

Aber ich kann noch immer das Icon nicht ändern ...

Was ist denn nur falsch an dem Code :gruebel:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var fIcon: TIcon;
Begin
 ficon.LoadFromFile(extractfilepath(application.exename) + '63.ico');
 icondata.hIcon := ficon.Handle;
 Shell_NotifyIcon(NIM_MODIFY, @icondata);
end;
Ich bekomme immer eine Access violation ...

DeddyH 2. Feb 2008 15:58

Re: Tray Icon Symbol ändern.
 
Fehlt da nicht ein Create? ;)

FLINKER_FINGER 2. Feb 2008 16:03

Re: Tray Icon Symbol ändern.
 
Das hatte ich auch schon vermutet, aber es bringt die gleiche Fehlermeldung...

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var fIcon: TIcon;
Begin
 ficon.Create;
 ficon.LoadFromFile(extractfilepath(application.exename) + '63.ico');
 icondata.hIcon := ficon.Handle;
 Shell_NotifyIcon(NIM_MODIFY, @icondata);
end;
Allerdings kommt auch ein Warnung: Variable 'fIcon' might not have been initialized
Habe ich da irgendwas falsch gemacht ?

DeddyH 2. Feb 2008 16:04

Re: Tray Icon Symbol ändern.
 
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var fIcon: TIcon;
Begin
  fIcon := Ticon.Create;
  try
    ficon.LoadFromFile(extractfilepath(application.exename) + '63.ico');
    icondata.hIcon := ficon.Handle;
    Shell_NotifyIcon(NIM_MODIFY, @icondata);
  finally
    fIcon.Free;
  end;
end;

FLINKER_FINGER 2. Feb 2008 16:07

Re: Tray Icon Symbol ändern.
 
Jetzt gehts =) danke !!
:cheers:

FLINKER_FINGER 2. Feb 2008 18:43

Re: Tray Icon Symbol ändern.
 
Habe es jetzt auch geschaft das icon dynamisch zu erstellen.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var zehner,einer : integer;
    temp: cardinal;
    szahl : STring;
    erstellticon : TIcon;
begin
  temp :=GetGpuTemp;   // gibt den Temperaturwert zurück;

  if temp > 100 then temp := temp - 100;

  szahl := inttostr(temp);
  zehner := strtoint(szahl[1]);
  einer := strtoint(szahl[2]);

  imagelist1.GetBitmap(zehner,image1.Picture.Bitmap); // Hier sind 10 Bilder (drin von 0 - 9)
  imagelist1.GetBitmap(einer,image2.Picture.Bitmap);


  BufferBox.Canvas.CopyMode := cmSrcCopy;
  BufferBox.Canvas.CopyRect(rect(0,0,16,32), image1.Canvas, rect(0,0,16,32));
  BufferBox.Canvas.CopyRect(rect(16,0,32,32), image2.Canvas, rect(0,0,16,32));

  ViewingBox.Canvas.CopyMode := cmSrcCopy;
  ViewingBox.Canvas.CopyRect(rect(0,0,32,32), BufferBox.Canvas, rect(0,0,32,32));

  erstellticon:=CreateIconFromBmp(Viewingbox.Picture.Bitmap);
  icondata.hIcon := erstellticon.Handle;
  Shell_NotifyIcon(NIM_MODIFY, @icondata);  
end;
Hoffe irgendwer kann das gebrauchen ;)

DeddyH 2. Feb 2008 18:53

Re: Tray Icon Symbol ändern.
 
Du solltest erstellticon noch freigeben. Ansonsten ist das ziemlich genau das, was ich gemeint hatte :thumb:

FLINKER_FINGER 4. Feb 2008 12:25

Re: Tray Icon Symbol ändern.
 
hmm wenn ich am Ende dieser Procedure erstellticon.free setzte, dann wird beim nächstem Minimieren das icon in der Tastkab nicht mehr angezeigt...

DeddyH 4. Feb 2008 13:16

Re: Tray Icon Symbol ändern.
 
Ich vermute mal, dass CreateIconFromBmp eine benutzerdefinierte (selbstgeschriebene) Prozedur ist. Du könntest diese doch dahingehend ändern, dass Du das Icon als Parameter übergibst. Somit sparst Du Dir das ständige Neuerstellen und Zuweisen des Handles. Das könnte dann etwa so aussehen:
Delphi-Quellcode:
//erstellticon ist meinetwegen jetzt ein privates Feld
if not Assigned(erstellticon) then
  begin
    erstellticon := TIcon.Create;
    icondata.hIcon := erstellticon.Handle;
  end;
CreateIconFromBmp(Viewingbox.Picture.Bitmap, erstellticon);
Shell_NotifyIcon(NIM_MODIFY, @icondata);
Getippt und nicht getestet (frei nach marabu ;) )


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz