![]() |
Re: Edit Felder voneinander Abhängig / Umrechnung
puuuh ja... hab ich nicht bedacht... ich schiess mal aus der Hüfte heraus:
mh... setz die Tags der Edits auf 1,2 und 3... die Onchange-Events setzt du auf CalcFieldsChange, nachdem du es in deinen Code eingebaut hast.
Delphi-Quellcode:
// unter TForm1 eintragen:
procedure CalcFieldsChange(Sender: TObject); // im Implementations-Bereich procedure TForm1.CalcFieldsChange(Sender: TObject); begin case (Sender as TEdit).Tag of 1: begin edit2.Text := edit1.Text; // bzw. was du jeweils machen willst edit3.Text := edit1.Text; end; 2: begin edit1.Text := edit2.Text; edit3.Text := edit2.Text; end; 3: begin edit1.Text := edit3.Text; edit2.Text := edit3.Text; end; end; end; |
Re: Edit Felder voneinander Abhängig / Umrechnung
Hey Jungs, jetzt habe ich fast alles geschafft, nur noch ein paar Kleinigkeiten fehlen.
Die Idee ist folgende: Immer wenn ein OnChange bei einem Edit eintritt, wird die Variable i auf 1,2 oder 3 gesetzt, je nachdem welches Edit Feld geändert wurde. Eigentlich genial einfach, nicht wahr? Nun habe ich noch ein paar Probleme, irgendwie ist die variable nicht richtig deklariert, jedefalls meckert der Debugger immer rum und sagt mir "Value Assigned to i never used". Dann bekomme ich irgendwie keine if then else anweisung hin. Die benötige ich aber, sonst würde ja die Schleife wieder mehrmals durchlaufen, weil sich die Felder ja verändern, sobald Erebnisse eingetragen werden. Und zu guter Letzt habe ich Problem mit der Fahrenheit Rechnung wenn ich das so eintrage wie ich das jetzt gemacht habe, also mit den -32 dann mäckert der debugger und sagt "Incobatible Types : "String" and "Integer"" Ist ja auch logisch, nur wie kann ich das beheben. Anbei noch der Code, ich hoffe ihr könnt mir auch noch bei den letzten Fragen helfen, Vielen, vielen Dank!
Delphi-Quellcode:
procedure TForm1.celChange(Sender: TObject);
var i: integer; begin i:=1 end; procedure TForm1.reaChange(Sender: TObject); var i: integer; begin i:=2 end; procedure TForm1.fahChange(Sender: TObject); var i: integer; begin i:=3 end; procedure TForm1.UmrechnenClick(Sender: TObject); var i: integer ; begin if i=1 then rea.Text := FloatToStr( round (StrToFloat(cel.Text) * 0.8)) ; fah.Text := FloatToStr( round (StrToFloat(cel.Text) * 1.8 + 32)); if i=2 then cel.Text := FloatToStr( round (StrToFloat(rea.Text) * 1.25)) ; fah.Text := FloatToStr( round (StrToFloat(rea.Text) * 2.25 + 32)) ; if i=3 then cel.Text := FloatToStr( round (StrToFloat(fah.Text-32) * 5 div 9)); rea.Text := FloatToStr( round (StrToFloat(fah.Text-32) * 4 div 9)) end; end. |
Re: Edit Felder voneinander Abhängig / Umrechnung
Du hast die Variable i überall lokal definiert.
Die ist nur in der jeweiligen Methode gültig und nach Abschluss der Methode nicht mehr da. Mach eine privat Variable in deine Form Klasse zB.
Delphi-Quellcode:
und benutze diese Variable.
type
TForm1 = class(TForm) private Auswahl: Integer; public { Public declarations } end; Edit: Das mit der -32 machst du ganz einfach indem du 32.00 schreibst. Noch eine Verfeinerung. Schreibe in die OnCreate Methode deiner Form folgendes. Damit initialsierst du schon mal die Variable.
Delphi-Quellcode:
...und folgendes in deine Umrechnen Methode.
procedure TForm1.FormCreate(Sender: TObject);
begin Auswahl := 0; end;
Delphi-Quellcode:
..damit hast du auch noch geprüft, ob dein Initialwert drin steht oder ein neuer Wert.
procedure TForm1.UmrechnenClick(Sender: TObject);
begin if Auswahl = 0 then Exit; end; Die letzen beiden Punkte sind kein muss in deinem Fall, aber soll mehr dem Lernen und sauberem programmieren in späteren Projekten helfen. |
Re: Edit Felder voneinander Abhängig / Umrechnung
Gut, das mit der variable funktioniert.
Wenn ich jedoch 32.00 eingebe sagt er mir Incompatible Types String and Extended. Notfalls muss ich die als variablen Festlegen und dann die Rechnung machen... |
Re: Edit Felder voneinander Abhängig / Umrechnung
...jetzt seh ich wo du den Fehler mit den inkompatiblem Typen hast
zB hier
Delphi-Quellcode:
so muss das lauten
rea.Text := FloatToStr( round (StrToFloat(fah.Text-32) * 4 div 9))
Delphi-Quellcode:
Du hast versucht von dem Zeichen eine Zahl abzuziehen, daß geht natürlich nicht. Erst umwandeln, dann rechnen.
rea.Text := FloatToStr( round (StrToFloat(fah.Text)-32) * 4 div 9))
|
Re: Edit Felder voneinander Abhängig / Umrechnung
Ja jetzt ist es fast fertig!
Ich habe das nun so eingegeben
Delphi-Quellcode:
Funktioniert soweit prima nur nun müsste ich noch die else anweisung reinbringen sonst treten machnmal kleine differenzen beim Umrechnen auf...
rea.Text := FloatToStr( round (StrToFloat(fah.Text)-32.00) * 4 div 9)
Nur wie geht das? Finde das echt klasse wie intensiv sich manche user hier mit den Problemen anderer rumschlagen. Wirklich ein unglaublich gutes Forum. :love: Danke! |
Re: Edit Felder voneinander Abhängig / Umrechnung
Ganz grob funktioniert eine if-Anweisung so:
Delphi-Quellcode:
Wichtig: vor dem else kein Semikolon!
if xyz=acb then
begin end else begin end; |
Re: Edit Felder voneinander Abhängig / Umrechnung
Die Differenzen liegen nicht am fehlendem else sondern an fehlenden begin..ends ;)
Wenn du nicht jedem if then sagst wo sie anfängt und endet, nimmt der Compiler nur die erste Zeile danach. Ein else kannst du trotzdem reinbringen ist sogra besser in dem Fall.
Delphi-Quellcode:
Aufgabe:
procedure TForm1.UmrechnenClick(Sender: TObject);
begin if Auswahl=1 then begin rea.Text := FloatToStr( round (StrToFloat(cel.Text) * 0.8)) ; fah.Text := FloatToStr( round (StrToFloat(cel.Text) * 1.8 + 32)) end else if Auswahl=2 then begin cel.Text := FloatToStr( round (StrToFloat(rea.Text) * 1.25)) ; fah.Text := FloatToStr( round (StrToFloat(rea.Text) * 2.25 + 32)) ; end else if Auswahl=3 then begin cel.Text := FloatToStr( round (StrToFloat(fah.Text-32) * 5 div 9)); rea.Text := FloatToStr( round (StrToFloat(fah.Text-32) * 4 div 9)) end; end; Guck dir case an und wende es hier an ! :D Dann lernst du noch etwas zusätzliches, da case noch besser wäre. Edit: - die Prüfvariable geändert - @DreddyH gar nicht, ich habs von oben kopiert und die gefragten Stellen eingesetzt....guck weiter oben und dir wird es klar ;) |
Re: Edit Felder voneinander Abhängig / Umrechnung
Wo wird i denn mit einem Wert belegt?
|
Re: Edit Felder voneinander Abhängig / Umrechnung
Und es Funktioniert!
Danke an alle User die Mitgewirkt haben. Letztendlich war es ja dann eine Kombination aus vielein verschiedenen Ideen. :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 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