Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 5%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 392 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

benniwm

Routinier

Dabei seit: 03.02.2004

Beiträge: 484

 

1 Zum Seitenanfang

Mittwoch, 22. Dezember 2004, 16:59

Änderung des SystrayIcon bei Ereigniss?

hi,
bei icq verändert sich das Systray icon ja wenn man ne nachricht bekommt.
kann ich das mit delphi auch verwirklichen?
es is für nen netzwerkchat gedacht, der hauptsächlich in der schule verwendet wird.
Das programm läuft also minimiert mit dem Icon in der systray, wenn jetzt ne nachricht kommt sollte sich das icon ändern.
versteht ihr was ich meine?
If liberty means anything at all, it means the right to tell people what they do not want to hear. - Georg Orwell
 

Abi_Andy

Haudegen

Dabei seit: 02.04.2003

Beiträge: 681

 

2 Zum Seitenanfang

Mittwoch, 22. Dezember 2004, 20:32

Klar ist das möglich, es gibt im Grunde nix was nicht möglich ist mit Delphi. Das einzige, was ich mich jetzt noch frage, bevor ich dir helfen kann ist, ob du schon ein Systray-Icon implementiert hast, oder ob du im Moment mit leeren Händen da stehst. Falls du bereits nen Systray-Icon haben solltest, so lass mir doch mal den Quelltext zu kommen, so dass ich dir sagen kann, wie du das Icon ändern kannst.
Warum kann ein Tag nicht 36 Stunden haben? ://
 

benniwm

Routinier

Dabei seit: 03.02.2004

Beiträge: 484

 

3 Zum Seitenanfang

Mittwoch, 22. Dezember 2004, 20:56

hi,
ich hab den code von swissdelphi center:

Quellcode

1
2
private
   procedure Systray(var sMsg: TMessage); message IC_CLICK;

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
  Form1.FormStyle:=fsStayOnTop;
  Hide;
  with NIM do begin
    cbSize := SizeOf (nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    hIcon := Application.Icon.Handle;
    szTip := 'NetworkMessenger';
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);
end;

procedure TForm1.Systray(var sMsg: TMessage);
begin
  inherited;
  if (sMsg.LParam = WM_LBUTTONDOWN) then begin
    Show;
    Shell_NotifyIcon(NIM_DELETE, @NIM);
    Application.Restore; //zeigt die Anwendung wieder an
  end;
end;
If liberty means anything at all, it means the right to tell people what they do not want to hear. - Georg Orwell
 

Abi_Andy

Haudegen

Dabei seit: 02.04.2003

Beiträge: 681

 

4 Zum Seitenanfang

Mittwoch, 22. Dezember 2004, 22:20

Ich weiß nicht genau, welchen Tipp du von der Seite verwendest und habe selber nur diesen hier gefunden: http://www.swissdelphicenter.ch/de/showcode.php?id=1303

Falls du den Tipp bereits verwendest, dann ist es die Methode "procedure TTrayIcon.SetIcon(Icon: TIcon);" der Komponente "TTrayIcon" die du suchst. Konkret wäre dann der Befehl für das ändern des Icons:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
USES .... + StrUtils
...
...
...
procedure WannAuchImmer(Sender: TObject);
  var imgTrayIcon1, imgTrayIcon2 : TImage;
  var DateiName : String;
