AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Und wieder einmal CallBack

Ein Thema von Ykcim · begonnen am 22. Dez 2020 · letzter Beitrag vom 22. Dez 2020
 
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#1

Und wieder einmal CallBack

  Alt 22. Dez 2020, 16:09
Delphi-Version: 10.4 Sydney
Hallo Zusammen,

ich habe das Thema leider immer noch nicht unter die Füße bekommen...
Callback-Procedure ohne Parameter-Übergabe laufen mittlerweile, aber jetzt müsste ich unsauber arbeiten, wenn ich es weiterhin ohne mache...

Ich habe diesen Type definiert:
Delphi-Quellcode:
type
  TDataRecieved_Param = reference to procedure(JSResult: boolean);
und eine Procedure, in dem dieser Type zur Anwendung kommen soll:
Delphi-Quellcode:
public
    { Public-Deklarationen }
    procedure Mail_Confirm(v_code: string; DataRecieved_Param: TDataRecieved_Param);
In dieser Procedure wird ein Service aufgerufen und ein Überprüfung gibt einen boolean-Wert zurück.
Delphi-Quellcode:
procedure TForm_MailConf.Mail_Confirm(v_code: string; DataRecieved_Param: TDataRecieved_Param);
   procedure OnResponse(Response: TXDataClientResponse);
   var JSResult: boolean;
         JSObj: TJSObject;
   begin
      JSObj:=TJSJSON.parseObject(Response.ResponseText);
      JSResult:= StrToBool(String(JSObj['value']));
      if (Assigned(DataRecieved_Param)) then begin
         DataRecieved_Param(JSResult);
      end;
   end;
begin
   Try
      xDWC_MailConfirmed.RawInvoke('ITV_CreateNewCustService.Valid_LogIn',[v_code], @OnResponse);
   Except
      MessageDlg('Es hat einen Fehler beim Speichern gegeben',WEBLib.Dialogs.mtError, [mbOK]);
      Exit;
   End;
end;
Jetzt möchte ich der Callback-Procedure diesen Wert übergeben. Ich dachte, dass ich das hiermit mache:
Delphi-Quellcode:
if (Assigned(DataRecieved_Param)) and (JSResult=true) then begin
         DataRecieved_Param(JSResult);
      end;
Mit dem Aufruf der habe ich meine Probleme. Bei Callbacks ohne Prameter habe ich das so gemacht:
Delphi-Quellcode:
procedure TForm_MailConf.WebButton1Click(Sender: TObject);
var v_code: string;
      JSResult: boolean;
begin
   v_code:=GetQueryParam('mail_code');
   Mail_Confirm(v_code, procedure begin Display_Result(JSResult) end); //Allerdings war dann da kein Parameter.
end;
Ich habe folgende Varianten versucht:
Delphi-Quellcode:
Mail_Confirm(v_code, procedure begin Display_Result end); //Ich dachte, dass das geht, denn er bekommt den Parameter ja in der Mail_Confirm. Fehler: [Fataler Fehler] Wrong number of parameters specified for call to "Display_Result"

Mail_Confirm(v_code, procedure begin Display_Result(JSResult) end); //Ich dachte, vielleicht muss ich einen Parameter mitgeben, der dann überschrieben wird. Fehler: [Fataler Fehler] Incompatible type arg no. 2: Got "Procedure/Function", expected "TDataRecieved_Param"
Und während ich Euch das hier aufschreibe, komme ich auf die Lösung... Ich lasse es jetzt hier drinstehen, denn vielleicht hilft es jemandem weiter...

Die Lösung:
Mail_Confirm(v_code, @Display_Result); Wenn ich das richtig verstanden habe, dann sorgt das @ dafür, dass die Procedure nur als ein Zeiger verstanden und sie nicht sofort ausgeführt wird. Den Parameter muss ich nicht übergeben, denn der wird ja beim Aufruf in Mail_Confirmed gesetzt.

Jedenfalls so funktioniert es...
Patrick
  Mit Zitat antworten Zitat
 


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 21:31 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