AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Aufruifen von Generic Anonymous methods

Ein Thema von TigerLilly · begonnen am 15. Okt 2019 · letzter Beitrag vom 15. Okt 2019
Antwort Antwort
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
583 Beiträge
 
Delphi 10.3 Rio
 
#1

Aufruifen von Generic Anonymous methods

  Alt 15. Okt 2019, 17:40
Delphi-Version: 10.2 Tokyo
Ich habe

Code:
 TBaseForm = class(TForm)
    procedure ShowHourGlass(Proc: TProc);
  ...
 end;

TbaseForm.ShowHourGlass(Proc: TProc);
begin
  Proc;
end;
Das funktioniert gut. Daselbe wollte ich für Methoden mit einem Parameter machen:

Code:
 TBaseForm = class(TForm)
    procedure ShowHourGlass(Proc: TProc<string>);
  ...
 end;

TbaseForm.ShowHourGlass(Proc: TProc<string>);
begin
  Proc(?);
end;
Aber wie rufe ich die Prozedur dann auf? Was übersehe ich?
Danke für jede Erleuchtung!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.063 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Aufruifen von Generic Anonymous methods

  Alt 15. Okt 2019, 17:53
Delphi-Quellcode:
  TProc<T> = reference to procedure (Arg1: T);
  TProc<T1,T2> = reference to procedure (Arg1: T1; Arg2: T2);
  TProc<T1,T2,T3> = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3);
  TProc<T1,T2,T3,T4> = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3; Arg4: T4);

Folglich: Proc('Hallo Welt');
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
583 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Aufruifen von Generic Anonymous methods

  Alt 15. Okt 2019, 18:19
Das hilft mir nicht. Ich möchte ja den Parameter weiterreichen.

Ich habe woanders eine Prozedur TuWas(s:string); und diese übergebe ich an ShowHourGlass(TuWas('Hallo'));

Ich hätte ja auf Proc(Arg1); getippt, aber das war falsch.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
372 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Aufruifen von Generic Anonymous methods

  Alt 15. Okt 2019, 20:06
Ich habe

Code:
 TBaseForm = class(TForm)
    procedure ShowHourGlass(Proc: TProc);
  ...
 end;

TbaseForm.ShowHourGlass(Proc: TProc);
begin
  Proc;
end;
Das funktioniert gut. Daselbe wollte ich für Methoden mit einem Parameter machen:

Code:
 TBaseForm = class(TForm)
    procedure ShowHourGlass(Proc: TProc<string>);
  ...
 end;

TbaseForm.ShowHourGlass(Proc: TProc<string>);
begin
  Proc(?);
end;
Aber wie rufe ich die Prozedur dann auf? Was übersehe ich?
Danke für jede Erleuchtung!
Du brauchst halt eine String-Variable oder Konstante, die innerhalb von Showhourglass sichtbar ist und die übergibst Du an Proc.
Peter Below
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.063 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Aufruifen von Generic Anonymous methods

  Alt 15. Okt 2019, 20:07
Ich verstehe nicht ganz. Du willst ShowHourGlass(..) deine TProc<String> geben und was der String sein soll? Dann brauchst du zwei Parameter.

procedure ShowHourGlass(proc: TProc<String>; procParameter: String);
begin
proc(procParameter);
end;
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
583 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Aufruifen von Generic Anonymous methods

  Alt 15. Okt 2019, 21:41
Mit einer parameterlosen Prozedur geht das einfach:

proc A;
begin
end;

proc B(Proc:TProc);
begin
Proc;
end;

Der Aufruf: B(A);

Wie geht das, wenn A Parameter hat?

proc A(s:string);

proc B(Proc:TProc<string>);

Der Aufruf: B(A('x'));

Wie sieht die Implementierung in B aus?

proc B(Proc:TProc<string>);
begin
Proc(?); < ---
end;
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.063 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Aufruifen von Generic Anonymous methods

  Alt 15. Okt 2019, 21:47
Nochmal: Der Aufruf "B(A('x'))" heißt: Ich rufe Methode B auf und stecke den Rückgabewert vom Aufruf A('x') als Parameter rein. A gibt aber überhaupt nichts zurück, es ist eine procedure , keine function . Sie hat keine Rückgabe.

Kann es sein dass du nicht nach TProc<T> suchst sondern nach TFunc<T>?

Ansonsten, falls nicht: Entweder du findest dich damit ab dein B(..) um den String als Parameter erweitern zu wollen, oder du machst es so:

Delphi-Quellcode:
B(
   procedure()
   begin
      A('x');
   end
);
was gleichwertig wäre mit

Delphi-Quellcode:
var
   c: TProc;
begin
   c :=
      procedure()
      begin
         A('X');
      end;
   A(c);
end;
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
583 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Aufruifen von Generic Anonymous methods

  Alt 15. Okt 2019, 21:54

Delphi-Quellcode:
B(
   procedure()
   begin
      A('x');
   end
);
Das ist es! Du hast recht, ich hab den Aufruf falsch angesetzt, ich habe Aufruf unbd Übergabe gleich gesetzt.

Danke!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf