Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

Matze 10. Jun 2007 15:57

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.

problemstoffe 10. Jun 2007 16:06

Re: Edit Felder voneinander Abhängig / Umrechnung
 
Zitat:

Zitat von Matze
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.

Das ist mir natürlich klar, und trotzdem funktioniert die Geschichte nicht...



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

Hawkeye219 10. Jun 2007 16:10

Re: Edit Felder voneinander Abhängig / Umrechnung
 
Hallo,

Zitat:

Zitat von Matze
Ohne OnChange wird's etwas schwieriger.

Ob der Inhalt eines Eingabefelds vom Anwender(!) geändert wurde, läßt sich über Delphi-Referenz durchsuchenTEdit.Modified ermitteln. Allerdings sagt auch das nichts darüber aus, welches Feld als letztes geändert wurde. Dies war aber einer der Vorgaben in Beitrag #1, deren Umsetzung ohne Verwendung von OnChange tatsächlich ziemlich schwierig werden dürfte.

Gruß Hawkeye

problemstoffe 10. Jun 2007 16:18

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.

Matze 10. Jun 2007 16:23

Re: Edit Felder voneinander Abhängig / Umrechnung
 
Zitat:

Zitat von problemstoffe
Vielleicht fällt ja jemadem noch eine elegante Lösung mit Button ein.

Ich vermute mit deinem Wissen ist mein Vorschlag der einfachste (Wertevergleich).

cruiser 10. Jun 2007 17:14

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;

problemstoffe 10. Jun 2007 17:45

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.

DeddyH 10. Jun 2007 18:19

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

DeddyH 10. Jun 2007 18:32

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;

problemstoffe 10. Jun 2007 19:35

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

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