Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion für kommastelle (https://www.delphipraxis.net/82678-funktion-fuer-kommastelle.html)

ruffy407 17. Dez 2006 23:26


Funktion für kommastelle
 
Hey also ich hab gerade erst angefangen delphi zu lernen und muss eine große hausarbeit bald abgeben... ich bin aber echt am verzweifeln da ich mir das alles selber beibringen muss... hoffe ihr könnt mir helfen.
Also ich habe ein paar editfelder und möchte die eingegebenen daten in einer listbox widergeben.
das funktioniert auch soweit mittels der doppeltverketteten liste. Doch jetz habe ich das problem, dass ein editfeld körpergröße bestimmen soll (z.B. 1,70 m).
ich möchte dass wenn der benutzer eine ganzzahlige eingabe (z.b. 170) macht, ein warn fenster kommt mit der aufforderung es mit einem komma einzugeben.

ich habe mir gedacht ich könnte dies mit einer funktion lösen die sagt "wenn ein komma in der eingabe enthalten ist, gebe diese nachricht aus".
Es funktioniert aber noch gar nich.. vieleicht habei hc das ganze prinzip von funktionen noch nich verstanden. Naja hier der Quellcode Ausschnitt:



Delphi-Quellcode:
function kommawert(eingabe : string) : boolean;
var
i : integer;
begin
  for i:=1 to length(eingabe) do begin
    if eingabe[i]=',' then begin
      result := eingabe[i]=',';
    end
    else
      result := eingabe[i]<>',';
  end;
end;

procedure TMyFriend.EintragenClick(Sender: TObject);
var
komma : string;
Neu : Tknoten;
begin
  komma:= editgroesse.Text;
  if (editname.Text <>(''))
  and (editvorname.Text <>(''))
  and (editalter.Text <>(''))
  and (editgroesse.Text <>('')) then begin
      if (kommawert(komma)) then begin
      Neu := TKnoten.Init;
      neu.name := editname.Text;
      neu.vorname := editvorname.Text;
      try
        neu.alter := (strtoint(editalter.Text));
      except
        showmessage('"Alter" muss eine Zahl sein!') ;
        editalter.Clear;
        activecontrol := editalter;
        exit;
      end;

      try
        neu.groesse := (strtofloat(editgroesse.Text));
      except
        showmessage('"Größe" muss eine Zahl sein!');
        editgroesse.Clear;
        activecontrol := editgroesse;
        exit;
      end;

      Neu.Nach := Anfang.Nach;
      Neu.Nach.Vor := Neu;
      Anfang.nach := Neu;
      Neu.Vor := Anfang;

      editname.clear;
      editvorname.Clear;
      editalter.Clear;
      editgroesse.Clear;

      activecontrol := editname;
      anzeige;
      end
      else
      showmessage('Bitte eine Zahl mit kommestelle eingeben!');

    end
  else begin
    showmessage('Felder dürfen nicht leer sein!');
  end;
end;
Ich drehe mich hier echt im kreis und komme nicht weiter... ich bin so ideenlos als anfänger.

Kann mir bitte jemand sagen was ich an diesem quellcode alles anders machen muss ?
Danke euch!

[edit=r_kerber]code- durch delphi-Tags ersetzt Mfg, r_kerber[/edit]

pacman1986 17. Dez 2006 23:32

Re: Hilfe ich komm mit der Funktion nicht weiter!!
 
benutz true oder false als rückgabewerte wäre das nicht einfacher ? achso und deine funktion überprüft nur den letzten buchstaben

Delphi-Quellcode:
function kommawert(eingabe : string) : boolean;
var
i : integer;
begin
  result := false;                           //Auf false setzen kein komma vorhanden
  for i:=1 to length(eingabe) do begin
    if eingabe[i]=',' then result := true;   //true wenn eins kommt
  end;
end;
da bei dir der then und else teil vorhanden ist wird praktisch das ergebniss des letzten buchstabens übergeben.

mfg
Christian



[Edit]funktion hinzugefügt[/Edit]

ruffy407 18. Dez 2006 01:38

Re: Hilfe ich komm mit der Funktion nicht weiter!!
 
danke :) das funktioniert

Phoenix 18. Dez 2006 07:17

Re: Hilfe ich komm mit der Funktion nicht weiter!!
 
Es wäre dennoch zuckersüß von Dir, wenn Du Deinem Beitrag auch jetzt noch einen Aussagekräftigen Titel verleihen könntest, damit auch andere ggf. bei der Suche nach dem gleichen Problem diese Lösung finden könnten.

raiguen 18. Dez 2006 08:55

Re: Hilfe ich komm mit der Funktion nicht weiter!!
 
Zitat:

Zitat von ruffy407
danke :) das funktioniert

Wie schön für dich ;) dann sei aber auch so lieb und sage es auch hier

ruffy407 18. Dez 2006 14:51

Re: Hilfe ich komm mit der Funktion nicht weiter!!
 
Danke für den hinweis raiguen ;)

Christian Seehase 18. Dez 2006 17:43

Re: Funktion für kommastelle
 
Moin ruffy,

zwei Fälle deckt diese Prüfung allerdings noch nicht ab:
Das Komma steht am Anfang.
Das Komma steht am Ende.

Die Prüfung, ob ein Komma enthalten ist, kannst Du übrigens auch mit pos erledigen, und musst nicht jedes Zeichen in eine Schleife durchgehen.

Besonders "elegant" könntest Du das Problem lösen, indem Du erst einmal Werte ohne Komma zulässt, und dann anhand eines Wertebereiches prüfst, ob der Wert evtl. noch durch 100 geteilt werden muss, wenn er in cm angegeben wurde.

Die Angabe von 2 wäre ja beispielsweise ohne Komma, aber wohl nicht verkehrt (Du würdest dann 2,00 oder 2,0 erwarten).

Um das mit dem Teilen noch einmal zu verdeutlichen:
Der gültige Wertebereich wäre, z.b, 0,30m bis 2,80m.
Jetzt wandelst Du die Eingabe in einen numerischen Wert und stellst fest, dass er > 2,80m ist, beispielsweise 170.
Dann muss der Wert noch durch 100 geteilt werden => 1,70 => liegt im Wertebereich.
Das könntest Du dann, korrigiert, im Eingabefeld wieder ausgeben.

Eine Prüfung des Wertebereiches solltest Du eh machen, denn wenn jemand 170,0 eingibt, wäre das ja auch nicht richtig.

ruffy407 18. Dez 2006 21:11

Re: Funktion für kommastelle
 
Hi christian!
An diese fälle hab ich natürliich nicht gedacht .. aber wie gesagt ich habe gerade erst angefangen delphi zu lernen und mein lehrer stetzt das alles voraus, dh. ich muss mir das selber beibringen. Ich weiß nicht wie man deinen Vorschlag mit einem wertebereich umsetzen könnte. Wäre sehr nett von die wenn du mir das sagen könntest ;)
Oder was auch sehr hilfreich wäre ist eine Methode dass ich mir selbst in solchen fällen helfen soll, denn ich weiß nicht wo ich nachgucken soll wenn cih den namen eines befehls z.B. nicht weiß. mit der Hilfedatei von delphi komm cih da fast nie weiter...
Danke!

radekj 18. Dez 2006 21:35

Re: Funktion für kommastelle
 
Benutze einfach TMaskEdit

ciao
radekj

ruffy407 18. Dez 2006 21:53

Re: Funktion für kommastelle
 
und dann? :gruebel:

Sry mein grundwissen über die verschiedenen (nicht-standart-) komponenten und vor allem über die befehle im quellcode sind unglabulich beschränkt ;)
mir muss man das haar klein erleutern


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr.
Seite 1 von 2  1 2      

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