Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#21

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 26. Jan 2010, 19:57
So sieht mein Versuch aus. Nur leider schaffe ich es nicht,
Delphi-Quellcode:
  TGesellschafterChangeEvent = procedure(Sender: TObject; Obj: TGesellschaftsname) of object;

  TGesellschafterObjListe = class(TObjectList)
  private
    FOnChange : TGesellschafterChangeEvent;
  protected
    function getItem(Index: Integer): TGesellschaftsname; virtual;
    procedure setItem(Index: Integer; Objekt: TGesellschaftsname); virtual;
  public
    function Add(Objekt: TGesellschaftsname): Integer; virtual;
    function NewRecord(Objekt: TGesellschaftsname): Integer; virtual;
    function Remove(Objekt: TGesellschaftsname): Integer; virtual;
    function IndexOf(Objekt: TGesellschaftsname): Integer; virtual;
    procedure Insert(Index: Integer; Objekt: TGesellschaftsname); virtual;
    property Items[index: Integer]: TGesellschaftsname read getItem write setItem; default;
    property OnChange: TGesellschafterChangeEvent read FOnChange write FOnChange;
  end;

{...}

procedure TMainForm.GesellschafterListeChange(Sender: TObject; Obj: TGesellschaftsname);
begin
  with DM_Main.UniQuery_Temp do
  begin
    SQL.Text := 'EXECUTE PROCEDURE SP_NEW_GESELLSCHAFTER (:stammnr, :name, :B1, :B2, :D2);';
    ParamByName('StammNr').AsInteger := Obj.StammNr;
    ParamByName('Name').AsString := Obj.Gesellschaftername;
    ParamByName('B1').AsFloat := Obj.Zeichnungskapital;
    ParamByName('B2').AsFloat := Obj.ZahlenderBetrag;
    ParamByName('D2').AsDateTime := Obj.ZweiteZahlung;
    Execute;
  end;
end;

{...}

function TGesellschafterObjListe.Add(Objekt: TGesellschaftsname): Integer;
begin
  Result := inherited Add(Objekt);
end;

function TGesellschafterObjListe.getItem(Index: Integer): TGesellschaftsname;
begin
  Result := TGesellschaftsname(inherited Items[Index]);
end;

function TGesellschafterObjListe.IndexOf(Objekt: TGesellschaftsname): Integer;
begin
  Result := inherited IndexOf(Objekt);
end;

procedure TGesellschafterObjListe.Insert(Index: Integer; Objekt: TGesellschaftsname);
begin
  inherited Insert(Index, Objekt);
end;

function TGesellschafterObjListe.NewRecord(Objekt: TGesellschaftsname): Integer;
begin
  Result := inherited Add(Objekt);
  if Assigned(FOnChange) then
    FOnChange(Self, Objekt);
end;

function TGesellschafterObjListe.Remove(Objekt: TGesellschaftsname): Integer;
begin
  Result := inherited Remove(Objekt);
end;

procedure TGesellschafterObjListe.setItem(Index: Integer; Objekt: TGesellschaftsname);
begin
  inherited Items[Index] := Objekt;
  if Assigned(FOnChange) then
    FOnChange(Self, Objekt);
end;
Das ChangeEvent wird nicht ausgeführt, wenn ich einen Wert ändere. Wenn ich NewRecord ausführe, dann wird das Change-Event ausgeführt, aber in Obj stehen keine Werte aus der Klasse. Kann mir da jemand bitte weiterhelfen, denn ich weiß nichtmehr weiter.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat