![]() |
case of "anstatt constanten - Variablen einsetzen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich nutze Delphi 6 und bin eher der unbedarfte Programm Nutzer. Für meinen vor Jahren entwickelten Bordcomputer Adapter für eine Audi 80 Cabrio TDI und nun frisch für einen Audi 100 TDI (fast mit H-Kennzeichen) möchte die Abstimmung, des Adapters auf das Fahrzeug, komfortabler gestalten. Dazu habe ich eine Software geschrieben die zwei Zeilen der Eprom Daten des AVR Microcontrollers verändern und wieder in den AVR zurückschreiben kann. Da die Daten für den Audi 100 noch nicht wirklich festliegen möchte ich die Stammdaten ( liegen zur Laufzeit "dezimal" in den unteren 32 Editfelder der Software) in die Simulation einbinden. Jedes einzelen der 32 Editfelder ist über den Spinbutton unterhalb zwischen 1 und 254 veränderbar. Für die Simulation des Verbrauchswertes habe ich zunächst den Eingang der Einspritzpumpenwerte als integer Wert eingebunden. Über eine case of hole ich mit verschieden Stützwerte der Berechnung. Nun kommt mein Problem: die Werte in der case of sind ja Constanten und die möchte ich aber entsprechend der Werte in den Editfeldern 32-64 verändern. Einbinden der Variablen funktioniert nicht..... mit If then else möchte ich nicht arbeiten... und so die Frage was gibt es noch für Möglichkeiten die Werte der Editfelder entsprechend dem ESP integer Wert auszulesen. Habe schon mal was über eine Lockup Tabelle gelesen komm da aber nicht weiter. Ich bin für jeden Hinweis Dankbar, hier noch die case of mit den Werte. Die Werte liegen auch in einem Array. DANKE !!! Zitat:
|
AW: case of "anstatt constanten - Variablen einsetzen
Delphi-Quellcode:
Case i of
00..07: EZ := 0; 08..15: EZ := 8; ... else EZ := 208; end; |
AW: case of "anstatt constanten - Variablen einsetzen
So ganz genau kann ich Dein Problem nicht nachvollziehen. Wenn Du nicht direkt eine hilfreiche Antwort erhältst, könntest Du vielleicht mal noch abstrakter fragen (ohne zu viele Details zu der Anwendung selbst).
Grundsätzlich finde ich mit "if ... then ... Exit(X);" zu arbeiten nicht verkehrt. Also etwa:
Delphi-Quellcode:
Das ist variabler als mit case und auch nicht unübersichtlicher.
function Check(const Value: Integer): Integer;
begin Result := -1; if InRange(Value, 0, 9) then Exit(1); if InRange(Value, 10, 19) then Exit(2); end; |
AW: case of "anstatt constanten - Variablen einsetzen
Zitat:
Aber es müsste doch, in diesem Anwendungsfall, mit
Code:
beginnen
Result := 208;
|
AW: case of "anstatt constanten - Variablen einsetzen
Zitat:
Delphi-Quellcode:
weglässt.
begin ... end;
|
AW: case of "anstatt constanten - Variablen einsetzen
Der OP wollte aber ein "Case" mit Variablen statt Konstanten. Das gibt es nicht, also bleibt nur
Delphi-Quellcode:
oder
if .. then .. exit
Delphi-Quellcode:
if .. else if
|
AW: case of "anstatt constanten - Variablen einsetzen
Richtig, aber braucht er tatsächlich auch Variablen?
|
AW: case of "anstatt constanten - Variablen einsetzen
Zitat:
Delphi-Quellcode:
function ESPwerte(ESP : integer ):integer ;
const EZ:Array[0..29] of Integer= (0,0,0,0,0,0,0,3,11,20,30,41,53,66,80,94,108,122,135,148,159,170,179,187, 193,198,202,205,207,208); begin if ESP<0 then raise Exception.Create('ESP ist negativ'); Result:=EZ[Min(ESP,29)]; end; Zitat:
|
AW: case of "anstatt constanten - Variablen einsetzen
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. Zitat:
Die Möglichkeit mit der Funktion inRange finde ich auch interessant komme da als Dummy aber in Delhi 6 nicht weiter. |
AW: case of "anstatt constanten - Variablen einsetzen
Zitat:
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:
Im EditChange
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;
Delphi-Quellcode:
Hab das nur auf die Schnelle so hingetippt - nicht getestet.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz