Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Prozedur innerhalb einer Prozedur (https://www.delphipraxis.net/211957-prozedur-innerhalb-einer-prozedur.html)

nezumi7 26. Nov 2022 04:56

Prozedur innerhalb einer Prozedur
 
Ich möchte deepL in mein Programm einbinden und habe dafür bei GitHub eine Unit gefunden, die wunderbar funktioniert (OlfSoftware.DeepL.ClientLib.pas). Leider versteh ich den Aufruf überhaupt nicht und kann das daher nicht nach meinen Wünschen anpassen:

Code:
procedure TForm2.Button1Click(Sender: TObject);
begin
DeepLTranslateTextASync(tfile.ReadAllText(FAPIKeyFileName), 'EN', 'DE',
      Edit1.Text,
     procedure(OriginalText, TranslatedText, SourceLang, TargetLang: string)
      begin
        Edit2.text := TranslatedText;
      end);
end;
wobei in Edit1 der zu übersetzende Text steht und das Ergebnis dann in Edit2 geschrieben wird.

Was ich noch nie gesehen habe ist, dass in der Prozedur eine andere Prozedur steht, die noch nicht einmal einen Namen hat und ja eigentlich auch nichts zurückliefert. Es funktioniert trotzdem. Am Liebsten würde ich es verstehen und das alles so ändern, dass die Prozedur irgendwie aufgelöst oder "herausgeholt" wird.

Wenn das nicht geht würde ich es zumindest so ändern wollen, dass das Ergebnis ("TranslatedText") nicht zwingend in eine Komponente (Edit2) geschrieben wird, sondern in eine Variable. Komischerweise funktioniert das nicht. Wenn ich statt Edit2 eine lokale oder globale Variable nehme, kommt da nichts an.

Kann mir da bitte jemand einen Tipp geben?

stahli 26. Nov 2022 06:15

AW: Prozedur innerhalb einer Prozedur
 
Das nennt sich "anonyme Methode" -> https://docwiki.embarcadero.com/RADS...oden_in_Delphi

So kannst Du Deiner Hauptmethode noch eine andere Methode mitgeben, die von dieser ausgeführt wird und jeweils (je nach Situation) etwas anderes tut.

Olli73 26. Nov 2022 09:38

AW: Prozedur innerhalb einer Prozedur
 
Weise einfach in der anonymen Methode deine variable zu, anstatt Edit2.text zu setzen.

nezumi7 26. Nov 2022 10:38

AW: Prozedur innerhalb einer Prozedur
 
Zitat:

Zitat von Olli73 (Beitrag 1515420)
Weise einfach in der anonymen Methode deine variable zu, anstatt Edit2.text zu setzen.

Das geht leider nicht, keine Ahnung warum. Wenn ich die Übersetzung nicht Edit2 zuweise, sondern in eine globale variable, bleibt die leer.

Olli73 26. Nov 2022 10:45

AW: Prozedur innerhalb einer Prozedur
 
Die Variable wird natürlich erst nach einiger Zeit (asynchron!) gefüllt!

Olli73 26. Nov 2022 10:56

AW: Prozedur innerhalb einer Prozedur
 
Du kannst auch sowas probieren, falls dir das lieber ist:

Delphi-Quellcode:

procedure TForm2.DoSomethingAfterTranslation(OriginalText, TranslatedText, SourceLang, TargetLang: string);
begin
  //Mach was mit TranlatedText ....
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  DeepLTranslateTextASync(tfile.ReadAllText(FAPIKeyFileName), 'EN', 'DE', Edit1.Text, DoSomethingAfterTranslation);
end;

nezumi7 26. Nov 2022 14:15

AW: Prozedur innerhalb einer Prozedur
 
[QUOTE=Olli73;1515424]Du kannst auch sowas probieren, falls dir das lieber ist:


Danke, Olli. Jetzt hab ichs mit deinen Hinweisen und ein bisschen Rumprobieren hinbekommen....

:thumb:

generic 26. Nov 2022 22:33

AW: Prozedur innerhalb einer Prozedur
 
Das Oberthema sind Zeiger auf Funktionen. Hab da auch ein Video für dich:
https://www.youtube.com/watch?v=7PL_H2aBUOI


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz