Da ein Array keine Klasse ist, kannst Du einem Array nicht direkt ein Event zuweisen:
Zitat von
Delphi OH:
Der beim Eintritt eines Ereignisses ausgeführte Code ist eine Objektmethode
Als Eigenschaft einer Klasse bzw. eines Objekts könntest Du es in etwa so lösen:
Delphi-Quellcode:
type
TMyArray = ARRAY[0..5] OF Byte;
{ Array bspw. als Eigenschaft von TForm1 }
TForm1 = class(TForm)
{ ... }
PROCEDURE ChangeArray(Sender: TObject); // Beispiel für Ereignisbehandlung
private
FMyArray : TMyArray; // Hier das Array selbst
FOnChangeArray : TNotifyEvent; // Event
public
PROCEDURE SetMyArray(Value: TMyArray); OVERLOAD; // Routinen zum
PROCEDURE SetMyArray(index, Value: Byte); OVERLOAD; // Schreiben und
FUNCTION GetMyArray : TMyArray; // Lesen des Arrays
PROPERTY OnChangeArray : TNotifyEvent READ FOnChangeArray WRITE FOnChangeArray; // Event
end;
{...}
{ ************ Array besetzen ************ }
PROCEDURE TForm1.SetMyArray(Value: TMyArray);
BEGIN
FMyArray := Value;
IF Assigned(FOnChangeArray) THEN FOnChangeArray(NIL); // <<--- HIER wird Event "ausgelöst"
END;
{ ----------------------}
PROCEDURE TForm1.SetMyArray(index, Value: Byte);
BEGIN
FMyArray[index] := Value;
IF Assigned(FOnChangeArray) THEN FOnChangeArray(NIL); // <<--- HIER wird Event "ausgelöst"
END;
{ ************ Array auslesen ************ }
FUNCTION TForm1.GetMyArray : TMyArray;
BEGIN
result := FMyArray;
END;
{ ********** Beispielanwendung *********** }
procedure TForm1.Button1Click(Sender: TObject);
VAR
arr : TMyArray;
i : Byte;
begin
// Beispielwerte
FOR i:=Low(arr) TO High(arr) DO arr[i] := i;
// Array setzen
SetMyArray(arr);
// Einezelnes Feld im Array setzen
SetMyArray(2,99);
// Array zurückgeben lassen
arr := GetMyArray;
// Ergebnis anzeigen
ShowMessage(IntToStr(arr[0]) + #10#13 +
IntToStr(arr[1]) + #10#13 +
IntToStr(arr[2]) + #10#13 +
IntToStr(arr[3]) + #10#13 +
IntToStr(arr[4]) + #10#13);
end;
{ ******* Eregnisbehandlung zuweisen ******** }
procedure TForm1.Button2Click(Sender: TObject);
begin
OnChangeArray := ChangeArray;
end;
{ *********** Eregnisbehandlung ************* }
procedure TForm1.ChangeArray(Sender: TObject);
begin
ShowMessage('Array geändert!');
end;
Nicht komplett getestet...
Geht evtl auch einfacher..?
Aber als Beispiel zur Verdeutlichung vielleicht ja ganz brauchbar
Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...