Ereignisaufruf zuweisen - Fehlermeldung - TrayIcon

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
snowman
Beiträge: 9
Registriert: Fr 19. Aug 2011, 08:08
OS, Lazarus, FPC: Windows XP/7 (Lazarus 0.9.30 FPC 2.2.z)
CPU-Target: 32/64Bit

Ereignisaufruf zuweisen - Fehlermeldung - TrayIcon

Beitrag von snowman »

Hallo,

ich bin jetzt neu mit Lazarus unterwegs, habe aber vorher schon ein bisschen was mit Delphi programmiert.

Ich habe mir einen Beispielcode zum Tray-Icon aus dem Internet gesucht:
http://www.planet3dnow.de/vbulletin/sho ... ostcount=4" onclick="window.open(this.href);return false;

Unter Lazarus bekomme ich aber eine Fehlermeldung in der Zeile:

Code: Alles auswählen

Application.OnMinimize := FormMinimieren;

Code: Alles auswählen

main.pas(64,43) Error: Wrong number of parameters specified for call to "FormMinimieren"
Achso FormMinimieren ist do deklariert:

Code: Alles auswählen

procedure FormMinimieren(Sender: TObject);
Soweit ich weiß, müsste dies unter Delphi richtig sein. Wie muss es aber unter Lazarus zugewiesen werden?
Zuletzt geändert von snowman am Mo 22. Aug 2011, 08:15, insgesamt 1-mal geändert.
ciao
Martin

snowman
Beiträge: 9
Registriert: Fr 19. Aug 2011, 08:08
OS, Lazarus, FPC: Windows XP/7 (Lazarus 0.9.30 FPC 2.2.z)
CPU-Target: 32/64Bit

Re: Ereignisaufruf zuweisen - Fehlermeldung

Beitrag von snowman »

Und noch etwas, was unter Delphi funktioniert unter Lazarus aber nicht:

Code: Alles auswählen

Shell_NotifyIcon(NIM_DELETE,@NID);
Dafür bekomme ich die Meldung:
main.pas(77,3) Error: Can't determine which overloaded function to call
ciao
Martin

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Ereignisaufruf zuweisen - Fehlermeldung

Beitrag von MAC »

herzlich willkommen hier im Lazarusforum

Der fehler ist anz einfach zu beheben, indem man ein @ davor schreibt, also so:

Code: Alles auswählen

Application.OnMinimize := @FormMinimieren;
Der Grund?
Der FPC sieht das etwas strenger als Delphi und würde versuchen die Procedure FormMinimieren aufzurufen (deswegen steht da auch nicht genügend Parameter, weil er den Parameter Sender erwartet...) Das ergebnis der procedure FormMinimieren will der FP Compiler dann an Application.OnMinimize geben.
Da FormMinimieren aber ne procedure ist und kein ergebnis hat ist das natürlich recht "sinnlos", Delphi erkennt das und macht es automatisch so wie man es will.
Bei FPC muss man noch extra Deklarieren, das man nicht FormMinimieren aufrufen will, sondern einen Pointer davon übergeben will, deshalb das @ davor...
FPC ist übrigens der Free Pascal Compiler.

Edit:
Welche units hast du bei dem 2ten Fehler extra eingebunden ?
Danke

Code: Alles auswählen

Signatur := nil;

snowman
Beiträge: 9
Registriert: Fr 19. Aug 2011, 08:08
OS, Lazarus, FPC: Windows XP/7 (Lazarus 0.9.30 FPC 2.2.z)
CPU-Target: 32/64Bit

Re: Ereignisaufruf zuweisen - Fehlermeldung

Beitrag von snowman »

Danke schon mal, hast du ja richtig ausführlich beschrieben :mrgreen: .

Ich habe die "ShellAPI" eingebunden bzw. hier alle units :

Code: Alles auswählen

Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Windows, Messages, Variants, ShellAPI, Menus;
PS:
FPC ist übrigens der Free Pascal Compiler.
Das wird ja schon als Sicherheitsabfrage bei der Anmeldung hier im Forum abgefragt :wink:
ciao
Martin

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Ereignisaufruf zuweisen - Fehlermeldung

Beitrag von MAC »

:)

versuch mal

Code: Alles auswählen

var
 x:PNOTIFYICONDATAW; 
begin
x := @NID;
Shell_NotifyIcon(NIM_DELETE,@NID);
end;
Da sind anscheinend 2 Shell_NotifyIcon.
Die ein unterschiedlichen 2ten Parameter haben, einmal
PNOTIFYICONDATAA
PNOTIFYICONDATAW
// Das letzte A, bzw W...
der unterschied ist glaub ich, der mit den W benutzt WChar und der andere Char in dem Record...

Code: Alles auswählen

Signatur := nil;

snowman
Beiträge: 9
Registriert: Fr 19. Aug 2011, 08:08
OS, Lazarus, FPC: Windows XP/7 (Lazarus 0.9.30 FPC 2.2.z)
CPU-Target: 32/64Bit

Re: Ereignisaufruf zuweisen - Fehlermeldung

Beitrag von snowman »

Danke für die Hilfe, ich komme aber erst Montag dazu das zu testen.

ciao und ein schönes Wochenende.
ciao
Martin

snowman
Beiträge: 9
Registriert: Fr 19. Aug 2011, 08:08
OS, Lazarus, FPC: Windows XP/7 (Lazarus 0.9.30 FPC 2.2.z)
CPU-Target: 32/64Bit

Re: Ereignisaufruf zuweisen - Fehlermeldung

Beitrag von snowman »

Der Code von dir führt zur gleichen Fehlermeldung. Erst wenn ich dem Funktionsaufruf auch noch das "A" spendiere funktioniert es :

Code: Alles auswählen

var
  NID: TNotifyIconDataA;
begin
  Shell_NotifyIconA(NIM_DELETE,@NID);
end;
Inzwischen habe ich aber auch TTrayIcon entdeckt :) .
Zuletzt geändert von snowman am Di 23. Aug 2011, 08:15, insgesamt 1-mal geändert.
ciao
Martin

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Ereignisaufruf zuweisen - Fehlermeldung - TrayIcon

Beitrag von MAC »

... und ich hab mir gedacht du hättest das extra so kompliziert (ohne TTrayIcon) gemacht ;D

Code: Alles auswählen

Signatur := nil;

snowman
Beiträge: 9
Registriert: Fr 19. Aug 2011, 08:08
OS, Lazarus, FPC: Windows XP/7 (Lazarus 0.9.30 FPC 2.2.z)
CPU-Target: 32/64Bit

Re: Ereignisaufruf zuweisen - Fehlermeldung - TrayIcon

Beitrag von snowman »

Sagen wir es jetzt mal so, auch wenn ich TTrayIcon verwende, habe ich daraus was gelernt.
ciao
Martin

Antworten