Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi type; auf ereignis reagieren (https://www.delphipraxis.net/5317-type%3B-auf-ereignis-reagieren.html)

Snoop007 1. Jun 2003 15:14


type; auf ereignis reagieren
 
Hi
ich weiss gerade nicht wie ich das angehen soll,
ich habe einen type, wenn nun daten geändert wird( hinzufügen oder löschen ) wüdre ich gern ein OnChange ereignis haben, wie kann ich das in den typen unterbringen ?
Delphi-Quellcode:
type
  TStringArray = record
     Daten : array of array of string;
  end;
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

Snoop007 1. Jun 2003 16:30

ich habs jetzt hinbekommen
Delphi-Quellcode:
type
  TArrayX = array of array of string[255];

type
  TStringArray = class
    private
      FTArray : TArrayX;
      procedure OnChange(FTArray : TArrayX);
    public
     property value : TArrayX read FTArray write OnChange;
  end;
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

jbg 1. Jun 2003 17:27

Neben dem, dass OnChange nicht dem von Borland vorgeschlagenen Konvention, Bezeichnernamen für property-write Methoden ist, wird dein OnChange nicht bei StringArray.value[0, 1] := 'Hallo' aufgerufen. Es kommt erst zu zug, wenn du StringArray.value einen anderen Wert zuweist.

Du musst dein Array in eine Array-Eigenschaft umwandeln und nicht, so wie du es hast ein Array als Eigenschaft.
Delphi-Quellcode:
private
  FValues: array of array of ShortString;
  FOnChange: TNotifyEvent;

  procedure SetValues(X, Y: Integer; const Value: ShortString);
  function GetValues(X, Y: Integer): ShortString;
protected
  procedure Changed; virtual;
public
  property Values[X, Y: Integer]: ShortString read GetValues write SetValues;
  property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;

procedure TStringArray.SetValues(X, Y: Integer; const Value: ShortString);
begin
  if Value <> FValues[X, Y] then
  begin
    FValues[X, Y] := Value;
    Changed;
  end;
end;

function TStringArray.GetValues(X, Y: Integer): ShortString;
begin
  Result := FValues[X, Y];
end;

procedure TStringArray.Changed;
begin
  if Assigned(FOnChange) then
    FOnChange(Self);
end;

Snoop007 1. Jun 2003 17:56

danke für den hinweis


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz