AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Callback mit Übergabe von Objekten
Thema durchsuchen
Ansicht
Themen-Optionen

Callback mit Übergabe von Objekten

Ein Thema von Ykcim · begonnen am 2. Dez 2019 · letzter Beitrag vom 3. Dez 2019
Antwort Antwort
Ykcim

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

Callback mit Übergabe von Objekten

  Alt 2. Dez 2019, 16:53
Hallo Zusammen,

das Thema CallBack ist für mich neu und ich stehe gerade völlig auf dem Schlauch...


Ich möchte etwas ausprobieren. Dazu rufe ich einen Service auf dem Server auf, der mir eine Datenmenge aus der Datenbank zurückliefert. Diese Daten werden in ein TWebStringGrid (TMS) geladen. Dort sollen sie rausgeholt und in ein TTMSFNCGrid (TMS) geschrieben werden. Weil ich ja warten muss, bis die Daten auch wirklich übermittelt wurden, wollte ich das mit einer CallBack Procedure machen.

Das ist mein Versuch (ich bin mir ziemlich sicher, dass ich das Zusammenspiel hier falsch mache...)
Das ist der Aufruf
Delphi-Quellcode:
procedure TLogic.Get_Beobachtete_FA(Sender: TObject);
var
   URL: string;
begin
   URL:=Data_Module.xConnection.url;
   URL:=URL+'Data_xChangeService/Get_BeobachteteFAs';
   URL:=URL+'?User_ID=';
   URL:=URL+Data_Module.xDST_User.FieldByName('UserID').AsString;
   Data_Module.Get_Grid_Data(URL, (Sender as TTMSFNCGrid), WebGrid_FNCGrid());
end;
Hier werden die Daten erst einmal in das TWebStringGrid geladen
Delphi-Quellcode:
type
   TConnectCallback = reference to procedure;
   TDataRecievedCallback = reference to procedure;

...

procedure TData_Module.Get_Grid_Data (URL: string; FNCGrid: TTMSFNCGrid; AOnDataRecieved: TDataRecievedCallback);
var
   WGrid: TWebStringGrid;
begin
   WGrid:= TWebStringGrid.Create(nil);
   Try
      WGrid.LoadFromJSON(URL);
      if Assigned(AOnDataRecieved) then begin
         AOnDataRecieved(WGrid, FNCGrid);
      end;
   Finally
      //WGrid.Free;
   End;
end;
Wenn die Daten im TWebStringGrid sind, soll die AOnDataReceived aufgerufen werden. Das ist die procedure WebGrid_FNCGrid.
Delphi-Quellcode:
procedure TLogic.WebGrid_FNCGrid(WGrid: TWebStringGrid;
  FNCGrid: TTMSFNCGrid);
var
   I, J: integer;
begin
   FNCGrid.Columns.Count:=WGrid.ColCount;
   FNCGrid.RowCount:=Wgrid.RowCount;
   for I := 0 to WGrid.RowCount -1 do begin
      for J := 0 to WGrid.ColCount -1 do begin
         FNCGrid.Cells[J,I]:=WGrid.Cells[J,I];
      end;
   end;
end;
Aber egal wie rum ich es auch ausprobiere (das ist jetzt gerade nur der aktuelle Stand), ich bekomme es nicht ans Laufen...

Hehlermeldung:
Zitat:
[Fehler] TLogicUnit.pas(38): Wrong number of parameters specified for call to "procedure WebGrid_FNCGrid(TStringGrid;TTMSFNCGrid) of Object"
Kann mir jemand einen Tip geben?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#2

AW: Callback mit Übergabe von Objekten

  Alt 2. Dez 2019, 17:34
Stimmt doch, diese Fehlermeldung.

Du hast einen Zeiger-Typen mit 0 Parametern
TDataRecievedCallback = reference to procedure; aka TDataRecievedCallback = reference to procedure();

und versucht aber 2 Parameter zu übergeben
AOnDataRecieved(WGrid, FNCGrid);

Lösung:
ohne Parameter aufrufen AOnDataRecieved();
oder TDataRecievedCallback = reference to procedure(WGrid: TWebStringGrid; FNCGrid: TTMSFNCGrid);
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
229 Beiträge
 
#3

AW: Callback mit Übergabe von Objekten

  Alt 3. Dez 2019, 07:10
Ich weiß nicht, ob ich dafür nun extra einen neuen Thread aufmachen sollte, aber ich hoffe das geht auch so ...

Ich kenne das bisher nur, dass man Funktions-Typen so schreibt:
type TMyProc = Procedure(); evtl. noch
type TMyProc = Procedure() of object; oder bei Parametern
type TMyProc = Procedure(const bValue : Boolean) of object; aber
type TMyProc = reference to procedure();
habe ich in dem Zusammenhang noch nie gesehen.
Kann das einer in ein/zwei Sätzen erklären was es mit "reference to" auf sich hat
oder weiß einer eine Seite, die das so erklärt,
dass es ein 6-jähriger Versteht?

---------------

Um vielleicht doch noch was "produktives" beizutragen:
Im Prozedur-Header steht:
procedure TLogic.WebGrid_FNCGrid(WGrid: TWebStringGrid; FNCGrid: TTMSFNCGrid); in der Fehlermeldung
procedure WebGrid_FNCGrid(TStringGrid;TTMSFNCGrid) of Object; Evtl. Ist TWebStringGrid nicht vom TStringGrid geerbt?
TMS hatte (wenn ich mich recht erinnere)ceine andere "Oberklasse".
... Ist mir nur aufgefallen, muss nichts heißen!

MfG
Incocnito
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Callback mit Übergabe von Objekten

  Alt 3. Dez 2019, 07:59
Reicht auch ein 10-jähriger?
Wenn Du weisst was eine eierlegende Wollmilchsau ist - "reference to" ist so was. Nehm die, dann brauchst du dir um die Varianten in den meisten Fällen keinen Kopf mehr machen.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.166 Beiträge
 
Delphi 12 Athens
 
#5

AW: Callback mit Übergabe von Objekten

  Alt 3. Dez 2019, 08:45
Vielleicht das als Hilfestellung.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#6

AW: Callback mit Übergabe von Objekten

  Alt 3. Dez 2019, 10:07
Ein eigener Thread wäre besser, wenn du es genauer wissen willst.
Delphi-Quellcode:
type TMyProc = procedure(...); // Zeiger auf normale Prozedur oder statische Klassen-Methode
type TMyProc = procedure(...) of object; // Zeiger auf Methode oder Klassen-Methode
type TMyProc = reference to procedure(...); // Zeiger auf Alles: anonyme Methode oder die Anderen
Werden Referenzzeiger neu zugewiesen, dann bekommen sie immer wieder ein neues Interface. Sie lassen sich also nur prüfen auf Assigned und nil oder vergleichen mit einem anderem Referenzzeiger (der sich zwischen Zuweisung an den eigenen Zeiger und dem Vergleich nicht verändert hat).
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:10 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