kupferstecher, das Deinige ist mir leider etwas zu ... komplex? Mir fällt da auch keine direkte Anwendungsmöglichkeit ein, was es mir noch schwerer macht, es zu verstehen.
Soner, mir scheint wir haben etwas aneinander vorbei geschrieben. Teils kein Wunder, irgendwie stehe/stand ich, was die tieferen Funktion von Array etc. betraf, auf Kriegsfuß. Viele mir bekannte Beispiele zu Array sind zu einfach, dass es mir teils an Fantasie fehlte, dass in einen Fach/Bereich des Array mehr als nur eine Sache rein kann, und dass obwohl ich öfters Array mit Objekten als Inhalt erstellt habe. Letztendlich habe ich den Ganzen Dreh doch noch heraus bekommen. Musste allerdings eben einiges an meine Prozeduren bzw. Typisierung anpassen.
Code: Alles auswählen
...
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
  { TForm1 }
  TForm1 = class(TForm)
    ...
  private
  public
  end;
  procedure FarbeRot(); // ** 1 **
  procedure FarbeSchwarz();
  procedure FarbeGelb();
  procedure FarbeBlau();
  function ZahlSummieren(Edit1,Edit2:Integer):Integer;
var
  Form1: TForm1;
type
  TFarbProc=procedure(); // ** 2 **
  TZahlFunc=function(Zahl1,Zahl2:Integer):Integer;
var
  MeyRec : record
    Zahl: Integer;
    Wort: String[5];
    Proze: TFarbProc;
    Funki: TZahlFunc;
    end = (Zahl:5; Wort:'Ok'; Proze: @FarbeBlau; Funki: @ZahlSummieren); // ** 3 **
  ProzeFarb:Array[0..2] of TFarbProc;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.ProcFuellenBClick(Sender: TObject);
begin
  // Prozeduren zuweisen
  ProzeFarb[0]:=@FarbeRot;
  ProzeFarb[1]:=@FarbeSchwarz;
  ProzeFarb[2]:=@FarbeGelb;
end;
procedure TForm1.ButtonRecAusfuehrenClick(Sender: TObject);
begin
  MeyRec.Proze;
  ShowMessage(IntToStr(MeyRec.Funki(StrToInt(Edit1.Text),StrToInt(Edit2.Text))));
end;
function ZahlSummieren(Edit1,Edit2:Integer):Integer;
begin
  Result:=Edit1+Edit2;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  ProzeFarb[0];
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  ProzeFarb[1];
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
  ProzeFarb[2];
end;
// Rest eher uninteressant
procedure FarbeRot();
begin
  Form1.Color:=clRed;
end;
procedure FarbeSchwarz();
begin
  Form1.Color:=clBlack;
end;
procedure FarbeGelb();
begin
  Form1.Color:=clYellow;
end;
procedure FarbeBlau();
begin
  Form1.Color:=clAqua;
end;
end.
Folgendes musste ich feststellen. Bei Punkt 1, wo die Prozeduren für die Farben sind, diese müssen leider außerhalb von Form1 (der Klasse?) erstellt werden. Nur so kann man es ohne TForm1 verwenden. Mit TForm1 geht es leider nicht. ??
Zu 2) Jetzt wo ich endlich begriff, was ja eigentlich offensichtlich ist, nämlich dass man der Array mitteilen muss, was so alles bei der Prozedur dabei ist, konnte ich es anpassen. Weil Prozeduren haben oft unterschiedliche Variablen. Und dementsprechend muss dann auch die Typisierung erstellt werden. Was in meinem Fall statt 'procedure(FMachFormBlau, FMachFormRot, FMachFormGelb: integer);', einfach nur 'procedure();' heißen muss. Weil meine Prozeduren ja keine Werte verlangen. Aber das '()' muss scheinbar mit dabei sein.
3) Was ich auch wissen wollte, aber nach dem ich das andere Verstand selbst zustande brachte: Wie man so was auch in Records einbauen kann. Muss man halt mit Zeiger dann machen. Jetzt weiß ich endlich, wozu Zeiger gut sind.
Mathias, danke dass Du Dich zu Wort ... Schrift gemeldet hast. Daraufhin habe ich noch mal in Deinem Tread, der ja mein Interesse angestoßen hat, rein geschaut. Und habe da die eine Frage mit der Direkten Zuweisung dann endlich verstanden. Daraufhin habe in inzwischen mein Code etwas umgeändert. Habe die Typisierung raus geworfen. Und also statt ...
Code: Alles auswählen
  Proze: TFarbProc; // im Recod
  Funki: TZahlFunc; // im Record
    
  ProzeFarb:Array[0..2] of TFarbProc;
gleich so gemacht:
Code: Alles auswählen
  Proze: procedure(); // im Record
  Funki: function(Zahl1,Zahl2:Integer):Integer; // im Record
  ProzeFarb:Array[0..2] of procedure();
Funktionierte ebenfalls wunderbar. Dadurch spare ich mir die Typisierung.
Ich stehe einfach auf Kriegsfuß mit den ... Typen. Liegt einfach auch daran, dass man mir bis jetzt nicht wirklich den Sinn davon erklären konnte. Ja, man kann diese öfters verwenden. Aber in der Regel verwende ich es ja nur einmal. Und da finde ich Umwege oder eben Zwischen-Strecken befremdlich, weil unnötig.
Danke für Eure Hilfe.
Theoretisch wird mir das vieles vereinfachen. ... fragt sich aber wie so oft, ob es auch den Praxistest besteht, oder ich doch mich in was verrannt habe, oder zu Aufwendig ist, etc.