![]() |
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:
Ich drehe mich hier echt im kreis und komme nicht weiter... ich bin so ideenlos als anfänger.
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; 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] |
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:
da bei dir der then und else teil vorhanden ist wird praktisch das ergebniss des letzten buchstabens übergeben.
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; mfg Christian [Edit]funktion hinzugefügt[/Edit] |
Re: Hilfe ich komm mit der Funktion nicht weiter!!
danke :) das funktioniert
|
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.
|
Re: Hilfe ich komm mit der Funktion nicht weiter!!
Zitat:
![]() |
Re: Hilfe ich komm mit der Funktion nicht weiter!!
Danke für den hinweis raiguen ;)
|
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. |
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! |
Re: Funktion für kommastelle
Benutze einfach TMaskEdit
ciao radekj |
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 08:58 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