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 user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


Narses - Mo 23.05.11 17:35

Moin!

user profile iconnavarro2010 hat folgendes geschrieben Zum zitierten Posting springen:
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?

Delphi-Quelltext
1:
Result:= a + b                    


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.


Delete - Mo 23.05.11 18:14

Grundlagen-Tutorial needed: http://www.christian-stelzmann.de/index_tutorials_crashkurs_reloaded.html


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;

//Anwendung:

//z.B.
Edit_Ergebnis.Text := IntToStr(Addiere(StrToInt(Edit_z1.Text), StrToInt(Edit_z2.Text)));

//Damit würde die Zahl aus dem Edit_z1 mit der Zahl aus dem Edit_z2 addiert werden und im Edit_Ergebnis angezeigt werden.


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);                  // StrToInt() wandelt einen String in eine Integer-variable
  Zahl2 := StrToInt(Edit2.Text);
  Summe := Add(Zahl1, Zahl2);
  
  Edit3.Text := IntToStr(Summe);                  // IntToStr() - Umkehrschluss zur oberen genannten Funktion
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

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconHobby-Programmierer hat folgendes geschrieben Zum zitierten Posting springen:
... 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            // Absender 
    if StrToIntDef(Text, -1) = -1 then begin // Buchstaben im Text vorhanden

      s:= '';
      for i:= 1 to Length(Text) do           // Zext vom 1.Zeichen bis Ende durchsteppen
        if Text[i] in ['0'..'9'then        // Zahl in Text[i] gefunden
          s:= s+ Text[i];                    // Zahl an s anhängen

     // anderes Bsp. vom letzten Zeichen zum 1.Zeichen durchsuchen
     { s:= Text;
      for i := Length(s) downto 1 do
        if not (s[i] in ['0'..'9']) then
          Delete(s, i, 1);}
                  // löschen des ungültigen Zeichens

      Text:= s;             // Text übernehmen
      SelStart:= Length(s); // Cursor ans Textende setzen
    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

user profile iconbeastofchaos hat folgendes geschrieben Zum zitierten Posting springen:
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 ?


beastofchaos - Mi 25.05.11 13:06

user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconbeastofchaos hat folgendes geschrieben Zum zitierten Posting springen:
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 ?


:) Guter Vergleich