![]() |
Re: Edit Felder voneinander Abhängig / Umrechnung
Also. Ein ButtonClick-Ereignis erstellst du ja, indem du doppelt auf den Button klickst (bzw im Objektinspektor). Genauso erstellt man alle Ereignisse der Komponenten u.a. auch das OnChange des Edits. Also klicke doppelt aufs Edit und im Code-Editor öffnet sich der Rumpf der Prozedur, dort kannst du deinen Code dann einfügen.
Ohne OnChange wird's etwas schwieriger. Du könntest den Inhalt der Edits in je einer Variablen speichern und dann vergleichen. Sind die Werte nicht identisch, wurde der Inhalt des entsprechenden Edits geändert. Dann weist du den neuen Wert der Variablen zu und berechnest die neuen Werte, die du in den beiden anderen Edits ausgeben kannst. |
Re: Edit Felder voneinander Abhängig / Umrechnung
Zitat:
Die zweite Möglichkeit ist eine Nummer zu schwer, dann würde ich lieber mit der anderen Möglichkeit agieren. Ich werde morgen mal einen Informatiklehrer in der Schule anlabern, vielleicht kann der mir weiterhelfen... |
Re: Edit Felder voneinander Abhängig / Umrechnung
Hallo,
Zitat:
![]() Gruß Hawkeye |
Re: Edit Felder voneinander Abhängig / Umrechnung
Also mit Onchange habe ich es jetzt hinbekommen. Musste einfach nochmal das Projekt neu öffnen, dann ging's.
Vielleicht fällt ja jemadem noch eine elegante Lösung mit Button ein. Das mit TEdit.Modified werde ich aber auf jeden Fall nochmal probieren. |
Re: Edit Felder voneinander Abhängig / Umrechnung
Zitat:
|
Re: Edit Felder voneinander Abhängig / Umrechnung
Wenn du allet zusammenfassen willst:
Delphi-Quellcode:
type
TForm1 = class(TForm) {...} public fLastField: integer procedure Umrechnen; {...} procedure TForm1.Umrechnen; begin case fLastField of 1: begin // umrechnungen für Edit2 end; 2: begin // umrechnungen für Edit3 end; else // umrechnungen für Edit1 end; end; procedure TForm1.Edit1OnChange begin fLastField := 0; Umrechnen; end; procedure TForm1.Edit1OnChange begin fLastField := 1; Umrechnen; end; procedure TForm1.Edit1OnChange begin fLastField := 2; Umrechnen; end; procedure TForm1.Button1OnClick begin Umrechnen; end; |
Re: Edit Felder voneinander Abhängig / Umrechnung
@cruiser : Würde es dir was ausmachen deinen code nochmal ein wenig zu erläuter?
Also ich habe das jetzt mal das alte Beispiel weitergeführt und es funktioniert fast alles. Wenn ich jedoch eine Programmzeile für die Fahrenheit Skala eingebe bricht das Programm sofort ab. Das liegt daran das sich die drei Edits gegenseitig ändern wollen. Nur wie lässt sich das beheben? Hier noch der Programmcode, ohne die Zeilen für Fahrenheit.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin close; end; procedure TForm1.celChange(Sender: TObject); begin rea.Text := FloatToStr( round (StrToFloat(cel.Text) * 0.8)); fahr.Text := FloatToStr( round (StrToFloat(cel.Text) * 1.8 + 32)); end; procedure TForm1.reaChange(Sender: TObject); begin cel.Text := FloatToStr( round (StrToFloat(rea.Text) * 1.25)); fahr.Text := FloatToStr( round (StrToFloat(rea.Text) * 2.25 + 32)); end; end. |
Re: Edit Felder voneinander Abhängig / Umrechnung
Klar, wenn Du per Quellcode den Text eines Edits änderst, wird dessen OnChange-Ereignis durchlaufen. So kommst Du in eine Endlosschleife. Tipp: Frag doch mal den Sender ab, dafür ist dieser Parameter da ;)
|
Re: Edit Felder voneinander Abhängig / Umrechnung
Mal ein Beispiel auf die Schnelle:
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var i: integer; begin i := StrToInt(Edit1.Text); if Sender <> Edit2 then Edit2.Text := IntToStr(i*2); if Sender <> Edit3 then Edit3.Text := IntToStr(i*3); end; procedure TForm1.Edit2Change(Sender: TObject); var i: integer; begin i := StrToInt(Edit2.Text); if Sender <> Edit1 then Edit1.Text := IntToStr(i div 2); if Sender <> Edit3 then Edit3.Text := IntToStr(i div 2 *3); end; procedure TForm1.Edit3Change(Sender: TObject); var i: integer; begin i := StrToInt(Edit3.Text); if Sender <> Edit1 then Edit1.Text := IntToStr(i div 3); if Sender <> Edit2 then Edit2.Text := IntToStr(i div 3 * 2); end; |
Re: Edit Felder voneinander Abhängig / Umrechnung
Das geht leider auch nicht! Wieder eine Überlastung... (StackOverflow)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin close; end; procedure TForm1.celChange(Sender: TObject); var i: extended; begin i := StrToFloat(cel.Text) ; if Sender <> rea then rea.Text := FloatToStr(i * 0.8); if Sender <> fahr then fahr.Text := FloatToStr(i * 1.8 + 32); end; procedure TForm1.reaChange(Sender: TObject); var i: extended; begin i := StrToFloat(rea.Text); if Sender <> cel then cel.Text := FloatToStr(i * 1.25); if Sender <> fahr then fahr.Text := FloatToStr(i * 2.25 + 32); end; procedure TForm1.fahrChange(Sender: TObject); var i: extended; begin i := StrToFloat(fahr.Text); if Sender <> cel then cel.Text := FloatToStr(i - 32 * 5/9); if Sender <> rea then rea.Text := FloatToStr(i - 32 * 4/9); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 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