![]() |
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:
wobei in Edit1 der zu übersetzende Text steht und das Ergebnis dann in Edit2 geschrieben wird.
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; 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? |
AW: Prozedur innerhalb einer Prozedur
Das nennt sich "anonyme Methode" ->
![]() So kannst Du Deiner Hauptmethode noch eine andere Methode mitgeben, die von dieser ausgeführt wird und jeweils (je nach Situation) etwas anderes tut. |
AW: Prozedur innerhalb einer Prozedur
Weise einfach in der anonymen Methode deine variable zu, anstatt Edit2.text zu setzen.
|
AW: Prozedur innerhalb einer Prozedur
Zitat:
|
AW: Prozedur innerhalb einer Prozedur
Die Variable wird natürlich erst nach einiger Zeit (asynchron!) gefüllt!
|
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; |
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: |
AW: Prozedur innerhalb einer Prozedur
Das Oberthema sind Zeiger auf Funktionen. Hab da auch ein Video für dich:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz