Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Edit Felder voneinander Abhängig / Umrechnung (https://www.delphipraxis.net/93724-edit-felder-voneinander-abhaengig-umrechnung.html)

cruiser 10. Jun 2007 19:56

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;

problemstoffe 11. Jun 2007 14:25

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.

Tyrael Y. 11. Jun 2007 14:41

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:
type
  TForm1 = class(TForm)
  private
    Auswahl: Integer;
  public
    { Public declarations }
  end;
und benutze diese Variable.

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:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Auswahl := 0;
end;
...und folgendes in deine Umrechnen Methode.

Delphi-Quellcode:
procedure TForm1.UmrechnenClick(Sender: TObject);
begin
  if Auswahl = 0 then Exit;
end;
..damit hast du auch noch geprüft, ob dein Initialwert drin steht oder ein neuer Wert.
Die letzen beiden Punkte sind kein muss in deinem Fall, aber soll mehr dem Lernen und sauberem programmieren in späteren Projekten helfen.

problemstoffe 11. Jun 2007 14:58

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...

Tyrael Y. 11. Jun 2007 15:04

Re: Edit Felder voneinander Abhängig / Umrechnung
 
...jetzt seh ich wo du den Fehler mit den inkompatiblem Typen hast

zB hier

Delphi-Quellcode:
rea.Text := FloatToStr( round (StrToFloat(fah.Text-32) * 4 div 9))
so muss das lauten

Delphi-Quellcode:
rea.Text := FloatToStr( round (StrToFloat(fah.Text)-32) * 4 div 9))
Du hast versucht von dem Zeichen eine Zahl abzuziehen, daß geht natürlich nicht. Erst umwandeln, dann rechnen.

problemstoffe 11. Jun 2007 15:18

Re: Edit Felder voneinander Abhängig / Umrechnung
 
Ja jetzt ist es fast fertig!

Ich habe das nun so eingegeben
Delphi-Quellcode:
rea.Text := FloatToStr( round (StrToFloat(fah.Text)-32.00) * 4 div 9)
Funktioniert soweit prima nur nun müsste ich noch die else anweisung reinbringen sonst treten machnmal kleine differenzen beim Umrechnen auf...

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!

Tormentor32 11. Jun 2007 15:24

Re: Edit Felder voneinander Abhängig / Umrechnung
 
Ganz grob funktioniert eine if-Anweisung so:
Delphi-Quellcode:
if xyz=acb then
  begin
  end
else
  begin
  end;
Wichtig: vor dem else kein Semikolon!

Tyrael Y. 11. Jun 2007 15:25

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:
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;
Aufgabe:
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 ;)

DeddyH 11. Jun 2007 15:46

Re: Edit Felder voneinander Abhängig / Umrechnung
 
Wo wird i denn mit einem Wert belegt?

problemstoffe 11. Jun 2007 15:52

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.
Seite 3 von 3     123   

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