PopUp Menue bei Systray Icon

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
lycaner
Beiträge: 56
Registriert: Mi 20. Jul 2011, 13:29
OS, Lazarus, FPC: Winux (L 1.4.4 FPC 2.6.)
CPU-Target: 64 Bit AMD
Wohnort: Bern, Schweiz

PopUp Menue bei Systray Icon

Beitrag von lycaner »

Hallo Lazarus Gemeinde,

ich habe mir das Package mit dem SysTray zur Brust genommen und bei mir soweit als möglich nachgebaut.
Nun funktioniert das ganze aber leider nicht.

Code: Alles auswählen

// Under Windows we get the path of the executable
{$IFDEF Windows}
  pathMedia := ExtractFilePath(Application.ExeName);
{$ENDIF}
 
  IncludeTrailingBackslash(pathMedia);
 
  TrayIcon1.Hint := 'SMIS santifit Mitarbeiter Informations System';
 
  TrayIcon1.OnClick := TForm1.HandleClick ;
 
  TrayIcon1.PopUpMenu := PopupMenu;
 
end;
Beim TryIcon1.Click := HandleClick ; bleibt der Compiler stehen. fehler:

Code: Alles auswählen

main.pas(197,43) Error: Wrong number of parameters specified for call to "HandleClick"
im, HandelClick steht:

Code: Alles auswählen

procedure TForm1.HandleClick(Sender: TObject);
begin
  Application.MessageBox('Text', 'Caption', 0);
// Application.MessageBox('Text')  ;
end;
Also wie gesagt ich komme nicht weiter und weis leider nicht was ich falsch gemacht haben soll. Ohne TrayIcon1.OnClick := TForm1.HandleClick
geht das ganze, dafür habe ich aber keine PopUp Info und keine weiteren möglichkeiten die zu nutzen.

Könnt Ihr mir vielleicht weiter Helfen ?

Ich danke und wünsche nen schönen Tag.

Chris

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: PopUp Menue bei Systray Icon

Beitrag von Socke »

lycaner hat geschrieben:

Code: Alles auswählen

TrayIcon1.OnClick := TForm1.HandleClick ;
Hallo,

Free Pascal ist bei Methodenzeigern etwas strikter als Delphi, du musst also explizit die Adresse der gewünschten Methode übergeben:

Code: Alles auswählen

TryIcon1.OnClick := @Self.Handleclick;
Ansonsten versucht der Compiler die Methode HandleClick() aufzurufen und das Ergebnis an TryIcon1.OnClick zu übergeben -- das funktioniert nur nicht (weil HandleClick() nichts zurückgibt) und hat inhaltlich auch nicht wirklich Sinn.

Der andere Punkt ist, dass TForm1.HandleClick() eine Methode einer Klasse (TForm1 ist die Klasse deines Formulars) ist, ein Event-Handler in der Regel aber eine Methode eines Objektes (also einer existierenden Instanz einer Klasse) ist. Das Schlüsselwort Self liefert immer das gerade aktuelle Objekt (natürlich nur innerhalb von Objekt-Methoden).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

lycaner
Beiträge: 56
Registriert: Mi 20. Jul 2011, 13:29
OS, Lazarus, FPC: Winux (L 1.4.4 FPC 2.6.)
CPU-Target: 64 Bit AMD
Wohnort: Bern, Schweiz

Re: PopUp Menue bei Systray Icon

Beitrag von lycaner »

Hallo Socke,
Socke hat geschrieben:
Hallo,

Free Pascal ist bei Methodenzeigern etwas strikter als Delphi, du musst also explizit die Adresse der gewünschten Methode übergeben:

Code: Alles auswählen

TryIcon1.OnClick := @Self.Handleclick;
Ansonsten versucht der Compiler die Methode HandleClick() aufzurufen und das Ergebnis an TryIcon1.OnClick zu übergeben -- das funktioniert nur nicht (weil HandleClick() nichts zurückgibt) und hat inhaltlich auch nicht wirklich Sinn.
Vielen Dank für Deine Hilfe, jetzt gehts, ich habe wohl zu wenig probiert. :)

Gruss

Chris

Antworten