Einzelnen Beitrag anzeigen

Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 14:35
Zitat:
Ich habs im Moment so:

Delphi-Quellcode:
procedure MyProc(Sender: TObject);

...

MyArr[i].OnDoMyProc := MyProc;

...

MyArr[i].OnDoMyProc(Self);
Es kommt beim Prozedurkopf (also 1. Teil im QT) folgende Meldung:

Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
Naja, die Fehlermeldung sagt doch alles aus
MyArray[ i ].OnDoMyProc will einen Zeiger auf eine Methode, was MyProc ja nicht ist, weil es nur eine 'reguläre Prozedur' ist. Luckie hat mal ein Beispiel geschrieben, wie man einen Timer in einer Konsolenanwendung verwenden kann, das Beispiel liegt auf seiner Homepage (ich tu den Link jetz nich posten, weils mir selber schon bei anderen Threads passiert ist, dass Luckie inzwischen die Struktur seiner HP und somit die URL geändert hat). Das ist dann in etwa das gleiche Schema. Du brauchst praktisch ein Objekt, um eine Mehtode zu haben


//edit: Noch was *g*
Wenn du auf Delphi 2006 wartest, dann kannst du in records auch Prozeduren und Funktionen definieren, ohne Friemelei
Records sind einfach nicht für Prozeduren gedacht, sondern halt einfach zur Datenspeicherung.

//edit: Noch was
Das vorangestellte T ist eigentlich für Klassen gedacht, wenn dus bei anderen "Sachen" verwendest, ist das irreführend

//edit: Hab das Ganze mal selber getestet *g*
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Dingsda(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  MyRec = record
   IntBla: integer;
   StrBla: string[255];
   OnDingsda: TNotifyEvent;
  end;

var MyRec1: MyRec;

procedure TForm1.Dingsda(Sender: TObject); // <--- Das klappt, weils jetz ne Methode ist
begin // Würde auch klappen, wenn du statt TForm1 ein Dummyobjekt erzeugst
  ShowMessage(Sender.ClassName); // Haputsache, MyRec1.OnDingsda zeigt auf eine Methode
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyRec1.IntBla := 234;
  MyRec1.StrBla := 'Hallo auch';
  MyRec1.OnDingsda := Dingsda;
  MyRec1.OnDingsda(self);
end;
Julian J. Pracht
  Mit Zitat antworten Zitat