begin
  Dateiname := LeftStr(Application.ExeName,LastDelimiter('\',Application.ExeName)) & 'icons\TrayIcon1.ico';
  imgTrayIcon1.Picture.LoadFromFile(Dateiname);
  Dateiname := LeftStr(Application.ExeName,LastDelimiter('\',Application.ExeName)) & 'icons\TrayIcon2.ico';
  imgTrayIcon2.Picture.LoadFromFile(Dateiname);
  // Und dann halt entweder:
 TrayIcon1.SetIcon(imgTrayIcon1);
  // oder:
 TrayIcon1.SetIcon(imgTrayIcon2);

  //je nach dem, welches Icon du haben willst.
end;
end;


Das Beispiel geht davon aus, dass deine "TTrayIcon"-Komponente auf der Form "TrayIcon1" heisst und dass die Prozedur "WannAuchImmer()" eine Methode der Form ist (z.b. Minimieren, Schliessen, aber auch Button1.Click(), etc.). Weiterhin solltest du, wie unschwer zu erkennen einen Unterordner "icons" im Verzeichnis deiner EXE-Datei haben und darin sollten sich die Dateien "TrayIcon1.ico" und "TrayIcon2.ico" befinden. Wenn dir das alles zu kompliziert ist und du die Icons lieber schon bei der Entwicklung einbinden willst, dann erzeuge zwei Images auf der Form mit Namen: ImgTrayIcon1, ImgTrayIcon2 und rufe "TrayIcon1.SetIcon()" folgendermaßen auf:

Quellcode

1
TrayIcon1.SetIcon(imgTrayIcon1.Picture.Icon);


Falls du jetzt allerdings die Unit die ich oben gepostet habe nicht verwendest, sondern einen anderen Code, den ich nicht auf Anhieb dort gefunden habe, stehst du vor der Entscheidung, entweder diese Unit zusammen mit meinen Tipps zu verwenden, oder aber noch einmal zu posten und mir den Link zukommen zu lassen, so dass ich mir das mal genauer anschauen kann ;)

Viel Erfolg bei was auch immer doch codest :)
Warum kann ein Tag nicht 36 Stunden haben? ://

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Abi_Andy« (23. Dezember 2004, 01:22)

 

benniwm

Routinier

Dabei seit: 03.02.2004

Beiträge: 484

 

5 Zum Seitenanfang

Montag, 27. Dezember 2004, 10:55

sorry das ich jetzt erst schreib.
ich hab die Komponente ApplicationEvents und den code hier:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
       //Vorgang: Minimieren der Anwendung, Entfernung des Taskleisteneintrags
  //und Hinzufügen des Programmicons neben der Uhr
  Form1.FormStyle:=fsStayOnTop;
  Hide;
  with NIM do begin
    cbSize := SizeOf (nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    hIcon := Application.Icon.Handle;
    szTip := 'NetworkMessenger';
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);
end;

procedure TForm1.Systray(var sMsg: TMessage);
begin
  // Vorgang: Klick auf das Icon neben der Uhr und Anzeige der Anwendung
  inherited;
  if (sMsg.LParam = WM_LBUTTONDOWN) then begin
    Show;
    Shell_NotifyIcon(NIM_DELETE, @NIM);
    Application.Restore; //zeigt die Anwendung wieder an
  end;
end;

ich habs doch nicht von swissdelphicenter, sorry
If liberty means anything at all, it means the right to tell people what they do not want to hear. - Georg Orwell
 

Abi_Andy

Haudegen

Dabei seit: 02.04.2003

Beiträge: 681

 

6 Zum Seitenanfang

Montag, 27. Dezember 2004, 12:34

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
  var imgTrayIcon1, imgTrayIcon2 : TPicture;
  var DateiName : String;
begin
  Dateiname := (LeftStr(Application.ExeName,LastDelimiter('\',Application.ExeName)) + 'icons\TrayIcon1.ico');
  imgTrayIcon1.LoadFromFile(Dateiname);
  Dateiname := (LeftStr(Application.ExeName,LastDelimiter('\',Application.ExeName)) + 'icons\TrayIcon2.ico');
  imgTrayIcon2.LoadFromFile(Dateiname);

   //Vorgang: Minimieren der Anwendung, Entfernung des Taskleisteneintrags
  //und Hinzufügen des Programmicons neben der Uhr
  Form1.FormStyle:=fsStayOnTop;
  Hide;
  with NIM do begin
    cbSize := SizeOf (nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    //hIcon := Application.Icon.Handle;
    //jetzt entweder:
    hIcon := imgTrayIcon1.Icon.Handle;
    //oder:
    hIcon := imgTrayIcon2.Icon.Handle;
    //je nachdem welches der beiden Icons du nehmen willst.
    szTip := 'NetworkMessenger';
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);
end;

procedure TForm1.Systray(var sMsg: TMessage);
begin
  // Vorgang: Klick auf das Icon neben der Uhr und Anzeige der Anwendung
  inherited;
  if (sMsg.LParam = WM_LBUTTONDOWN) then begin
    Show;
    Shell_NotifyIcon(NIM_DELETE, @NIM);
    Application.Restore; //zeigt die Anwendung wieder an
  end;
end;


Ist ungeprüft, sollte aber denke ich funktionieren. Ich kann das nicht testen, weil bei mir irgendwie die Komponente "ApplicationEvents" fehlt. Ich verwende nämlich immer noch die damals kostenlose Delphi 6 Personal ... und bin im Grunde immer noch zufrieden ;)

Versuchs einfach mal so. Wenn's nicht geht, poste halt wieder ... bin aber erst am dienstag Abend wieder hier.
Warum kann ein Tag nicht 36 Stunden haben? ://
 

benniwm

Routinier

Dabei seit: 03.02.2004

Beiträge: 484

 

7 Zum Seitenanfang

Montag, 27. Dezember 2004, 13:07

hab noch nicht getestet.

Zitat

Ich verwende nämlich immer noch die damals kostenlose Delphi 6 Personal

Die Komponente ist doch bei der 5er vers. schon dabei.
If liberty means anything at all, it means the right to tell people what they do not want to hear. - Georg Orwell
 

Abi_Andy

Haudegen

Dabei seit: 02.04.2003

Beiträge: 681

 

8 Zum Seitenanfang

Montag, 27. Dezember 2004, 13:28

Ich hab sie dennoch nicht ... vielleicht gibts die nur in der Pro-Version aufwärts ;)

Viel Spaß beim Testen, ich bin dann jetzt offline. Schönen Tag noch und lass nicht wieder so lange auf ne Antwort warten, okay? ;)
Warum kann ein Tag nicht 36 Stunden haben? ://
 

benniwm

Routinier

Dabei seit: 03.02.2004

Beiträge: 484

 

9 Zum Seitenanfang

Montag, 27. Dezember 2004, 23:03

Verzweiflung!!
Es geht nicht!

Quellcode

1
LeftStr

Undefinierter Bezeichner.
und wenn ich den ganzen Pfad angebe also:

Quellcode

1
Dateiname := Pfad:\zum\icon.ico;

dann kommt wenn ich im laufendem Programm auf Minimieren klicke die Meldung, dass das Programm wegen einem Fehler beendet wurde...
If liberty means anything at all, it means the right to tell people what they do not want to hear. - Georg Orwell
 

Abi_Andy

Haudegen

Dabei seit: 02.04.2003

Beiträge: 681

 

10 Zum Seitenanfang

Dienstag, 28. Dezember 2004, 22:00

Das Problem mit LeftStr ist das selbe wie in der ersten Version ganz oben ;) Einfach mal "StrUtils" bei USES eintragen und dann mal schauen!
Warum kann ein Tag nicht 36 Stunden haben? ://
 

benniwm

Routinier

Dabei seit: 03.02.2004

Beiträge: 484

 

11 Zum Seitenanfang

Dienstag, 28. Dezember 2004, 22:22

sorry geht nicht. ;(
If liberty means anything at all, it means the right to tell people what they do not want to hear. - Georg Orwell
 

Abi_Andy

Haudegen

Dabei seit: 02.04.2003

Beiträge: 681

 

12 Zum Seitenanfang

Dienstag, 28. Dezember 2004, 22:52

Die Fehlerbeschreibung die du mir eben geliefert hast ist äusserst präzise *glaskugelanschalt* ;)
Warum kann ein Tag nicht 36 Stunden haben? ://
 

benniwm

Routinier

Dabei seit: 03.02.2004

Beiträge: 484

 

13 Zum Seitenanfang

Mittwoch, 29. Dezember 2004, 17:52

Das Problem wurde gelöst, hier ist der funktionierende Code von Abi_Andy

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
  var Dateiname : String;
  var imgTrayIcon1, imgTrayIcon2 : TIcon;
begin
  imgTrayIcon1 := TIcon.Create;
  imgTrayIcon2 := TIcon.Create;

  Dateiname := (ExtractFilePath(ParamStr(0))+'icons\TrayIcon1.ico');
  if FileExists(Dateiname) then imgTrayIcon1.LoadFromFile(Dateiname)
    else ShowMessage('Das Icon "TrayIcon1.ico" konnte nicht im Unterverzeichnis ' +
                     '"icons" gefunden werden!');

  Dateiname := (ExtractFilePath(ParamStr(0))+'icons\TrayIcon2.ico');
  if FileExists(Dateiname) then imgTrayIcon2.LoadFromFile(Dateiname)
    else ShowMessage('Das Icon "TrayIcon2.ico" konnte nicht im Unterverzeichnis ' +
                     '"icons" gefunden werden!');

   //Vorgang: Minimieren der Anwendung, Entfernung des Taskleisteneintrags
  //und Hinzufügen des Programmicons neben der Uhr
  Form1.FormStyle:=fsStayOnTop;
  Hide;
  with NIM do begin
    cbSize := SizeOf (nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;

    //jetzt entweder:
    hIcon := imgTrayIcon1.Handle;
    //oder:
    hIcon := imgTrayIcon2.Handle;
    //je nachdem welches der beiden Icons du nehmen willst.

    szTip := 'NetworkMessenger';
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);
end;

procedure TForm1.Systray(var sMsg: TMessage);
begin
  // Vorgang: Klick auf das Icon neben der Uhr und Anzeige der Anwendung
  inherited;
  if (sMsg.LParam = WM_LBUTTONDOWN) then begin
    Show;
    Shell_NotifyIcon(NIM_DELETE, @NIM);
    Application.Restore; //zeigt die Anwendung wieder an
  end;
end;

vielen dank an abi_andy
If liberty means anything at all, it means the right to tell people what they do not want to hear. - Georg Orwell