Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Functions
navarro2010 - Mo 23.05.11 17:31
Titel: Functions
Hallo,
kann mir jemand bitte mal einen kompletten, aber einfachen Quelltext mit einer Function einstellen, bei der man auch etwas eingeben kann und ein Ergebnis angezeigt bekommt?
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Narses - Mo 23.05.11 17:35
Moin!
navarro2010 hat folgendes geschrieben : |
| kann mir jemand bitte mal einen kompletten, aber einfachen Quelltext mit einer Function einstellen, bei der man auch etwas eingeben kann und ein Ergebnis angezeigt bekommt? |
Delphi-Quelltext
1: 2: 3: 4:
| function bekloppt(egal: Integer): Integer; begin Result := 42; end; |
Und was soll das bringen? :nut: :nixweiss:
cu
Narses
navarro2010 - Mo 23.05.11 17:51
Wie kann ich zum Beispiel zwei Zahlen addieren lassen. Ich möchte sie aber selbst vor dem berechen eingeben und nicht im Quelltext schon festlegen. Wie kann ich dann ein Ergebnis angezeigt bekommen?
Hobby-Programmierer - Mo 23.05.11 17:56
Wie würdest du das auf einem Blatt Papier machen?
navarro2010 - Mo 23.05.11 18:05
Was hat das mit meiner Frage zu tun? Muss ich da noch ein Edit-Feld einfügen, oder wie geht das? Im Quelltext darf ich bei Functions nämlich keine Editfelder benutzen.
Nano-Ware - Mo 23.05.11 22:05
So..
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function addiere(z1, z2: Integer): Integer; begin Result := z1 + z2; end;
Edit_Ergebnis.Text := IntToStr(Addiere(StrToInt(Edit_z1.Text), StrToInt(Edit_z2.Text)));
|
Gruß
beastofchaos - Mo 23.05.11 23:12
Mach dir af dein Formular 3 Editfenster, mach einen Button daneben und die OnClick-Prozedur des Buttons schreisbte folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var Summe, Zahl1, Zahl2: integer; begin Zahl1 := StrToInt(Edit1.Text); Zahl2 := StrToInt(Edit2.Text); Summe := Add(Zahl1, Zahl2); Edit3.Text := IntToStr(Summe); end; |
So, nachdem du das hast, definier dir mal die Funktion Add:
Delphi-Quelltext
1: 2: 3: 4:
| function Add(a, b: Integer): Integer; begin Result := a + b; end; |
Dann spielste das ab, gibst in Edit1 und Edit2 jeweils eine Zahl ein, drückst deinen Button und schon haste das Ergebnis :)
Gruß, Thomas
Nano-Ware - Di 24.05.11 17:30
Und was ist jetzt an deinem Code anders außer, dass du unnötig drei Variablen deklarierst?
Tony-S - Di 24.05.11 17:52
Nano-Ware hat folgendes geschrieben : |
| Und was ist jetzt an deinem Code anders außer, dass du unnötig drei Variablen deklarierst? |
Vermutlich ist es für einen Anfänger so übersichtlicher und leichter zu verstehen?
Hobby-Programmierer - Di 24.05.11 20:21
... und wenn du das Grundlagen-Tutorial gelesen hast kannst du gleich noch eine Fehlerbehandlung einbauen. Teste mal die Eingabe eines Buchstaben in das Editfeld.
beastofchaos - Di 24.05.11 21:58
Hobby-Programmierer hat folgendes geschrieben : |
| ... und wenn du das Grundlagen-Tutorial gelesen hast kannst du gleich noch eine Fehlerbehandlung einbauen. Teste mal die Eingabe eines Buchstaben in das Editfeld. |
Also ich löse dann durch ein paar if-Fragen am liebsten, viele machen das ja durch try, aber ich find das iwie nicht so toll ;)
Hobby-Programmierer - Mi 25.05.11 00:36
Ich würde das da abfangen wo der Text (TEdit) eingegeben wird :wink:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.AllEditKeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9']) then begin Key:= #0; Beep; end; end; |
Wenn allerdings das reinkopieren von Text ebenso verhindert werden soll, muss man das im OnChange Event des Editfeldes selber abfangen. Eventuell so
(nicht perfekt - aber naja - für mich hats immer gereicht)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.AllEditChange(Sender: TObject); var i: Integer; s: String; begin with (Sender as TEdit) do begin if StrToIntDef(Text, -1) = -1 then begin s:= ''; for i:= 1 to Length(Text) do if Text[i] in ['0'..'9'] then s:= s+ Text[i]; Text:= s; SelStart:= Length(s); end; end; end; |
LG Mario
jaenicke - Mi 25.05.11 04:35
StrToIntDef ist dafür denkbar ungeeignet, dafür gibt es extra TryStrToInt.
zuma - Mi 25.05.11 06:50
beastofchaos hat folgendes geschrieben : |
| Also ich löse dann durch ein paar if-Fragen am liebsten, viele machen das ja durch try, aber ich find das iwie nicht so toll ;) |
Das vergleiche ich mal mit Autofahren :
Wenn du anhalten willst, benutzt du lieber einen Wurfanker anstatt der Bremse ?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!