AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehre Edit Felder auf Inhalt prüfen?

Ein Thema von Johnny Bravo · begonnen am 28. Sep 2008 · letzter Beitrag vom 28. Sep 2008
Antwort Antwort
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#1

Mehre Edit Felder auf Inhalt prüfen?

  Alt 28. Sep 2008, 11:59
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:
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;
Ich wäre euch dankbar wenn ihr mir helfen könntet.

mfg
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Mehre Edit Felder auf Inhalt prüfen?

  Alt 28. Sep 2008, 12:02
Anscheinend bist du mit den Operatoren zur Bearbeitung von Wahrheitswerten nicht vertraut. Hier benötigst du or:
if (Edit1.Text = '') or (Edit2.Text = '') then Außerdem fehlen einige begin-end-Paare.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Mehre Edit Felder auf Inhalt prüfen?

  Alt 28. Sep 2008, 12:18
Hallo,

was hältst du vom folgenden Ansatz?

Delphi-Quellcode:
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;
Die Feinheiten (Validierung der Eingabewerte, Fehlerbehandlung, bessere Ausgabe) überlasse ich dir.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Mehre Edit Felder auf Inhalt prüfen?

  Alt 28. Sep 2008, 12:20
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#5

Re: Mehre Edit Felder auf Inhalt prüfen?

  Alt 28. Sep 2008, 12:30
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?

@Sharky
Das wäre nützlich, das stimmt. Is aber das einzige mal wo ich das benötige.

Danke leute, ihr habt mir sehr geholfen - und das an einem sonnigen Sonntag
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#6

Re: Mehre Edit Felder auf Inhalt prüfen?

  Alt 28. Sep 2008, 16:22
Hi,
Ich hab noch ein kleinen Schönheitsfehler

Funktioniert auch alles wunderbar, doch leider zeigt das Label das Ergebnis unschön an.
Ich habe perErgebnis.Constraints.MaxWidth := 125; die max. größe eingestellt.

Ausserdem hab ich den Editfeldern eine max. Länge von 4 Zeichen gegeben, und den Code von Hawkeye219 hab ich folgendermaßen ergänzt:
Ergebnis.Caption := FloatToStr(Spannung / Widerstand) + ' A' Damit wird dem Ergebnis automatisch die Maßeinheit angehangen.

Wenn ich jetzt große werte eingebe, wird das Ergebnis inkorrekt dargestellt. In den eigenschaften des Labels hab ich Autosize und WordWrap deaktivert.

Mit Ergebnis.Caption := FloatToStr(Round(Spannung / Widerstand)) + ' A' hab ich es auch schon versucht,das klappt halbwegs, allerdings brauch ich mindestens 3 nachkomma stellen.

Was kann ich da machen?
Würde mich über Hilfe freuen

mfg


EDIT:
Habs jetzt folgendermaßen gelöst:
Ergebnis.Caption := FloatToStr((Round((Spannung / Widerstand)*1000))/1000) + ' A';
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz