Hallo und guten Morgen,
vielen dank für die Zahlreichen Antworten.
Ich versuche nochmal mein Problem zu beschreiben.
Für die simulierte Verbrauchberechnung benötige ich unter anderem als Eingangsgrößen die Zahlenreihe wie sie in den Editfeldern der unteren Reihe (33-64) drin stehen. Im angehängten Bild ist die Zahlenreihe leider schon verändert sonst wäre es vlt. deutlicher geworden. So ist der Inhalt von Edit33 Feld eben auch der Inhalt vom ersten Eintrag in der case of Auswahl (Edit34 = 2. Eintrag in case of usw.).
Ich möchte also... wenn sich der Wert im Edit33 Feld ändert sich auch der Wert in der Berechnung mit ändert. Sodas sich dynamisch mit der Veränderung der Eidtfelder 33-64 auch die Werte für die Berechnung mit ändern.
Dazu hatte ich gedacht den Inhalt der Editfelder 33-64 in Variablen zwischenzuspeichern und über die case of Auswahl variabel in meine Berechnung mit einzubinden.
Der OP wollte aber ein "Case" mit Variablen statt Konstanten. Das gibt es nicht, also bleibt nur
if .. then .. exit
oder if .. else if
Wie aber schon bemerkt wurde geht das nicht und so suche ich nach einer Alternative.
Die Möglichkeit mit der Funktion inRange finde ich auch interessant komme da als Dummy aber in Delhi 6 nicht weiter.
Ich würde das so machen
Im TForm:
EZValues:Array[33..64] of Integer;
Für alle Edits ein OnChange definieren (Bei allen dasselbe)
Um im OnChange zu prüfen, welches Edit geändert wurde sehe ich 3 Möglichkeiten
1) Über den Namen des Edits
2) Über die Tag-Properties der Edits (bei allen Edits im Tag die Nummer des Edits speichern)
3) Über ein Array of TEdit
Hierfür
In TForm:
Edits:Array of TEdit;
Im FormCreate alle Edits in ein Array stellen.
Delphi-Quellcode:
procedure TForm.FormCreate;
procedure CreateEditsArray(const EB:array of TEdit)
var I:Integer;
begin
SetLength(Edits,Length(EB));
For I:=0 to High(EB) do
Edits[I] := EB[I]
end;
begin
CreateEditsArray([Edit33, Edit34, …, Edit63])
end;
Im EditChange
Delphi-Quellcode:
TForm.EditChange(Sender : TObject)
var I, ID : Integer;
begin
// Je nachdem wie du die Edits identifizierst
ID:= // aus TEdit(Sender).Name ableiten
Oder ID := TEdit(Sender).Tag;
Oder
For I := 0 to High(Edits) do
If Edits[I] = Sender then begin
ID := I + 33; // +33, weil in Edits[0] das Edit33 steht
Break;
end;
EZValues[ID] := StrToInt(TEdit(Sender).Text);
// Jetzt kannst du die aktuellen Werte der Edits aus EZValues[x] holen
end;
Hab das nur auf die Schnelle so hingetippt - nicht getestet.