Autor Beitrag
Christian213
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66
Erhaltene Danke: 3

Win XP, Win 7 64Bit
Lazarus 1.0.10
BeitragVerfasst: Fr 02.08.13 10:39 
Hallo,

in Delphi ab 2009 scheint folgendes möglich:
ausblenden Delphi-Quelltext
1:
type TNTDownLoadProgressCallBack = reference to procedure(Current, Total: Cardinal);					

Das funzt in Lazarus (noch) nicht. Wo genau ist der Unterschied zu einer Typdefinition wie:
ausblenden Delphi-Quelltext
1:
type TNTDownLoadProgressCallBack = procedure(Current, Total: Cardinal);					

Und wie könnte man die o.g. Definition ohne "reference to" abbilden?

Danke :-)
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 02.08.13 10:44 
user profile iconChristian213 hat folgendes geschrieben Zum zitierten Posting springen:
Wo genau ist der Unterschied zu einer Typdefinition wie:


Das gibt an, dass es sich um eine anonyme procedure/function handelt.
Du könntest also in Delphi ein Function schreiben, die Dir nach Auswertung der Parameter jeweils verschiedene functions/procedures zurückgibt. Diese Rückgabetyp definiert man mit reference to
Wie Du das in Lazarus abbilden kannst, weiß ich leider nicht, da ich nicht mit Lazarus arbeite.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: Christian213
Christian213 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66
Erhaltene Danke: 3

Win XP, Win 7 64Bit
Lazarus 1.0.10
BeitragVerfasst: Fr 02.08.13 10:54 
Hallo Jens,

Danke für die Antwort.
Funktionsdefintionen als Übergabeparameter benutze ich in Lazarus ja bereits, dort habe ich als Typedefinition dann einfach
ausblenden Delphi-Quelltext
1:
type TMeineProcedur = procedure(A, B: Integer);					

oder wie auch immer. Das funktioniert auch, solange der Variablentyp und die Anzahl bei der Zielfunktion passen.
Nur wo ist der Unterschied zu einer "anonymen Prozedur"? Kann ich das "reference of" evtl. einfach weglassen?
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 02.08.13 11:42 
Eine anonyme procedure kannst Du ohne Namen erstellen.

Das sähe ungefährt so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
type Tproc = reference to procedure(A : Integer);

procedure TuWas;
var
  bla : Tproc;
begin

  if Aussentemperatur > 30°C then
  begin
    bla := procedure(A : Integer)
      begin
        MachwasmitA(A);
      end;
  end
  else 
  begin
    bla := procedure(A : integer)
      begin
        MasWasAnderesMitA(A);
      end;
  end;

  bla(42);
end;

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: Christian213
Christian213 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66
Erhaltene Danke: 3

Win XP, Win 7 64Bit
Lazarus 1.0.10
BeitragVerfasst: Fr 02.08.13 12:24 
Ok, dann kann ich in meinem konkreten Fall darauf wirklich verzichten.
Wunderbar, vielen Dank nochmal.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 02.08.13 14:45 
Lazarus hat dafür "is nested" als suffix (so wie "of object"), was es dir erlaubt, lokale Funktionen weiterzugeben.

Das ist quasi die Version, die etwas näher an der Sprache Pascal dran bleibt ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."

Für diesen Beitrag haben gedankt: Christian213