Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - FindComponent für Variablen?


bf109g.01 - Di 23.08.11 09:55
Titel: FindComponent für Variablen?
Hallo, ich wusste nicht genau, wie ich den Titel treffender gestalten sollte.
Ich habe folgendes Problem:
Ich habe in meinem Programm folgendes Array mit Records:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type TFrage = record
                NR   : integer;
                Kateg: Shortstring;
                Frag : Shortstring;
                Ant1, Ant2, Ant3, Ant4, Ant5, Ant6: Shortstring;
                Richtig1, Richtig2, Richtig3, Richtig4, Richtig5, Richtig6:boolean;
                Diffic: integer;
                Loesung: Text;
              end;

var AFragen: array[1..150of TFrage;

Die Werte werden aus einer Eingabemaske übernommen. Um den Programmcode zu raffen, würde ich gerne mit FindComponent und einer Schleife arbeiten, sodass Edit1.text in Array[xy].Ant1, Edit2.text in Array[xy].Ant2 geschrieben wird usw. (Bei den Boolean-Werten per Checkbox).
Jetzt weiß ich aber nicht, wie ich die record-Eigenschaft an der bestimmten Arraystelle per Schleife aufrufen soll. :(
Meine "Versuche" funktionieren natürlich nicht, verdeutlichen aber, was ich vorhabe:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for I := 1 to 6 do
    if TEdit(FFragen.FindComponent('FrEAnt'+i)).text<>'' then
      AFragen[Stelle].FindComponent('Ant'+i):= TEdit(FFragen.FindComponent('FrEAnt'+i)).text;

  for I := 1 to 6 do
    if TCheckbox(FFragen.FindComponent('FrCBAnt'+i)).checked=true then
      AFragen[Stelle].FindComponent('Richtig'+i):=true;


bummi - Di 23.08.11 10:45

das Konzept finde ich zwar ungeeignet, aber das dürfte für Dich am nächsten dran sein:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type TFrage = record
                NR   : integer;
                Kateg: Shortstring;
                Frag : Shortstring;
                Ant :array[1..6of Shortstring;
                Richtig : array[1..6of boolean;
                Diffic: integer;
                Loesung: Text;
              end;


mit


Delphi-Quelltext
1:
2:
3:
for I := 1 to 6 do
    if TEdit(FindComponent('FrEAnt'+IntToStr(i))).text<>'' then
      AFragen[Stelle].Ant[i]:= TEdit(FindComponent('FrEAnt'+IntToStr(i))).text;


etc....