Einzelnen Beitrag anzeigen

Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#6

Re: Ereignisprogrammierung in Delphi

  Alt 23. Jun 2004, 08:28
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...
  Mit Zitat antworten Zitat