![]() |
Mehre Edit Felder auf Inhalt prüfen?
Hi leute,
ich stehe vor einen Problem bzw. einem Denkfehler. Ich habe 3 Edit Felder. Wenn man auf einen Button klickt, sollen die Werte von 2 Edit Felder berechnet werden - dabei wird das 3te Edit deaktiviert - man kann also immer nur in 2 Edits eine Eingabe machen, egal in welche die zahlen eingetippt werden. Es sollen sich in mindestens 2 Edits Werte befinden, ansonsten kommt ein Hinweis. Das Problem sieht folgendermaßen aus: Ein Edit auf den Inhalt zu Prüfen ist ja nicht schwer. Doch wie mache ich das mit mehreren Feldern? Mein Code sieht folgendermaßen aus: (Hab nur etwas rumprobiert, also bitte nicht wundern ;) )
Delphi-Quellcode:
Ich wäre euch dankbar wenn ihr mir helfen könntet.
procedure TForm1.Button3Click(Sender: TObject);
var Strom, Spannung, Widerstand: integer; begin if Edit1.Text = '' then if Edit2.Text = '' then MessageDlg('Bitte geben sie mindestens 2 Werte an!',mtInformation, [mbYes], 0) else begin if Edit1.GetTextLen >= 1 then if Edit2.GetTextLen >= 1 then Spannung := StrToInt(Edit1.Text); Strom := StrToInt(Edit2.Text); Ergebnis.Caption := FloatToStr(StrToFloat(Edit1.Text) / StrToFloat(Edit2.Text)); end else if Edit1.Text = '' then if Edit3.Text = '' then MessageDlg('Bitte geben sie mindestens 2 Werte an!',mtInformation, [mbYes], 0) else begin if Edit1.GetTextLen >= 1 then if Edit3.GetTextLen >= 1 then Spannung := StrToInt(Edit1.Text); Widerstand := StrToInt(Edit3.Text); Ergebnis.Caption := FloatToStr(StrToFloat(Edit1.Text) / StrToFloat(Edit3.Text)); end else if Edit2.Text = '' then if Edit3.Text = '' then MessageDlg('Bitte geben sie mindestens 2 Werte an!',mtInformation, [mbYes], 0) else begin if Edit2.GetTextLen >= 1 then if Edit3.GetTextLen >= 1 then Strom := StrToInt(Edit2.Text); Widerstand := StrToInt(Edit3.Text); Ergebnis.Caption := FloatToStr(StrToFloat(Edit2.Text) * StrToFloat(Edit3.Text)); end end; mfg |
Re: Mehre Edit Felder auf Inhalt prüfen?
Anscheinend bist du mit den Operatoren zur Bearbeitung von Wahrheitswerten nicht vertraut. Hier benötigst du or:
Delphi-Quellcode:
Außerdem fehlen einige begin-end-Paare.
if (Edit1.Text = '') or (Edit2.Text = '') then
|
Re: Mehre Edit Felder auf Inhalt prüfen?
Hallo,
was hältst du vom folgenden Ansatz?
Delphi-Quellcode:
Die Feinheiten (Validierung der Eingabewerte, Fehlerbehandlung, bessere Ausgabe) überlasse ich dir.
procedure TForm1.Button3Click(Sender: TObject);
const flagSpannung = 1; flagStrom = 2; flagWiderstand = 4; var Flags, Strom, Spannung, Widerstand : Integer; begin Flags := 0; if TryStrToInt(Edit1.Text, Spannung) then Flags := Flags or flagSpannung; if TryStrToInt(Edit2.Text, Strom) then Flags := Flags or flagStrom; if TryStrToInt(Edit3.Text, Widerstand) then Flags := Flags or flagWiderstand; case Flags of flagSpannung or flagStrom: Ergebnis.Caption := FloatToStr(Spannung / Strom); flagSpannung or flagWiderstand: Ergebnis.Caption := FloatToStr(Spannung / Widerstand); flagStrom or flagWiderstand: Ergebnis.Caption := FloatToStr(Strom * Widerstand); else // hier Fehlerbehandlung einfügen end; end; Gruß Hawkeye |
Re: Mehre Edit Felder auf Inhalt prüfen?
Hai ohnny Bravo,
wenn Du das öfters in deinem Code brauchst würde ich eventuell eine Funktion zum prüfen verwenden. z.B. so:
Delphi-Quellcode:
function OneEditIsEmpty(aEdits: array of TEdit): Boolean;
var i: Integer; begin i := Low(aEdits); result := False; repeat result := Length(aEdits[i].Text) = 0; inc(i); until (i = High(aEdits) + 1) or (result); end; procedure TForm1.Button1Click(Sender: TObject); begin if OneEditIsEmpty([edit1, edit2]) then begin ShowMessage('Edit1 oder Edit2 sind leer'); end; end; |
Re: Mehre Edit Felder auf Inhalt prüfen?
Hey Leute, danke für eure Antworten. Mit And und Or hab ich es schon versucht - hat aber nicht geklappt, keine ahnung warum.
@Hawkeye219 Danke, genauso hab ich mir das vorgestellt, das funktioniert wunderbar. Irgendwie hab ich einen falschen ansatz gewählt. Wieso einfach wenns auch schwer geht? :stupid: @Sharky Das wäre nützlich, das stimmt. Is aber das einzige mal wo ich das benötige. :wink: Danke leute, ihr habt mir sehr geholfen - und das an einem sonnigen Sonntag :hello: |
Re: Mehre Edit Felder auf Inhalt prüfen?
Hi,
Ich hab noch ein kleinen Schönheitsfehler :cry: Funktioniert auch alles wunderbar, doch leider zeigt das Label das Ergebnis unschön an. Ich habe per
Delphi-Quellcode:
die max. größe eingestellt.
Ergebnis.Constraints.MaxWidth := 125;
Ausserdem hab ich den Editfeldern eine max. Länge von 4 Zeichen gegeben, und den Code von Hawkeye219 hab ich folgendermaßen ergänzt:
Delphi-Quellcode:
Damit wird dem Ergebnis automatisch die Maßeinheit angehangen.
Ergebnis.Caption := FloatToStr(Spannung / Widerstand) + ' A'
Wenn ich jetzt große werte eingebe, wird das Ergebnis inkorrekt dargestellt. In den eigenschaften des Labels hab ich Autosize und WordWrap deaktivert. Mit
Delphi-Quellcode:
hab ich es auch schon versucht,das klappt halbwegs, allerdings brauch ich mindestens 3 nachkomma stellen.
Ergebnis.Caption := FloatToStr(Round(Spannung / Widerstand)) + ' A'
Was kann ich da machen? Würde mich über Hilfe freuen :) mfg EDIT: Habs jetzt folgendermaßen gelöst:
Delphi-Quellcode:
Ergebnis.Caption := FloatToStr((Round((Spannung / Widerstand)*1000))/1000) + ' A';
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 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