Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Callback mit Übergabe von Objekten

  Alt 3. Dez 2019, 10:09
Hallo Zusammen,

vielen Dank für die Unterstützung. Ich habe es jetzt soweit geschafft, dass ich das Projekt wieder kompilieren kann...

Aber leider scheinen die Procedure in seltsamer Reihenfolge ausgeführt zu werden.
Ich habe jetzt Folgendes gemacht:
Delphi-Quellcode:
type
   TConnectCallback = reference to procedure;
   TDataRecievedCallback = reference to procedure;
   TGridDataRecievedCallback = reference to procedure(WGrid: TWebStringGrid; FNCGrid: TTMSFNCGrid);
Als erstes noch einen passende Typen hinzugefügt.

Delphi-Quellcode:
procedure TLogic.Get_Beobachtete_FA(Sender: TObject);
var
   URL: string;
   WGrid: TWebStringGrid;
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;
   ShowMessage('1)'+URL);
   WGrid:= TWebStringGrid.Create(nil);
   Try
      Data_Module.Get_Grid_Data(URL, WGrid, (Sender as TTMSFNCGrid), WebGrid_FNCGrid(WGrid, (Sender as TTMSFNCGrid)));
   Finally
      //WGrid.Free;
   End;
end;
Das ist der Aufruf (Data_Module.Get_Grid_Data) und diesem wird die Callback-Procedure WebGrid_FNCGrid(WGrid, (Sender as TTMSFNCGrid)) mitgegeben.

Delphi-Quellcode:
procedure TData_Module.Get_Grid_Data (URL: string; WGrid: TWebStringGrid; FNCGrid: TTMSFNCGrid; AOnGridDataRecieved: TGridDataRecievedCallback);
begin
   ShowMessage('2) Get_Grid_Data');
   Try
      WGrid.LoadFromJSON(URL);
      if Assigned(AOnGridDataRecieved) then begin
         AOnGridDataRecieved(WGrid, FNCGrid);
      end;
   Finally
      //WGrid.Free;
   End;
end;
Hier ist der Code von Get_Grid_Data.

Delphi-Quellcode:
procedure TLogic.WebGrid_FNCGrid(WGrid: TWebStringGrid;
  FNCGrid: TTMSFNCGrid);
var
   I, J: integer;
begin
   Showmessage('3)'+IntToStr(FNCGrid.ColumnCount)+' / '+IntToStr(WGrid.ColCount));
   FNCGrid.ColumnCount:=WGrid.ColCount;
   FNCGrid.RowCount:=Wgrid.RowCount;

   for I := 0 to WGrid.RowCount -1 do begin
      for J := 0 to WGrid.ColCount -1 do begin
         Showmessage(IntToStr(J)+' / '+IntToStr(I)+' / '+WGrid.Cells[J,I]);
         FNCGrid.Cells[J,I]:=WGrid.Cells[J,I];
      end;
   end;
   //Design.GridDesign(FNCGrid);
end;
Und schließlich der Code der CallBack Procedure...

Mir fiel auf, dass obwohl die Callback-Funktion aufgerufen wird, keine Daten in dem TWebStringGrid waren...
Ich habe ein paar ShowMeassges gesetzt. Ich hatte erwartet, dass erst ShowMessage('1)'+URL); aus Get_Beobachten, dann ShowMessage('2) Get_Grid_Data'); aus Get_Grid_Data und zum Schluss Showmessage('3)'+IntToStr(FNCGrid.ColumnCount)+' / '+IntToStr(WGrid.ColCount)); aus der CallBack Procedure WebGrid_FNCGrid angezeigt würde.
Aber zusehen bekomme ich nur 1 und 3, die 2 wird nicht angezeigt...

Kann mir jemand helfen, dass zu verstehen?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat