Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#10

AW: case of "anstatt constanten - Variablen einsetzen

  Alt 9. Jul 2020, 10:22
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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat